Re: [PATCH 3/5] staging: vt6656: limit reg output to block size

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Dec 20, 2019 at 09:15:24PM +0000, Malcolm Priestley wrote:
> vnt_control_out appears to fail when BBREG is greater than 64 writes.
> 
> Create new function that will relay an array in no larger than
> the indicated block size.
> 
> It appears that this command has always failed but was ignored by
> driver until the introduction of error checking.
> 
> Cc: stable <stable@xxxxxxxxxxxxxxx> # v5.3+

Please add the Fixes tag.

> Signed-off-by: Malcolm Priestley <tvboxspy@xxxxxxxxx>
> ---
>  drivers/staging/vt6656/baseband.c |  4 ++--
>  drivers/staging/vt6656/usbpipe.c  | 17 +++++++++++++++++
>  drivers/staging/vt6656/usbpipe.h  |  5 +++++
>  3 files changed, 24 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/staging/vt6656/baseband.c b/drivers/staging/vt6656/baseband.c
> index 8d19ae71e7cc..4e651b698617 100644
> --- a/drivers/staging/vt6656/baseband.c
> +++ b/drivers/staging/vt6656/baseband.c
> @@ -449,8 +449,8 @@ int vnt_vt3184_init(struct vnt_private *priv)
>  
>  	memcpy(array, addr, length);
>  
> -	ret = vnt_control_out(priv, MESSAGE_TYPE_WRITE, 0,
> -			      MESSAGE_REQUEST_BBREG, length, array);
> +	ret = vnt_control_out_blocks(priv, VNT_REG_BLOCK_SIZE,
> +				     MESSAGE_REQUEST_BBREG, length, array);
>  	if (ret)
>  		goto end;
>  
> diff --git a/drivers/staging/vt6656/usbpipe.c b/drivers/staging/vt6656/usbpipe.c
> index 488ebd98773d..d977d4777e4f 100644
> --- a/drivers/staging/vt6656/usbpipe.c
> +++ b/drivers/staging/vt6656/usbpipe.c
> @@ -76,6 +76,23 @@ int vnt_control_out_u8(struct vnt_private *priv, u8 reg, u8 reg_off, u8 data)
>  			       reg_off, reg, sizeof(u8), &data);
>  }
>  
> +int vnt_control_out_blocks(struct vnt_private *priv,
> +			   u16 block, u8 reg, u16 length, u8 *data)
> +{
> +	int ret = 0, i;
> +
> +	for (i = 0; i < length; i += block) {
> +		u16 len = min_t(int, length - i, block);
> +
> +		ret = vnt_control_out(priv, MESSAGE_TYPE_WRITE,
> +				      i, reg, len, data + i);
> +		if (ret)
> +			goto end;
> +	}
> +end:
> +	return ret;

Just do a direct return.  Goto end is pointless.  It hurts readability
because with direct returns we can immediately see that this returns
zero on success.

regards,
dan carpenter

_______________________________________________
devel mailing list
devel@xxxxxxxxxxxxxxxxxxxxxx
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel



[Index of Archives]     [Linux Driver Backports]     [DMA Engine]     [Linux GPIO]     [Linux SPI]     [Video for Linux]     [Linux USB Devel]     [Linux Coverity]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux