diff options
| author | Alan Cox <alan@linux.intel.com> | 2012-07-16 12:51:50 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-07-16 12:20:33 -0400 |
| commit | f507598b06ab00fb46495ccdeeb3ef9c1dc43dee (patch) | |
| tree | e8fb87140920808eaf64fb917b01d6349698510e | |
| parent | 84a1caf1453c3d44050bd22db958af4a7f99315c (diff) | |
gma500: Fix lid related crash
We now set up the lid timer before we set up the backlight. On some
devices that causes a crash as we do a backlight change before or during
the setup.
As this fixes a crash on boot regression on some setups it ought to go
in ASAP, especially as all the user gets is a blank screen.
Signed-off-by: Alan Cox <alan@linux.intel.com>
Tested-by: Mattia Dongili <malattia@linux.it>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
| -rw-r--r-- | drivers/gpu/drm/gma500/psb_device.c | 12 |
1 files changed, 4 insertions, 8 deletions
diff --git a/drivers/gpu/drm/gma500/psb_device.c b/drivers/gpu/drm/gma500/psb_device.c index eff039bf92d4..5971bc82b765 100644 --- a/drivers/gpu/drm/gma500/psb_device.c +++ b/drivers/gpu/drm/gma500/psb_device.c | |||
| @@ -144,6 +144,10 @@ static int psb_backlight_init(struct drm_device *dev) | |||
| 144 | psb_backlight_device->props.max_brightness = 100; | 144 | psb_backlight_device->props.max_brightness = 100; |
| 145 | backlight_update_status(psb_backlight_device); | 145 | backlight_update_status(psb_backlight_device); |
| 146 | dev_priv->backlight_device = psb_backlight_device; | 146 | dev_priv->backlight_device = psb_backlight_device; |
| 147 | |||
| 148 | /* This must occur after the backlight is properly initialised */ | ||
| 149 | psb_lid_timer_init(dev_priv); | ||
| 150 | |||
| 147 | return 0; | 151 | return 0; |
| 148 | } | 152 | } |
| 149 | 153 | ||
| @@ -354,13 +358,6 @@ static int psb_chip_setup(struct drm_device *dev) | |||
| 354 | return 0; | 358 | return 0; |
| 355 | } | 359 | } |
| 356 | 360 | ||
| 357 | /* Not exactly an erratum more an irritation */ | ||
| 358 | static void psb_chip_errata(struct drm_device *dev) | ||
| 359 | { | ||
| 360 | struct drm_psb_private *dev_priv = dev->dev_private; | ||
| 361 | psb_lid_timer_init(dev_priv); | ||
| 362 | } | ||
| 363 | |||
| 364 | static void psb_chip_teardown(struct drm_device *dev) | 361 | static void psb_chip_teardown(struct drm_device *dev) |
| 365 | { | 362 | { |
| 366 | struct drm_psb_private *dev_priv = dev->dev_private; | 363 | struct drm_psb_private *dev_priv = dev->dev_private; |
| @@ -379,7 +376,6 @@ const struct psb_ops psb_chip_ops = { | |||
| 379 | .sgx_offset = PSB_SGX_OFFSET, | 376 | .sgx_offset = PSB_SGX_OFFSET, |
| 380 | .chip_setup = psb_chip_setup, | 377 | .chip_setup = psb_chip_setup, |
| 381 | .chip_teardown = psb_chip_teardown, | 378 | .chip_teardown = psb_chip_teardown, |
| 382 | .errata = psb_chip_errata, | ||
| 383 | 379 | ||
| 384 | .crtc_helper = &psb_intel_helper_funcs, | 380 | .crtc_helper = &psb_intel_helper_funcs, |
| 385 | .crtc_funcs = &psb_intel_crtc_funcs, | 381 | .crtc_funcs = &psb_intel_crtc_funcs, |
