On Thu, May 28, 2026 at 2:41 PM Dominique Belhachemi <[email protected]> wrote: > > The segment_addr and ddc_addr fields need to be reset per I2C transfer > to avoid stale values. The reset wasn't required on simple displays with > only one segment, but modern displays with two or more segments end up > with corrupt EDIDs. > > This was found on a StarFive VisionFive 2 SBC. > > Signed-off-by: Dominique Belhachemi <[email protected]> > --- > drivers/gpu/drm/bridge/inno-hdmi.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/drivers/gpu/drm/bridge/inno-hdmi.c > b/drivers/gpu/drm/bridge/inno-hdmi.c > index 5fa533a4eb342..297be02bbd58d 100644 > --- a/drivers/gpu/drm/bridge/inno-hdmi.c > +++ b/drivers/gpu/drm/bridge/inno-hdmi.c > @@ -989,6 +989,10 @@ static int inno_hdmi_i2c_xfer(struct i2c_adapter *adap, > > mutex_lock(&i2c->lock); > > + /* Reset segment_addr and ddc_addr at the start of every I2C transfer > */ > + i2c->ddc_addr = 0; > + i2c->segment_addr = 0; > + > /* Clear the EDID interrupt flag and unmute the interrupt */ > hdmi_writeb(hdmi, HDMI_INTERRUPT_MASK1, m_INT_EDID_READY); > hdmi_writeb(hdmi, HDMI_INTERRUPT_STATUS1, m_INT_EDID_READY); > --
Hi, Is there anything else I can provide to get this merged? Thanks -Dominique
