aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3994-drm-amd-display-Only-register-backlight-device-if-em.patch
diff options
context:
space:
mode:
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.patch122
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
+