> diff --git a/drivers/i2c/busses/i2c-nvidia-gpu.c 
> b/drivers/i2c/busses/i2c-nvidia-gpu.c
> index 1c8f708f212b..9d347583f8dc 100644
> --- a/drivers/i2c/busses/i2c-nvidia-gpu.c
> +++ b/drivers/i2c/busses/i2c-nvidia-gpu.c
> @@ -175,6 +175,7 @@ static int gpu_i2c_master_xfer(struct i2c_adapter *adap,
>        * The controller supports maximum 4 byte read due to known
>        * limitation of sending STOP after every read.
>        */
> +     pm_runtime_get_sync(i2cd->dev);
>       for (i = 0; i < num; i++) {
>               if (msgs[i].flags & I2C_M_RD) {
>                       /* program client address before starting read */
> @@ -189,7 +190,7 @@ static int gpu_i2c_master_xfer(struct i2c_adapter *adap,
>                       status = gpu_i2c_start(i2cd);
>                       if (status < 0) {
>                               if (i == 0)
> -                                     return status;
> +                                     goto exit;
>                               goto stop;

Hmm, goto here, goto there... OK, the code didn't have a good flow even
before this patch.

>                       }
>  
> @@ -206,13 +207,18 @@ static int gpu_i2c_master_xfer(struct i2c_adapter *adap,
>       }
>       status = gpu_i2c_stop(i2cd);
>       if (status < 0)
> -             return status;
> +             goto exit;
>  
> +     pm_runtime_mark_last_busy(i2cd->dev);
> +     pm_runtime_put_autosuspend(i2cd->dev);
>       return i;
>  stop:
>       status2 = gpu_i2c_stop(i2cd);
>       if (status2 < 0)
>               dev_err(i2cd->dev, "i2c stop failed %d\n", status2);
> +exit:
> +     pm_runtime_mark_last_busy(i2cd->dev);
> +     pm_runtime_put_autosuspend(i2cd->dev);
>       return status;
>  }

I am not nacking this, yet the use of goto here seems too much for my
taste. If you could try refactoring the whole code (dunno, maybe using a
flag when to use stop?), I'd appreciate this.

Attachment: signature.asc
Description: PGP signature

Reply via email to