Linux-ARM-Kernel Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
To: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Cc: "Maarten Lankhorst" <maarten.lankhorst@linux.intel.com>,
	"Maxime Ripard" <mripard@kernel.org>,
	"Thomas Zimmermann" <tzimmermann@suse.de>,
	"David Airlie" <airlied@gmail.com>,
	"Simona Vetter" <simona@ffwll.ch>,
	"Andrzej Hajda" <andrzej.hajda@intel.com>,
	"Neil Armstrong" <neil.armstrong@linaro.org>,
	"Robert Foss" <rfoss@kernel.org>,
	"Laurent Pinchart" <Laurent.pinchart@ideasonboard.com>,
	"Jonas Karlman" <jonas@kwiboo.se>,
	"Jernej Skrabec" <jernej.skrabec@gmail.com>,
	"Luca Ceresoli" <luca.ceresoli@bootlin.com>,
	"Sandy Huang" <hjc@rock-chips.com>,
	"Heiko Stübner" <heiko@sntech.de>,
	"Andy Yan" <andy.yan@rock-chips.com>,
	"Daniel Stone" <daniels@collabora.com>,
	"Dave Stevenson" <dave.stevenson@raspberrypi.com>,
	"Maíra Canal" <mcanal@igalia.com>,
	"Raspberry Pi Kernel Maintenance" <kernel-list@raspberrypi.com>,
	kernel@collabora.com, dri-devel@lists.freedesktop.org,
	linux-kernel@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-rockchip@lists.infradead.org
Subject: Re: [PATCH v8 02/39] drm/connector: Add caps-based HDMI connector init helper
Date: Fri, 3 Jul 2026 22:31:55 +0300	[thread overview]
Message-ID: <ad75cf26-9437-47d0-864d-d71263401615@collabora.com> (raw)
In-Reply-To: <i4tjtsf5rsckfcayo5nuhlger5wqxn3ujeaubm4g2fgrwvhzb2@hf4uhgq3ja5p>

Hi Dmitry,

Thanks for your quick review!

On 7/3/26 5:05 PM, Dmitry Baryshkov wrote:
> On Thu, Jul 02, 2026 at 05:46:15PM +0300, Cristian Ciocaltea wrote:
>> In preparation for adding HDMI 2.x source capabilities, introduce struct
>> drm_connector_hdmi_caps and a new drmm_connector_hdmi_init_with_caps()
>> helper.
>>
>> The existing drmm_connector_hdmi_init() helper currently takes
>> individual capability arguments such as supported_formats and max_bpc.
>> Adding more HDMI-specific arguments to that function would not scale
>> well, so move those values into a dedicated capabilities structure and
>> implement the existing helper as a wrapper around the new caps-based
>> interface.
> 
> I think, it was an intention of Maxime: make sure that every driver is
> forced to provide some values here. With the struct-based init it is
> easy to overlook or to ommit a value.

Agreed that the struct-based init loses the compile-time guarantee that every
argument is explicitly provided - that's a real downside.  

I'd argue it's recoverable, though: the init helper validates the mandatory
fields, so a driver that omits a required value gets rejected at init time
rather than silently misconfigured.  The "you must provide sane values" property
is expected to be preserved, just enforced at runtime instead of by the
compiler. 

The main motivation for the struct is scalability/maintainability as we add HDMI
2.x capabilities: new fields go into the struct rather than growing the helper's
argument list, so existing callers don't need churny signature updates on every
extension.

FWIW, in the previous revision we discussed addressing the concern with a
callback instead.  Sadly, I had to discard that approach, as it proved not
flexible enough, e.g. drm_bridge_connector_init() computes caps dynamically, and
would have required either stateful callbacks, or storing redundant/temporary
cap data in driver-private structures just to satisfy the callback.

