Re: [PATCH v1] drm/bridge: inno-hdmi: reset DDC segment pointer per I2C transfer

From: Dominique Belhachemi

Date: Fri Jul 10 2026 - 14:40:59 EST


On Thu, May 28, 2026 at 2:41 PM Dominique Belhachemi <domibel@xxxxxxxxxx> 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 <domibel@xxxxxxxxxx>
> ---
> 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