From: Alan Cox Date: Tue, 5 Jul 2011 14:42:23 +0000 (+0100) Subject: gma500: tidy up the opregion and lid code X-Git-Tag: MMI-PSA29.97-13-9~18845^2~392 X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=b21fb57908c02a9cc0a62edcffc7fba00286e6d2;p=GitHub%2FMotorolaMobilityLLC%2Fkernel-slsi.git gma500: tidy up the opregion and lid code This is leaking an io mapping and also referencing stuff directly that should not be directly accessed. Sort it out Signed-off-by: Alan Cox Signed-off-by: Greg Kroah-Hartman --- diff --git a/drivers/staging/gma500/cdv_device.c b/drivers/staging/gma500/cdv_device.c index bb0b3f987d5d..5131106eda99 100644 --- a/drivers/staging/gma500/cdv_device.c +++ b/drivers/staging/gma500/cdv_device.c @@ -321,7 +321,7 @@ static void cdv_get_core_freq(struct drm_device *dev) static int cdv_chip_setup(struct drm_device *dev) { cdv_get_core_freq(dev); - psb_intel_opregion_init(dev); + intel_opregion_init(dev); psb_intel_init_bios(dev); return 0; } diff --git a/drivers/staging/gma500/psb_device.c b/drivers/staging/gma500/psb_device.c index 1be6434be73a..8ac9de74f763 100644 --- a/drivers/staging/gma500/psb_device.c +++ b/drivers/staging/gma500/psb_device.c @@ -322,7 +322,7 @@ static void psb_get_core_freq(struct drm_device *dev) static int psb_chip_setup(struct drm_device *dev) { psb_get_core_freq(dev); - psb_intel_opregion_init(dev); + intel_opregion_init(dev); psb_intel_init_bios(dev); return 0; } diff --git a/drivers/staging/gma500/psb_drv.c b/drivers/staging/gma500/psb_drv.c index 69ab61b192ca..e9772abc1a63 100644 --- a/drivers/staging/gma500/psb_drv.c +++ b/drivers/staging/gma500/psb_drv.c @@ -245,6 +245,7 @@ static int psb_driver_unload(struct drm_device *dev) if (dev_priv) { psb_lid_timer_takedown(dev_priv); + intel_opregion_exit(dev); psb_do_takedown(dev); diff --git a/drivers/staging/gma500/psb_drv.h b/drivers/staging/gma500/psb_drv.h index 307ff9c86fda..ee782fa2533d 100644 --- a/drivers/staging/gma500/psb_drv.h +++ b/drivers/staging/gma500/psb_drv.h @@ -727,9 +727,10 @@ extern int mdfld_enable_te(struct drm_device *dev, int pipe); extern void mdfld_disable_te(struct drm_device *dev, int pipe); /* - * psb_opregion.c + * intel_opregion.c */ -extern int psb_intel_opregion_init(struct drm_device *dev); +extern int intel_opregion_init(struct drm_device *dev); +extern int intel_opregion_exit(struct drm_device *dev); /* * framebuffer.c diff --git a/drivers/staging/gma500/psb_intel_opregion.c b/drivers/staging/gma500/psb_intel_opregion.c index 97a8b00a7e36..a586f3de7658 100644 --- a/drivers/staging/gma500/psb_intel_opregion.c +++ b/drivers/staging/gma500/psb_intel_opregion.c @@ -47,10 +47,9 @@ struct opregion_acpi { /*FIXME: add it later*/ } __packed; -int psb_intel_opregion_init(struct drm_device *dev) +int intel_opregion_init(struct drm_device *dev) { struct drm_psb_private *dev_priv = dev->dev_private; - /*struct psb_intel_opregion * opregion = &dev_priv->opregion;*/ u32 opregion_phy; void *base; u32 *lid_state; @@ -68,6 +67,15 @@ int psb_intel_opregion_init(struct drm_device *dev) lid_state = base + 0x01ac; dev_priv->lid_state = lid_state; - dev_priv->lid_last_state = *lid_state; + dev_priv->lid_last_state = readl(lid_state); return 0; } + +int intel_opregion_exit(struct drm_device *dev) +{ + struct drm_psb_private *dev_priv = dev->dev_private; + if (dev_priv->lid_state) + iounmap(dev_priv->lid_state); + return 0; +} + \ No newline at end of file diff --git a/drivers/staging/gma500/psb_lid.c b/drivers/staging/gma500/psb_lid.c index 21fd202f2931..af328516561e 100644 --- a/drivers/staging/gma500/psb_lid.c +++ b/drivers/staging/gma500/psb_lid.c @@ -32,10 +32,10 @@ static void psb_lid_timer_func(unsigned long data) u32 *lid_state = dev_priv->lid_state; u32 pp_status; - if (*lid_state == dev_priv->lid_last_state) + if (readl(lid_state) == dev_priv->lid_last_state) goto lid_timer_schedule; - if ((*lid_state) & 0x01) { + if ((readl(lid_state)) & 0x01) { /*lid state is open*/ REG_WRITE(PP_CONTROL, REG_READ(PP_CONTROL) | POWER_TARGET_ON); do { @@ -54,7 +54,7 @@ static void psb_lid_timer_func(unsigned long data) } /* printk(KERN_INFO"%s: lid: closed\n", __FUNCTION__); */ - dev_priv->lid_last_state = *lid_state; + dev_priv->lid_last_state = readl(lid_state); lid_timer_schedule: spin_lock_irqsave(&dev_priv->lid_lock, irq_flags);