Lines Matching full:connector
29 * The DRM bridge connector helper object provides a DRM connector
30 * implementation that wraps a chain of &struct drm_bridge. The connector
35 * To use the helper, display controller drivers create a bridge connector with
37 * connector with the chain of bridges passed to the function and registers it
38 * with the DRM device. At that point the connector becomes fully usable, no
41 * The DRM bridge connector operations are implemented based on the operations
42 * provided by the bridges in the chain. Each connector operation is delegated
43 * to the bridge closest to the connector (at the end of the chain) that
49 * flag (none of the bridges shall create a DRM connector directly).
53 * struct drm_bridge_connector - A connector backed by a chain of bridges
57 * @base: The base DRM connector
69 * The last bridge in the chain (closest to the connector) that provides
76 * The last bridge in the chain (closest to the connector) that provides
83 * The last bridge in the chain (closest to the connector) that provides
84 * connector detection, if any (see &DRM_BRIDGE_OP_DETECT).
90 * The last bridge in the chain (closest to the connector) that provides
91 * connector modes detection, if any (see &DRM_BRIDGE_OP_MODES).
98 * HDMI connector infrastructure, if any (see &DRM_BRIDGE_OP_HDMI).
107 * Bridge Connector Hot-Plug Handling
110 static void drm_bridge_connector_hpd_notify(struct drm_connector *connector, in drm_bridge_connector_hpd_notify() argument
114 to_drm_bridge_connector(connector); in drm_bridge_connector_hpd_notify()
127 struct drm_connector *connector = &drm_bridge_connector->base; in drm_bridge_connector_handle_hpd() local
128 struct drm_device *dev = connector->dev; in drm_bridge_connector_handle_hpd()
131 connector->status = status; in drm_bridge_connector_handle_hpd()
134 drm_bridge_connector_hpd_notify(connector, status); in drm_bridge_connector_handle_hpd()
136 drm_kms_helper_connector_hotplug_event(connector); in drm_bridge_connector_handle_hpd()
145 static void drm_bridge_connector_oob_hotplug_event(struct drm_connector *connector, in drm_bridge_connector_oob_hotplug_event() argument
149 to_drm_bridge_connector(connector); in drm_bridge_connector_oob_hotplug_event()
154 static void drm_bridge_connector_enable_hpd(struct drm_connector *connector) in drm_bridge_connector_enable_hpd() argument
157 to_drm_bridge_connector(connector); in drm_bridge_connector_enable_hpd()
165 static void drm_bridge_connector_disable_hpd(struct drm_connector *connector) in drm_bridge_connector_disable_hpd() argument
168 to_drm_bridge_connector(connector); in drm_bridge_connector_disable_hpd()
176 * Bridge Connector Functions
180 drm_bridge_connector_detect(struct drm_connector *connector, bool force) in drm_bridge_connector_detect() argument
183 to_drm_bridge_connector(connector); in drm_bridge_connector_detect()
192 drm_atomic_helper_connector_hdmi_hotplug(connector, status); in drm_bridge_connector_detect()
194 drm_bridge_connector_hpd_notify(connector, status); in drm_bridge_connector_detect()
196 switch (connector->connector_type) { in drm_bridge_connector_detect()
212 static void drm_bridge_connector_force(struct drm_connector *connector) in drm_bridge_connector_force() argument
215 to_drm_bridge_connector(connector); in drm_bridge_connector_force()
219 drm_atomic_helper_connector_hdmi_force(connector); in drm_bridge_connector_force()
222 static void drm_bridge_connector_debugfs_init(struct drm_connector *connector, in drm_bridge_connector_debugfs_init() argument
226 to_drm_bridge_connector(connector); in drm_bridge_connector_debugfs_init()
236 static void drm_bridge_connector_reset(struct drm_connector *connector) in drm_bridge_connector_reset() argument
239 to_drm_bridge_connector(connector); in drm_bridge_connector_reset()
241 drm_atomic_helper_connector_reset(connector); in drm_bridge_connector_reset()
243 __drm_atomic_helper_connector_hdmi_reset(connector, in drm_bridge_connector_reset()
244 connector->state); in drm_bridge_connector_reset()
259 * Bridge Connector Helper Functions
262 static int drm_bridge_connector_get_modes_edid(struct drm_connector *connector, in drm_bridge_connector_get_modes_edid() argument
269 status = drm_bridge_connector_detect(connector, false); in drm_bridge_connector_get_modes_edid()
273 drm_edid = drm_bridge_edid_read(bridge, connector); in drm_bridge_connector_get_modes_edid()
279 drm_edid_connector_update(connector, drm_edid); in drm_bridge_connector_get_modes_edid()
280 n = drm_edid_connector_add_modes(connector); in drm_bridge_connector_get_modes_edid()
286 drm_edid_connector_update(connector, NULL); in drm_bridge_connector_get_modes_edid()
290 static int drm_bridge_connector_get_modes(struct drm_connector *connector) in drm_bridge_connector_get_modes() argument
293 to_drm_bridge_connector(connector); in drm_bridge_connector_get_modes()
302 return drm_edid_connector_add_modes(connector); in drm_bridge_connector_get_modes()
310 return drm_bridge_connector_get_modes_edid(connector, bridge); in drm_bridge_connector_get_modes()
318 return bridge->funcs->get_modes(bridge, connector); in drm_bridge_connector_get_modes()
329 drm_bridge_connector_mode_valid(struct drm_connector *connector, in drm_bridge_connector_mode_valid() argument
333 to_drm_bridge_connector(connector); in drm_bridge_connector_mode_valid()
336 return drm_hdmi_connector_mode_valid(connector, mode); in drm_bridge_connector_mode_valid()
341 static int drm_bridge_connector_atomic_check(struct drm_connector *connector, in drm_bridge_connector_atomic_check() argument
345 to_drm_bridge_connector(connector); in drm_bridge_connector_atomic_check()
348 return drm_atomic_helper_connector_hdmi_check(connector, state); in drm_bridge_connector_atomic_check()
362 drm_bridge_connector_tmds_char_rate_valid(const struct drm_connector *connector, in drm_bridge_connector_tmds_char_rate_valid() argument
367 to_drm_bridge_connector(connector); in drm_bridge_connector_tmds_char_rate_valid()
380 static int drm_bridge_connector_clear_infoframe(struct drm_connector *connector, in drm_bridge_connector_clear_infoframe() argument
384 to_drm_bridge_connector(connector); in drm_bridge_connector_clear_infoframe()
394 static int drm_bridge_connector_write_infoframe(struct drm_connector *connector, in drm_bridge_connector_write_infoframe() argument
399 to_drm_bridge_connector(connector); in drm_bridge_connector_write_infoframe()
410 drm_bridge_connector_read_edid(struct drm_connector *connector) in drm_bridge_connector_read_edid() argument
413 to_drm_bridge_connector(connector); in drm_bridge_connector_read_edid()
420 return drm_bridge_edid_read(bridge, connector); in drm_bridge_connector_read_edid()
430 static int drm_bridge_connector_audio_startup(struct drm_connector *connector) in drm_bridge_connector_audio_startup() argument
433 to_drm_bridge_connector(connector); in drm_bridge_connector_audio_startup()
443 return bridge->funcs->hdmi_audio_startup(connector, bridge); in drm_bridge_connector_audio_startup()
446 static int drm_bridge_connector_audio_prepare(struct drm_connector *connector, in drm_bridge_connector_audio_prepare() argument
451 to_drm_bridge_connector(connector); in drm_bridge_connector_audio_prepare()
458 return bridge->funcs->hdmi_audio_prepare(connector, bridge, fmt, hparms); in drm_bridge_connector_audio_prepare()
461 static void drm_bridge_connector_audio_shutdown(struct drm_connector *connector) in drm_bridge_connector_audio_shutdown() argument
464 to_drm_bridge_connector(connector); in drm_bridge_connector_audio_shutdown()
471 bridge->funcs->hdmi_audio_shutdown(connector, bridge); in drm_bridge_connector_audio_shutdown()
474 static int drm_bridge_connector_audio_mute_stream(struct drm_connector *connector, in drm_bridge_connector_audio_mute_stream() argument
478 to_drm_bridge_connector(connector); in drm_bridge_connector_audio_mute_stream()
486 return bridge->funcs->hdmi_audio_mute_stream(connector, bridge, in drm_bridge_connector_audio_mute_stream()
500 * Bridge Connector Initialisation
504 * drm_bridge_connector_init - Initialise a connector for a chain of bridges
509 * device. The connector is associated with a chain of bridges that starts at
512 * them may create a DRM connector directly.
514 * Returns a pointer to the new connector on success, or a negative error
521 struct drm_connector *connector; in drm_bridge_connector_init() local
538 connector = &bridge_connector->base; in drm_bridge_connector_init()
539 connector->interlace_allowed = true; in drm_bridge_connector_init()
540 connector->ycbcr_420_allowed = true; in drm_bridge_connector_init()
543 * Initialise connector status handling. First locate the furthest in drm_bridge_connector_init()
545 * initialise the connector polling mode, using HPD if available and in drm_bridge_connector_init()
552 connector->interlace_allowed = false; in drm_bridge_connector_init()
554 connector->ycbcr_420_allowed = false; in drm_bridge_connector_init()
585 connector->fwnode = fwnode_handle_get(of_fwnode_handle(bridge->of_node)); in drm_bridge_connector_init()
599 if (!connector->ycbcr_420_allowed) in drm_bridge_connector_init()
604 ret = drmm_connector_hdmi_init(drm, connector, in drm_bridge_connector_init()
621 ret = drm_connector_hdmi_audio_init(connector, in drm_bridge_connector_init()
631 ret = drmm_connector_init(drm, connector, in drm_bridge_connector_init()
638 drm_connector_helper_add(connector, &drm_bridge_connector_helper_funcs); in drm_bridge_connector_init()
641 connector->polled = DRM_CONNECTOR_POLL_HPD; in drm_bridge_connector_init()
643 connector->polled = DRM_CONNECTOR_POLL_CONNECT in drm_bridge_connector_init()
647 drm_panel_bridge_set_orientation(connector, panel_bridge); in drm_bridge_connector_init()
649 return connector; in drm_bridge_connector_init()