>>
>> Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
>> ---
>>  drivers/gpu/drm/drm_connector.c | 202 +++++++++++++++++++++++++++-------------
>>  include/drm/drm_connector.h     |  55 +++++++++++
>>  2 files changed, 193 insertions(+), 64 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
>> index 8b4baed060f3..c7ce6b7bd8b0 100644
>> --- a/drivers/gpu/drm/drm_connector.c
>> +++ b/drivers/gpu/drm/drm_connector.c
>> @@ -542,6 +542,137 @@ int drmm_connector_init(struct drm_device *dev,
>>  }
>>  EXPORT_SYMBOL(drmm_connector_init);
>>  
>> +/**
>> + * drmm_connector_hdmi_init_with_caps - Init a preallocated HDMI connector
>> + * @dev: DRM device
>> + * @connector: A pointer to the HDMI connector to init
>> + * @vendor: HDMI Controller Vendor name
>> + * @product: HDMI Controller Product name
>> + * @funcs: callbacks for this connector
>> + * @hdmi_funcs: HDMI-related callbacks for this connector
>> + * @connector_type: user visible type of the connector
>> + * @ddc: optional pointer to the associated ddc adapter
>> + * @caps: optional HDMI connector capabilities
>> + *
>> + * Initialises a preallocated HDMI connector. Connectors can be
>> + * subclassed as part of driver connector objects.
>> + *
>> + * Cleanup is automatically handled with a call to
>> + * drm_connector_cleanup() in a DRM-managed action.
>> + *
>> + * The connector structure should be allocated with drmm_kzalloc().
>> + *
>> + * The @drm_connector_funcs.destroy hook must be NULL.
>> + *
>> + * Returns:
>> + * Zero on success, error code on failure.
>> + */
>> +int drmm_connector_hdmi_init_with_caps(struct drm_device *dev,
>> +				       struct drm_connector *connector,
>> +				       const char *vendor, const char *product,
>> +				       const struct drm_connector_funcs *funcs,
>> +				       const struct drm_connector_hdmi_funcs *hdmi_funcs,
>> +				       int connector_type,
>> +				       struct i2c_adapter *ddc,
>> +				       const struct drm_connector_hdmi_caps *caps)
>> +{
>> +	int ret;
>> +
>> +	if (!vendor || !product)
>> +		return -EINVAL;
>> +
>> +	if ((strlen(vendor) > DRM_CONNECTOR_HDMI_VENDOR_LEN) ||
>> +	    (strlen(product) > DRM_CONNECTOR_HDMI_PRODUCT_LEN))
>> +		return -EINVAL;
>> +
>> +	if (!(connector_type == DRM_MODE_CONNECTOR_HDMIA ||
>> +	      connector_type == DRM_MODE_CONNECTOR_HDMIB))
>> +		return -EINVAL;
>> +
>> +	if (!caps)
>> +		return -EINVAL;
>> +
>> +	if (!caps->supported_formats ||
>> +	    !(caps->supported_formats & BIT(DRM_OUTPUT_COLOR_FORMAT_RGB444)))
>> +		return -EINVAL;
>> +
>> +	if (connector->ycbcr_420_allowed !=
>> +	    !!(caps->supported_formats & BIT(DRM_OUTPUT_COLOR_FORMAT_YCBCR420)))
>> +		return -EINVAL;
>> +
>> +	if (!(caps->max_bpc == 8 || caps->max_bpc == 10 || caps->max_bpc == 12))
>> +		return -EINVAL;
>> +
>> +	if (!hdmi_funcs->avi.clear_infoframe ||
>> +	    !hdmi_funcs->avi.write_infoframe ||
>> +	    !hdmi_funcs->hdmi.clear_infoframe ||
>> +	    !hdmi_funcs->hdmi.write_infoframe)
>> +		return -EINVAL;
>> +
>> +	ret = drmm_connector_init(dev, connector, funcs, connector_type, ddc);
>> +	if (ret)
>> +		return ret;
>> +
>> +	connector->hdmi.supported_formats = caps->supported_formats;
>> +
>> +	/*
>> +	 * The supported HDMI version can be used to infer the maximum TMDS
>> +	 * character rate allowed by the specification. Some controllers,
>> +	 * however, may support a lower rate than that version would imply.
>> +	 *
>> +	 * A non-zero caps->max_tmds_char_rate lets drivers override the
>> +	 * inferred limit with the actual controller capability. A value of
>> +	 * zero keeps the default limit inferred from supported_hdmi_ver.
>> +	 */
>> +	if (caps->supported_hdmi_ver >= HDMI_VERSION_2_0)
>> +		connector->hdmi.max_tmds_char_rate = HDMI_2_0_TMDS_CHAR_RATE_MAX_HZ;
>> +	else if (caps->supported_hdmi_ver >= HDMI_VERSION_1_3)
>> +		connector->hdmi.max_tmds_char_rate = HDMI_1_3_TMDS_CHAR_RATE_MAX_HZ;
>> +	else if (caps->supported_hdmi_ver >= HDMI_VERSION_1_0)
>> +		connector->hdmi.max_tmds_char_rate = HDMI_1_0_TMDS_CHAR_RATE_MAX_HZ;
>> +
>> +	if (caps->max_tmds_char_rate) {
>> +		if (caps->max_tmds_char_rate > connector->hdmi.max_tmds_char_rate)
>> +			return -EINVAL;
>> +		connector->hdmi.max_tmds_char_rate = caps->max_tmds_char_rate;
>> +	}
> 
> Here I'd totally suggest something simpler:
> 
> if (!caps->max_tmds_char_rate) {
> 	if (caps->supported_hdmi_ver >= HDMI_VERSION_2_0)
> 		connector->hdmi.max_tmds_char_rate = HDMI_2_0_TMDS_CHAR_RATE_MAX_HZ;
> 	else if (caps->supported_hdmi_ver >= HDMI_VERSION_1_3)
> 		connector->hdmi.max_tmds_char_rate = HDMI_1_3_TMDS_CHAR_RATE_MAX_HZ;
> 	else if (caps->supported_hdmi_ver >= HDMI_VERSION_1_0)
> 		connector->hdmi.max_tmds_char_rate = HDMI_1_0_TMDS_CHAR_RATE_MAX_HZ;
> }

My intention was to check that a driver-supplied caps->max_tmds_char_rate
doesn't exceed the spec-permitted maximum for the declared supported_hdmi_ver.
With the simplified form, a driver could declare e.g. HDMI 1.4 but pass a
2.0-level char rate, and we'd silently accept it.  

Also, we'd still need to handle the supplied value in the non-zero case:

} else {
    connector->hdmi.max_tmds_char_rate = caps->max_tmds_char_rate;
}

