Lines Matching +full:sink +full:- +full:only

1 // SPDX-License-Identifier: GPL-2.0-only
3 * Copyright (c) 2017-2020, The Linux Foundation. All rights reserved.
19 * msm_dp_bridge_detect - callback to determine if connector is connected
28 dp = to_dp_bridge(bridge)->msm_dp_display; in msm_dp_bridge_detect()
30 drm_dbg_dp(dp->drm_dev, "link_ready = %s\n", in msm_dp_bridge_detect()
31 str_true_false(dp->link_ready)); in msm_dp_bridge_detect()
33 return (dp->link_ready) ? connector_status_connected : in msm_dp_bridge_detect()
44 dp = to_dp_bridge(bridge)->msm_dp_display; in msm_dp_bridge_atomic_check()
46 drm_dbg_dp(dp->drm_dev, "link_ready = %s\n", in msm_dp_bridge_atomic_check()
47 str_true_false(dp->link_ready)); in msm_dp_bridge_atomic_check()
52 * Hence if the sink is unplugged, the pipeline gets disabled, but the in msm_dp_bridge_atomic_check()
53 * crtc->active is still true. Any attempt to set the mode or manually in msm_dp_bridge_atomic_check()
60 if (bridge->ops & DRM_BRIDGE_OP_HPD) in msm_dp_bridge_atomic_check()
61 return (dp->link_ready) ? 0 : -ENOTCONN; in msm_dp_bridge_atomic_check()
68 * msm_dp_bridge_get_modes - callback to add drm modes via drm_mode_probed_add()
81 dp = to_dp_bridge(bridge)->msm_dp_display; in msm_dp_bridge_get_modes()
84 if (dp->link_ready) { in msm_dp_bridge_get_modes()
87 DRM_ERROR("failed to get DP sink modes, rc=%d\n", rc); in msm_dp_bridge_get_modes()
91 drm_dbg_dp(connector->dev, "No sink connected\n"); in msm_dp_bridge_get_modes()
98 struct msm_dp *dp = to_dp_bridge(bridge)->msm_dp_display; in msm_dp_bridge_debugfs_init()
129 struct msm_dp *dp = to_dp_bridge(drm_bridge)->msm_dp_display; in msm_edp_bridge_atomic_check()
132 return -ENODEV; in msm_edp_bridge_atomic_check()
134 conn_state->self_refresh_aware = dp->psr_supported; in msm_edp_bridge_atomic_check()
136 if (!conn_state->crtc || !crtc_state) in msm_edp_bridge_atomic_check()
139 if (crtc_state->self_refresh_active && !dp->psr_supported) in msm_edp_bridge_atomic_check()
140 return -EINVAL; in msm_edp_bridge_atomic_check()
151 struct msm_dp *dp = msm_dp_bridge->msm_dp_display; in msm_edp_bridge_atomic_enable()
160 drm_bridge->encoder); in msm_edp_bridge_atomic_enable()
166 if (old_crtc_state && old_crtc_state->self_refresh_active) { in msm_edp_bridge_atomic_enable()
180 struct msm_dp *dp = msm_dp_bridge->msm_dp_display; in msm_edp_bridge_atomic_disable()
183 drm_bridge->encoder); in msm_edp_bridge_atomic_disable()
199 * call while the sink is in psr state. So, exit psr here. in msm_edp_bridge_atomic_disable()
203 * We observed sink is stuck in self refresh if psr exit is skipped in msm_edp_bridge_atomic_disable()
204 * when display disable occurs while the sink is in psr state. in msm_edp_bridge_atomic_disable()
206 if (new_crtc_state->self_refresh_active) { in msm_edp_bridge_atomic_disable()
209 } else if (old_crtc_state->self_refresh_active) { in msm_edp_bridge_atomic_disable()
225 drm_bridge->encoder); in msm_edp_bridge_atomic_post_disable()
236 if (new_crtc_state->self_refresh_active) in msm_edp_bridge_atomic_post_disable()
243 * msm_edp_bridge_mode_valid - callback to determine if specified mode is valid
254 int mode_pclk_khz = mode->clock; in msm_edp_bridge_mode_valid()
256 dp = to_dp_bridge(bridge)->msm_dp_display; in msm_edp_bridge_mode_valid()
258 if (!dp || !mode_pclk_khz || !dp->connector) { in msm_edp_bridge_mode_valid()
260 return -EINVAL; in msm_edp_bridge_mode_valid()
271 * enabling panel power to read sink capabilities. So, we rely in msm_edp_bridge_mode_valid()
272 * on the panel driver to populate only supported modes for now. in msm_edp_bridge_mode_valid()
279 struct msm_dp *dp = to_dp_bridge(bridge)->msm_dp_display; in msm_edp_bridge_debugfs_init()
304 msm_dp_bridge = devm_drm_bridge_alloc(dev->dev, struct msm_dp_bridge, bridge, in msm_dp_bridge_init()
305 msm_dp_display->is_edp ? &msm_edp_bridge_ops : in msm_dp_bridge_init()
310 msm_dp_bridge->msm_dp_display = msm_dp_display; in msm_dp_bridge_init()
312 bridge = &msm_dp_bridge->bridge; in msm_dp_bridge_init()
313 bridge->type = msm_dp_display->connector_type; in msm_dp_bridge_init()
314 bridge->ycbcr_420_allowed = yuv_supported; in msm_dp_bridge_init()
317 * Many ops only make sense for DP. Why? in msm_dp_bridge_init()
318 * - Detect/HPD are used by DRM to know if a display is _physically_ in msm_dp_bridge_init()
323 * - Currently eDP mode reading is driven by the panel driver. This in msm_dp_bridge_init()
327 if (!msm_dp_display->is_edp) { in msm_dp_bridge_init()
328 bridge->ops = in msm_dp_bridge_init()
333 bridge->hdmi_audio_dev = &msm_dp_display->pdev->dev; in msm_dp_bridge_init()
334 bridge->hdmi_audio_max_i2s_playback_channels = 8; in msm_dp_bridge_init()
335 bridge->hdmi_audio_dai_port = -1; in msm_dp_bridge_init()
338 rc = devm_drm_bridge_add(dev->dev, bridge); in msm_dp_bridge_init()
352 if (msm_dp_display->next_bridge) { in msm_dp_bridge_init()
354 msm_dp_display->next_bridge, bridge, in msm_dp_bridge_init()
371 connector = drm_bridge_connector_init(msm_dp_display->drm_dev, encoder); in msm_dp_drm_connector_init()
375 if (!msm_dp_display->is_edp) in msm_dp_drm_connector_init()