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 <sta...@vger.kernel.org> # v5.3+

Please add the Fixes tag.

> Signed-off-by: Malcolm Priestley <tvbox...@gmail.com>
> ---
>  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
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to