So the net reduction is smaller than it looks.

>> +
>> +	strtomem_pad(connector->hdmi.vendor, vendor, 0);
>> +	strtomem_pad(connector->hdmi.product, product, 0);
>> +
>> +	/*
>> +	 * drm_connector_attach_max_bpc_property() requires the
>> +	 * connector to have a state.
>> +	 */
>> +	if (connector->funcs->atomic_create_state) {
>> +		struct drm_connector_state *state;
>> +
>> +		state = connector->funcs->atomic_create_state(connector);
>> +		if (IS_ERR(state))
>> +			return PTR_ERR(state);
>> +
>> +		connector->state = state;
>> +	} else if (connector->funcs->reset) {
>> +		connector->funcs->reset(connector);
>> +	}
>> +
>> +	drm_connector_attach_max_bpc_property(connector, 8, caps->max_bpc);
>> +	connector->max_bpc = caps->max_bpc;
> 
> If you don't like the max_bpc argument, let's do it other way:
> 
> if (connector->max_bpc < 8)
> 	return -EINVAL;

If I follow correctly, you suggest dropping max_bpc from the caps struct and
letting drivers set connector->max_bpc before calling the init helper, leaving
the core to only do the reject. 

Also note we actually have a more restricted check above:

if (!(caps->max_bpc == 8 || caps->max_bpc == 10 || caps->max_bpc == 12))
    return -EINVAL;

I'd still keep max_bpc in the struct, assuming we can move further with the
caps approach.

