diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3994-drm-amd-display-Only-register-backlight-device-if-em.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3994-drm-amd-display-Only-register-backlight-device-if-em.patch | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3994-drm-amd-display-Only-register-backlight-device-if-em.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3994-drm-amd-display-Only-register-backlight-device-if-em.patch new file mode 100644 index 00000000..9e019b6a --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3994-drm-amd-display-Only-register-backlight-device-if-em.patch @@ -0,0 +1,122 @@ +From 2e46970d6e65b5f2e71b5527ef11984f05cb25df Mon Sep 17 00:00:00 2001 +From: Harry Wentland <harry.wentland@amd.com> +Date: Mon, 12 Mar 2018 11:16:47 -0400 +Subject: [PATCH 3994/4131] drm/amd/display: Only register backlight device if + embedded panel connected + +Signed-off-by: Harry Wentland <harry.wentland@amd.com> +Reviewed-by: Tony Cheng <Tony.Cheng@amd.com> +Acked-by: Harry Wentland <harry.wentland@amd.com> +--- + drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 58 +++++++++++++---------- + 1 file changed, 33 insertions(+), 25 deletions(-) + +diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +index 005cf52..969b2db 100644 +--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c ++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +@@ -1405,6 +1405,28 @@ static int initialize_plane(struct amdgpu_display_manager *dm, + return ret; + } + ++ ++static void register_backlight_device(struct amdgpu_display_manager *dm, ++ struct dc_link *link) ++{ ++#if defined(CONFIG_BACKLIGHT_CLASS_DEVICE) ||\ ++ defined(CONFIG_BACKLIGHT_CLASS_DEVICE_MODULE) ++ ++ if ((link->connector_signal & (SIGNAL_TYPE_EDP | SIGNAL_TYPE_LVDS)) && ++ link->type != dc_connection_none) { ++ /* Event if registration failed, we should continue with ++ * DM initialization because not having a backlight control ++ * is better then a black screen. ++ */ ++ amdgpu_dm_register_backlight_device(dm); ++ ++ if (dm->backlight_dev) ++ dm->backlight_link = link; ++ } ++#endif ++} ++ ++ + /* In this architecture, the association + * connector -> encoder -> crtc + * id not really requried. The crtc and connector will hold the +@@ -1458,6 +1480,7 @@ static int amdgpu_dm_initialize_drm_device(struct amdgpu_device *adev) + + /* loops over all connectors on the board */ + for (i = 0; i < link_cnt; i++) { ++ struct dc_link *link = NULL; + + if (i > AMDGPU_DM_MAX_DISPLAY_INDEX) { + DRM_ERROR( +@@ -1483,10 +1506,15 @@ static int amdgpu_dm_initialize_drm_device(struct amdgpu_device *adev) + DRM_ERROR("KMS: Failed to initialize connector\n"); + goto fail; + } ++ ++ link = dc_get_link_at_index(dm->dc, i); + +- if (dc_link_detect(dc_get_link_at_index(dm->dc, i), +- DETECT_REASON_BOOT)) ++ if (dc_link_detect(link, DETECT_REASON_BOOT)) { + amdgpu_dm_update_connector_after_detect(aconnector); ++ register_backlight_device(dm, link); ++ } ++ ++ + } + + /* Software is initialized. Now we can register interrupt handlers. */ +@@ -2781,7 +2809,8 @@ static void amdgpu_dm_connector_destroy(struct drm_connector *connector) + #if defined(CONFIG_BACKLIGHT_CLASS_DEVICE) ||\ + defined(CONFIG_BACKLIGHT_CLASS_DEVICE_MODULE) + +- if (link->connector_signal & (SIGNAL_TYPE_EDP | SIGNAL_TYPE_LVDS)) { ++ if ((link->connector_signal & (SIGNAL_TYPE_EDP | SIGNAL_TYPE_LVDS)) && ++ link->type != dc_connection_none) { + amdgpu_dm_register_backlight_device(dm); + + if (dm->backlight_dev) { +@@ -3667,6 +3696,7 @@ create_i2c(struct ddc_service *ddc_service, + return i2c; + } + ++ + /* Note: this function assumes that dc_link_detect() was called for the + * dc_link which will be represented by this aconnector. + */ +@@ -3736,28 +3766,6 @@ static int amdgpu_dm_connector_init(struct amdgpu_display_manager *dm, + || connector_type == DRM_MODE_CONNECTOR_eDP) + amdgpu_dm_initialize_dp_connector(dm, aconnector); + +-#if defined(CONFIG_BACKLIGHT_CLASS_DEVICE) ||\ +- defined(CONFIG_BACKLIGHT_CLASS_DEVICE_MODULE) +- +- /* NOTE: this currently will create backlight device even if a panel +- * is not connected to the eDP/LVDS connector. +- * +- * This is less than ideal but we don't have sink information at this +- * stage since detection happens after. We can't do detection earlier +- * since MST detection needs connectors to be created first. +- */ +- if (link->connector_signal & (SIGNAL_TYPE_EDP | SIGNAL_TYPE_LVDS)) { +- /* Event if registration failed, we should continue with +- * DM initialization because not having a backlight control +- * is better then a black screen. +- */ +- amdgpu_dm_register_backlight_device(dm); +- +- if (dm->backlight_dev) +- dm->backlight_link = link; +- } +-#endif +- + out_free: + if (res) { + kfree(i2c); +-- +2.7.4 + |