Lines Matching +full:no +full:- +full:hpd
1 // SPDX-License-Identifier: GPL-2.0+
33 * with the DRM device. At that point the connector becomes fully usable, no
42 * operation flags (&drm_bridge->ops) and bridge output type
43 * (&drm_bridge->type), as well as the DRM_BRIDGE_ATTACH_NO_CONNECTOR attach
48 * struct drm_bridge_connector - A connector backed by a chain of bridges
72 * hot-plug detection notification, if any (see &DRM_BRIDGE_OP_HPD).
94 /* -----------------------------------------------------------------------------
95 * Bridge Connector Hot-Plug Handling
106 drm_for_each_bridge_in_chain(bridge_connector->encoder, bridge) { in drm_bridge_connector_hpd_notify()
107 if (bridge->funcs->hpd_notify) in drm_bridge_connector_hpd_notify()
108 bridge->funcs->hpd_notify(bridge, status); in drm_bridge_connector_hpd_notify()
115 struct drm_connector *connector = &drm_bridge_connector->base; in drm_bridge_connector_handle_hpd()
116 struct drm_device *dev = connector->dev; in drm_bridge_connector_handle_hpd()
118 mutex_lock(&dev->mode_config.mutex); in drm_bridge_connector_handle_hpd()
119 connector->status = status; in drm_bridge_connector_handle_hpd()
120 mutex_unlock(&dev->mode_config.mutex); in drm_bridge_connector_handle_hpd()
146 struct drm_bridge *hpd = bridge_connector->bridge_hpd; in drm_bridge_connector_enable_hpd() local
148 if (hpd) in drm_bridge_connector_enable_hpd()
149 drm_bridge_hpd_enable(hpd, drm_bridge_connector_hpd_cb, in drm_bridge_connector_enable_hpd()
157 struct drm_bridge *hpd = bridge_connector->bridge_hpd; in drm_bridge_connector_disable_hpd() local
159 if (hpd) in drm_bridge_connector_disable_hpd()
160 drm_bridge_hpd_disable(hpd); in drm_bridge_connector_disable_hpd()
163 /* -----------------------------------------------------------------------------
172 struct drm_bridge *detect = bridge_connector->bridge_detect; in drm_bridge_connector_detect()
176 status = detect->funcs->detect(detect); in drm_bridge_connector_detect()
180 switch (connector->connector_type) { in drm_bridge_connector_detect()
204 fwnode_handle_put(connector->fwnode); in drm_bridge_connector_destroy()
214 struct drm_encoder *encoder = bridge_connector->encoder; in drm_bridge_connector_debugfs_init()
217 list_for_each_entry(bridge, &encoder->bridge_chain, chain_node) { in drm_bridge_connector_debugfs_init()
218 if (bridge->funcs->debugfs_init) in drm_bridge_connector_debugfs_init()
219 bridge->funcs->debugfs_init(bridge, root); in drm_bridge_connector_debugfs_init()
234 /* -----------------------------------------------------------------------------
276 bridge = bridge_connector->bridge_edid; in drm_bridge_connector_get_modes()
284 bridge = bridge_connector->bridge_modes; in drm_bridge_connector_get_modes()
286 return bridge->funcs->get_modes(bridge, connector); in drm_bridge_connector_get_modes()
298 /* No need for .mode_valid(), the bridges are checked by the core. */
303 /* -----------------------------------------------------------------------------
308 * drm_bridge_connector_init - Initialise a connector for a chain of bridges
315 * (&drm_bridge->ops) and bridge output type (&drm_bridge->type), and none of
333 return ERR_PTR(-ENOMEM); in drm_bridge_connector_init()
335 bridge_connector->encoder = encoder; in drm_bridge_connector_init()
341 connector = &bridge_connector->base; in drm_bridge_connector_init()
342 connector->interlace_allowed = true; in drm_bridge_connector_init()
346 * bridges in the pipeline that support HPD and output detection. Then in drm_bridge_connector_init()
347 * initialise the connector polling mode, using HPD if available and in drm_bridge_connector_init()
348 * falling back to polling if supported. If neither HPD nor output in drm_bridge_connector_init()
353 if (!bridge->interlace_allowed) in drm_bridge_connector_init()
354 connector->interlace_allowed = false; in drm_bridge_connector_init()
356 if (bridge->ops & DRM_BRIDGE_OP_EDID) in drm_bridge_connector_init()
357 bridge_connector->bridge_edid = bridge; in drm_bridge_connector_init()
358 if (bridge->ops & DRM_BRIDGE_OP_HPD) in drm_bridge_connector_init()
359 bridge_connector->bridge_hpd = bridge; in drm_bridge_connector_init()
360 if (bridge->ops & DRM_BRIDGE_OP_DETECT) in drm_bridge_connector_init()
361 bridge_connector->bridge_detect = bridge; in drm_bridge_connector_init()
362 if (bridge->ops & DRM_BRIDGE_OP_MODES) in drm_bridge_connector_init()
363 bridge_connector->bridge_modes = bridge; in drm_bridge_connector_init()
366 connector_type = bridge->type; in drm_bridge_connector_init()
370 bridge->of_node) in drm_bridge_connector_init()
371 connector->fwnode = fwnode_handle_get(of_fwnode_handle(bridge->of_node)); in drm_bridge_connector_init()
374 if (bridge->ddc) in drm_bridge_connector_init()
375 ddc = bridge->ddc; in drm_bridge_connector_init()
383 return ERR_PTR(-EINVAL); in drm_bridge_connector_init()
396 if (bridge_connector->bridge_hpd) in drm_bridge_connector_init()
397 connector->polled = DRM_CONNECTOR_POLL_HPD; in drm_bridge_connector_init()
398 else if (bridge_connector->bridge_detect) in drm_bridge_connector_init()
399 connector->polled = DRM_CONNECTOR_POLL_CONNECT in drm_bridge_connector_init()