Lines Matching full:connector

14  * @connector: DRM connector
15 * @new_conn_state: connector state to reset
22 void __drm_atomic_helper_connector_hdmi_reset(struct drm_connector *connector, in __drm_atomic_helper_connector_hdmi_reset() argument
25 unsigned int max_bpc = connector->max_bpc; in __drm_atomic_helper_connector_hdmi_reset()
55 static bool hdmi_is_limited_range(const struct drm_connector *connector, in hdmi_is_limited_range() argument
58 const struct drm_display_info *info = &connector->display_info; in hdmi_is_limited_range()
83 sink_supports_format_bpc(const struct drm_connector *connector, in sink_supports_format_bpc() argument
88 struct drm_device *dev = connector->dev; in sink_supports_format_bpc()
112 if (!(connector->hdmi.supported_formats & BIT(format))) { in sink_supports_format_bpc()
113 drm_dbg_kms(dev, "%s format unsupported by the connector.\n", in sink_supports_format_bpc()
203 hdmi_clock_valid(const struct drm_connector *connector, in hdmi_clock_valid() argument
207 const struct drm_connector_hdmi_funcs *funcs = connector->hdmi.funcs; in hdmi_clock_valid()
208 const struct drm_display_info *info = &connector->display_info; in hdmi_clock_valid()
216 status = funcs->tmds_char_rate_valid(connector, mode, clock); in hdmi_clock_valid()
225 hdmi_compute_clock(const struct drm_connector *connector, in hdmi_compute_clock() argument
237 status = hdmi_clock_valid(connector, mode, clock); in hdmi_compute_clock()
247 hdmi_try_format_bpc(const struct drm_connector *connector, in hdmi_try_format_bpc() argument
252 const struct drm_display_info *info = &connector->display_info; in hdmi_try_format_bpc()
253 struct drm_device *dev = connector->dev; in hdmi_try_format_bpc()
259 if (!sink_supports_format_bpc(connector, info, mode, fmt, bpc)) { in hdmi_try_format_bpc()
266 ret = hdmi_compute_clock(connector, conn_state, mode, bpc, fmt); in hdmi_try_format_bpc()
282 hdmi_compute_format(const struct drm_connector *connector, in hdmi_compute_format() argument
287 struct drm_device *dev = connector->dev; in hdmi_compute_format()
293 if (hdmi_try_format_bpc(connector, conn_state, mode, bpc, HDMI_COLORSPACE_RGB)) { in hdmi_compute_format()
304 hdmi_compute_config(const struct drm_connector *connector, in hdmi_compute_config() argument
308 struct drm_device *dev = connector->dev; in hdmi_compute_config()
311 8, connector->max_bpc); in hdmi_compute_config()
318 ret = hdmi_compute_format(connector, conn_state, mode, bpc); in hdmi_compute_config()
337 static int hdmi_generate_avi_infoframe(const struct drm_connector *connector, in hdmi_generate_avi_infoframe() argument
353 ret = drm_hdmi_avi_infoframe_from_display_mode(frame, connector, mode); in hdmi_generate_avi_infoframe()
364 drm_hdmi_avi_infoframe_quant_range(frame, connector, mode, rgb_quant_range); in hdmi_generate_avi_infoframe()
373 static int hdmi_generate_spd_infoframe(const struct drm_connector *connector, in hdmi_generate_spd_infoframe() argument
385 connector->hdmi.vendor, in hdmi_generate_spd_infoframe()
386 connector->hdmi.product); in hdmi_generate_spd_infoframe()
397 static int hdmi_generate_hdr_infoframe(const struct drm_connector *connector, in hdmi_generate_hdr_infoframe() argument
408 if (connector->max_bpc < 10) in hdmi_generate_hdr_infoframe()
423 static int hdmi_generate_hdmi_vendor_infoframe(const struct drm_connector *connector, in hdmi_generate_hdmi_vendor_infoframe() argument
426 const struct drm_display_info *info = &connector->display_info; in hdmi_generate_hdmi_vendor_infoframe()
440 ret = drm_hdmi_vendor_infoframe_from_display_mode(frame, connector, mode); in hdmi_generate_hdmi_vendor_infoframe()
450 hdmi_generate_infoframes(const struct drm_connector *connector, in hdmi_generate_infoframes() argument
453 const struct drm_display_info *info = &connector->display_info; in hdmi_generate_infoframes()
459 ret = hdmi_generate_avi_infoframe(connector, conn_state); in hdmi_generate_infoframes()
463 ret = hdmi_generate_spd_infoframe(connector, conn_state); in hdmi_generate_infoframes()
472 ret = hdmi_generate_hdr_infoframe(connector, conn_state); in hdmi_generate_infoframes()
476 ret = hdmi_generate_hdmi_vendor_infoframe(connector, conn_state); in hdmi_generate_infoframes()
484 * drm_atomic_helper_connector_hdmi_check() - Helper to check HDMI connector atomic state
485 * @connector: DRM Connector
488 * Provides a default connector state check handler for HDMI connectors.
489 * Checks that a desired connector update is valid, and updates various
495 int drm_atomic_helper_connector_hdmi_check(struct drm_connector *connector, in drm_atomic_helper_connector_hdmi_check() argument
499 drm_atomic_get_old_connector_state(state, connector); in drm_atomic_helper_connector_hdmi_check()
501 drm_atomic_get_new_connector_state(state, connector); in drm_atomic_helper_connector_hdmi_check()
509 new_conn_state->hdmi.is_limited_range = hdmi_is_limited_range(connector, new_conn_state); in drm_atomic_helper_connector_hdmi_check()
511 ret = hdmi_compute_config(connector, new_conn_state, mode); in drm_atomic_helper_connector_hdmi_check()
515 ret = hdmi_generate_infoframes(connector, new_conn_state); in 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
544 drm_hdmi_connector_mode_valid(struct drm_connector *connector, in drm_hdmi_connector_mode_valid() argument
553 return hdmi_clock_valid(connector, mode, clock); in drm_hdmi_connector_mode_valid()
557 static int clear_device_infoframe(struct drm_connector *connector, in clear_device_infoframe() argument
560 const struct drm_connector_hdmi_funcs *funcs = connector->hdmi.funcs; in clear_device_infoframe()
561 struct drm_device *dev = connector->dev; in clear_device_infoframe()
571 ret = funcs->clear_infoframe(connector, type); in clear_device_infoframe()
580 static int clear_infoframe(struct drm_connector *connector, in clear_infoframe() argument
585 ret = clear_device_infoframe(connector, old_frame->data.any.type); in clear_infoframe()
592 static int write_device_infoframe(struct drm_connector *connector, in write_device_infoframe() argument
595 const struct drm_connector_hdmi_funcs *funcs = connector->hdmi.funcs; in write_device_infoframe()
596 struct drm_device *dev = connector->dev; in write_device_infoframe()
612 ret = funcs->write_infoframe(connector, frame->any.type, buffer, len); in write_device_infoframe()
621 static int write_infoframe(struct drm_connector *connector, in write_infoframe() argument
626 ret = write_device_infoframe(connector, &new_frame->data); in write_infoframe()
633 static int write_or_clear_infoframe(struct drm_connector *connector, in write_or_clear_infoframe() argument
638 return write_infoframe(connector, new_frame); in write_or_clear_infoframe()
641 return clear_infoframe(connector, old_frame); in write_or_clear_infoframe()
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
658 int drm_atomic_helper_connector_hdmi_update_infoframes(struct drm_connector *connector, in drm_atomic_helper_connector_hdmi_update_infoframes() argument
662 drm_atomic_get_old_connector_state(state, connector); in drm_atomic_helper_connector_hdmi_update_infoframes()
664 drm_atomic_get_new_connector_state(state, connector); in drm_atomic_helper_connector_hdmi_update_infoframes()
665 struct drm_display_info *info = &connector->display_info; in drm_atomic_helper_connector_hdmi_update_infoframes()
671 mutex_lock(&connector->hdmi.infoframes.lock); in drm_atomic_helper_connector_hdmi_update_infoframes()
673 ret = write_or_clear_infoframe(connector, in drm_atomic_helper_connector_hdmi_update_infoframes()
679 if (connector->hdmi.infoframes.audio.set) { in drm_atomic_helper_connector_hdmi_update_infoframes()
680 ret = write_infoframe(connector, in drm_atomic_helper_connector_hdmi_update_infoframes()
681 &connector->hdmi.infoframes.audio); in drm_atomic_helper_connector_hdmi_update_infoframes()
686 ret = write_or_clear_infoframe(connector, in drm_atomic_helper_connector_hdmi_update_infoframes()
692 ret = write_or_clear_infoframe(connector, in drm_atomic_helper_connector_hdmi_update_infoframes()
699 ret = write_or_clear_infoframe(connector, in drm_atomic_helper_connector_hdmi_update_infoframes()
707 mutex_unlock(&connector->hdmi.infoframes.lock); in drm_atomic_helper_connector_hdmi_update_infoframes()
714 * @connector: A pointer to the HDMI connector
717 * This function is meant for HDMI connector drivers to update their
725 drm_atomic_helper_connector_hdmi_update_audio_infoframe(struct drm_connector *connector, in drm_atomic_helper_connector_hdmi_update_audio_infoframe() argument
729 &connector->hdmi.infoframes.audio; in drm_atomic_helper_connector_hdmi_update_audio_infoframe()
730 struct drm_display_info *info = &connector->display_info; in drm_atomic_helper_connector_hdmi_update_audio_infoframe()
736 mutex_lock(&connector->hdmi.infoframes.lock); in drm_atomic_helper_connector_hdmi_update_audio_infoframe()
741 ret = write_infoframe(connector, infoframe); in drm_atomic_helper_connector_hdmi_update_audio_infoframe()
743 mutex_unlock(&connector->hdmi.infoframes.lock); in drm_atomic_helper_connector_hdmi_update_audio_infoframe()
751 * @connector: A pointer to the HDMI connector
753 * This function is meant for HDMI connector drivers to stop sending their
761 drm_atomic_helper_connector_hdmi_clear_audio_infoframe(struct drm_connector *connector) in drm_atomic_helper_connector_hdmi_clear_audio_infoframe() argument
764 &connector->hdmi.infoframes.audio; in drm_atomic_helper_connector_hdmi_clear_audio_infoframe()
765 struct drm_display_info *info = &connector->display_info; in drm_atomic_helper_connector_hdmi_clear_audio_infoframe()
771 mutex_lock(&connector->hdmi.infoframes.lock); in drm_atomic_helper_connector_hdmi_clear_audio_infoframe()
775 ret = clear_infoframe(connector, infoframe); in drm_atomic_helper_connector_hdmi_clear_audio_infoframe()
779 mutex_unlock(&connector->hdmi.infoframes.lock); in drm_atomic_helper_connector_hdmi_clear_audio_infoframe()
786 drm_atomic_helper_connector_hdmi_update(struct drm_connector *connector, in drm_atomic_helper_connector_hdmi_update() argument
793 drm_connector_hdmi_audio_plugged_notify(connector, false); in drm_atomic_helper_connector_hdmi_update()
794 drm_edid_connector_update(connector, NULL); in drm_atomic_helper_connector_hdmi_update()
798 if (connector->hdmi.funcs->read_edid) in drm_atomic_helper_connector_hdmi_update()
799 drm_edid = connector->hdmi.funcs->read_edid(connector); in drm_atomic_helper_connector_hdmi_update()
801 drm_edid = drm_edid_read(connector); in drm_atomic_helper_connector_hdmi_update()
803 drm_edid_connector_update(connector, drm_edid); in drm_atomic_helper_connector_hdmi_update()
809 drm_connector_hdmi_audio_plugged_notify(connector, true); in drm_atomic_helper_connector_hdmi_update()
814 * drm_atomic_helper_connector_hdmi_hotplug - Handle the hotplug event for the HDMI connector
815 * @connector: A pointer to the HDMI connector
819 * callbacks, updating the HDMI-specific connector's data.
821 void drm_atomic_helper_connector_hdmi_hotplug(struct drm_connector *connector, in drm_atomic_helper_connector_hdmi_hotplug() argument
824 drm_atomic_helper_connector_hdmi_update(connector, status); in 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
835 * connector's data.
837 void drm_atomic_helper_connector_hdmi_force(struct drm_connector *connector) in drm_atomic_helper_connector_hdmi_force() argument
839 drm_atomic_helper_connector_hdmi_update(connector, connector->status); in drm_atomic_helper_connector_hdmi_force()