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:
parent
3835ce2e69
commit
b21fb57908
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user