> if (connector->max_bpc > 8)
> 	drm_connector_attach_hdr_output_metadata_property(connector);
> 
> 
>> +
>> +	if (caps->max_bpc > 8)
>> +		drm_connector_attach_hdr_output_metadata_property(connector);
>> +
>> +	ret = drm_connector_attach_color_format_property(connector,
>> +							 caps->supported_formats);
>> +	if (ret)
>> +		return ret;
>> +
>> +	connector->hdmi.funcs = hdmi_funcs;
>> +
>> +	return 0;
>> +}
>> +EXPORT_SYMBOL(drmm_connector_hdmi_init_with_caps);
>> +
>>  /**
>>   * drmm_connector_hdmi_init - Init a preallocated HDMI connector
>>   * @dev: DRM device
>> @@ -578,71 +709,14 @@ int drmm_connector_hdmi_init(struct drm_device *dev,
>>  			     unsigned long supported_formats,
>>  			     unsigned int max_bpc)
>>  {
>> -	int ret;
>> +	struct drm_connector_hdmi_caps caps = {
>> +		.supported_formats = supported_formats,
>> +		.max_bpc = max_bpc,
>> +	};
>>  
>> -	if (!vendor || !product)
>> -		return -EINVAL;
>> -
>> -	if ((strlen(vendor) > DRM_CONNECTOR_HDMI_VENDOR_LEN) ||
>> -	    (strlen(product) > DRM_CONNECTOR_HDMI_PRODUCT_LEN))
>> -		return -EINVAL;
>> -
>> -	if (!(connector_type == DRM_MODE_CONNECTOR_HDMIA ||
>> -	      connector_type == DRM_MODE_CONNECTOR_HDMIB))
>> -		return -EINVAL;
>> -
>> -	if (!supported_formats || !(supported_formats & BIT(DRM_OUTPUT_COLOR_FORMAT_RGB444)))
>> -		return -EINVAL;
>> -
>> -	if (connector->ycbcr_420_allowed != !!(supported_formats & BIT(DRM_OUTPUT_COLOR_FORMAT_YCBCR420)))
>> -		return -EINVAL;
>> -
>> -	if (!(max_bpc == 8 || max_bpc == 10 || max_bpc == 12))
>> -		return -EINVAL;
>> -
>> -	if (!hdmi_funcs->avi.clear_infoframe ||
>> -	    !hdmi_funcs->avi.write_infoframe ||
>> -	    !hdmi_funcs->hdmi.clear_infoframe ||
>> -	    !hdmi_funcs->hdmi.write_infoframe)
>> -		return -EINVAL;
>> -
>> -	ret = drmm_connector_init(dev, connector, funcs, connector_type, ddc);
>> -	if (ret)
>> -		return ret;
>> -
>> -	connector->hdmi.supported_formats = supported_formats;
>> -	strtomem_pad(connector->hdmi.vendor, vendor, 0);
>> -	strtomem_pad(connector->hdmi.product, product, 0);
>> -
>> -	/*
>> -	 * drm_connector_attach_max_bpc_property() requires the
>> -	 * connector to have a state.
>> -	 */
>> -	if (connector->funcs->atomic_create_state) {
>> -		struct drm_connector_state *state;
>> -
>> -		state = connector->funcs->atomic_create_state(connector);
>> -		if (IS_ERR(state))
>> -			return PTR_ERR(state);
>> -
>> -		connector->state = state;
>> -	} else if (connector->funcs->reset) {
>> -		connector->funcs->reset(connector);
>> -	}
>> -
>> -	drm_connector_attach_max_bpc_property(connector, 8, max_bpc);
>> -	connector->max_bpc = max_bpc;
>> -
>> -	if (max_bpc > 8)
>> -		drm_connector_attach_hdr_output_metadata_property(connector);
>> -
>> -	ret = drm_connector_attach_color_format_property(connector, supported_formats);
>> -	if (ret)
>> -		return ret;
>> -
>> -	connector->hdmi.funcs = hdmi_funcs;
>> -
>> -	return 0;
>> +	return drmm_connector_hdmi_init_with_caps(dev, connector, vendor,
>> +						  product, funcs, hdmi_funcs,
>> +						  connector_type, ddc, &caps);
>>  }
>>  EXPORT_SYMBOL(drmm_connector_hdmi_init);
>>  
>> diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h
>> index af075c38f4db..961a729d0869 100644
>> --- a/include/drm/drm_connector.h
>> +++ b/include/drm/drm_connector.h
>> @@ -2029,6 +2029,47 @@ struct drm_connector_hdmi_audio {
>>  	int dai_port;
>>  };
>>  
>> +/**
>> + * struct drm_connector_hdmi_caps - HDMI capabilities structure
>> + *
>> + * This structure is required to initialize the connector using
>> + * drmm_connector_hdmi_init_with_caps().
>> + */
>> +struct drm_connector_hdmi_caps {
>> +	/**
>> +	 * @supported_hdmi_ver:
>> +	 *
>> +	 * Maximum HDMI specification version supported by the controller side
>> +	 * of this connector. This describes the controller capability only;
>> +	 * the effective link capabilities may be further restricted by the
>> +	 * sink, bridge, or mode validation.
>> +	 *
>> +	 * HDMI_VERSION_UNKNOWN means legacy/default behaviour.
> 
> What would it actually mean here? Every chip has some version of HDMI
> standard it conforms to.

HDMI_VERSION_UNKNOWN only exists for the legacy drmm_connector_hdmi_init()
wrapper, which doesn't pass a version - in that case the code keeps the
pre-existing behaviour (no version-inferred TMDS limit). Once all callers
migrate to the caps-based API, supported_hdmi_ver becomes mandatory.

Given that, I'd simply drop the "legacy/default behaviour" statement, unless you
have a better suggestion.

>> +	 */
>> +	enum hdmi_version supported_hdmi_ver;
>> +
>> +	/**
>> +	 * @supported_formats:
>> +	 *
>> +	 * Bitmask of @drm_output_color_format listing supported output formats.
>> +	 */
>> +	unsigned long supported_formats;
>> +
>> +	/**
>> +	 * @max_tmds_char_rate:
>> +	 *
>> +	 * Maximum TMDS character rate supported by the source, in Hz.
>> +	 * A value of 0 means the core should use the default limit implied by
>> +	 * @supported_hdmi_ver.
>> +	 */
>> +	unsigned long long max_tmds_char_rate;
>> +
>> +	/**
>> +	 * @max_bpc: Maximum bits per char the HDMI connector supports.
>> +	 */
>> +	unsigned int max_bpc;
>> +};
>> +
>>  /*
>>   * struct drm_connector_hdmi - DRM Connector HDMI-related structure
>>   */
> 


  reply	other threads:[~2026-07-03 19:32 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-02 14:46 [PATCH v8 00/39] Add HDMI 2.0 support to DW HDMI QP TX Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 01/39] video/hdmi: Introduce HDMI version enum Cristian Ciocaltea
