dect
/
linux-2.6
Archived
13
0
Fork 0

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 <alan@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
Alan Cox 2011-07-05 15:42:23 +01:00 committed by Greg Kroah-Hartman
parent 3835ce2e69
commit b21fb57908
6 changed files with 20 additions and 10 deletions

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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);

View File

@ -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

View File

@ -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;
}

View File

@ -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);