diff options
author | Thomas Zimmermann <tzimmermann@suse.de> | 2024-08-15 17:18:47 +0200 |
---|---|---|
committer | Thomas Zimmermann <tzimmermann@suse.de> | 2024-08-22 09:13:01 +0200 |
commit | 770a961d581c577b579d8d38414b2bfc0b4766c2 (patch) | |
tree | 33c37963a107e37db487c4029d40d29f862b71e9 /drivers | |
parent | 0e35457eb4b75f2bc9eca58a46d12e200e15e47f (diff) |
drm/ast: astdp: Simplify power management when detecting display
Remove the CRTC handling in the ASTDP detect_ctx helper and enable
power while the detecting the display. Unconditionally wait a few
milliseconds after switching power. Simplifies the code and makes it
more robust.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Jocelyn Falempe <jfalempe@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240815151953.184679-6-tzimmermann@suse.de
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/gpu/drm/ast/ast_dp.c | 19 |
1 files changed, 6 insertions, 13 deletions
diff --git a/drivers/gpu/drm/ast/ast_dp.c b/drivers/gpu/drm/ast/ast_dp.c index 45e5c92d19c2..ffbcc397ee6b 100644 --- a/drivers/gpu/drm/ast/ast_dp.c +++ b/drivers/gpu/drm/ast/ast_dp.c @@ -170,6 +170,8 @@ static void ast_dp_power_on_off(struct drm_device *dev, bool on) // DP Power on/off ast_set_index_reg_mask(ast, AST_IO_VGACRI, 0xE3, (u8) ~AST_DP_PHY_SLEEP, bE3); + + msleep(50); } static void ast_dp_link_training(struct ast_device *ast) @@ -367,27 +369,18 @@ static int ast_astdp_connector_helper_detect_ctx(struct drm_connector *connector struct drm_device *dev = connector->dev; struct ast_device *ast = to_ast_device(connector->dev); enum drm_connector_status status = connector_status_disconnected; - struct drm_connector_state *connector_state = connector->state; - bool is_active = false; + bool power_is_on; mutex_lock(&ast->modeset_lock); - if (connector_state && connector_state->crtc) { - struct drm_crtc_state *crtc_state = connector_state->crtc->state; - - if (crtc_state && crtc_state->active) - is_active = true; - } - - if (!is_active && !ast_dp_power_is_on(ast)) { + power_is_on = ast_dp_power_is_on(ast); + if (!power_is_on) ast_dp_power_on_off(dev, true); - msleep(50); - } if (ast_astdp_is_connected(ast)) status = connector_status_connected; - if (!is_active && status == connector_status_disconnected) + if (!power_is_on && status == connector_status_disconnected) ast_dp_power_on_off(dev, false); mutex_unlock(&ast->modeset_lock); |