Lines Matching full:connector
26 * The DRM bridge connector helper object provides a DRM connector
27 * implementation that wraps a chain of &struct drm_bridge. The connector
32 * To use the helper, display controller drivers create a bridge connector with
34 * connector with the chain of bridges passed to the function and registers it
35 * with the DRM device. At that point the connector becomes fully usable, no
38 * The DRM bridge connector operations are implemented based on the operations
39 * provided by the bridges in the chain. Each connector operation is delegated
40 * to the bridge closest to the connector (at the end of the chain) that
46 * flag (none of the bridges shall create a DRM connector directly).
50 * struct drm_bridge_connector - A connector backed by a chain of bridges
54 * @base: The base DRM connector
66 * The last bridge in the chain (closest to the connector) that provides
73 * The last bridge in the chain (closest to the connector) that provides
80 * The last bridge in the chain (closest to the connector) that provides
81 * connector detection, if any (see &DRM_BRIDGE_OP_DETECT).
87 * The last bridge in the chain (closest to the connector) that provides
88 * connector modes detection, if any (see &DRM_BRIDGE_OP_MODES).
95 * HDMI connector infrastructure, if any (see &DRM_BRIDGE_OP_HDMI).
104 * Bridge Connector Hot-Plug Handling
107 static void drm_bridge_connector_hpd_notify(struct drm_connector *connector, in drm_bridge_connector_hpd_notify() argument
111 to_drm_bridge_connector(connector); in drm_bridge_connector_hpd_notify()
124 struct drm_connector *connector = &drm_bridge_connector->base; in drm_bridge_connector_handle_hpd() local
125 struct drm_device *dev = connector->dev; in drm_bridge_connector_handle_hpd()
128 connector->status = status; in drm_bridge_connector_handle_hpd()
131 drm_bridge_connector_hpd_notify(connector, status); in drm_bridge_connector_handle_hpd()
133 drm_kms_helper_connector_hotplug_event(connector); in drm_bridge_connector_handle_hpd()
142 static void drm_bridge_connector_oob_hotplug_event(struct drm_connector *connector, in drm_bridge_connector_oob_hotplug_event() argument
146 to_drm_bridge_connector(connector); in drm_bridge_connector_oob_hotplug_event()
151 static void drm_bridge_connector_enable_hpd(struct drm_connector *connector) in drm_bridge_connector_enable_hpd() argument
154 to_drm_bridge_connector(connector); in drm_bridge_connector_enable_hpd()
162 static void drm_bridge_connector_disable_hpd(struct drm_connector *connector) in drm_bridge_connector_disable_hpd() argument
165 to_drm_bridge_connector(connector); in drm_bridge_connector_disable_hpd()
173 * Bridge Connector Functions
177 drm_bridge_connector_detect(struct drm_connector *connector, bool force) in drm_bridge_connector_detect() argument
180 to_drm_bridge_connector(connector); in drm_bridge_connector_detect()
187 drm_bridge_connector_hpd_notify(connector, status); in drm_bridge_connector_detect()
189 switch (connector->connector_type) { in drm_bridge_connector_detect()
205 static void drm_bridge_connector_debugfs_init(struct drm_connector *connector, in drm_bridge_connector_debugfs_init() argument
209 to_drm_bridge_connector(connector); in drm_bridge_connector_debugfs_init()
219 static void drm_bridge_connector_reset(struct drm_connector *connector) in drm_bridge_connector_reset() argument
222 to_drm_bridge_connector(connector); in drm_bridge_connector_reset()
224 drm_atomic_helper_connector_reset(connector); in drm_bridge_connector_reset()
226 __drm_atomic_helper_connector_hdmi_reset(connector, in drm_bridge_connector_reset()
227 connector->state); in drm_bridge_connector_reset()
241 * Bridge Connector Helper Functions
244 static int drm_bridge_connector_get_modes_edid(struct drm_connector *connector, in drm_bridge_connector_get_modes_edid() argument
251 status = drm_bridge_connector_detect(connector, false); in drm_bridge_connector_get_modes_edid()
255 drm_edid = drm_bridge_edid_read(bridge, connector); in drm_bridge_connector_get_modes_edid()
261 drm_edid_connector_update(connector, drm_edid); in drm_bridge_connector_get_modes_edid()
262 n = drm_edid_connector_add_modes(connector); in drm_bridge_connector_get_modes_edid()
268 drm_edid_connector_update(connector, NULL); in drm_bridge_connector_get_modes_edid()
272 static int drm_bridge_connector_get_modes(struct drm_connector *connector) in drm_bridge_connector_get_modes() argument
275 to_drm_bridge_connector(connector); in drm_bridge_connector_get_modes()
284 return drm_bridge_connector_get_modes_edid(connector, bridge); in drm_bridge_connector_get_modes()
292 return bridge->funcs->get_modes(bridge, connector); in drm_bridge_connector_get_modes()
310 drm_bridge_connector_tmds_char_rate_valid(const struct drm_connector *connector, in drm_bridge_connector_tmds_char_rate_valid() argument
315 to_drm_bridge_connector(connector); in drm_bridge_connector_tmds_char_rate_valid()
328 static int drm_bridge_connector_clear_infoframe(struct drm_connector *connector, in drm_bridge_connector_clear_infoframe() argument
332 to_drm_bridge_connector(connector); in drm_bridge_connector_clear_infoframe()
342 static int drm_bridge_connector_write_infoframe(struct drm_connector *connector, in drm_bridge_connector_write_infoframe() argument
347 to_drm_bridge_connector(connector); in drm_bridge_connector_write_infoframe()
364 * Bridge Connector Initialisation
368 * drm_bridge_connector_init - Initialise a connector for a chain of bridges
373 * device. The connector is associated with a chain of bridges that starts at
376 * them may create a DRM connector directly.
378 * Returns a pointer to the new connector on success, or a negative error
385 struct drm_connector *connector; in drm_bridge_connector_init() local
403 connector = &bridge_connector->base; in drm_bridge_connector_init()
404 connector->interlace_allowed = true; in drm_bridge_connector_init()
407 * Initialise connector status handling. First locate the furthest in drm_bridge_connector_init()
409 * initialise the connector polling mode, using HPD if available and in drm_bridge_connector_init()
416 connector->interlace_allowed = false; in drm_bridge_connector_init()
447 connector->fwnode = fwnode_handle_get(of_fwnode_handle(bridge->of_node)); in drm_bridge_connector_init()
461 ret = drmm_connector_hdmi_init(drm, connector, in drm_bridge_connector_init()
470 ret = drmm_connector_init(drm, connector, in drm_bridge_connector_init()
476 drm_connector_helper_add(connector, &drm_bridge_connector_helper_funcs); in drm_bridge_connector_init()
479 connector->polled = DRM_CONNECTOR_POLL_HPD; in drm_bridge_connector_init()
481 connector->polled = DRM_CONNECTOR_POLL_CONNECT in drm_bridge_connector_init()
485 drm_panel_bridge_set_orientation(connector, panel_bridge); in drm_bridge_connector_init()
487 return connector; in drm_bridge_connector_init()