Lines Matching +full:no +full:- +full:hpd

1 // SPDX-License-Identifier: GPL-2.0+
31 * with the DRM device. At that point the connector becomes fully usable, no
40 * operation flags (&drm_bridge->ops) and bridge output type
41 * (&drm_bridge->type), as well as the DRM_BRIDGE_ATTACH_NO_CONNECTOR attach
46 * struct drm_bridge_connector - A connector backed by a chain of bridges
70 * hot-plug detection notification, if any (see &DRM_BRIDGE_OP_HPD).
92 /* -----------------------------------------------------------------------------
93 * Bridge Connector Hot-Plug Handling
104 drm_for_each_bridge_in_chain(bridge_connector->encoder, bridge) { in drm_bridge_connector_hpd_notify()
105 if (bridge->funcs->hpd_notify) in drm_bridge_connector_hpd_notify()
106 bridge->funcs->hpd_notify(bridge, status); in drm_bridge_connector_hpd_notify()
114 struct drm_connector *connector = &drm_bridge_connector->base; in drm_bridge_connector_hpd_cb()
115 struct drm_device *dev = connector->dev; in drm_bridge_connector_hpd_cb()
118 mutex_lock(&dev->mode_config.mutex); in drm_bridge_connector_hpd_cb()
119 old_status = connector->status; in drm_bridge_connector_hpd_cb()
120 connector->status = status; in drm_bridge_connector_hpd_cb()
121 mutex_unlock(&dev->mode_config.mutex); in drm_bridge_connector_hpd_cb()
132 * drm_bridge_connector_enable_hpd - Enable hot-plug detection for the connector
135 * This function enables hot-plug detection for the given bridge connector.
142 struct drm_bridge *hpd = bridge_connector->bridge_hpd; in drm_bridge_connector_enable_hpd() local
144 if (hpd) in drm_bridge_connector_enable_hpd()
145 drm_bridge_hpd_enable(hpd, drm_bridge_connector_hpd_cb, in drm_bridge_connector_enable_hpd()
151 * drm_bridge_connector_disable_hpd - Disable hot-plug detection for the
155 * This function disables hot-plug detection for the given bridge connector.
162 struct drm_bridge *hpd = bridge_connector->bridge_hpd; in drm_bridge_connector_disable_hpd() local
164 if (hpd) in drm_bridge_connector_disable_hpd()
165 drm_bridge_hpd_disable(hpd); in drm_bridge_connector_disable_hpd()
169 /* -----------------------------------------------------------------------------
178 struct drm_bridge *detect = bridge_connector->bridge_detect; in drm_bridge_connector_detect()
182 status = detect->funcs->detect(detect); in drm_bridge_connector_detect()
186 switch (connector->connector_type) { in drm_bridge_connector_detect()
207 if (bridge_connector->bridge_hpd) { in drm_bridge_connector_destroy()
208 struct drm_bridge *hpd = bridge_connector->bridge_hpd; in drm_bridge_connector_destroy() local
210 drm_bridge_hpd_disable(hpd); in drm_bridge_connector_destroy()
224 struct drm_encoder *encoder = bridge_connector->encoder; in drm_bridge_connector_debugfs_init()
227 list_for_each_entry(bridge, &encoder->bridge_chain, chain_node) { in drm_bridge_connector_debugfs_init()
228 if (bridge->funcs->debugfs_init) in drm_bridge_connector_debugfs_init()
229 bridge->funcs->debugfs_init(bridge, root); in drm_bridge_connector_debugfs_init()
243 /* -----------------------------------------------------------------------------
258 edid = bridge->funcs->get_edid(bridge, connector); in drm_bridge_connector_get_modes_edid()
285 bridge = bridge_connector->bridge_edid; in drm_bridge_connector_get_modes()
293 bridge = bridge_connector->bridge_modes; in drm_bridge_connector_get_modes()
295 return bridge->funcs->get_modes(bridge, connector); in drm_bridge_connector_get_modes()
307 /* No need for .mode_valid(), the bridges are checked by the core. */
310 /* -----------------------------------------------------------------------------
315 * drm_bridge_connector_init - Initialise a connector for a chain of bridges
322 * (&drm_bridge->ops) and bridge output type (&drm_bridge->type), and none of
339 return ERR_PTR(-ENOMEM); in drm_bridge_connector_init()
341 bridge_connector->encoder = encoder; in drm_bridge_connector_init()
347 connector = &bridge_connector->base; in drm_bridge_connector_init()
348 connector->interlace_allowed = true; in drm_bridge_connector_init()
352 * bridges in the pipeline that support HPD and output detection. Then in drm_bridge_connector_init()
353 * initialise the connector polling mode, using HPD if available and in drm_bridge_connector_init()
354 * falling back to polling if supported. If neither HPD nor output in drm_bridge_connector_init()
359 if (!bridge->interlace_allowed) in drm_bridge_connector_init()
360 connector->interlace_allowed = false; in drm_bridge_connector_init()
362 if (bridge->ops & DRM_BRIDGE_OP_EDID) in drm_bridge_connector_init()
363 bridge_connector->bridge_edid = bridge; in drm_bridge_connector_init()
364 if (bridge->ops & DRM_BRIDGE_OP_HPD) in drm_bridge_connector_init()
365 bridge_connector->bridge_hpd = bridge; in drm_bridge_connector_init()
366 if (bridge->ops & DRM_BRIDGE_OP_DETECT) in drm_bridge_connector_init()
367 bridge_connector->bridge_detect = bridge; in drm_bridge_connector_init()
368 if (bridge->ops & DRM_BRIDGE_OP_MODES) in drm_bridge_connector_init()
369 bridge_connector->bridge_modes = bridge; in drm_bridge_connector_init()
372 connector_type = bridge->type; 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()
390 if (bridge_connector->bridge_hpd) { in drm_bridge_connector_init()
391 connector->polled = DRM_CONNECTOR_POLL_HPD; in drm_bridge_connector_init()
394 else if (bridge_connector->bridge_detect) in drm_bridge_connector_init()
395 connector->polled = DRM_CONNECTOR_POLL_CONNECT in drm_bridge_connector_init()