Skip to content

Commit

Permalink
staging: comedi: usbdux: fix usbdux_pwm_cancel()
Browse files Browse the repository at this point in the history
Add the missing down/up of the semaphore to prevent other commands
from being issued to the usb device while the pwn is being stopped.

Rename the local variable used for the private data pointer to the
comedi "norm".

Make sure to check that usbdux_pwm_stop() was successful before
sending command to the usb device to stop the pwm.

Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com>
Reviewed-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
H Hartley Sweeten authored and Greg Kroah-Hartman committed Jul 26, 2013
1 parent 38f0683 commit 96ca370
Showing 1 changed file with 13 additions and 5 deletions.
18 changes: 13 additions & 5 deletions drivers/staging/comedi/drivers/usbdux.c
Original file line number Diff line number Diff line change
Expand Up @@ -1430,17 +1430,25 @@ static int usbdux_pwm_stop(struct comedi_device *dev, int do_unlink)
return ret;
}

/* force unlink - is called by comedi */
static int usbdux_pwm_cancel(struct comedi_device *dev,
struct comedi_subdevice *s)
{
struct usbdux_private *this_usbduxsub = dev->private;
int res = 0;
struct usbdux_private *devpriv = dev->private;
int ret;

down(&devpriv->sem);

/* unlink only if it is really running */
res = usbdux_pwm_stop(dev, this_usbduxsub->pwm_cmd_running);
ret = usbdux_pwm_stop(dev, devpriv->pwm_cmd_running);
if (ret)
goto pwm_cancel_exit;

ret = send_dux_commands(dev, SENDPWMOFF);

return send_dux_commands(dev, SENDPWMOFF);
pwm_cancel_exit:
up(&devpriv->sem);

return ret;
}

static void usbduxsub_pwm_irq(struct urb *urb)
Expand Down

0 comments on commit 96ca370

Please sign in to comment.