aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlan Cox <alan@linux.intel.com>2012-05-14 07:03:34 -0400
committerDave Airlie <airlied@redhat.com>2012-05-17 06:05:29 -0400
commit6607e024014e4920e8d3e43bcfeec0436d43d980 (patch)
tree67058567b0e441d84cb3ba72a361a54581bceb8e
parentf9aa76a85248565ff13dc0e10633c4343a059f71 (diff)
gma500: Fix crash on D2700MUD and various other boards
The recent changes led to the lid timer code being run on various devices. It does no harm on most but isn't needed. It also calls unconditionally into the Poulsbo backlight code which goes bang on Cedartrail. Signed-off-by: Alan Cox <alan@linux.intel.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
-rw-r--r--drivers/gpu/drm/gma500/psb_device.c10
-rw-r--r--drivers/gpu/drm/gma500/psb_drv.c6
2 files changed, 12 insertions, 4 deletions
diff --git a/drivers/gpu/drm/gma500/psb_device.c b/drivers/gpu/drm/gma500/psb_device.c
index 651af6768e14..6a67cec33845 100644
--- a/drivers/gpu/drm/gma500/psb_device.c
+++ b/drivers/gpu/drm/gma500/psb_device.c
@@ -352,8 +352,17 @@ static int psb_chip_setup(struct drm_device *dev)
352 return 0; 352 return 0;
353} 353}
354 354
355/* Not exactly an erratum more an irritation */
356static int psb_chip_errata(struct drm_device *dev)
357{
358 struct drm_psb_private *dev_priv = dev->dev_private;
359 psb_lid_timer_init(dev_priv);
360}
361
355static void psb_chip_teardown(struct drm_device *dev) 362static void psb_chip_teardown(struct drm_device *dev)
356{ 363{
364 struct drm_psb_private *dev_priv = dev->dev_private;
365 psb_lid_timer_takedown(dev_priv);
357 gma_intel_teardown_gmbus(dev); 366 gma_intel_teardown_gmbus(dev);
358} 367}
359 368
@@ -367,6 +376,7 @@ const struct psb_ops psb_chip_ops = {
367 .sgx_offset = PSB_SGX_OFFSET, 376 .sgx_offset = PSB_SGX_OFFSET,
368 .chip_setup = psb_chip_setup, 377 .chip_setup = psb_chip_setup,
369 .chip_teardown = psb_chip_teardown, 378 .chip_teardown = psb_chip_teardown,
379 .errata = psb_chip_errata,
370 380
371 .crtc_helper = &psb_intel_helper_funcs, 381 .crtc_helper = &psb_intel_helper_funcs,
372 .crtc_funcs = &psb_intel_crtc_funcs, 382 .crtc_funcs = &psb_intel_crtc_funcs,
diff --git a/drivers/gpu/drm/gma500/psb_drv.c b/drivers/gpu/drm/gma500/psb_drv.c
index 7473d3b8fffe..c4c6c8ea129a 100644
--- a/drivers/gpu/drm/gma500/psb_drv.c
+++ b/drivers/gpu/drm/gma500/psb_drv.c
@@ -208,11 +208,11 @@ static int psb_driver_unload(struct drm_device *dev)
208 psb_modeset_cleanup(dev); 208 psb_modeset_cleanup(dev);
209 209
210 if (dev_priv) { 210 if (dev_priv) {
211 psb_intel_opregion_fini(dev);
212 psb_lid_timer_takedown(dev_priv);
213 211
214 if (dev_priv->ops->chip_teardown) 212 if (dev_priv->ops->chip_teardown)
215 dev_priv->ops->chip_teardown(dev); 213 dev_priv->ops->chip_teardown(dev);
214
215 psb_intel_opregion_fini(dev);
216 psb_do_takedown(dev); 216 psb_do_takedown(dev);
217 217
218 218
@@ -336,8 +336,6 @@ static int psb_driver_load(struct drm_device *dev, unsigned long chipset)
336 PSB_WSGX32(0x30000000, PSB_CR_BIF_3D_REQ_BASE); 336 PSB_WSGX32(0x30000000, PSB_CR_BIF_3D_REQ_BASE);
337 337
338 acpi_video_register(); 338 acpi_video_register();
339 if (dev_priv->opregion.lid_state)
340 psb_lid_timer_init(dev_priv);
341 339
342 ret = drm_vblank_init(dev, dev_priv->num_pipe); 340 ret = drm_vblank_init(dev, dev_priv->num_pipe);
343 if (ret) 341 if (ret)