Apologies, I mistyped the LKML address. I have resent the patch to the
correct address.

On Thu, 2 Jul 2026 at 22:32, Laxman Acharya Padhya <
[email protected]> wrote:

> If enabling tearing mode or exiting sleep mode fails after the
> regulator is enabled, s6d16d0_prepare() returns without asserting
> reset or disabling the supply. Since the DRM panel core leaves the
> panel unprepared, a later unprepare call skips the driver callback
> and the supply remains enabled.
>
> Assert reset and disable the supply before returning the DSI command error.
>
> Fixes: ac1d6d74884e ("drm/panel: Add driver for Samsung S6D16D0 panel")
> Assisted-by: Codex:gpt-5
> Signed-off-by:[email protected]
> ---
>  drivers/gpu/drm/panel/panel-samsung-s6d16d0.c | 10 ++++++++--
>  1 file changed, 8 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/panel/panel-samsung-s6d16d0.c
> b/drivers/gpu/drm/panel/panel-samsung-s6d16d0.c
> index ba1a02000..04e19b5f2 100644
> --- a/drivers/gpu/drm/panel/panel-samsung-s6d16d0.c
> +++ b/drivers/gpu/drm/panel/panel-samsung-s6d16d0.c
> @@ -89,16 +89,22 @@ static int s6d16d0_prepare(struct drm_panel *panel)
>         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)
> --
> 2.51.2
>
>

Reply via email to