diff options
author | Alex Deucher <alexander.deucher@amd.com> | 2018-03-08 09:56:01 -0500 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2018-03-14 16:08:40 -0400 |
commit | a59b3c80fd0041223ccf720504974a543b81b1d0 (patch) | |
tree | a882f3883661b92385cc0d1365c4ba6f9497754f /drivers/gpu/drm/amd | |
parent | 0660b58c9038f5ef94b8fe33716449945ea786e5 (diff) |
drm/amdgpu: save/restore backlight level in legacy dce code
Save/restore the backlight level scratch register in S3/S4 so the
backlight level comes back at the previously requested level.
Bug: https://bugzilla.kernel.org/show_bug.cgi?id=199047
Fixes: 4ec6ecf48c64d (drm/amdgpu: drop scratch regs save and restore from S3/S4 handling)
Acked-by: Michel Dänzer <michel.daenzer@amd.com>
Reviewed-by: Harry Wentland <harry.wentland@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/atombios_encoders.c | 4 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/atombios_encoders.h | 5 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/dce_v10_0.c | 8 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/dce_v11_0.c | 8 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/dce_v6_0.c | 8 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/dce_v8_0.c | 8 |
7 files changed, 40 insertions, 2 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h index d9533bbc467c..588cf6594391 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h | |||
@@ -350,6 +350,7 @@ struct amdgpu_mode_info { | |||
350 | u16 firmware_flags; | 350 | u16 firmware_flags; |
351 | /* pointer to backlight encoder */ | 351 | /* pointer to backlight encoder */ |
352 | struct amdgpu_encoder *bl_encoder; | 352 | struct amdgpu_encoder *bl_encoder; |
353 | u8 bl_level; /* saved backlight level */ | ||
353 | struct amdgpu_audio audio; /* audio stuff */ | 354 | struct amdgpu_audio audio; /* audio stuff */ |
354 | int num_crtc; /* number of crtcs */ | 355 | int num_crtc; /* number of crtcs */ |
355 | int num_hpd; /* number of hpd pins */ | 356 | int num_hpd; /* number of hpd pins */ |
diff --git a/drivers/gpu/drm/amd/amdgpu/atombios_encoders.c b/drivers/gpu/drm/amd/amdgpu/atombios_encoders.c index 2af26d2da127..d702fb8e3427 100644 --- a/drivers/gpu/drm/amd/amdgpu/atombios_encoders.c +++ b/drivers/gpu/drm/amd/amdgpu/atombios_encoders.c | |||
@@ -34,7 +34,7 @@ | |||
34 | #include <linux/backlight.h> | 34 | #include <linux/backlight.h> |
35 | #include "bif/bif_4_1_d.h" | 35 | #include "bif/bif_4_1_d.h" |
36 | 36 | ||
37 | static u8 | 37 | u8 |
38 | amdgpu_atombios_encoder_get_backlight_level_from_reg(struct amdgpu_device *adev) | 38 | amdgpu_atombios_encoder_get_backlight_level_from_reg(struct amdgpu_device *adev) |
39 | { | 39 | { |
40 | u8 backlight_level; | 40 | u8 backlight_level; |
@@ -48,7 +48,7 @@ amdgpu_atombios_encoder_get_backlight_level_from_reg(struct amdgpu_device *adev) | |||
48 | return backlight_level; | 48 | return backlight_level; |
49 | } | 49 | } |
50 | 50 | ||
51 | static void | 51 | void |
52 | amdgpu_atombios_encoder_set_backlight_level_to_reg(struct amdgpu_device *adev, | 52 | amdgpu_atombios_encoder_set_backlight_level_to_reg(struct amdgpu_device *adev, |
53 | u8 backlight_level) | 53 | u8 backlight_level) |
54 | { | 54 | { |
diff --git a/drivers/gpu/drm/amd/amdgpu/atombios_encoders.h b/drivers/gpu/drm/amd/amdgpu/atombios_encoders.h index 2bdec40515ce..f77cbdef679e 100644 --- a/drivers/gpu/drm/amd/amdgpu/atombios_encoders.h +++ b/drivers/gpu/drm/amd/amdgpu/atombios_encoders.h | |||
@@ -25,6 +25,11 @@ | |||
25 | #define __ATOMBIOS_ENCODER_H__ | 25 | #define __ATOMBIOS_ENCODER_H__ |
26 | 26 | ||
27 | u8 | 27 | u8 |
28 | amdgpu_atombios_encoder_get_backlight_level_from_reg(struct amdgpu_device *adev); | ||
29 | void | ||
30 | amdgpu_atombios_encoder_set_backlight_level_to_reg(struct amdgpu_device *adev, | ||
31 | u8 backlight_level); | ||
32 | u8 | ||
28 | amdgpu_atombios_encoder_get_backlight_level(struct amdgpu_encoder *amdgpu_encoder); | 33 | amdgpu_atombios_encoder_get_backlight_level(struct amdgpu_encoder *amdgpu_encoder); |
29 | void | 34 | void |
30 | amdgpu_atombios_encoder_set_backlight_level(struct amdgpu_encoder *amdgpu_encoder, | 35 | amdgpu_atombios_encoder_set_backlight_level(struct amdgpu_encoder *amdgpu_encoder, |
diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c index 7ea900010702..452f88ea46a2 100644 --- a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c +++ b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c | |||
@@ -2862,6 +2862,11 @@ static int dce_v10_0_hw_fini(void *handle) | |||
2862 | 2862 | ||
2863 | static int dce_v10_0_suspend(void *handle) | 2863 | static int dce_v10_0_suspend(void *handle) |
2864 | { | 2864 | { |
2865 | struct amdgpu_device *adev = (struct amdgpu_device *)handle; | ||
2866 | |||
2867 | adev->mode_info.bl_level = | ||
2868 | amdgpu_atombios_encoder_get_backlight_level_from_reg(adev); | ||
2869 | |||
2865 | return dce_v10_0_hw_fini(handle); | 2870 | return dce_v10_0_hw_fini(handle); |
2866 | } | 2871 | } |
2867 | 2872 | ||
@@ -2870,6 +2875,9 @@ static int dce_v10_0_resume(void *handle) | |||
2870 | struct amdgpu_device *adev = (struct amdgpu_device *)handle; | 2875 | struct amdgpu_device *adev = (struct amdgpu_device *)handle; |
2871 | int ret; | 2876 | int ret; |
2872 | 2877 | ||
2878 | amdgpu_atombios_encoder_set_backlight_level_to_reg(adev, | ||
2879 | adev->mode_info.bl_level); | ||
2880 | |||
2873 | ret = dce_v10_0_hw_init(handle); | 2881 | ret = dce_v10_0_hw_init(handle); |
2874 | 2882 | ||
2875 | /* turn on the BL */ | 2883 | /* turn on the BL */ |
diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c index 158b92ea435f..a7c1c584a191 100644 --- a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c +++ b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c | |||
@@ -2988,6 +2988,11 @@ static int dce_v11_0_hw_fini(void *handle) | |||
2988 | 2988 | ||
2989 | static int dce_v11_0_suspend(void *handle) | 2989 | static int dce_v11_0_suspend(void *handle) |
2990 | { | 2990 | { |
2991 | struct amdgpu_device *adev = (struct amdgpu_device *)handle; | ||
2992 | |||
2993 | adev->mode_info.bl_level = | ||
2994 | amdgpu_atombios_encoder_get_backlight_level_from_reg(adev); | ||
2995 | |||
2991 | return dce_v11_0_hw_fini(handle); | 2996 | return dce_v11_0_hw_fini(handle); |
2992 | } | 2997 | } |
2993 | 2998 | ||
@@ -2996,6 +3001,9 @@ static int dce_v11_0_resume(void *handle) | |||
2996 | struct amdgpu_device *adev = (struct amdgpu_device *)handle; | 3001 | struct amdgpu_device *adev = (struct amdgpu_device *)handle; |
2997 | int ret; | 3002 | int ret; |
2998 | 3003 | ||
3004 | amdgpu_atombios_encoder_set_backlight_level_to_reg(adev, | ||
3005 | adev->mode_info.bl_level); | ||
3006 | |||
2999 | ret = dce_v11_0_hw_init(handle); | 3007 | ret = dce_v11_0_hw_init(handle); |
3000 | 3008 | ||
3001 | /* turn on the BL */ | 3009 | /* turn on the BL */ |
diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c index ee2162e81da9..9f67b7fd3487 100644 --- a/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c +++ b/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c | |||
@@ -2730,6 +2730,11 @@ static int dce_v6_0_hw_fini(void *handle) | |||
2730 | 2730 | ||
2731 | static int dce_v6_0_suspend(void *handle) | 2731 | static int dce_v6_0_suspend(void *handle) |
2732 | { | 2732 | { |
2733 | struct amdgpu_device *adev = (struct amdgpu_device *)handle; | ||
2734 | |||
2735 | adev->mode_info.bl_level = | ||
2736 | amdgpu_atombios_encoder_get_backlight_level_from_reg(adev); | ||
2737 | |||
2733 | return dce_v6_0_hw_fini(handle); | 2738 | return dce_v6_0_hw_fini(handle); |
2734 | } | 2739 | } |
2735 | 2740 | ||
@@ -2738,6 +2743,9 @@ static int dce_v6_0_resume(void *handle) | |||
2738 | struct amdgpu_device *adev = (struct amdgpu_device *)handle; | 2743 | struct amdgpu_device *adev = (struct amdgpu_device *)handle; |
2739 | int ret; | 2744 | int ret; |
2740 | 2745 | ||
2746 | amdgpu_atombios_encoder_set_backlight_level_to_reg(adev, | ||
2747 | adev->mode_info.bl_level); | ||
2748 | |||
2741 | ret = dce_v6_0_hw_init(handle); | 2749 | ret = dce_v6_0_hw_init(handle); |
2742 | 2750 | ||
2743 | /* turn on the BL */ | 2751 | /* turn on the BL */ |
diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c index 8dbe97dff58c..f55422cbd77a 100644 --- a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c +++ b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c | |||
@@ -2760,6 +2760,11 @@ static int dce_v8_0_hw_fini(void *handle) | |||
2760 | 2760 | ||
2761 | static int dce_v8_0_suspend(void *handle) | 2761 | static int dce_v8_0_suspend(void *handle) |
2762 | { | 2762 | { |
2763 | struct amdgpu_device *adev = (struct amdgpu_device *)handle; | ||
2764 | |||
2765 | adev->mode_info.bl_level = | ||
2766 | amdgpu_atombios_encoder_get_backlight_level_from_reg(adev); | ||
2767 | |||
2763 | return dce_v8_0_hw_fini(handle); | 2768 | return dce_v8_0_hw_fini(handle); |
2764 | } | 2769 | } |
2765 | 2770 | ||
@@ -2768,6 +2773,9 @@ static int dce_v8_0_resume(void *handle) | |||
2768 | struct amdgpu_device *adev = (struct amdgpu_device *)handle; | 2773 | struct amdgpu_device *adev = (struct amdgpu_device *)handle; |
2769 | int ret; | 2774 | int ret; |
2770 | 2775 | ||
2776 | amdgpu_atombios_encoder_set_backlight_level_to_reg(adev, | ||
2777 | adev->mode_info.bl_level); | ||
2778 | |||
2771 | ret = dce_v8_0_hw_init(handle); | 2779 | ret = dce_v8_0_hw_init(handle); |
2772 | 2780 | ||
2773 | /* turn on the BL */ | 2781 | /* turn on the BL */ |