Lines Matching +full:dp +full:- +full:connector

1 // SPDX-License-Identifier: GPL-2.0-only
3 * Copyright (c) 2017-2020, The Linux Foundation. All rights reserved.
18 * msm_dp_bridge_detect - callback to determine if connector is connected
24 struct msm_dp *dp; in msm_dp_bridge_detect() local
26 dp = to_dp_bridge(bridge)->msm_dp_display; in msm_dp_bridge_detect()
28 drm_dbg_dp(dp->drm_dev, "link_ready = %s\n", in msm_dp_bridge_detect()
29 str_true_false(dp->link_ready)); in msm_dp_bridge_detect()
31 return (dp->link_ready) ? connector_status_connected : in msm_dp_bridge_detect()
40 struct msm_dp *dp; in msm_dp_bridge_atomic_check() local
42 dp = to_dp_bridge(bridge)->msm_dp_display; in msm_dp_bridge_atomic_check()
44 drm_dbg_dp(dp->drm_dev, "link_ready = %s\n", in msm_dp_bridge_atomic_check()
45 str_true_false(dp->link_ready)); in msm_dp_bridge_atomic_check()
51 * crtc->active is still true. Any attempt to set the mode or manually in msm_dp_bridge_atomic_check()
58 if (bridge->ops & DRM_BRIDGE_OP_HPD) in msm_dp_bridge_atomic_check()
59 return (dp->link_ready) ? 0 : -ENOTCONN; in msm_dp_bridge_atomic_check()
66 * msm_dp_bridge_get_modes - callback to add drm modes via drm_mode_probed_add()
68 * @connector: Pointer to drm connector structure
71 static int msm_dp_bridge_get_modes(struct drm_bridge *bridge, struct drm_connector *connector) in msm_dp_bridge_get_modes() argument
74 struct msm_dp *dp; in msm_dp_bridge_get_modes() local
76 if (!connector) in msm_dp_bridge_get_modes()
79 dp = to_dp_bridge(bridge)->msm_dp_display; in msm_dp_bridge_get_modes()
82 if (dp->link_ready) { in msm_dp_bridge_get_modes()
83 rc = msm_dp_display_get_modes(dp); in msm_dp_bridge_get_modes()
85 DRM_ERROR("failed to get DP sink modes, rc=%d\n", rc); in msm_dp_bridge_get_modes()
89 drm_dbg_dp(connector->dev, "No sink connected\n"); in msm_dp_bridge_get_modes()
96 struct msm_dp *dp = to_dp_bridge(bridge)->msm_dp_display; in msm_dp_bridge_debugfs_init() local
98 msm_dp_display_debugfs_init(dp, root, false); in msm_dp_bridge_debugfs_init()
124 struct msm_dp *dp = to_dp_bridge(drm_bridge)->msm_dp_display; in msm_edp_bridge_atomic_check() local
127 return -ENODEV; in msm_edp_bridge_atomic_check()
129 conn_state->self_refresh_aware = dp->psr_supported; in msm_edp_bridge_atomic_check()
131 if (!conn_state->crtc || !crtc_state) in msm_edp_bridge_atomic_check()
134 if (crtc_state->self_refresh_active && !dp->psr_supported) in msm_edp_bridge_atomic_check()
135 return -EINVAL; in msm_edp_bridge_atomic_check()
146 struct msm_dp *dp = msm_dp_bridge->msm_dp_display; in msm_edp_bridge_atomic_enable() local
155 drm_bridge->encoder); in msm_edp_bridge_atomic_enable()
161 if (old_crtc_state && old_crtc_state->self_refresh_active) { in msm_edp_bridge_atomic_enable()
162 msm_dp_display_set_psr(dp, false); in msm_edp_bridge_atomic_enable()
175 struct msm_dp *dp = msm_dp_bridge->msm_dp_display; in msm_edp_bridge_atomic_disable() local
178 drm_bridge->encoder); in msm_edp_bridge_atomic_disable()
201 if (new_crtc_state->self_refresh_active) { in msm_edp_bridge_atomic_disable()
202 msm_dp_display_set_psr(dp, true); in msm_edp_bridge_atomic_disable()
204 } else if (old_crtc_state->self_refresh_active) { in msm_edp_bridge_atomic_disable()
205 msm_dp_display_set_psr(dp, false); in msm_edp_bridge_atomic_disable()
220 drm_bridge->encoder); in msm_edp_bridge_atomic_post_disable()
231 if (new_crtc_state->self_refresh_active) in msm_edp_bridge_atomic_post_disable()
238 * msm_edp_bridge_mode_valid - callback to determine if specified mode is valid
248 struct msm_dp *dp; in msm_edp_bridge_mode_valid() local
249 int mode_pclk_khz = mode->clock; in msm_edp_bridge_mode_valid()
251 dp = to_dp_bridge(bridge)->msm_dp_display; in msm_edp_bridge_mode_valid()
253 if (!dp || !mode_pclk_khz || !dp->connector) { in msm_edp_bridge_mode_valid()
255 return -EINVAL; in msm_edp_bridge_mode_valid()
258 if (msm_dp_wide_bus_available(dp)) in msm_edp_bridge_mode_valid()
274 struct msm_dp *dp = to_dp_bridge(bridge)->msm_dp_display; in msm_edp_bridge_debugfs_init() local
276 msm_dp_display_debugfs_init(dp, root, true); in msm_edp_bridge_debugfs_init()
299 msm_dp_bridge = devm_kzalloc(dev->dev, sizeof(*msm_dp_bridge), GFP_KERNEL); in msm_dp_bridge_init()
301 return -ENOMEM; in msm_dp_bridge_init()
303 msm_dp_bridge->msm_dp_display = msm_dp_display; in msm_dp_bridge_init()
305 bridge = &msm_dp_bridge->bridge; in msm_dp_bridge_init()
306 bridge->funcs = msm_dp_display->is_edp ? &msm_edp_bridge_ops : &msm_dp_bridge_ops; in msm_dp_bridge_init()
307 bridge->type = msm_dp_display->connector_type; in msm_dp_bridge_init()
308 bridge->ycbcr_420_allowed = yuv_supported; in msm_dp_bridge_init()
311 * Many ops only make sense for DP. Why? in msm_dp_bridge_init()
312 * - Detect/HPD are used by DRM to know if a display is _physically_ in msm_dp_bridge_init()
317 * - Currently eDP mode reading is driven by the panel driver. This in msm_dp_bridge_init()
321 if (!msm_dp_display->is_edp) { in msm_dp_bridge_init()
322 bridge->ops = in msm_dp_bridge_init()
328 rc = devm_drm_bridge_add(dev->dev, bridge); in msm_dp_bridge_init()
342 if (msm_dp_display->next_bridge) { in msm_dp_bridge_init()
344 msm_dp_display->next_bridge, bridge, in msm_dp_bridge_init()
355 /* connector initialization */
359 struct drm_connector *connector = NULL; in msm_dp_drm_connector_init() local
361 connector = drm_bridge_connector_init(msm_dp_display->drm_dev, encoder); in msm_dp_drm_connector_init()
362 if (IS_ERR(connector)) in msm_dp_drm_connector_init()
363 return connector; in msm_dp_drm_connector_init()
365 if (!msm_dp_display->is_edp) in msm_dp_drm_connector_init()
366 drm_connector_attach_dp_subconnector_property(connector); in msm_dp_drm_connector_init()
368 drm_connector_attach_encoder(connector, encoder); in msm_dp_drm_connector_init()
370 return connector; in msm_dp_drm_connector_init()