On Thu, Jun 11, 2026 at 02:44:58AM +0530, Mohit Dsor wrote:
> Remove two redundant lt9611c_reset() calls:
> 
> 1. In lt9611c_bridge_atomic_pre_enable(): a reset is already performed
>    during probe and resume; calling it again on every display enable
>    adds ~440ms of unnecessary latency.
> 
> 2. At the end of lt9611c_probe(): a reset was already performed earlier
>    in probe before lt9611c_lock(). The second reset is redundant.
> 
> Also, the DRM HDMI bridge framework requires hdmi_write_hdmi_infoframe and
> hdmi_clear_hdmi_infoframe callbacks for HDMI vendor-specific infoframe
> (VSI) support, used for features such as HDR metadata signalling.
> 
> This patch add stub implementations that return success. Wire them into the 
> bridge
> function table.
> 
> Also, Store the chip variant enum value in the of_match_table .data field and
> retrieve it via of_device_get_match_data() when probing from a DT node.
> Fall back to i2c_device_id.driver_data for non-DT (e.g. ACPI) probe
> paths.
> 
> This is the standard kernel pattern for passing per-compatible data
> through the OF match table, and avoids relying solely on the I2C device
> ID table for chip type detection when DT is available.
> 
> Populate bridge.vendor and bridge.product so the DRM HDMI framework can
> report the correct manufacturer and product name in the HDMI connector
> properties (visible via xrandr --prop and related sysfs entries).

I was going to write that this should be split into several commits, but
then... I stumbled upon a fact that the driver is not a part of the
drm-misc. So, instead of posting an update for the not-yet-merged
driver, please post new iteration of the LT9611C series. Don't forget to
drop the R-B tags where applicable.

> 
> Signed-off-by: Mohit Dsor <[email protected]>
> ---
>  drivers/gpu/drm/bridge/lontium-lt9611c.c | 31 ++++++++++++++++++++++++++-----
>  1 file changed, 26 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/gpu/drm/bridge/lontium-lt9611c.c 
> b/drivers/gpu/drm/bridge/lontium-lt9611c.c
> index b0402726367e..fe51f4978546 100644
> --- a/drivers/gpu/drm/bridge/lontium-lt9611c.c
> +++ b/drivers/gpu/drm/bridge/lontium-lt9611c.c
> @@ -622,7 +622,6 @@ static void lt9611c_bridge_atomic_pre_enable(struct 
> drm_bridge *bridge,
>       ret = regulator_bulk_enable(ARRAY_SIZE(lt9611c->supplies), 
> lt9611c->supplies);
>       if (ret)
>               dev_err(lt9611c->dev, "regulator bulk enable failed.\n");
> -     lt9611c_reset(lt9611c);
>  }
>  
>  static void lt9611c_bridge_atomic_enable(struct drm_bridge *bridge,
> @@ -777,6 +776,17 @@ static int lt9611c_hdmi_clear_avi_infoframe(struct 
> drm_bridge *bridge)
>       return 0;
>  }
>  
> +static int lt9611c_hdmi_write_hdmi_infoframe(struct drm_bridge *bridge,
> +                                          const u8 *buffer, size_t len)
> +{
> +     return 0;
> +}
> +
> +static int lt9611c_hdmi_clear_hdmi_infoframe(struct drm_bridge *bridge)
> +{
> +     return 0;
> +}

Definite NAK. The purpose of the callbacks is to write the infoframe.
Purpose of the check in the DRM framework is to ensure that the frame is
actually written. Please work with Lontium and find a way to write HDMI
/ HVS, SPD and HDR infoframes.

> +
>  static int lt9611c_hdmi_write_audio_infoframe(struct drm_bridge *bridge,
>                                             const u8 *buffer, size_t len)
>  {
> @@ -895,6 +905,8 @@ static const struct drm_bridge_funcs lt9611c_bridge_funcs 
> = {
>       .hdmi_tmds_char_rate_valid = lt9611c_hdmi_tmds_char_rate_valid,
>       .hdmi_write_avi_infoframe = lt9611c_hdmi_write_avi_infoframe,
>       .hdmi_clear_avi_infoframe = lt9611c_hdmi_clear_avi_infoframe,
> +     .hdmi_write_hdmi_infoframe = lt9611c_hdmi_write_hdmi_infoframe,
> +     .hdmi_clear_hdmi_infoframe = lt9611c_hdmi_clear_hdmi_infoframe,
>       .hdmi_write_audio_infoframe = lt9611c_hdmi_write_audio_infoframe,
>       .hdmi_clear_audio_infoframe = lt9611c_hdmi_clear_audio_infoframe,
>  
> @@ -1025,6 +1037,13 @@ static int lt9611c_probe(struct i2c_client *client)
>       lt9611c->dev = dev;
>       lt9611c->client = client;
>       lt9611c->chip_type = id->driver_data;
> +
> +     if (dev->of_node) {
> +             lt9611c->chip_type = (uintptr_t)of_device_get_match_data(dev);
> +     } else {
> +             lt9611c->chip_type = id->driver_data;
> +     }

Use i2c_get_match_data(). But, also, why? The driver will likely not
work w/o the OF in place, there is little point in doing something else.

> +
>       ret = devm_mutex_init(dev, &lt9611c->ocm_lock);
>       if (ret)
>               return dev_err_probe(dev, ret, "failed to init mutex\n");

-- 
With best wishes
Dmitry

Reply via email to