aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Deucher <alexander.deucher@amd.com>2012-09-14 09:45:50 -0400
committerAlex Deucher <alexander.deucher@amd.com>2012-09-27 10:22:42 -0400
commitbced76f27165ca7733437715185c3a1aa526f7a1 (patch)
treeb7c782d651723e49f19819a2beeccc827a0fcad5
parent6d92f81dcf2d40b8ebb947bba5435642b830f649 (diff)
drm/radeon: restore backlight level on resume
Restore the backlight level on resume. Some systems need to explicitly restore the backlight level on resume. Fixes panel resume on my Trinity laptop and may fix the following bugs: https://bugs.freedesktop.org/show_bug.cgi?id=43829 https://bugzilla.kernel.org/show_bug.cgi?id=46241 Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r--drivers/gpu/drm/radeon/atombios_encoders.c4
-rw-r--r--drivers/gpu/drm/radeon/radeon_device.c7
-rw-r--r--drivers/gpu/drm/radeon/radeon_encoders.c1
-rw-r--r--drivers/gpu/drm/radeon/radeon_mode.h6
4 files changed, 14 insertions, 4 deletions
diff --git a/drivers/gpu/drm/radeon/atombios_encoders.c b/drivers/gpu/drm/radeon/atombios_encoders.c
index 5ce13b8fbe6c..806cbcc94fdd 100644
--- a/drivers/gpu/drm/radeon/atombios_encoders.c
+++ b/drivers/gpu/drm/radeon/atombios_encoders.c
@@ -32,8 +32,6 @@
32 32
33extern int atom_debug; 33extern int atom_debug;
34 34
35#if defined(CONFIG_BACKLIGHT_CLASS_DEVICE) || defined(CONFIG_BACKLIGHT_CLASS_DEVICE_MODULE)
36
37static u8 35static u8
38radeon_atom_get_backlight_level_from_reg(struct radeon_device *rdev) 36radeon_atom_get_backlight_level_from_reg(struct radeon_device *rdev)
39{ 37{
@@ -134,6 +132,8 @@ atombios_set_backlight_level(struct radeon_encoder *radeon_encoder, u8 level)
134 } 132 }
135} 133}
136 134
135#if defined(CONFIG_BACKLIGHT_CLASS_DEVICE) || defined(CONFIG_BACKLIGHT_CLASS_DEVICE_MODULE)
136
137static u8 radeon_atom_bl_level(struct backlight_device *bd) 137static u8 radeon_atom_bl_level(struct backlight_device *bd)
138{ 138{
139 u8 level; 139 u8 level;
diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c
index 6fca11c64dcd..64a42647f08a 100644
--- a/drivers/gpu/drm/radeon/radeon_device.c
+++ b/drivers/gpu/drm/radeon/radeon_device.c
@@ -1282,6 +1282,13 @@ int radeon_resume_kms(struct drm_device *dev)
1282 if (rdev->is_atom_bios) { 1282 if (rdev->is_atom_bios) {
1283 radeon_atom_encoder_init(rdev); 1283 radeon_atom_encoder_init(rdev);
1284 radeon_atom_disp_eng_pll_init(rdev); 1284 radeon_atom_disp_eng_pll_init(rdev);
1285 /* turn on the BL */
1286 if (rdev->mode_info.bl_encoder) {
1287 u8 bl_level = radeon_get_backlight_level(rdev,
1288 rdev->mode_info.bl_encoder);
1289 radeon_set_backlight_level(rdev, rdev->mode_info.bl_encoder,
1290 bl_level);
1291 }
1285 } 1292 }
1286 /* reset hpd state */ 1293 /* reset hpd state */
1287 radeon_hpd_init(rdev); 1294 radeon_hpd_init(rdev);
diff --git a/drivers/gpu/drm/radeon/radeon_encoders.c b/drivers/gpu/drm/radeon/radeon_encoders.c
index 93b0d64b3f6d..e66c807df9e6 100644
--- a/drivers/gpu/drm/radeon/radeon_encoders.c
+++ b/drivers/gpu/drm/radeon/radeon_encoders.c
@@ -179,6 +179,7 @@ radeon_link_encoder_connector(struct drm_device *dev)
179 radeon_atom_backlight_init(radeon_encoder, connector); 179 radeon_atom_backlight_init(radeon_encoder, connector);
180 else 180 else
181 radeon_legacy_backlight_init(radeon_encoder, connector); 181 radeon_legacy_backlight_init(radeon_encoder, connector);
182 rdev->mode_info.bl_encoder = radeon_encoder;
182 } 183 }
183 } 184 }
184 } 185 }
diff --git a/drivers/gpu/drm/radeon/radeon_mode.h b/drivers/gpu/drm/radeon/radeon_mode.h
index 917d02750cf7..527761801590 100644
--- a/drivers/gpu/drm/radeon/radeon_mode.h
+++ b/drivers/gpu/drm/radeon/radeon_mode.h
@@ -254,12 +254,14 @@ struct radeon_mode_info {
254 struct radeon_fbdev *rfbdev; 254 struct radeon_fbdev *rfbdev;
255 /* firmware flags */ 255 /* firmware flags */
256 u16 firmware_flags; 256 u16 firmware_flags;
257 /* pointer to backlight encoder */
258 struct radeon_encoder *bl_encoder;
257}; 259};
258 260
259#if defined(CONFIG_BACKLIGHT_CLASS_DEVICE) || defined(CONFIG_BACKLIGHT_CLASS_DEVICE_MODULE)
260
261#define RADEON_MAX_BL_LEVEL 0xFF 261#define RADEON_MAX_BL_LEVEL 0xFF
262 262
263#if defined(CONFIG_BACKLIGHT_CLASS_DEVICE) || defined(CONFIG_BACKLIGHT_CLASS_DEVICE_MODULE)
264
263struct radeon_backlight_privdata { 265struct radeon_backlight_privdata {
264 struct radeon_encoder *encoder; 266 struct radeon_encoder *encoder;
265 uint8_t negative; 267 uint8_t negative;