2026-07-03 13:55   ` Dmitry Baryshkov
2026-07-02 14:46 ` [PATCH v8 02/39] drm/connector: Add caps-based HDMI connector init helper Cristian Ciocaltea
2026-07-03 14:05   ` Dmitry Baryshkov
2026-07-03 19:31     ` Cristian Ciocaltea [this message]
2026-07-02 14:46 ` [PATCH v8 03/39] drm/display: bridge_connector: Pass HDMI capabilities through caps struct Cristian Ciocaltea
2026-07-03 14:19   ` Dmitry Baryshkov
2026-07-03 19:55     ` Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 04/39] drm/connector: Add HDMI 2.0 scrambler infrastructure Cristian Ciocaltea
2026-07-03 14:34   ` Dmitry Baryshkov
2026-07-03 20:54     ` Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 05/39] drm/display: scdc-helper: Add macro for connector-prefixed debug messages Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 06/39] drm/display: scdc-helper: Add helper to set SCDC version information Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 07/39] drm/display: hdmi: Add HDMI 2.0 scrambling management helpers Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 08/39] drm/display: hdmi: Advertise SCDC source version when scrambling Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 09/39] drm/display: hdmi-state-helper: Add fallback TMDS rate validation Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 10/39] drm/display: hdmi-state-helper: Sync SCDC state on hotplug Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 11/39] drm/display: hdmi-state-helper: Set HDMI scrambling requirement Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 12/39] drm/bridge: Remove redundant error check in drm_bridge_helper_reset_crtc() Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 13/39] drm/bridge: Add bridge ops for source-side HDMI 2.0 scrambling Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 14/39] drm/display: bridge_connector: Use cached connector status in .get_modes() Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 15/39] drm/display: bridge_connector: Switch to .detect_ctx() connector helper Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 16/39] drm/display: bridge_connector: Wire up HDMI 2.0 scrambler callbacks Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 17/39] drm/bridge: dw-hdmi-qp: Rate limit i2c read error messages Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 18/39] drm/bridge: dw-hdmi-qp: Provide .{enable|disable}_hpd() PHY ops Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 19/39] drm/bridge: dw-hdmi-qp: Add HDMI 2.0 SCDC scrambling support Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 20/39] drm/bridge: dw-hdmi-qp: Provide dw_hdmi_qp_hpd_notify() helper Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 21/39] drm/rockchip: dw_hdmi_qp: Add missing newlines in dev_err_probe() messages Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 22/39] drm/rockchip: dw_hdmi_qp: Use local dev variable consistently in bind() Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 23/39] drm/rockchip: dw_hdmi_qp: Drop unnecessary #include Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 24/39] drm/rockchip: dw_hdmi_qp: Defer HPD IRQ enable until after connector setup Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 25/39] drm/rockchip: dw_hdmi_qp: Mask RK3576 HPD IRQ in io_init Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 26/39] drm/rockchip: dw_hdmi_qp: Implement .{enable|disable}_hpd() PHY ops Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 27/39] drm/rockchip: dw_hdmi_qp: Use dw_hdmi_qp_hpd_notify() for HPD reports Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 28/39] drm/bridge: dw-hdmi-qp: Drop unused .setup_hpd() phy op Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 29/39] drm/vc4: hdmi: Use common TMDS char rate constants Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 30/39] drm/vc4: hdmi: Switch to drm_hdmi_mode_needs_scrambling() Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 31/39] drm/vc4: hdmi: Convert to common SCDC scrambling infrastructure Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 32/39] drm/tests: connector: Add HDMI caps-based init coverage Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 33/39] drm/tests: connector: Add HDMI source-side scrambler coverage Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 34/39] drm/tests: hdmi_state_helper: Use drmm_connector_hdmi_init_with_caps() Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 35/39] drm/tests: hdmi_state_helper: Add max_tmds_char_rate fallback tests Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 36/39] drm/tests: edid: Add 4K@60Hz EDID with 600MHz TMDS Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 37/39] drm/tests: hdmi_state_helper: Cover source-side scrambling decision Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 38/39] drm/tests: edid: Fix conformity for 1080p+4K YUV420 200MHz EDID Cristian Ciocaltea
2026-07-02 14:46 ` [PATCH v8 39/39] drm/tests: edid: Fix conformity for 4K RGB/YUV 340MHz EDID Cristian Ciocaltea
2026-07-02 15:31 ` [PATCH v8 00/39] Add HDMI 2.0 support to DW HDMI QP TX Cristian Ciocaltea

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ad75cf26-9437-47d0-864d-d71263401615@collabora.com \
    --to=cristian.ciocaltea@collabora.com \
    --cc=Laurent.pinchart@ideasonboard.com \
    --cc=airlied@gmail.com \
    --cc=andrzej.hajda@intel.com \
    --cc=andy.yan@rock-chips.com \
    --cc=daniels@collabora.com \
    --cc=dave.stevenson@raspberrypi.com \
    --cc=dmitry.baryshkov@oss.qualcomm.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=heiko@sntech.de \
    --cc=hjc@rock-chips.com \
    --cc=jernej.skrabec@gmail.com \
    --cc=jonas@kwiboo.se \
    --cc=kernel-list@raspberrypi.com \
    --cc=kernel@collabora.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-rockchip@lists.infradead.org \
    --cc=luca.ceresoli@bootlin.com \
    --cc=maarten.lankhorst@linux.intel.com \
    --cc=mcanal@igalia.com \
    --cc=mripard@kernel.org \
    --cc=neil.armstrong@linaro.org \
    --cc=rfoss@kernel.org \
    --cc=simona@ffwll.ch \
    --cc=tzimmermann@suse.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox