summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/tests
diff options
context:
space:
mode:
authorDmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>2026-01-07 20:15:03 +0200
committerDmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>2026-01-19 13:11:46 +0200
commite802c783be94bf71541a7e2ac8b1b5486aad10db (patch)
treef2e9e228c1c9a30d0bff4db593317bcc06c16e22 /drivers/gpu/drm/tests
parentb626b1a1c9ccadd8861870a2a450f02e0c61ab88 (diff)
drm/display: hdmi_state_helper: split InfoFrame functions per type
Havign a single set of InfoFrame callbacks doesn't provide enough information to the DRM framework about the InfoFrame types that are actually supported. Also it's not really future-proof: it provides a way to program only a single Vendor-Specific frame, however we might need to support multiple VSIs at the same time (e.g. HDMI vs HDMI Forum VSIs). Provide separate sets of callbacks, one per the InfoFrame type. Acked-by: Maxime Ripard <mripard@kernel.org> Link: https://patch.msgid.link/20260107-limit-infoframes-2-v4-6-213d0d3bd490@oss.qualcomm.com Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Diffstat (limited to 'drivers/gpu/drm/tests')
-rw-r--r--drivers/gpu/drm/tests/drm_connector_test.c14
-rw-r--r--drivers/gpu/drm/tests/drm_hdmi_state_helper_test.c102
2 files changed, 69 insertions, 47 deletions
diff --git a/drivers/gpu/drm/tests/drm_connector_test.c b/drivers/gpu/drm/tests/drm_connector_test.c
index f356ea695ae7..86860ad0861c 100644
--- a/drivers/gpu/drm/tests/drm_connector_test.c
+++ b/drivers/gpu/drm/tests/drm_connector_test.c
@@ -25,22 +25,26 @@ struct drm_connector_init_priv {
struct i2c_adapter ddc;
};
-static int accept_infoframe_clear_infoframe(struct drm_connector *connector,
- enum hdmi_infoframe_type type)
+static int accept_infoframe_clear_infoframe(struct drm_connector *connector)
{
return 0;
}
static int accept_infoframe_write_infoframe(struct drm_connector *connector,
- enum hdmi_infoframe_type type,
const u8 *buffer, size_t len)
{
return 0;
}
static const struct drm_connector_hdmi_funcs dummy_hdmi_funcs = {
- .clear_infoframe = accept_infoframe_clear_infoframe,
- .write_infoframe = accept_infoframe_write_infoframe,
+ .avi = {
+ .clear_infoframe = accept_infoframe_clear_infoframe,
+ .write_infoframe = accept_infoframe_write_infoframe,
+ },
+ .hdmi = {
+ .clear_infoframe = accept_infoframe_clear_infoframe,
+ .write_infoframe = accept_infoframe_write_infoframe,
+ },
};
static const struct drm_connector_funcs dummy_funcs = {
diff --git a/drivers/gpu/drm/tests/drm_hdmi_state_helper_test.c b/drivers/gpu/drm/tests/drm_hdmi_state_helper_test.c
index cfa14a6eb97f..1c60947a13a1 100644
--- a/drivers/gpu/drm/tests/drm_hdmi_state_helper_test.c
+++ b/drivers/gpu/drm/tests/drm_hdmi_state_helper_test.c
@@ -78,22 +78,26 @@ static int set_connector_edid(struct kunit *test, struct drm_connector *connecto
return ret;
}
-static int accept_infoframe_clear_infoframe(struct drm_connector *connector,
- enum hdmi_infoframe_type type)
+static int accept_infoframe_clear_infoframe(struct drm_connector *connector)
{
return 0;
}
static int accept_infoframe_write_infoframe(struct drm_connector *connector,
- enum hdmi_infoframe_type type,
const u8 *buffer, size_t len)
{
return 0;
}
static const struct drm_connector_hdmi_funcs dummy_connector_hdmi_funcs = {
- .clear_infoframe = accept_infoframe_clear_infoframe,
- .write_infoframe = accept_infoframe_write_infoframe,
+ .avi = {
+ .clear_infoframe = accept_infoframe_clear_infoframe,
+ .write_infoframe = accept_infoframe_write_infoframe,
+ },
+ .hdmi = {
+ .clear_infoframe = accept_infoframe_clear_infoframe,
+ .write_infoframe = accept_infoframe_write_infoframe,
+ },
};
static enum drm_mode_status
@@ -106,8 +110,14 @@ reject_connector_tmds_char_rate_valid(const struct drm_connector *connector,
static const struct drm_connector_hdmi_funcs reject_connector_hdmi_funcs = {
.tmds_char_rate_valid = reject_connector_tmds_char_rate_valid,
- .clear_infoframe = accept_infoframe_clear_infoframe,
- .write_infoframe = accept_infoframe_write_infoframe,
+ .avi = {
+ .clear_infoframe = accept_infoframe_clear_infoframe,
+ .write_infoframe = accept_infoframe_write_infoframe,
+ },
+ .hdmi = {
+ .clear_infoframe = accept_infoframe_clear_infoframe,
+ .write_infoframe = accept_infoframe_write_infoframe,
+ },
};
static enum drm_mode_status
@@ -120,8 +130,14 @@ reject_100mhz_connector_tmds_char_rate_valid(const struct drm_connector *connect
static const struct drm_connector_hdmi_funcs reject_100mhz_connector_hdmi_funcs = {
.tmds_char_rate_valid = reject_100mhz_connector_tmds_char_rate_valid,
- .clear_infoframe = accept_infoframe_clear_infoframe,
- .write_infoframe = accept_infoframe_write_infoframe,
+ .avi = {
+ .clear_infoframe = accept_infoframe_clear_infoframe,
+ .write_infoframe = accept_infoframe_write_infoframe,
+ },
+ .hdmi = {
+ .clear_infoframe = accept_infoframe_clear_infoframe,
+ .write_infoframe = accept_infoframe_write_infoframe,
+ },
};
static int dummy_connector_get_modes(struct drm_connector *connector)
@@ -2449,19 +2465,21 @@ retry_crtc_state:
drm_modeset_acquire_fini(&ctx);
}
-static int reject_avi_infoframe_write_infoframe(struct drm_connector *connector,
- enum hdmi_infoframe_type type,
- const u8 *buffer, size_t len)
+static int reject_infoframe_write_infoframe(struct drm_connector *connector,
+ const u8 *buffer, size_t len)
{
- if (type == HDMI_INFOFRAME_TYPE_AVI)
- return -EOPNOTSUPP;
-
- return 0;
+ return -EOPNOTSUPP;
}
static const struct drm_connector_hdmi_funcs reject_avi_infoframe_hdmi_funcs = {
- .clear_infoframe = accept_infoframe_clear_infoframe,
- .write_infoframe = reject_avi_infoframe_write_infoframe,
+ .avi = {
+ .clear_infoframe = accept_infoframe_clear_infoframe,
+ .write_infoframe = reject_infoframe_write_infoframe,
+ },
+ .hdmi = {
+ .clear_infoframe = accept_infoframe_clear_infoframe,
+ .write_infoframe = accept_infoframe_write_infoframe,
+ },
};
/*
@@ -2552,19 +2570,19 @@ retry_crtc_state:
drm_modeset_acquire_fini(&ctx);
}
-static int reject_hdr_infoframe_write_infoframe(struct drm_connector *connector,
- enum hdmi_infoframe_type type,
- const u8 *buffer, size_t len)
-{
- if (type == HDMI_INFOFRAME_TYPE_DRM)
- return -EOPNOTSUPP;
-
- return 0;
-}
-
static const struct drm_connector_hdmi_funcs reject_hdr_infoframe_hdmi_funcs = {
- .clear_infoframe = accept_infoframe_clear_infoframe,
- .write_infoframe = reject_hdr_infoframe_write_infoframe,
+ .avi = {
+ .clear_infoframe = accept_infoframe_clear_infoframe,
+ .write_infoframe = accept_infoframe_write_infoframe,
+ },
+ .hdmi = {
+ .clear_infoframe = accept_infoframe_clear_infoframe,
+ .write_infoframe = accept_infoframe_write_infoframe,
+ },
+ .hdr_drm = {
+ .clear_infoframe = accept_infoframe_clear_infoframe,
+ .write_infoframe = reject_infoframe_write_infoframe,
+ },
};
/*
@@ -2800,19 +2818,19 @@ retry_conn_state:
drm_modeset_acquire_fini(&ctx);
}
-static int reject_audio_infoframe_write_infoframe(struct drm_connector *connector,
- enum hdmi_infoframe_type type,
- const u8 *buffer, size_t len)
-{
- if (type == HDMI_INFOFRAME_TYPE_AUDIO)
- return -EOPNOTSUPP;
-
- return 0;
-}
-
static const struct drm_connector_hdmi_funcs reject_audio_infoframe_hdmi_funcs = {
- .clear_infoframe = accept_infoframe_clear_infoframe,
- .write_infoframe = reject_audio_infoframe_write_infoframe,
+ .avi = {
+ .clear_infoframe = accept_infoframe_clear_infoframe,
+ .write_infoframe = accept_infoframe_write_infoframe,
+ },
+ .hdmi = {
+ .clear_infoframe = accept_infoframe_clear_infoframe,
+ .write_infoframe = accept_infoframe_write_infoframe,
+ },
+ .audio = {
+ .clear_infoframe = accept_infoframe_clear_infoframe,
+ .write_infoframe = reject_infoframe_write_infoframe,
+ },
};
/*