On Mon, 30 Sep 2024 18:24:44 +0200 neil.armstrong@xxxxxxxxxx wrote: > On 30/09/2024 17:05, Hugo Villeneuve wrote: > > On Mon, 30 Sep 2024 16:38:14 +0200 > > Neil Armstrong <neil.armstrong@xxxxxxxxxx> wrote: > > > >> Hi, > >> > >> On 27/09/2024 15:53, Hugo Villeneuve wrote: > >>> From: Hugo Villeneuve <hvilleneuve@xxxxxxxxxxxx> > >>> > >>> In jadard_prepare() a reset pulse is generated with the following > >>> statements (delays ommited for clarity): > >>> > >>> gpiod_set_value(jadard->reset, 1); --> Deassert reset > >>> gpiod_set_value(jadard->reset, 0); --> Assert reset for 10ms > >>> gpiod_set_value(jadard->reset, 1); --> Deassert reset > >>> > >>> However, specifying second argument of "0" to gpiod_set_value() means to > >>> deassert the GPIO, and "1" means to assert it. If the reset signal is > >>> defined as GPIO_ACTIVE_LOW in the DTS, the above statements will > >>> incorrectly generate the reset pulse (inverted) and leave it asserted > >>> (LOW) at the end of jadard_prepare(). > >> > >> Did you check the polarity in DTS of _all_ users of this driver ? > > > > Hi Neil, > > I confirmed that no in-tree DTS is referencing this driver. I did a > > search of all the compatible strings defined in the > > "jadard,jd9365da-h3.yaml" file. I also did the same on Debian code > > search. > > > OK then: > Reviewed-by: Neil Armstrong <neil.armstrong@xxxxxxxxxx> Hi Neil, it seems this patch was never applied/picked-up? Hugo. > > > > > Hugo. > > > > > >> > >> Neil > >> > >>> > >>> Fix reset behavior by inverting gpiod_set_value() second argument > >>> in jadard_prepare(). Also modify second argument to devm_gpiod_get() > >>> in jadard_dsi_probe() to assert the reset when probing. > >>> > >>> Do not modify it in jadard_unprepare() as it is already properly > >>> asserted with "1", which seems to be the intended behavior. > >>> > >>> Fixes: 6b818c533dd8 ("drm: panel: Add Jadard JD9365DA-H3 DSI panel") > >>> Cc: <stable@xxxxxxxxxxxxxxx> > >>> Signed-off-by: Hugo Villeneuve <hvilleneuve@xxxxxxxxxxxx> > >>> --- > >>> drivers/gpu/drm/panel/panel-jadard-jd9365da-h3.c | 8 ++++---- > >>> 1 file changed, 4 insertions(+), 4 deletions(-) > >>> > >>> diff --git a/drivers/gpu/drm/panel/panel-jadard-jd9365da-h3.c b/drivers/gpu/drm/panel/panel-jadard-jd9365da-h3.c > >>> index 44897e5218a69..6fec99cf4d935 100644 > >>> --- a/drivers/gpu/drm/panel/panel-jadard-jd9365da-h3.c > >>> +++ b/drivers/gpu/drm/panel/panel-jadard-jd9365da-h3.c > >>> @@ -110,13 +110,13 @@ static int jadard_prepare(struct drm_panel *panel) > >>> if (jadard->desc->lp11_to_reset_delay_ms) > >>> msleep(jadard->desc->lp11_to_reset_delay_ms); > >>> > >>> - gpiod_set_value(jadard->reset, 1); > >>> + gpiod_set_value(jadard->reset, 0); > >>> msleep(5); > >>> > >>> - gpiod_set_value(jadard->reset, 0); > >>> + gpiod_set_value(jadard->reset, 1); > >>> msleep(10); > >>> > >>> - gpiod_set_value(jadard->reset, 1); > >>> + gpiod_set_value(jadard->reset, 0); > >>> msleep(130); > >>> > >>> ret = jadard->desc->init(jadard); > >>> @@ -1131,7 +1131,7 @@ static int jadard_dsi_probe(struct mipi_dsi_device *dsi) > >>> dsi->format = desc->format; > >>> dsi->lanes = desc->lanes; > >>> > >>> - jadard->reset = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW); > >>> + jadard->reset = devm_gpiod_get(dev, "reset", GPIOD_OUT_HIGH); > >>> if (IS_ERR(jadard->reset)) { > >>> DRM_DEV_ERROR(&dsi->dev, "failed to get our reset GPIO\n"); > >>> return PTR_ERR(jadard->reset); > >>> > >>> base-commit: 18ba6034468e7949a9e2c2cf28e2e123b4fe7a50 > >> > >> > > > > > > -- Hugo Villeneuve