Skip to content

Commit

Permalink
gma500: Fix crash on D2700MUD and various other boards
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Alan Cox authored and Dave Airlie committed May 17, 2012
1 parent f9aa76a commit 6607e02
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 4 deletions.
10 changes: 10 additions & 0 deletions drivers/gpu/drm/gma500/psb_device.c
Original file line number Diff line number Diff line change
Expand Up @@ -352,8 +352,17 @@ static int psb_chip_setup(struct drm_device *dev)
return 0;
}

/* Not exactly an erratum more an irritation */
static int psb_chip_errata(struct drm_device *dev)
{
struct drm_psb_private *dev_priv = dev->dev_private;
psb_lid_timer_init(dev_priv);
}

static void psb_chip_teardown(struct drm_device *dev)
{
struct drm_psb_private *dev_priv = dev->dev_private;
psb_lid_timer_takedown(dev_priv);
gma_intel_teardown_gmbus(dev);
}

Expand All @@ -367,6 +376,7 @@ const struct psb_ops psb_chip_ops = {
.sgx_offset = PSB_SGX_OFFSET,
.chip_setup = psb_chip_setup,
.chip_teardown = psb_chip_teardown,
.errata = psb_chip_errata,

.crtc_helper = &psb_intel_helper_funcs,
.crtc_funcs = &psb_intel_crtc_funcs,
Expand Down
6 changes: 2 additions & 4 deletions drivers/gpu/drm/gma500/psb_drv.c
Original file line number Diff line number Diff line change
Expand Up @@ -208,11 +208,11 @@ static int psb_driver_unload(struct drm_device *dev)
psb_modeset_cleanup(dev);

if (dev_priv) {
psb_intel_opregion_fini(dev);
psb_lid_timer_takedown(dev_priv);

if (dev_priv->ops->chip_teardown)
dev_priv->ops->chip_teardown(dev);

psb_intel_opregion_fini(dev);
psb_do_takedown(dev);


Expand Down Expand Up @@ -336,8 +336,6 @@ static int psb_driver_load(struct drm_device *dev, unsigned long chipset)
PSB_WSGX32(0x30000000, PSB_CR_BIF_3D_REQ_BASE);

acpi_video_register();
if (dev_priv->opregion.lid_state)
psb_lid_timer_init(dev_priv);

ret = drm_vblank_init(dev, dev_priv->num_pipe);
if (ret)
Expand Down

0 comments on commit 6607e02

Please sign in to comment.