Thank you for your contribution! Sashiko AI review found 1 potential issue(s) 
to consider:

Pre-existing issues:
- [Medium] Early return in s6d16d0_unprepare() on DSI error leaks power 
regulator and desynchronizes DRM panel state.
--

commit e398cf036f75b574cfdb355a824bb1c7fcdb24f9
Author: Laxman Acharya Padhya <[email protected]>

drm/panel: samsung-s6d16d0: Power off on prepare failure

This commit fixes an issue in s6d16d0_prepare() where failing to enable
tearing mode or exiting sleep mode would return without asserting reset
or disabling the power supply. The change updates the error path to
correctly assert reset and disable the regulator before returning.

> diff --git a/drivers/gpu/drm/panel/panel-samsung-s6d16d0.c 
> b/drivers/gpu/drm/panel/panel-samsung-s6d16d0.c
> index 1b14aa4efe359..54a65abf7e890 100644
> --- a/drivers/gpu/drm/panel/panel-samsung-s6d16d0.c
> +++ b/drivers/gpu/drm/panel/panel-samsung-s6d16d0.c
> @@ -88,16 +88,22 @@ static int s6d16d0_prepare(struct drm_panel *panel)

[Severity: Medium]
This is a pre-existing issue, but I noticed a similar resource leak in
s6d16d0_unprepare() located just above this function in
drivers/gpu/drm/panel/panel-samsung-s6d16d0.c.

If mipi_dsi_dcs_enter_sleep_mode() fails during display disable, the
function returns early:

static int s6d16d0_unprepare(struct drm_panel *panel)
{
        ...
        ret = mipi_dsi_dcs_enter_sleep_mode(dsi);
        if (ret) {
                dev_err(s6->dev, "failed to enter sleep mode (%d)\n", ret);
                return ret;
        }

        /* Assert RESET */
        gpiod_set_value_cansleep(s6->reset_gpio, 1);
        regulator_disable(s6->supply);

        return 0;
}

Can this leak the regulator enable count by skipping regulator_disable()
on the error path?

Would this leave the DRM panel state machine desynchronized since the
resource cleanup is skipped?

>                                      MIPI_DSI_DCS_TEAR_MODE_VBLANK);
>       if (ret) {
>               dev_err(s6->dev, "failed to enable vblank TE (%d)\n", ret);
> -             return ret;
> +             goto err_power_off;
>       }
>       /* Exit sleep mode and power on */
>       ret = mipi_dsi_dcs_exit_sleep_mode(dsi);
>       if (ret) {
>               dev_err(s6->dev, "failed to exit sleep mode (%d)\n", ret);
> -             return ret;
> +             goto err_power_off;
>       }
>  
>       return 0;
> +
> +err_power_off:
> +     gpiod_set_value_cansleep(s6->reset_gpio, 1);
> +     regulator_disable(s6->supply);
> +
> +     return ret;
>  }
>  
>  static int s6d16d0_enable(struct drm_panel *panel)

-- 
Sashiko AI review ยท 
https://sashiko.dev/#/patchset/[email protected]?part=1

Reply via email to