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
