Commit b21fb579 authored by Alan Cox's avatar Alan Cox Committed by Greg Kroah-Hartman

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: default avatarAlan Cox <alan@linux.intel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 3835ce2e
...@@ -321,7 +321,7 @@ static void cdv_get_core_freq(struct drm_device *dev) ...@@ -321,7 +321,7 @@ static void cdv_get_core_freq(struct drm_device *dev)
static int cdv_chip_setup(struct drm_device *dev) static int cdv_chip_setup(struct drm_device *dev)
{ {
cdv_get_core_freq(dev); cdv_get_core_freq(dev);
psb_intel_opregion_init(dev); intel_opregion_init(dev);
psb_intel_init_bios(dev); psb_intel_init_bios(dev);
return 0; return 0;
} }
......
...@@ -322,7 +322,7 @@ static void psb_get_core_freq(struct drm_device *dev) ...@@ -322,7 +322,7 @@ static void psb_get_core_freq(struct drm_device *dev)
static int psb_chip_setup(struct drm_device *dev) static int psb_chip_setup(struct drm_device *dev)
{ {
psb_get_core_freq(dev); psb_get_core_freq(dev);
psb_intel_opregion_init(dev); intel_opregion_init(dev);
psb_intel_init_bios(dev); psb_intel_init_bios(dev);
return 0; return 0;
} }
......
...@@ -245,6 +245,7 @@ static int psb_driver_unload(struct drm_device *dev) ...@@ -245,6 +245,7 @@ static int psb_driver_unload(struct drm_device *dev)
if (dev_priv) { if (dev_priv) {
psb_lid_timer_takedown(dev_priv); psb_lid_timer_takedown(dev_priv);
intel_opregion_exit(dev);
psb_do_takedown(dev); psb_do_takedown(dev);
......
...@@ -727,9 +727,10 @@ extern int mdfld_enable_te(struct drm_device *dev, int pipe); ...@@ -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); 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 * framebuffer.c
......
...@@ -47,10 +47,9 @@ struct opregion_acpi { ...@@ -47,10 +47,9 @@ struct opregion_acpi {
/*FIXME: add it later*/ /*FIXME: add it later*/
} __packed; } __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 drm_psb_private *dev_priv = dev->dev_private;
/*struct psb_intel_opregion * opregion = &dev_priv->opregion;*/
u32 opregion_phy; u32 opregion_phy;
void *base; void *base;
u32 *lid_state; u32 *lid_state;
...@@ -68,6 +67,15 @@ int psb_intel_opregion_init(struct drm_device *dev) ...@@ -68,6 +67,15 @@ int psb_intel_opregion_init(struct drm_device *dev)
lid_state = base + 0x01ac; lid_state = base + 0x01ac;
dev_priv->lid_state = lid_state; dev_priv->lid_state = lid_state;
dev_priv->lid_last_state = *lid_state; dev_priv->lid_last_state = readl(lid_state);
return 0; 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
...@@ -32,10 +32,10 @@ static void psb_lid_timer_func(unsigned long data) ...@@ -32,10 +32,10 @@ static void psb_lid_timer_func(unsigned long data)
u32 *lid_state = dev_priv->lid_state; u32 *lid_state = dev_priv->lid_state;
u32 pp_status; u32 pp_status;
if (*lid_state == dev_priv->lid_last_state) if (readl(lid_state) == dev_priv->lid_last_state)
goto lid_timer_schedule; goto lid_timer_schedule;
if ((*lid_state) & 0x01) { if ((readl(lid_state)) & 0x01) {
/*lid state is open*/ /*lid state is open*/
REG_WRITE(PP_CONTROL, REG_READ(PP_CONTROL) | POWER_TARGET_ON); REG_WRITE(PP_CONTROL, REG_READ(PP_CONTROL) | POWER_TARGET_ON);
do { do {
...@@ -54,7 +54,7 @@ static void psb_lid_timer_func(unsigned long data) ...@@ -54,7 +54,7 @@ static void psb_lid_timer_func(unsigned long data)
} }
/* printk(KERN_INFO"%s: lid: closed\n", __FUNCTION__); */ /* 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: lid_timer_schedule:
spin_lock_irqsave(&dev_priv->lid_lock, irq_flags); spin_lock_irqsave(&dev_priv->lid_lock, irq_flags);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment