* [PATCH 1/8] drm/bridge: adv7511: Advertise HDMI 1.2 capabilities
2026-10-01 1:14 [PATCH 0/8] drm: Advertise supported HDMI version in HDMI drivers Cristian Ciocaltea
@ 2026-10-01 1:14 ` Cristian Ciocaltea
2026-10-01 1:14 ` [PATCH 2/8] drm/bridge: inno-hdmi: " Cristian Ciocaltea
` (6 subsequent siblings)
7 siblings, 0 replies; 10+ messages in thread
From: Cristian Ciocaltea @ 2026-10-01 1:14 UTC (permalink / raw)
To: Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
Jonas Karlman, Jernej Skrabec, Luca Ceresoli, Maarten Lankhorst,
Maxime Ripard, Thomas Zimmermann, David Airlie, Simona Vetter,
Andy Yan, Liu Ying, Phong LE, Sandy Huang, Heiko Stübner,
Chen-Yu Tsai, Samuel Holland
Cc: kernel, dri-devel, linux-kernel, linux-rockchip, linux-arm-kernel,
linux-sunxi
Bridges using DRM_BRIDGE_OP_HDMI are now expected to also provide a
supported HDMI version. This is not yet enforced, but will become
mandatory once the migration to the new caps-based HDMI connector
initialization API is completed.
Since max_mode_clock_khz does not exceed 165 MHz for any of the chip
variants handled by the driver, advertise HDMI 1.2 as the supported
version and set the bridge's max_tmds_char_rate so the connector limit
inferred from supported_hdmi_ver is overridden by the chip-specific
hardware constraints.
drm_bridge_connector_atomic_check() runs
drm_atomic_helper_connector_hdmi_check(), which rejects modes whose
computed TMDS character rate exceeds the connector limit before invoking
the driver's .tmds_char_rate_valid() hook, making
adv7511_bridge_hdmi_tmds_char_rate_valid() redundant. Drop it.
Reviewed-by: Maxime Ripard <mripard@kernel.org>
Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
---
drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 22 +++-------------------
1 file changed, 3 insertions(+), 19 deletions(-)
diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
index 038b852405b5..c3ef44074477 100644
--- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
+++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
@@ -8,6 +8,7 @@
#include <linux/clk.h>
#include <linux/device.h>
#include <linux/gpio/consumer.h>
+#include <linux/hdmi.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/slab.h>
@@ -775,11 +776,6 @@ static int adv7511_connector_init(struct adv7511 *adv)
* DRM Bridge Operations
*/
-static const struct adv7511 *bridge_to_adv7511_const(const struct drm_bridge *bridge)
-{
- return container_of(bridge, struct adv7511, bridge);
-}
-
static void adv7511_bridge_atomic_enable(struct drm_bridge *bridge,
struct drm_atomic_commit *state)
{
@@ -817,19 +813,6 @@ static void adv7511_bridge_atomic_disable(struct drm_bridge *bridge,
adv7511_power_off(adv);
}
-static enum drm_mode_status
-adv7511_bridge_hdmi_tmds_char_rate_valid(const struct drm_bridge *bridge,
- const struct drm_display_mode *mode,
- unsigned long long tmds_rate)
-{
- const struct adv7511 *adv = bridge_to_adv7511_const(bridge);
-
- if (tmds_rate > 1000ULL * adv->info->max_mode_clock_khz)
- return MODE_CLOCK_HIGH;
-
- return MODE_OK;
-}
-
static enum drm_mode_status adv7511_bridge_mode_valid(struct drm_bridge *bridge,
const struct drm_display_info *info,
const struct drm_display_mode *mode)
@@ -1006,7 +989,6 @@ static const struct drm_bridge_funcs adv7511_bridge_funcs = {
.atomic_destroy_state = drm_atomic_helper_bridge_destroy_state,
.atomic_create_state = drm_atomic_helper_bridge_create_state,
- .hdmi_tmds_char_rate_valid = adv7511_bridge_hdmi_tmds_char_rate_valid,
.hdmi_clear_audio_infoframe = adv7511_bridge_hdmi_clear_audio_infoframe,
.hdmi_write_audio_infoframe = adv7511_bridge_hdmi_write_audio_infoframe,
.hdmi_clear_avi_infoframe = adv7511_bridge_hdmi_clear_avi_infoframe,
@@ -1359,6 +1341,8 @@ static int adv7511_probe(struct i2c_client *i2c)
adv7511->bridge.vendor = "Analog";
adv7511->bridge.product = adv7511->info->name;
+ adv7511->bridge.supported_hdmi_ver = HDMI_VERSION_1_2;
+ adv7511->bridge.max_tmds_char_rate = 1000ULL * adv7511->info->max_mode_clock_khz;
#ifdef CONFIG_DRM_I2C_ADV7511_AUDIO
adv7511->bridge.ops |= DRM_BRIDGE_OP_HDMI_AUDIO;
--
2.55.0
^ permalink raw reply related [flat|nested] 10+ messages in thread* [PATCH 2/8] drm/bridge: inno-hdmi: Advertise HDMI 1.2 capabilities
2026-10-01 1:14 [PATCH 0/8] drm: Advertise supported HDMI version in HDMI drivers Cristian Ciocaltea
2026-10-01 1:14 ` [PATCH 1/8] drm/bridge: adv7511: Advertise HDMI 1.2 capabilities Cristian Ciocaltea
@ 2026-10-01 1:14 ` Cristian Ciocaltea
2026-10-01 1:14 ` [PATCH 3/8] drm/bridge: ite-it6263: Drop redundant .mode_valid hook Cristian Ciocaltea
` (5 subsequent siblings)
7 siblings, 0 replies; 10+ messages in thread
From: Cristian Ciocaltea @ 2026-10-01 1:14 UTC (permalink / raw)
To: Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
Jonas Karlman, Jernej Skrabec, Luca Ceresoli, Maarten Lankhorst,
Maxime Ripard, Thomas Zimmermann, David Airlie, Simona Vetter,
Andy Yan, Liu Ying, Phong LE, Sandy Huang, Heiko Stübner,
Chen-Yu Tsai, Samuel Holland
Cc: kernel, dri-devel, linux-kernel, linux-rockchip, linux-arm-kernel,
linux-sunxi
Bridges using DRM_BRIDGE_OP_HDMI are now expected to also provide a
supported HDMI version. This is not yet enforced, but will become
mandatory once the migration to the new caps-based HDMI connector
initialization API is completed.
Since inno_hdmi_phy_config.pixelclock does not exceed 165 MHz for any of
the chip variants handled by the driver, advertise HDMI 1.2 as the
supported version.
Reviewed-by: Maxime Ripard <mripard@kernel.org>
Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
---
drivers/gpu/drm/bridge/inno-hdmi.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/gpu/drm/bridge/inno-hdmi.c b/drivers/gpu/drm/bridge/inno-hdmi.c
index dd35f5a875d3..ea3447d4f285 100644
--- a/drivers/gpu/drm/bridge/inno-hdmi.c
+++ b/drivers/gpu/drm/bridge/inno-hdmi.c
@@ -1119,6 +1119,7 @@ struct inno_hdmi *inno_hdmi_bind(struct device *dev,
hdmi->bridge.type = DRM_MODE_CONNECTOR_HDMIA;
hdmi->bridge.vendor = "Inno";
hdmi->bridge.product = "Inno HDMI";
+ hdmi->bridge.supported_hdmi_ver = HDMI_VERSION_1_2;
hdmi->bridge.ddc = inno_hdmi_i2c_adapter(hdmi);
if (IS_ERR(hdmi->bridge.ddc))
--
2.55.0
^ permalink raw reply related [flat|nested] 10+ messages in thread* [PATCH 3/8] drm/bridge: ite-it6263: Drop redundant .mode_valid hook
2026-10-01 1:14 [PATCH 0/8] drm: Advertise supported HDMI version in HDMI drivers Cristian Ciocaltea
2026-10-01 1:14 ` [PATCH 1/8] drm/bridge: adv7511: Advertise HDMI 1.2 capabilities Cristian Ciocaltea
2026-10-01 1:14 ` [PATCH 2/8] drm/bridge: inno-hdmi: " Cristian Ciocaltea
@ 2026-10-01 1:14 ` Cristian Ciocaltea
2026-10-01 1:14 ` [PATCH 4/8] drm/bridge: ite-it6263: Advertise HDMI 1.3 capabilities Cristian Ciocaltea
` (4 subsequent siblings)
7 siblings, 0 replies; 10+ messages in thread
From: Cristian Ciocaltea @ 2026-10-01 1:14 UTC (permalink / raw)
To: Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
Jonas Karlman, Jernej Skrabec, Luca Ceresoli, Maarten Lankhorst,
Maxime Ripard, Thomas Zimmermann, David Airlie, Simona Vetter,
Andy Yan, Liu Ying, Phong LE, Sandy Huang, Heiko Stübner,
Chen-Yu Tsai, Samuel Holland
Cc: kernel, dri-devel, linux-kernel, linux-rockchip, linux-arm-kernel,
linux-sunxi
Bridges using DRM_BRIDGE_OP_HDMI expect connectors to be created through
drm_bridge_connector_init(), thereby relying on the bridge connector's
.mode_valid hook to invoke drm_hdmi_connector_mode_valid().
The generic helper computes the mode's TMDS character rate and forwards
it to the bridge's .hdmi_tmds_char_rate_valid callback through the
connector HDMI funcs. This covers exactly what
it6263_bridge_mode_valid() does for 8 bpc RGB444, but due to being
output-format aware, it also handles the validation more thoroughly.
Both the connector and bridge .mode_valid hooks are invoked during
mode validation through drm_mode_validate_pipeline(), so the custom
bridge hook is redundant. Drop it.
While at it, remove the now-unused drm_hdmi_helper.h include.
Reviewed-by: Maxime Ripard <mripard@kernel.org>
Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
---
drivers/gpu/drm/bridge/ite-it6263.c | 16 ----------------
1 file changed, 16 deletions(-)
diff --git a/drivers/gpu/drm/bridge/ite-it6263.c b/drivers/gpu/drm/bridge/ite-it6263.c
index 21ac8e58b9d2..550999491086 100644
--- a/drivers/gpu/drm/bridge/ite-it6263.c
+++ b/drivers/gpu/drm/bridge/ite-it6263.c
@@ -15,7 +15,6 @@
#include <linux/regmap.h>
#include <linux/regulator/consumer.h>
-#include <drm/display/drm_hdmi_helper.h>
#include <drm/display/drm_hdmi_state_helper.h>
#include <drm/drm_atomic.h>
#include <drm/drm_atomic_helper.h>
@@ -669,20 +668,6 @@ static void it6263_bridge_atomic_enable(struct drm_bridge *bridge,
regmap_write(regmap, HDMI_REG_PKT_GENERAL_CTRL, ENABLE_PKT | REPEAT_PKT);
}
-static enum drm_mode_status
-it6263_bridge_mode_valid(struct drm_bridge *bridge,
- const struct drm_display_info *info,
- const struct drm_display_mode *mode)
-{
- unsigned long long rate;
-
- rate = drm_hdmi_compute_mode_clock(mode, 8, DRM_OUTPUT_COLOR_FORMAT_RGB444);
- if (rate == 0)
- return MODE_NOCLOCK;
-
- return bridge->funcs->hdmi_tmds_char_rate_valid(bridge, mode, rate);
-}
-
static int it6263_bridge_attach(struct drm_bridge *bridge,
struct drm_encoder *encoder,
enum drm_bridge_attach_flags flags)
@@ -831,7 +816,6 @@ static const struct drm_bridge_funcs it6263_bridge_funcs = {
.atomic_destroy_state = drm_atomic_helper_bridge_destroy_state,
.atomic_create_state = drm_atomic_helper_bridge_create_state,
.attach = it6263_bridge_attach,
- .mode_valid = it6263_bridge_mode_valid,
.atomic_disable = it6263_bridge_atomic_disable,
.atomic_enable = it6263_bridge_atomic_enable,
.detect = it6263_bridge_detect,
--
2.55.0
^ permalink raw reply related [flat|nested] 10+ messages in thread* [PATCH 4/8] drm/bridge: ite-it6263: Advertise HDMI 1.3 capabilities
2026-10-01 1:14 [PATCH 0/8] drm: Advertise supported HDMI version in HDMI drivers Cristian Ciocaltea
` (2 preceding siblings ...)
2026-10-01 1:14 ` [PATCH 3/8] drm/bridge: ite-it6263: Drop redundant .mode_valid hook Cristian Ciocaltea
@ 2026-10-01 1:14 ` Cristian Ciocaltea
2026-10-01 1:23 ` sashiko-bot
2026-10-01 1:14 ` [PATCH 5/8] drm/bridge: ite-it66121: Advertise HDMI 1.2 capabilities Cristian Ciocaltea
` (3 subsequent siblings)
7 siblings, 1 reply; 10+ messages in thread
From: Cristian Ciocaltea @ 2026-10-01 1:14 UTC (permalink / raw)
To: Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
Jonas Karlman, Jernej Skrabec, Luca Ceresoli, Maarten Lankhorst,
Maxime Ripard, Thomas Zimmermann, David Airlie, Simona Vetter,
Andy Yan, Liu Ying, Phong LE, Sandy Huang, Heiko Stübner,
Chen-Yu Tsai, Samuel Holland
Cc: kernel, dri-devel, linux-kernel, linux-rockchip, linux-arm-kernel,
linux-sunxi
Bridges using DRM_BRIDGE_OP_HDMI are expected to provide the supported
HDMI version. This is not enforced yet, but will become mandatory once
the migration to the caps-based HDMI connector initialization API is
complete.
Advertise HDMI 1.3 support for IT6263, covering the 225 MHz TMDS
character rate currently documented by the driver, which is within the
HDMI 1.3 limit of 340 MHz. Additionally, keep the stricter 150 MHz
effective mode limit by setting max_tmds_char_rate from
MAX_PIXEL_CLOCK_KHZ.
The existing .hdmi_tmds_char_rate_valid() hook checks both the pixel
clock and TMDS character rate. Since the bridge only supports 8 bpc
RGB444, these are equivalent for supported modes, making the 225 MHz
TMDS rate check unreachable once the 150 MHz pixel-clock limit is
applied.
drm_bridge_connector_atomic_check() invokes
drm_atomic_helper_connector_hdmi_check(), which rejects modes whose
computed TMDS character rate exceeds the connector's max_tmds_char_rate
before invoking the driver's .tmds_char_rate_valid hook. Since
max_tmds_char_rate now carries the existing effective limit,
it6263_hdmi_tmds_char_rate_valid() is redundant. Drop it.
Reviewed-by: Maxime Ripard <mripard@kernel.org>
Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
---
drivers/gpu/drm/bridge/ite-it6263.c | 17 ++---------------
1 file changed, 2 insertions(+), 15 deletions(-)
diff --git a/drivers/gpu/drm/bridge/ite-it6263.c b/drivers/gpu/drm/bridge/ite-it6263.c
index 550999491086..e8e0197171e1 100644
--- a/drivers/gpu/drm/bridge/ite-it6263.c
+++ b/drivers/gpu/drm/bridge/ite-it6263.c
@@ -738,20 +738,6 @@ it6263_bridge_atomic_get_input_bus_fmts(struct drm_bridge *bridge,
return input_fmts;
}
-static enum drm_mode_status
-it6263_hdmi_tmds_char_rate_valid(const struct drm_bridge *bridge,
- const struct drm_display_mode *mode,
- unsigned long long tmds_rate)
-{
- if (mode->clock > MAX_PIXEL_CLOCK_KHZ)
- return MODE_CLOCK_HIGH;
-
- if (tmds_rate > MAX_HDMI_TMDS_CHAR_RATE_HZ)
- return MODE_CLOCK_HIGH;
-
- return MODE_OK;
-}
-
static int it6263_hdmi_clear_avi_infoframe(struct drm_bridge *bridge)
{
struct it6263 *it = bridge_to_it6263(bridge);
@@ -821,7 +807,6 @@ static const struct drm_bridge_funcs it6263_bridge_funcs = {
.detect = it6263_bridge_detect,
.edid_read = it6263_bridge_edid_read,
.atomic_get_input_bus_fmts = it6263_bridge_atomic_get_input_bus_fmts,
- .hdmi_tmds_char_rate_valid = it6263_hdmi_tmds_char_rate_valid,
.hdmi_clear_avi_infoframe = it6263_hdmi_clear_avi_infoframe,
.hdmi_write_avi_infoframe = it6263_hdmi_write_avi_infoframe,
.hdmi_clear_hdmi_infoframe = it6263_hdmi_clear_hdmi_infoframe,
@@ -883,6 +868,8 @@ static int it6263_probe(struct i2c_client *client)
it->bridge.type = DRM_MODE_CONNECTOR_HDMIA;
it->bridge.vendor = "ITE";
it->bridge.product = "IT6263";
+ it->bridge.supported_hdmi_ver = HDMI_VERSION_1_3;
+ it->bridge.max_tmds_char_rate = 1000ULL * MAX_PIXEL_CLOCK_KHZ;
return devm_drm_bridge_add(dev, &it->bridge);
}
--
2.55.0
^ permalink raw reply related [flat|nested] 10+ messages in thread* Re: [PATCH 4/8] drm/bridge: ite-it6263: Advertise HDMI 1.3 capabilities
2026-10-01 1:14 ` [PATCH 4/8] drm/bridge: ite-it6263: Advertise HDMI 1.3 capabilities Cristian Ciocaltea
@ 2026-10-01 1:23 ` sashiko-bot
0 siblings, 0 replies; 10+ messages in thread
From: sashiko-bot @ 2026-10-01 1:23 UTC (permalink / raw)
To: Cristian Ciocaltea; +Cc: linux-sunxi, dri-devel
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Low] Unused macro MAX_HDMI_TMDS_CHAR_RATE_HZ left as dead code
--
commit 4c0965b876d8cee6ad2805996d389a95afff88cf
Author: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
drm/bridge: ite-it6263: Advertise HDMI 1.3 capabilities
This commit advertises HDMI 1.3 support for the IT6263 bridge and sets the
maximum TMDS character rate. It also removes the now-redundant
it6263_hdmi_tmds_char_rate_valid() hook, as the core DRM helper handles
these checks before invoking the driver's hook.
> diff --git a/drivers/gpu/drm/bridge/ite-it6263.c b/drivers/gpu/drm/bridge/ite-it6263.c
> index 550999491086e..e8e0197171e10 100644
> --- a/drivers/gpu/drm/bridge/ite-it6263.c
> +++ b/drivers/gpu/drm/bridge/ite-it6263.c
> @@ -738,20 +738,6 @@ it6263_bridge_atomic_get_input_bus_fmts(struct drm_bridge *bridge,
> return input_fmts;
> }
>
> -static enum drm_mode_status
> -it6263_hdmi_tmds_char_rate_valid(const struct drm_bridge *bridge,
> - const struct drm_display_mode *mode,
> - unsigned long long tmds_rate)
> -{
> - if (mode->clock > MAX_PIXEL_CLOCK_KHZ)
> - return MODE_CLOCK_HIGH;
> -
> - if (tmds_rate > MAX_HDMI_TMDS_CHAR_RATE_HZ)
[Severity: Low]
With the removal of the it6263_hdmi_tmds_char_rate_valid() hook, the macro
MAX_HDMI_TMDS_CHAR_RATE_HZ in drivers/gpu/drm/bridge/ite-it6263.c is no
longer referenced anywhere. Should this unused macro also be removed to
prevent leaving dead code behind?
> - return MODE_CLOCK_HIGH;
> -
> - return MODE_OK;
> -}
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261001-bridge-advert-hdmi-caps-v1-0-f8806570e243@collabora.com?part=4
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 5/8] drm/bridge: ite-it66121: Advertise HDMI 1.2 capabilities
2026-10-01 1:14 [PATCH 0/8] drm: Advertise supported HDMI version in HDMI drivers Cristian Ciocaltea
` (3 preceding siblings ...)
2026-10-01 1:14 ` [PATCH 4/8] drm/bridge: ite-it6263: Advertise HDMI 1.3 capabilities Cristian Ciocaltea
@ 2026-10-01 1:14 ` Cristian Ciocaltea
2026-10-01 1:14 ` [PATCH 6/8] drm/bridge: lontium-lt9611: Advertise HDMI 1.4 capabilities Cristian Ciocaltea
` (2 subsequent siblings)
7 siblings, 0 replies; 10+ messages in thread
From: Cristian Ciocaltea @ 2026-10-01 1:14 UTC (permalink / raw)
To: Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
Jonas Karlman, Jernej Skrabec, Luca Ceresoli, Maarten Lankhorst,
Maxime Ripard, Thomas Zimmermann, David Airlie, Simona Vetter,
Andy Yan, Liu Ying, Phong LE, Sandy Huang, Heiko Stübner,
Chen-Yu Tsai, Samuel Holland
Cc: kernel, dri-devel, linux-kernel, linux-rockchip, linux-arm-kernel,
linux-sunxi
Bridges using DRM_BRIDGE_OP_HDMI are now expected to also provide a
supported HDMI version. This is not yet enforced, but will become
mandatory once the migration to the new caps-based HDMI connector
initialization API is completed.
Since none of the chip variants handled by the driver can drive a TMDS
character rate exceeding 148.5 MHz, advertise HDMI 1.2 as the supported
version. HDMI 1.2 allows up to 165 MHz, so set the bridge's
max_tmds_char_rate to ensure the connector limit derived from
supported_hdmi_ver remains within the hardware capabilities.
drm_bridge_connector_atomic_check() runs
drm_atomic_helper_connector_hdmi_check(), which rejects modes whose
computed TMDS character rate exceeds the connector limit before invoking
the driver's .tmds_char_rate_valid() hook, making the max_rate check in
it66121_bridge_hdmi_tmds_char_rate_valid() redundant. Drop it.
Reviewed-by: Maxime Ripard <mripard@kernel.org>
Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
---
drivers/gpu/drm/bridge/ite-it66121.c | 13 ++++---------
1 file changed, 4 insertions(+), 9 deletions(-)
diff --git a/drivers/gpu/drm/bridge/ite-it66121.c b/drivers/gpu/drm/bridge/ite-it66121.c
index 51fc68ffdf8f..c8d0a26e8e90 100644
--- a/drivers/gpu/drm/bridge/ite-it66121.c
+++ b/drivers/gpu/drm/bridge/ite-it66121.c
@@ -10,6 +10,7 @@
#include <linux/media-bus-format.h>
#include <linux/module.h>
#include <linux/device.h>
+#include <linux/hdmi.h>
#include <linux/interrupt.h>
#include <linux/i2c.h>
#include <linux/bitfield.h>
@@ -867,15 +868,6 @@ it66121_bridge_hdmi_tmds_char_rate_valid(const struct drm_bridge *bridge,
const struct drm_display_mode *mode,
unsigned long long tmds_rate)
{
- const struct it66121_ctx *ctx =
- container_of(bridge, const struct it66121_ctx, bridge);
- unsigned long long max_rate;
-
- max_rate = (ctx->bus_width == 12) ? 74250000ULL : 148500000ULL;
-
- if (tmds_rate > max_rate)
- return MODE_CLOCK_HIGH;
-
if (tmds_rate < HDMI_TMDS_CHAR_RATE_MIN_HZ)
return MODE_CLOCK_LOW;
@@ -1670,6 +1662,9 @@ static int it66121_probe(struct i2c_client *client)
DRM_BRIDGE_OP_HDMI;
ctx->bridge.vendor = "ITE";
ctx->bridge.product = "IT66121";
+ ctx->bridge.supported_hdmi_ver = HDMI_VERSION_1_2;
+ ctx->bridge.max_tmds_char_rate = ctx->bus_width == 12 ? 74250000ULL : 148500000ULL;
+
if (client->irq > 0) {
ctx->bridge.ops |= DRM_BRIDGE_OP_HPD;
--
2.55.0
^ permalink raw reply related [flat|nested] 10+ messages in thread* [PATCH 6/8] drm/bridge: lontium-lt9611: Advertise HDMI 1.4 capabilities
2026-10-01 1:14 [PATCH 0/8] drm: Advertise supported HDMI version in HDMI drivers Cristian Ciocaltea
` (4 preceding siblings ...)
2026-10-01 1:14 ` [PATCH 5/8] drm/bridge: ite-it66121: Advertise HDMI 1.2 capabilities Cristian Ciocaltea
@ 2026-10-01 1:14 ` Cristian Ciocaltea
2026-10-01 1:14 ` [PATCH 7/8] drm/rockchip: rk3066_hdmi: " Cristian Ciocaltea
2026-10-01 1:14 ` [PATCH 8/8] drm/sun4i: hdmi: Convert to drmm_connector_hdmi_init() Cristian Ciocaltea
7 siblings, 0 replies; 10+ messages in thread
From: Cristian Ciocaltea @ 2026-10-01 1:14 UTC (permalink / raw)
To: Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
Jonas Karlman, Jernej Skrabec, Luca Ceresoli, Maarten Lankhorst,
Maxime Ripard, Thomas Zimmermann, David Airlie, Simona Vetter,
Andy Yan, Liu Ying, Phong LE, Sandy Huang, Heiko Stübner,
Chen-Yu Tsai, Samuel Holland
Cc: kernel, dri-devel, linux-kernel, linux-rockchip, linux-arm-kernel,
linux-sunxi
Bridges using DRM_BRIDGE_OP_HDMI are expected to provide the supported
HDMI version. This is not enforced yet, but will become mandatory once
the migration to the caps-based HDMI connector initialization API is
complete.
As LT9611 supposedly cannot drive a TMDS character rate exceeding 297
MHz, advertise HDMI 1.4 as the supported version. HDMI 1.4 allows up to
340 MHz, so set the bridge's max_tmds_char_rate to ensure the connector
limit derived from supported_hdmi_ver remains within the hardware
capabilities.
drm_bridge_connector_atomic_check() calls
drm_atomic_helper_connector_hdmi_check(), which rejects modes whose
computed TMDS character rate exceeds the connector's max_tmds_char_rate
before invoking the driver's .tmds_char_rate_valid hook. Since
max_tmds_char_rate now carries the existing effective limit,
lt9611_hdmi_tmds_char_rate_valid() is redundant. Drop it.
Reviewed-by: Maxime Ripard <mripard@kernel.org>
Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
---
drivers/gpu/drm/bridge/lontium-lt9611.c | 16 +++-------------
1 file changed, 3 insertions(+), 13 deletions(-)
diff --git a/drivers/gpu/drm/bridge/lontium-lt9611.c b/drivers/gpu/drm/bridge/lontium-lt9611.c
index cdc2b188e2d8..2d1a28261037 100644
--- a/drivers/gpu/drm/bridge/lontium-lt9611.c
+++ b/drivers/gpu/drm/bridge/lontium-lt9611.c
@@ -5,6 +5,7 @@
*/
#include <linux/gpio/consumer.h>
+#include <linux/hdmi.h>
#include <linux/i2c.h>
#include <linux/interrupt.h>
#include <linux/media-bus-format.h>
@@ -952,18 +953,6 @@ static int lt9611_hdmi_write_hdmi_infoframe(struct drm_bridge *bridge,
return 0;
}
-static enum drm_mode_status
-lt9611_hdmi_tmds_char_rate_valid(const struct drm_bridge *bridge,
- const struct drm_display_mode *mode,
- unsigned long long tmds_rate)
-{
- /* 297 MHz for 4k@30 mode */
- if (tmds_rate > 297000000)
- return MODE_CLOCK_HIGH;
-
- return MODE_OK;
-}
-
static int lt9611_hdmi_audio_startup(struct drm_bridge *bridge,
struct drm_connector *connector)
{
@@ -1029,7 +1018,6 @@ static const struct drm_bridge_funcs lt9611_bridge_funcs = {
.atomic_create_state = drm_atomic_helper_bridge_create_state,
.atomic_get_input_bus_fmts = lt9611_atomic_get_input_bus_fmts,
- .hdmi_tmds_char_rate_valid = lt9611_hdmi_tmds_char_rate_valid,
.hdmi_write_audio_infoframe = lt9611_hdmi_write_audio_infoframe,
.hdmi_clear_audio_infoframe = lt9611_hdmi_clear_audio_infoframe,
.hdmi_write_avi_infoframe = lt9611_hdmi_write_avi_infoframe,
@@ -1175,6 +1163,8 @@ static int lt9611_probe(struct i2c_client *client)
lt9611->bridge.hdmi_audio_dev = dev;
lt9611->bridge.hdmi_audio_max_i2s_playback_channels = 8;
lt9611->bridge.hdmi_audio_dai_port = 2;
+ lt9611->bridge.supported_hdmi_ver = HDMI_VERSION_1_4;
+ lt9611->bridge.max_tmds_char_rate = 297000000; /* 297 MHz for 4k@30 mode */
drm_bridge_add(<9611->bridge);
--
2.55.0
^ permalink raw reply related [flat|nested] 10+ messages in thread* [PATCH 7/8] drm/rockchip: rk3066_hdmi: Advertise HDMI 1.4 capabilities
2026-10-01 1:14 [PATCH 0/8] drm: Advertise supported HDMI version in HDMI drivers Cristian Ciocaltea
` (5 preceding siblings ...)
2026-10-01 1:14 ` [PATCH 6/8] drm/bridge: lontium-lt9611: Advertise HDMI 1.4 capabilities Cristian Ciocaltea
@ 2026-10-01 1:14 ` Cristian Ciocaltea
2026-10-01 1:14 ` [PATCH 8/8] drm/sun4i: hdmi: Convert to drmm_connector_hdmi_init() Cristian Ciocaltea
7 siblings, 0 replies; 10+ messages in thread
From: Cristian Ciocaltea @ 2026-10-01 1:14 UTC (permalink / raw)
To: Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
Jonas Karlman, Jernej Skrabec, Luca Ceresoli, Maarten Lankhorst,
Maxime Ripard, Thomas Zimmermann, David Airlie, Simona Vetter,
Andy Yan, Liu Ying, Phong LE, Sandy Huang, Heiko Stübner,
Chen-Yu Tsai, Samuel Holland
Cc: kernel, dri-devel, linux-kernel, linux-rockchip, linux-arm-kernel,
linux-sunxi
Bridges using DRM_BRIDGE_OP_HDMI are now expected to also provide a
supported HDMI version. This is not yet enforced, but will become
mandatory once the migration to the new caps-based HDMI connector
initialization API is completed.
The RK3066 HDMI TX supports HDMI 1.4a, as described in commit
f84d3d37b7fb ("drm: rockchip: introduce rk3066 hdmi"). However, the
driver does not currently enforce a maximum TMDS character rate, it only
filters non-CEA modes and excludes VIC 1 (640x480) via the .mode_valid
callback.
Advertise HDMI 1.4 support for now so that modes exceeding the 340 MHz
TMDS limit are rejected by the core.
Reviewed-by: Heiko Stuebner <heiko@sntech.de>
Reviewed-by: Maxime Ripard <mripard@kernel.org>
Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
---
drivers/gpu/drm/rockchip/rk3066_hdmi.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/gpu/drm/rockchip/rk3066_hdmi.c b/drivers/gpu/drm/rockchip/rk3066_hdmi.c
index f28d6a883e09..f748700b0ba6 100644
--- a/drivers/gpu/drm/rockchip/rk3066_hdmi.c
+++ b/drivers/gpu/drm/rockchip/rk3066_hdmi.c
@@ -14,6 +14,7 @@
#include <drm/drm_probe_helper.h>
#include <linux/clk.h>
+#include <linux/hdmi.h>
#include <linux/mfd/syscon.h>
#include <linux/platform_device.h>
#include <linux/regmap.h>
@@ -712,6 +713,7 @@ rk3066_hdmi_register(struct drm_device *drm, struct rk3066_hdmi *hdmi)
hdmi->bridge.type = DRM_MODE_CONNECTOR_HDMIA;
hdmi->bridge.vendor = "Rockchip";
hdmi->bridge.product = "RK3066 HDMI";
+ hdmi->bridge.supported_hdmi_ver = HDMI_VERSION_1_4;
hdmi->bridge.ddc = rk3066_hdmi_i2c_adapter(hdmi);
if (IS_ERR(hdmi->bridge.ddc))
--
2.55.0
^ permalink raw reply related [flat|nested] 10+ messages in thread* [PATCH 8/8] drm/sun4i: hdmi: Convert to drmm_connector_hdmi_init()
2026-10-01 1:14 [PATCH 0/8] drm: Advertise supported HDMI version in HDMI drivers Cristian Ciocaltea
` (6 preceding siblings ...)
2026-10-01 1:14 ` [PATCH 7/8] drm/rockchip: rk3066_hdmi: " Cristian Ciocaltea
@ 2026-10-01 1:14 ` Cristian Ciocaltea
7 siblings, 0 replies; 10+ messages in thread
From: Cristian Ciocaltea @ 2026-10-01 1:14 UTC (permalink / raw)
To: Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
Jonas Karlman, Jernej Skrabec, Luca Ceresoli, Maarten Lankhorst,
Maxime Ripard, Thomas Zimmermann, David Airlie, Simona Vetter,
Andy Yan, Liu Ying, Phong LE, Sandy Huang, Heiko Stübner,
Chen-Yu Tsai, Samuel Holland
Cc: kernel, dri-devel, linux-kernel, linux-rockchip, linux-arm-kernel,
linux-sunxi
Switch driver over to the new drmm_connector_hdmi_init() signature and
advertise HDMI 1.2 support. The vendor, product, supported_formats and
max_bpc values previously passed as arguments are now provided through
struct drm_connector_hdmi_funcs, together with the new
supported_hdmi_ver field.
The HDMI connector helpers infer the 165 MHz TMDS character rate ceiling
from supported_hdmi_ver and reject modes exceeding it before invoking
the driver's .tmds_char_rate_valid() hook. This makes the explicit mode
clock check in sun4i_hdmi_connector_clock_valid() redundant, so drop it.
No functional change intended.
Reviewed-by: Maxime Ripard <mripard@kernel.org>
Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
---
drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c | 25 +++++++++++--------------
1 file changed, 11 insertions(+), 14 deletions(-)
diff --git a/drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c b/drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c
index d98b6f12a7bc..6f4fe0c8efae 100644
--- a/drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c
+++ b/drivers/gpu/drm/sun4i/sun4i_hdmi_enc.c
@@ -192,10 +192,6 @@ sun4i_hdmi_connector_clock_valid(const struct drm_connector *connector,
if (mode->flags & DRM_MODE_FLAG_DBLCLK)
return MODE_BAD;
- /* HDMI 1.0 max TMDS character rate */
- if (clock > HDMI_1_0_TMDS_CHAR_RATE_MAX_HZ)
- return MODE_CLOCK_HIGH;
-
rounded_rate = clk_round_rate(hdmi->tmds_clk, clock);
if (rounded_rate > 0 &&
max_t(unsigned long, rounded_rate, clock) -
@@ -253,6 +249,15 @@ static struct i2c_adapter *sun4i_hdmi_get_ddc(struct device *dev)
}
static const struct drm_connector_hdmi_funcs sun4i_hdmi_hdmi_connector_funcs = {
+ /*
+ * NOTE: Those are likely to be wrong, but I couldn't find
+ * the actual ones in the BSP.
+ */
+ .vendor = "AW",
+ .product = "HDMI",
+ .supported_hdmi_ver = HDMI_VERSION_1_2,
+ .supported_formats = BIT(DRM_OUTPUT_COLOR_FORMAT_RGB444),
+ .max_bpc = 8,
.tmds_char_rate_valid = sun4i_hdmi_connector_clock_valid,
.avi = {
.clear_infoframe = sun4i_hdmi_clear_avi_infoframe,
@@ -654,19 +659,11 @@ static int sun4i_hdmi_bind(struct device *dev, struct device *master,
drm_connector_helper_add(&hdmi->connector,
&sun4i_hdmi_connector_helper_funcs);
- ret = drmm_connector_hdmi_ini2(drm, &hdmi->connector,
- /*
- * NOTE: Those are likely to be
- * wrong, but I couldn't find the
- * actual ones in the BSP.
- */
- "AW", "HDMI",
+ ret = drmm_connector_hdmi_init(drm, &hdmi->connector,
&sun4i_hdmi_connector_funcs,
&sun4i_hdmi_hdmi_connector_funcs,
DRM_MODE_CONNECTOR_HDMIA,
- hdmi->ddc_i2c,
- BIT(DRM_OUTPUT_COLOR_FORMAT_RGB444),
- 8);
+ hdmi->ddc_i2c);
if (ret) {
dev_err(dev,
"Couldn't initialise the HDMI connector\n");
--
2.55.0
^ permalink raw reply related [flat|nested] 10+ messages in thread