1 // SPDX-License-Identifier: MIT
3 #include <drm/drm_atomic.h>
4 #include <drm/drm_connector.h>
5 #include <drm/drm_edid.h>
6 #include <drm/drm_print.h>
8 #include <drm/display/drm_hdmi_audio_helper.h>
9 #include <drm/display/drm_hdmi_helper.h>
10 #include <drm/display/drm_hdmi_state_helper.h>
13 * __drm_atomic_helper_connector_hdmi_reset() - Initializes all HDMI @drm_connector_state resources
14 * @connector: DRM connector
15 * @new_conn_state: connector state to reset
17 * Initializes all HDMI resources from a @drm_connector_state without
18 * actually allocating it. This is useful for HDMI drivers, in
19 * combination with __drm_atomic_helper_connector_reset() or
20 * drm_atomic_helper_connector_reset().
22 void __drm_atomic_helper_connector_hdmi_reset(struct drm_connector *connector,
23 struct drm_connector_state *new_conn_state)
25 unsigned int max_bpc = connector->max_bpc;
27 new_conn_state->max_bpc = max_bpc;
28 new_conn_state->max_requested_bpc = max_bpc;
29 new_conn_state->hdmi.broadcast_rgb = DRM_HDMI_BROADCAST_RGB_AUTO;
31 EXPORT_SYMBOL(__drm_atomic_helper_connector_hdmi_reset);
33 static const struct drm_display_mode *
34 connector_state_get_mode(const struct drm_connector_state *conn_state)
36 struct drm_atomic_state *state;
37 struct drm_crtc_state *crtc_state;
38 struct drm_crtc *crtc;
40 state = conn_state->state;
44 crtc = conn_state->crtc;
48 crtc_state = drm_atomic_get_new_crtc_state(state, crtc);
52 return &crtc_state->mode;
55 static bool hdmi_is_limited_range(const struct drm_connector *connector,
56 const struct drm_connector_state *conn_state)
58 const struct drm_display_info *info = &connector->display_info;
59 const struct drm_display_mode *mode =
60 connector_state_get_mode(conn_state);
63 * The Broadcast RGB property only applies to RGB format, and
64 * i915 just assumes limited range for YCbCr output, so let's
67 if (conn_state->hdmi.output_format != HDMI_COLORSPACE_RGB)
70 if (conn_state->hdmi.broadcast_rgb == DRM_HDMI_BROADCAST_RGB_FULL)
73 if (conn_state->hdmi.broadcast_rgb == DRM_HDMI_BROADCAST_RGB_LIMITED)
79 return drm_default_rgb_quant_range(mode) == HDMI_QUANTIZATION_RANGE_LIMITED;
83 sink_supports_format_bpc(const struct drm_connector *connector,
84 const struct drm_display_info *info,
85 const struct drm_display_mode *mode,
86 unsigned int format, unsigned int bpc)
88 struct drm_device *dev = connector->dev;
89 u8 vic = drm_match_cea_mode(mode);
92 * CTA-861-F, section 5.4 - Color Coding & Quantization states
93 * that the bpc must be 8, 10, 12 or 16 except for the default
94 * 640x480 VIC1 where the value must be 8.
96 * The definition of default here is ambiguous but the spec
97 * refers to VIC1 being the default timing in several occasions
98 * so our understanding is that for the default timing (ie,
99 * VIC1), the bpc must be 8.
101 if (vic == 1 && bpc != 8) {
102 drm_dbg_kms(dev, "VIC1 requires a bpc of 8, got %u\n", bpc);
106 if (!info->is_hdmi &&
107 (format != HDMI_COLORSPACE_RGB || bpc != 8)) {
108 drm_dbg_kms(dev, "DVI Monitors require an RGB output at 8 bpc\n");
112 if (!(connector->hdmi.supported_formats & BIT(format))) {
113 drm_dbg_kms(dev, "%s format unsupported by the connector.\n",
114 drm_hdmi_connector_get_output_format_name(format));
119 case HDMI_COLORSPACE_RGB:
120 drm_dbg_kms(dev, "RGB Format, checking the constraints.\n");
123 * In some cases, like when the EDID readout fails, or
124 * is not an HDMI compliant EDID for some reason, the
125 * color_formats field will be blank and not report any
126 * format supported. In such a case, assume that RGB is
127 * supported so we can keep things going and light up
130 if (!(info->color_formats & DRM_COLOR_FORMAT_RGB444))
131 drm_warn(dev, "HDMI Sink doesn't support RGB, something's wrong.\n");
133 if (bpc == 10 && !(info->edid_hdmi_rgb444_dc_modes & DRM_EDID_HDMI_DC_30)) {
134 drm_dbg_kms(dev, "10 BPC but sink doesn't support Deep Color 30.\n");
138 if (bpc == 12 && !(info->edid_hdmi_rgb444_dc_modes & DRM_EDID_HDMI_DC_36)) {
139 drm_dbg_kms(dev, "12 BPC but sink doesn't support Deep Color 36.\n");
143 drm_dbg_kms(dev, "RGB format supported in that configuration.\n");
147 case HDMI_COLORSPACE_YUV420:
148 /* TODO: YUV420 is unsupported at the moment. */
149 drm_dbg_kms(dev, "YUV420 format isn't supported yet.\n");
152 case HDMI_COLORSPACE_YUV422:
153 drm_dbg_kms(dev, "YUV422 format, checking the constraints.\n");
155 if (!(info->color_formats & DRM_COLOR_FORMAT_YCBCR422)) {
156 drm_dbg_kms(dev, "Sink doesn't support YUV422.\n");
161 drm_dbg_kms(dev, "YUV422 only supports 12 bpc or lower.\n");
166 * HDMI Spec 1.3 - Section 6.5 Pixel Encodings and Color Depth
167 * states that Deep Color is not relevant for YUV422 so we
168 * don't need to check the Deep Color bits in the EDIDs here.
171 drm_dbg_kms(dev, "YUV422 format supported in that configuration.\n");
175 case HDMI_COLORSPACE_YUV444:
176 drm_dbg_kms(dev, "YUV444 format, checking the constraints.\n");
178 if (!(info->color_formats & DRM_COLOR_FORMAT_YCBCR444)) {
179 drm_dbg_kms(dev, "Sink doesn't support YUV444.\n");
183 if (bpc == 10 && !(info->edid_hdmi_ycbcr444_dc_modes & DRM_EDID_HDMI_DC_30)) {
184 drm_dbg_kms(dev, "10 BPC but sink doesn't support Deep Color 30.\n");
188 if (bpc == 12 && !(info->edid_hdmi_ycbcr444_dc_modes & DRM_EDID_HDMI_DC_36)) {
189 drm_dbg_kms(dev, "12 BPC but sink doesn't support Deep Color 36.\n");
193 drm_dbg_kms(dev, "YUV444 format supported in that configuration.\n");
198 drm_dbg_kms(dev, "Unsupported pixel format.\n");
202 static enum drm_mode_status
203 hdmi_clock_valid(const struct drm_connector *connector,
204 const struct drm_display_mode *mode,
205 unsigned long long clock)
207 const struct drm_connector_hdmi_funcs *funcs = connector->hdmi.funcs;
208 const struct drm_display_info *info = &connector->display_info;
210 if (info->max_tmds_clock && clock > info->max_tmds_clock * 1000)
211 return MODE_CLOCK_HIGH;
213 if (funcs && funcs->tmds_char_rate_valid) {
214 enum drm_mode_status status;
216 status = funcs->tmds_char_rate_valid(connector, mode, clock);
217 if (status != MODE_OK)
225 hdmi_compute_clock(const struct drm_connector *connector,
226 struct drm_connector_state *conn_state,
227 const struct drm_display_mode *mode,
228 unsigned int bpc, enum hdmi_colorspace fmt)
230 enum drm_mode_status status;
231 unsigned long long clock;
233 clock = drm_hdmi_compute_mode_clock(mode, bpc, fmt);
237 status = hdmi_clock_valid(connector, mode, clock);
238 if (status != MODE_OK)
241 conn_state->hdmi.tmds_char_rate = clock;
247 hdmi_try_format_bpc(const struct drm_connector *connector,
248 struct drm_connector_state *conn_state,
249 const struct drm_display_mode *mode,
250 unsigned int bpc, enum hdmi_colorspace fmt)
252 const struct drm_display_info *info = &connector->display_info;
253 struct drm_device *dev = connector->dev;
256 drm_dbg_kms(dev, "Trying %s output format\n",
257 drm_hdmi_connector_get_output_format_name(fmt));
259 if (!sink_supports_format_bpc(connector, info, mode, fmt, bpc)) {
260 drm_dbg_kms(dev, "%s output format not supported with %u bpc\n",
261 drm_hdmi_connector_get_output_format_name(fmt),
266 ret = hdmi_compute_clock(connector, conn_state, mode, bpc, fmt);
268 drm_dbg_kms(dev, "Couldn't compute clock for %s output format and %u bpc\n",
269 drm_hdmi_connector_get_output_format_name(fmt),
274 drm_dbg_kms(dev, "%s output format supported with %u (TMDS char rate: %llu Hz)\n",
275 drm_hdmi_connector_get_output_format_name(fmt),
276 bpc, conn_state->hdmi.tmds_char_rate);
282 hdmi_compute_format(const struct drm_connector *connector,
283 struct drm_connector_state *conn_state,
284 const struct drm_display_mode *mode,
287 struct drm_device *dev = connector->dev;
290 * TODO: Add support for YCbCr420 output for HDMI 2.0 capable
291 * devices, for modes that only support YCbCr420.
293 if (hdmi_try_format_bpc(connector, conn_state, mode, bpc, HDMI_COLORSPACE_RGB)) {
294 conn_state->hdmi.output_format = HDMI_COLORSPACE_RGB;
298 drm_dbg_kms(dev, "Failed. No Format Supported for that bpc count.\n");
304 hdmi_compute_config(const struct drm_connector *connector,
305 struct drm_connector_state *conn_state,
306 const struct drm_display_mode *mode)
308 struct drm_device *dev = connector->dev;
309 unsigned int max_bpc = clamp_t(unsigned int,
311 8, connector->max_bpc);
315 for (bpc = max_bpc; bpc >= 8; bpc -= 2) {
316 drm_dbg_kms(dev, "Trying with a %d bpc output\n", bpc);
318 ret = hdmi_compute_format(connector, conn_state, mode, bpc);
322 conn_state->hdmi.output_bpc = bpc;
325 "Mode %ux%u @ %uHz: Found configuration: bpc: %u, fmt: %s, clock: %llu\n",
326 mode->hdisplay, mode->vdisplay, drm_mode_vrefresh(mode),
327 conn_state->hdmi.output_bpc,
328 drm_hdmi_connector_get_output_format_name(conn_state->hdmi.output_format),
329 conn_state->hdmi.tmds_char_rate);
337 static int hdmi_generate_avi_infoframe(const struct drm_connector *connector,
338 struct drm_connector_state *conn_state)
340 const struct drm_display_mode *mode =
341 connector_state_get_mode(conn_state);
342 struct drm_connector_hdmi_infoframe *infoframe =
343 &conn_state->hdmi.infoframes.avi;
344 struct hdmi_avi_infoframe *frame =
345 &infoframe->data.avi;
346 bool is_limited_range = conn_state->hdmi.is_limited_range;
347 enum hdmi_quantization_range rgb_quant_range =
348 is_limited_range ? HDMI_QUANTIZATION_RANGE_LIMITED : HDMI_QUANTIZATION_RANGE_FULL;
351 infoframe->set = false;
353 ret = drm_hdmi_avi_infoframe_from_display_mode(frame, connector, mode);
357 frame->colorspace = conn_state->hdmi.output_format;
360 * FIXME: drm_hdmi_avi_infoframe_quant_range() doesn't handle
361 * YUV formats at all at the moment, so if we ever support YUV
362 * formats this needs to be revised.
364 drm_hdmi_avi_infoframe_quant_range(frame, connector, mode, rgb_quant_range);
365 drm_hdmi_avi_infoframe_colorimetry(frame, conn_state);
366 drm_hdmi_avi_infoframe_bars(frame, conn_state);
368 infoframe->set = true;
373 static int hdmi_generate_spd_infoframe(const struct drm_connector *connector,
374 struct drm_connector_state *conn_state)
376 struct drm_connector_hdmi_infoframe *infoframe =
377 &conn_state->hdmi.infoframes.spd;
378 struct hdmi_spd_infoframe *frame =
379 &infoframe->data.spd;
382 infoframe->set = false;
384 ret = hdmi_spd_infoframe_init(frame,
385 connector->hdmi.vendor,
386 connector->hdmi.product);
390 frame->sdi = HDMI_SPD_SDI_PC;
392 infoframe->set = true;
397 static int hdmi_generate_hdr_infoframe(const struct drm_connector *connector,
398 struct drm_connector_state *conn_state)
400 struct drm_connector_hdmi_infoframe *infoframe =
401 &conn_state->hdmi.infoframes.hdr_drm;
402 struct hdmi_drm_infoframe *frame =
403 &infoframe->data.drm;
406 infoframe->set = false;
408 if (connector->max_bpc < 10)
411 if (!conn_state->hdr_output_metadata)
414 ret = drm_hdmi_infoframe_set_hdr_metadata(frame, conn_state);
418 infoframe->set = true;
423 static int hdmi_generate_hdmi_vendor_infoframe(const struct drm_connector *connector,
424 struct drm_connector_state *conn_state)
426 const struct drm_display_info *info = &connector->display_info;
427 const struct drm_display_mode *mode =
428 connector_state_get_mode(conn_state);
429 struct drm_connector_hdmi_infoframe *infoframe =
430 &conn_state->hdmi.infoframes.hdmi;
431 struct hdmi_vendor_infoframe *frame =
432 &infoframe->data.vendor.hdmi;
435 infoframe->set = false;
437 if (!info->has_hdmi_infoframe)
440 ret = drm_hdmi_vendor_infoframe_from_display_mode(frame, connector, mode);
444 infoframe->set = true;
450 hdmi_generate_infoframes(const struct drm_connector *connector,
451 struct drm_connector_state *conn_state)
453 const struct drm_display_info *info = &connector->display_info;
459 ret = hdmi_generate_avi_infoframe(connector, conn_state);
463 ret = hdmi_generate_spd_infoframe(connector, conn_state);
468 * Audio Infoframes will be generated by ALSA, and updated by
469 * drm_atomic_helper_connector_hdmi_update_audio_infoframe().
472 ret = hdmi_generate_hdr_infoframe(connector, conn_state);
476 ret = hdmi_generate_hdmi_vendor_infoframe(connector, conn_state);
484 * drm_atomic_helper_connector_hdmi_check() - Helper to check HDMI connector atomic state
485 * @connector: DRM Connector
486 * @state: the DRM State object
488 * Provides a default connector state check handler for HDMI connectors.
489 * Checks that a desired connector update is valid, and updates various
490 * fields of derived state.
493 * Zero on success, or an errno code otherwise.
495 int drm_atomic_helper_connector_hdmi_check(struct drm_connector *connector,
496 struct drm_atomic_state *state)
498 struct drm_connector_state *old_conn_state =
499 drm_atomic_get_old_connector_state(state, connector);
500 struct drm_connector_state *new_conn_state =
501 drm_atomic_get_new_connector_state(state, connector);
502 const struct drm_display_mode *mode =
503 connector_state_get_mode(new_conn_state);
506 if (!new_conn_state->crtc || !new_conn_state->best_encoder)
509 new_conn_state->hdmi.is_limited_range = hdmi_is_limited_range(connector, new_conn_state);
511 ret = hdmi_compute_config(connector, new_conn_state, mode);
515 ret = hdmi_generate_infoframes(connector, new_conn_state);
519 if (old_conn_state->hdmi.broadcast_rgb != new_conn_state->hdmi.broadcast_rgb ||
520 old_conn_state->hdmi.output_bpc != new_conn_state->hdmi.output_bpc ||
521 old_conn_state->hdmi.output_format != new_conn_state->hdmi.output_format) {
522 struct drm_crtc *crtc = new_conn_state->crtc;
523 struct drm_crtc_state *crtc_state;
525 crtc_state = drm_atomic_get_crtc_state(state, crtc);
526 if (IS_ERR(crtc_state))
527 return PTR_ERR(crtc_state);
529 crtc_state->mode_changed = true;
534 EXPORT_SYMBOL(drm_atomic_helper_connector_hdmi_check);
537 * drm_hdmi_connector_mode_valid() - Check if mode is valid for HDMI connector
538 * @connector: DRM connector to validate the mode
539 * @mode: Display mode to validate
541 * Generic .mode_valid implementation for HDMI connectors.
544 drm_hdmi_connector_mode_valid(struct drm_connector *connector,
545 struct drm_display_mode *mode)
547 unsigned long long clock;
549 clock = drm_hdmi_compute_mode_clock(mode, 8, HDMI_COLORSPACE_RGB);
553 return hdmi_clock_valid(connector, mode, clock);
555 EXPORT_SYMBOL(drm_hdmi_connector_mode_valid);
557 static int clear_device_infoframe(struct drm_connector *connector,
558 enum hdmi_infoframe_type type)
560 const struct drm_connector_hdmi_funcs *funcs = connector->hdmi.funcs;
561 struct drm_device *dev = connector->dev;
564 drm_dbg_kms(dev, "Clearing infoframe type 0x%x\n", type);
566 if (!funcs || !funcs->clear_infoframe) {
567 drm_dbg_kms(dev, "Function not implemented, bailing.\n");
571 ret = funcs->clear_infoframe(connector, type);
573 drm_dbg_kms(dev, "Call failed: %d\n", ret);
580 static int clear_infoframe(struct drm_connector *connector,
581 struct drm_connector_hdmi_infoframe *old_frame)
585 ret = clear_device_infoframe(connector, old_frame->data.any.type);
592 static int write_device_infoframe(struct drm_connector *connector,
593 union hdmi_infoframe *frame)
595 const struct drm_connector_hdmi_funcs *funcs = connector->hdmi.funcs;
596 struct drm_device *dev = connector->dev;
597 u8 buffer[HDMI_INFOFRAME_SIZE(MAX)];
601 drm_dbg_kms(dev, "Writing infoframe type %x\n", frame->any.type);
603 if (!funcs || !funcs->write_infoframe) {
604 drm_dbg_kms(dev, "Function not implemented, bailing.\n");
608 len = hdmi_infoframe_pack(frame, buffer, sizeof(buffer));
612 ret = funcs->write_infoframe(connector, frame->any.type, buffer, len);
614 drm_dbg_kms(dev, "Call failed: %d\n", ret);
621 static int write_infoframe(struct drm_connector *connector,
622 struct drm_connector_hdmi_infoframe *new_frame)
626 ret = write_device_infoframe(connector, &new_frame->data);
633 static int write_or_clear_infoframe(struct drm_connector *connector,
634 struct drm_connector_hdmi_infoframe *old_frame,
635 struct drm_connector_hdmi_infoframe *new_frame)
638 return write_infoframe(connector, new_frame);
640 if (old_frame->set && !new_frame->set)
641 return clear_infoframe(connector, old_frame);
647 * drm_atomic_helper_connector_hdmi_update_infoframes - Update the Infoframes
648 * @connector: A pointer to the HDMI connector
649 * @state: The HDMI connector state to generate the infoframe from
651 * This function is meant for HDMI connector drivers to write their
652 * infoframes. It will typically be used in a
653 * @drm_connector_helper_funcs.atomic_enable implementation.
656 * Zero on success, error code on failure.
658 int drm_atomic_helper_connector_hdmi_update_infoframes(struct drm_connector *connector,
659 struct drm_atomic_state *state)
661 struct drm_connector_state *old_conn_state =
662 drm_atomic_get_old_connector_state(state, connector);
663 struct drm_connector_state *new_conn_state =
664 drm_atomic_get_new_connector_state(state, connector);
665 struct drm_display_info *info = &connector->display_info;
671 mutex_lock(&connector->hdmi.infoframes.lock);
673 ret = write_or_clear_infoframe(connector,
674 &old_conn_state->hdmi.infoframes.avi,
675 &new_conn_state->hdmi.infoframes.avi);
679 if (connector->hdmi.infoframes.audio.set) {
680 ret = write_infoframe(connector,
681 &connector->hdmi.infoframes.audio);
686 ret = write_or_clear_infoframe(connector,
687 &old_conn_state->hdmi.infoframes.hdr_drm,
688 &new_conn_state->hdmi.infoframes.hdr_drm);
692 ret = write_or_clear_infoframe(connector,
693 &old_conn_state->hdmi.infoframes.spd,
694 &new_conn_state->hdmi.infoframes.spd);
698 if (info->has_hdmi_infoframe) {
699 ret = write_or_clear_infoframe(connector,
700 &old_conn_state->hdmi.infoframes.hdmi,
701 &new_conn_state->hdmi.infoframes.hdmi);
707 mutex_unlock(&connector->hdmi.infoframes.lock);
710 EXPORT_SYMBOL(drm_atomic_helper_connector_hdmi_update_infoframes);
713 * drm_atomic_helper_connector_hdmi_update_audio_infoframe - Update the Audio Infoframe
714 * @connector: A pointer to the HDMI connector
715 * @frame: A pointer to the audio infoframe to write
717 * This function is meant for HDMI connector drivers to update their
718 * audio infoframe. It will typically be used in one of the ALSA hooks
719 * (most likely prepare).
722 * Zero on success, error code on failure.
725 drm_atomic_helper_connector_hdmi_update_audio_infoframe(struct drm_connector *connector,
726 struct hdmi_audio_infoframe *frame)
728 struct drm_connector_hdmi_infoframe *infoframe =
729 &connector->hdmi.infoframes.audio;
730 struct drm_display_info *info = &connector->display_info;
736 mutex_lock(&connector->hdmi.infoframes.lock);
738 memcpy(&infoframe->data, frame, sizeof(infoframe->data));
739 infoframe->set = true;
741 ret = write_infoframe(connector, infoframe);
743 mutex_unlock(&connector->hdmi.infoframes.lock);
747 EXPORT_SYMBOL(drm_atomic_helper_connector_hdmi_update_audio_infoframe);
750 * drm_atomic_helper_connector_hdmi_clear_audio_infoframe - Stop sending the Audio Infoframe
751 * @connector: A pointer to the HDMI connector
753 * This function is meant for HDMI connector drivers to stop sending their
754 * audio infoframe. It will typically be used in one of the ALSA hooks
755 * (most likely shutdown).
758 * Zero on success, error code on failure.
761 drm_atomic_helper_connector_hdmi_clear_audio_infoframe(struct drm_connector *connector)
763 struct drm_connector_hdmi_infoframe *infoframe =
764 &connector->hdmi.infoframes.audio;
765 struct drm_display_info *info = &connector->display_info;
771 mutex_lock(&connector->hdmi.infoframes.lock);
773 infoframe->set = false;
775 ret = clear_infoframe(connector, infoframe);
777 memset(&infoframe->data, 0, sizeof(infoframe->data));
779 mutex_unlock(&connector->hdmi.infoframes.lock);
783 EXPORT_SYMBOL(drm_atomic_helper_connector_hdmi_clear_audio_infoframe);
786 drm_atomic_helper_connector_hdmi_update(struct drm_connector *connector,
787 enum drm_connector_status status)
789 const struct drm_edid *drm_edid;
791 if (status == connector_status_disconnected) {
792 // TODO: also handle CEC and scramber, HDMI sink disconnected.
793 drm_connector_hdmi_audio_plugged_notify(connector, false);
794 drm_edid_connector_update(connector, NULL);
798 if (connector->hdmi.funcs->read_edid)
799 drm_edid = connector->hdmi.funcs->read_edid(connector);
801 drm_edid = drm_edid_read(connector);
803 drm_edid_connector_update(connector, drm_edid);
805 drm_edid_free(drm_edid);
807 if (status == connector_status_connected) {
808 // TODO: also handle CEC and scramber, HDMI sink is now connected.
809 drm_connector_hdmi_audio_plugged_notify(connector, true);
814 * drm_atomic_helper_connector_hdmi_hotplug - Handle the hotplug event for the HDMI connector
815 * @connector: A pointer to the HDMI connector
816 * @status: Connection status
818 * This function should be called as a part of the .detect() / .detect_ctx()
819 * callbacks, updating the HDMI-specific connector's data.
821 void drm_atomic_helper_connector_hdmi_hotplug(struct drm_connector *connector,
822 enum drm_connector_status status)
824 drm_atomic_helper_connector_hdmi_update(connector, status);
826 EXPORT_SYMBOL(drm_atomic_helper_connector_hdmi_hotplug);
829 * drm_atomic_helper_connector_hdmi_force - HDMI Connector implementation of the force callback
830 * @connector: A pointer to the HDMI connector
832 * This function implements the .force() callback for the HDMI connectors. It
833 * can either be used directly as the callback or should be called from within
834 * the .force() callback implementation to maintain the HDMI-specific
837 void drm_atomic_helper_connector_hdmi_force(struct drm_connector *connector)
839 drm_atomic_helper_connector_hdmi_update(connector, connector->status);
841 EXPORT_SYMBOL(drm_atomic_helper_connector_hdmi_force);