[PATCH 47/53] staging: comedi: usbdux: tidy up usbdux_pwm_start()

Ian Abbott abbotti at mev.co.uk
Thu Jul 25 15:19:18 UTC 2013


On 2013-07-24 22:24, H Hartley Sweeten wrote:
> Rename the local variable used for the private data pointer to the
> comedi "norm".
>
> Use memset() to initialize the urb transfer_buffer.
>
> Set the pwm_cmd_running after submitting the pwm urbs so we don't have
> to clear it if the submit fails.

Same problem as for AI and AO subdevices in that the URB completion 
routine may execute before you set pwm_cmd_running.

>
> Signed-off-by: H Hartley Sweeten <hsweeten at visionengravers.com>
> Cc: Ian Abbott <abbotti at mev.co.uk>
> Cc: Greg Kroah-Hartman <gregkh at linuxfondation.org>
> ---
>   drivers/staging/comedi/drivers/usbdux.c | 21 ++++++++-------------
>   1 file changed, 8 insertions(+), 13 deletions(-)
>
> diff --git a/drivers/staging/comedi/drivers/usbdux.c b/drivers/staging/comedi/drivers/usbdux.c
> index 2bfb1b4..7181bc3 100644
> --- a/drivers/staging/comedi/drivers/usbdux.c
> +++ b/drivers/staging/comedi/drivers/usbdux.c
> @@ -1538,33 +1538,28 @@ static int usbdux_pwm_period(struct comedi_device *dev,
>   	return 0;
>   }
>
> -/* is called from insn so there's no need to do all the sanity checks */
>   static int usbdux_pwm_start(struct comedi_device *dev,
>   			    struct comedi_subdevice *s)
>   {
> -	int ret, i;
> -	struct usbdux_private *this_usbduxsub = dev->private;
> +	struct usbdux_private *devpriv = dev->private;
> +	int ret;
>
> -	if (this_usbduxsub->pwm_cmd_running) {
> -		/* already running */
> +	if (devpriv->pwm_cmd_running)
>   		return 0;
> -	}
>
> -	this_usbduxsub->dux_commands[1] = ((int8_t) this_usbduxsub->pwn_delay);
> +	devpriv->dux_commands[1] = devpriv->pwn_delay;
>   	ret = send_dux_commands(dev, SENDPWMON);
>   	if (ret < 0)
>   		return ret;
>
>   	/* initialise the buffer */
> -	for (i = 0; i < this_usbduxsub->size_pwm_buf; i++)
> -		((char *)(this_usbduxsub->urb_pwm->transfer_buffer))[i] = 0;
> +	memset(devpriv->urb_pwm->transfer_buffer, 0, devpriv->size_pwm_buf);
>
> -	this_usbduxsub->pwm_cmd_running = 1;
>   	ret = usbduxsub_submit_pwm_urbs(dev);
> -	if (ret < 0) {
> -		this_usbduxsub->pwm_cmd_running = 0;
> +	if (ret < 0)
>   		return ret;
> -	}
> +	devpriv->pwm_cmd_running = 1;
> +
>   	return 0;
>   }
>
>


-- 
-=( Ian Abbott @ MEV Ltd.    E-mail: <abbotti at mev.co.uk>        )=-
-=( Tel: +44 (0)161 477 1898   FAX: +44 (0)161 718 3587         )=-


More information about the devel mailing list