Message ID | 20241212-adv7533-dsi-reset-v3-1-c6b9a5c524cf@axis.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v3] drm/bridge: adv7533: Reset DSI receiver logic | expand |
On 12.12.24 3:38 PM, Stefan Ekenberg wrote: > Reset DSI receiver logic during power on. The need for this change was > discovered when investigating issue with ADV7535. The symptom of the > problem was that ADV7535 continuously outputs a black image. This > happened for about 10% of the times that ADV7535 was powered on. The > rest of the times the image was as expected. > > The solution in this patch (placement of reset and sleep time of 200ms) > is implemented as outlined by the Analog Devices support team. > > Tested-by: Biju Das <biju.das.jz@bp.renesas.com> > Fixes: 8501fe4b14a35 ("drm: bridge: adv7511: Add support for ADV7535") > Signed-off-by: Stefan Ekenberg <stefan.ekenberg@axis.com> I can't reproduce the issue with my setup, but I tested this and it doesn't break anything for me either. Tested-by: Frieder Schrempf <frieder.schrempf@kontron.de> Reviewed-by: Frieder Schrempf <frieder.schrempf@kontron.de> > --- > Changes in v3: > - Add Fixes tag > - Link to v2: https://lore.kernel.org/r/20241119-adv7533-dsi-reset-v2-1-e12cce42e25a@axis.com > > Changes in v2: > - Add Tested-by tag > - Link to v1: https://lore.kernel.org/r/20241113-adv7533-dsi-reset-v1-1-6c1069e35fd3@axis.com > --- > drivers/gpu/drm/bridge/adv7511/adv7533.c | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/drivers/gpu/drm/bridge/adv7511/adv7533.c b/drivers/gpu/drm/bridge/adv7511/adv7533.c > index 4481489aaf5ebf164313c86cbf3447d2d7914ab9..93085c2b872ed98f4ee394236dc66c568c0e5ccf 100644 > --- a/drivers/gpu/drm/bridge/adv7511/adv7533.c > +++ b/drivers/gpu/drm/bridge/adv7511/adv7533.c > @@ -67,6 +67,15 @@ void adv7533_dsi_power_on(struct adv7511 *adv) > { > struct mipi_dsi_device *dsi = adv->dsi; > > + /* > + * Reset DSI receiver block logic to avoid ADV7535 startup problem. > + * Without this reset it sometimes continuously fails to receive > + * incoming DSI packets and outputs black image. > + */ > + regmap_write(adv->regmap_cec, 0x26, 0x18); > + msleep(200); > + regmap_write(adv->regmap_cec, 0x26, 0x38); > + > if (adv->use_timing_gen) > adv7511_dsi_config_timing_gen(adv); > > > --- > base-commit: 59b723cd2adbac2a34fc8e12c74ae26ae45bf230 > change-id: 20241108-adv7533-dsi-reset-488c6fbb5e42 > > Best regards,
diff --git a/drivers/gpu/drm/bridge/adv7511/adv7533.c b/drivers/gpu/drm/bridge/adv7511/adv7533.c index 4481489aaf5ebf164313c86cbf3447d2d7914ab9..93085c2b872ed98f4ee394236dc66c568c0e5ccf 100644 --- a/drivers/gpu/drm/bridge/adv7511/adv7533.c +++ b/drivers/gpu/drm/bridge/adv7511/adv7533.c @@ -67,6 +67,15 @@ void adv7533_dsi_power_on(struct adv7511 *adv) { struct mipi_dsi_device *dsi = adv->dsi; + /* + * Reset DSI receiver block logic to avoid ADV7535 startup problem. + * Without this reset it sometimes continuously fails to receive + * incoming DSI packets and outputs black image. + */ + regmap_write(adv->regmap_cec, 0x26, 0x18); + msleep(200); + regmap_write(adv->regmap_cec, 0x26, 0x38); + if (adv->use_timing_gen) adv7511_dsi_config_timing_gen(adv);