Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

drm/connector: make clear_infoframe callback mandatory for HDMI connectors

We already require both hdmi_write_infoframe and hdmi_clear_infoframe
for bridges implementing DRM_BRIDGE_OP_HDMI. It makes sense to require
the clear_infoframes callback for HDMI connectors utilizing
drmm_connector_hdmi_init().

Acked-by: Maxime Ripard <mripard@kernel.org>
Link: https://patch.msgid.link/20260107-limit-infoframes-2-v4-4-213d0d3bd490@oss.qualcomm.com
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>

+42 -1
+4
drivers/gpu/drm/drm_connector.c
··· 600 600 if (!(max_bpc == 8 || max_bpc == 10 || max_bpc == 12)) 601 601 return -EINVAL; 602 602 603 + if (!hdmi_funcs->clear_infoframe || 604 + !hdmi_funcs->write_infoframe) 605 + return -EINVAL; 606 + 603 607 ret = drmm_connector_init(dev, connector, funcs, connector_type, ddc); 604 608 if (ret) 605 609 return ret;
+15
drivers/gpu/drm/tests/drm_connector_test.c
··· 25 25 struct i2c_adapter ddc; 26 26 }; 27 27 28 + static int accept_infoframe_clear_infoframe(struct drm_connector *connector, 29 + enum hdmi_infoframe_type type) 30 + { 31 + return 0; 32 + } 33 + 34 + static int accept_infoframe_write_infoframe(struct drm_connector *connector, 35 + enum hdmi_infoframe_type type, 36 + const u8 *buffer, size_t len) 37 + { 38 + return 0; 39 + } 40 + 28 41 static const struct drm_connector_hdmi_funcs dummy_hdmi_funcs = { 42 + .clear_infoframe = accept_infoframe_clear_infoframe, 43 + .write_infoframe = accept_infoframe_write_infoframe, 29 44 }; 30 45 31 46 static const struct drm_connector_funcs dummy_funcs = {
+22
drivers/gpu/drm/tests/drm_hdmi_state_helper_test.c
··· 78 78 return ret; 79 79 } 80 80 81 + static int accept_infoframe_clear_infoframe(struct drm_connector *connector, 82 + enum hdmi_infoframe_type type) 83 + { 84 + return 0; 85 + } 86 + 87 + static int accept_infoframe_write_infoframe(struct drm_connector *connector, 88 + enum hdmi_infoframe_type type, 89 + const u8 *buffer, size_t len) 90 + { 91 + return 0; 92 + } 93 + 81 94 static const struct drm_connector_hdmi_funcs dummy_connector_hdmi_funcs = { 95 + .clear_infoframe = accept_infoframe_clear_infoframe, 96 + .write_infoframe = accept_infoframe_write_infoframe, 82 97 }; 83 98 84 99 static enum drm_mode_status ··· 106 91 107 92 static const struct drm_connector_hdmi_funcs reject_connector_hdmi_funcs = { 108 93 .tmds_char_rate_valid = reject_connector_tmds_char_rate_valid, 94 + .clear_infoframe = accept_infoframe_clear_infoframe, 95 + .write_infoframe = accept_infoframe_write_infoframe, 109 96 }; 110 97 111 98 static enum drm_mode_status ··· 120 103 121 104 static const struct drm_connector_hdmi_funcs reject_100mhz_connector_hdmi_funcs = { 122 105 .tmds_char_rate_valid = reject_100mhz_connector_tmds_char_rate_valid, 106 + .clear_infoframe = accept_infoframe_clear_infoframe, 107 + .write_infoframe = accept_infoframe_write_infoframe, 123 108 }; 124 109 125 110 static int dummy_connector_get_modes(struct drm_connector *connector) ··· 2460 2441 } 2461 2442 2462 2443 static const struct drm_connector_hdmi_funcs reject_avi_infoframe_hdmi_funcs = { 2444 + .clear_infoframe = accept_infoframe_clear_infoframe, 2463 2445 .write_infoframe = reject_avi_infoframe_write_infoframe, 2464 2446 }; 2465 2447 ··· 2563 2543 } 2564 2544 2565 2545 static const struct drm_connector_hdmi_funcs reject_hdr_infoframe_hdmi_funcs = { 2546 + .clear_infoframe = accept_infoframe_clear_infoframe, 2566 2547 .write_infoframe = reject_hdr_infoframe_write_infoframe, 2567 2548 }; 2568 2549 ··· 2811 2790 } 2812 2791 2813 2792 static const struct drm_connector_hdmi_funcs reject_audio_infoframe_hdmi_funcs = { 2793 + .clear_infoframe = accept_infoframe_clear_infoframe, 2814 2794 .write_infoframe = reject_audio_infoframe_write_infoframe, 2815 2795 }; 2816 2796
+1 -1
include/drm/drm_connector.h
··· 1253 1253 * called multiple times, once for every disabled infoframe 1254 1254 * type. 1255 1255 * 1256 - * The @clear_infoframe callback is optional. 1256 + * The @clear_infoframe callback is mandatory. 1257 1257 * 1258 1258 * Returns: 1259 1259 * 0 on success, a negative error code otherwise