lkml.org 
[lkml]   [2011]   [Jul]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 37/49] gma500: tidy up the opregion and lid code
    Date
    From: Alan Cox <alan@linux.intel.com>

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

    drivers/staging/gma500/cdv_device.c | 2 +-
    drivers/staging/gma500/psb_device.c | 2 +-
    drivers/staging/gma500/psb_drv.c | 1 +
    drivers/staging/gma500/psb_drv.h | 5 +++--
    drivers/staging/gma500/psb_intel_opregion.c | 14 +++++++++++---
    drivers/staging/gma500/psb_lid.c | 6 +++---
    6 files changed, 20 insertions(+), 10 deletions(-)

    diff --git a/drivers/staging/gma500/cdv_device.c b/drivers/staging/gma500/cdv_device.c
    index bb0b3f9..5131106 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 1be6434..8ac9de7 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 69ab61b..e9772ab 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 307ff9c..ee782fa 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 97a8b00..a586f3d 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 21fd202..af32851 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);


    \
     
     \ /
      Last update: 2011-07-05 16:55    [W:0.025 / U:92.340 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site