[ARM] pxa/sharpsl_pm: merge pxa-specific code into generic one
authorDmitry Eremin-Solenikov <dbaryshkov@gmail.com>
Sat, 28 Mar 2009 15:18:52 +0000 (18:18 +0300)
committerEric Miao <eric.y.miao@gmail.com>
Thu, 11 Jun 2009 14:20:42 +0000 (22:20 +0800)
As pxa now is the only user of sharpsl_pm we can drop several startup
functions into generic code thus dropping several global functions.

Signed-off-by: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
Signed-off-by: Eric Miao <eric.miao@marvell.com>
arch/arm/mach-pxa/corgi_pm.c
arch/arm/mach-pxa/include/mach/sharpsl_pm.h
arch/arm/mach-pxa/sharpsl.h
arch/arm/mach-pxa/sharpsl_pm.c
arch/arm/mach-pxa/spitz_pm.c

index 7f04b3a761d12d2bda0af50d07b85ae889f68a78..a093282fe4db99c0cfbbc3de562bed42043c28b7 100644 (file)
@@ -41,7 +41,6 @@ static void corgi_charger_init(void)
        pxa_gpio_mode(CORGI_GPIO_CHRG_ON | GPIO_OUT);
        pxa_gpio_mode(CORGI_GPIO_CHRG_UKN | GPIO_OUT);
        pxa_gpio_mode(CORGI_GPIO_KEY_INT | GPIO_IN);
-       sharpsl_pm_pxa_init();
 }
 
 static void corgi_measure_temp(int on)
@@ -191,7 +190,7 @@ unsigned long corgipm_read_devdata(int type)
 
 static struct sharpsl_charger_machinfo corgi_pm_machinfo = {
        .init            = corgi_charger_init,
-       .exit            = sharpsl_pm_pxa_remove,
+       .exit            = NULL,
        .gpio_batlock    = CORGI_GPIO_BAT_COVER,
        .gpio_acin       = CORGI_GPIO_AC_IN,
        .gpio_batfull    = CORGI_GPIO_CHRG_FULL,
index 2d00db22b9818b7a9669ff9c9061437fddb9ad0c..1920dc6b05dcf0f07dfcab2059f46b09679a9e52 100644 (file)
@@ -8,8 +8,8 @@
  * published by the Free Software Foundation.
  *
  */
-
-#include <linux/interrupt.h>
+#ifndef _MACH_SHARPSL_PM
+#define _MACH_SHARPSL_PM
 
 struct sharpsl_charger_machinfo {
        void (*init)(void);
@@ -100,7 +100,5 @@ extern struct sharpsl_pm_status sharpsl_pm;
 
 void sharpsl_battery_kick(void);
 void sharpsl_pm_led(int val);
-irqreturn_t sharpsl_ac_isr(int irq, void *dev_id);
-irqreturn_t sharpsl_chrg_full_isr(int irq, void *dev_id);
-irqreturn_t sharpsl_fatal_isr(int irq, void *dev_id);
 
+#endif
index f1cd00ea032272dc2b6a9855f14cf2b6e4ae044b..55259f4756c8993e0b5c7bd5e9aa0beb1f77a13b 100644 (file)
@@ -44,8 +44,6 @@ void corgi_lcdtg_hw_init(int mode);
 
 extern struct battery_thresh spitz_battery_levels_acin[];
 extern struct battery_thresh spitz_battery_levels_noac[];
-void sharpsl_pm_pxa_init(void);
-void sharpsl_pm_pxa_remove(void);
 int sharpsl_pm_pxa_read_max1111(int channel);
 
 
index 9d61c4916968b7271f48235557cafc12cba4df53..540b567278f59da8e586b9829d5f8c61346511d6 100644 (file)
 #undef DEBUG
 
 #include <linux/module.h>
-#include <linux/init.h>
 #include <linux/kernel.h>
 #include <linux/interrupt.h>
 #include <linux/irq.h>
 #include <linux/platform_device.h>
 #include <linux/apm-emulation.h>
 #include <linux/timer.h>
-#include <linux/apm_bios.h>
 #include <linux/delay.h>
 #include <linux/leds.h>
 #include <linux/suspend.h>
 
-#include <mach/hardware.h>
 #include <asm/mach-types.h>
 #include <mach/pm.h>
 #include <mach/pxa2xx-regs.h>
@@ -36,6 +33,8 @@
 #include <mach/sharpsl.h>
 #include <mach/sharpsl_pm.h>
 
+#include "sharpsl.h"
+
 /*
  * Constants
  */
@@ -73,8 +72,8 @@ static void sharpsl_battery_thread(struct work_struct *private_);
  * Variables
  */
 struct sharpsl_pm_status sharpsl_pm;
-DECLARE_DELAYED_WORK(toggle_charger, sharpsl_charge_toggle);
-DECLARE_DELAYED_WORK(sharpsl_bat, sharpsl_battery_thread);
+static DECLARE_DELAYED_WORK(toggle_charger, sharpsl_charge_toggle);
+static DECLARE_DELAYED_WORK(sharpsl_bat, sharpsl_battery_thread);
 DEFINE_LED_TRIGGER(sharpsl_charge_led_trigger);
 
 
@@ -194,52 +193,6 @@ int sharpsl_pm_pxa_read_max1111(int channel)
 #endif
 }
 
-void sharpsl_pm_pxa_init(void)
-{
-       pxa_gpio_mode(sharpsl_pm.machinfo->gpio_acin | GPIO_IN);
-       pxa_gpio_mode(sharpsl_pm.machinfo->gpio_batfull | GPIO_IN);
-       pxa_gpio_mode(sharpsl_pm.machinfo->gpio_batlock | GPIO_IN);
-
-       /* Register interrupt handlers */
-       if (request_irq(IRQ_GPIO(sharpsl_pm.machinfo->gpio_acin), sharpsl_ac_isr, IRQF_DISABLED, "AC Input Detect", sharpsl_ac_isr)) {
-               dev_err(sharpsl_pm.dev, "Could not get irq %d.\n", IRQ_GPIO(sharpsl_pm.machinfo->gpio_acin));
-       }
-       else set_irq_type(IRQ_GPIO(sharpsl_pm.machinfo->gpio_acin),IRQ_TYPE_EDGE_BOTH);
-
-       if (request_irq(IRQ_GPIO(sharpsl_pm.machinfo->gpio_batlock), sharpsl_fatal_isr, IRQF_DISABLED, "Battery Cover", sharpsl_fatal_isr)) {
-               dev_err(sharpsl_pm.dev, "Could not get irq %d.\n", IRQ_GPIO(sharpsl_pm.machinfo->gpio_batlock));
-       }
-       else set_irq_type(IRQ_GPIO(sharpsl_pm.machinfo->gpio_batlock),IRQ_TYPE_EDGE_FALLING);
-
-       if (sharpsl_pm.machinfo->gpio_fatal) {
-               if (request_irq(IRQ_GPIO(sharpsl_pm.machinfo->gpio_fatal), sharpsl_fatal_isr, IRQF_DISABLED, "Fatal Battery", sharpsl_fatal_isr)) {
-                       dev_err(sharpsl_pm.dev, "Could not get irq %d.\n", IRQ_GPIO(sharpsl_pm.machinfo->gpio_fatal));
-               }
-               else set_irq_type(IRQ_GPIO(sharpsl_pm.machinfo->gpio_fatal),IRQ_TYPE_EDGE_FALLING);
-       }
-
-       if (sharpsl_pm.machinfo->batfull_irq)
-       {
-               /* Register interrupt handler. */
-               if (request_irq(IRQ_GPIO(sharpsl_pm.machinfo->gpio_batfull), sharpsl_chrg_full_isr, IRQF_DISABLED, "CO", sharpsl_chrg_full_isr)) {
-                       dev_err(sharpsl_pm.dev, "Could not get irq %d.\n", IRQ_GPIO(sharpsl_pm.machinfo->gpio_batfull));
-               }
-               else set_irq_type(IRQ_GPIO(sharpsl_pm.machinfo->gpio_batfull),IRQ_TYPE_EDGE_RISING);
-       }
-}
-
-void sharpsl_pm_pxa_remove(void)
-{
-       free_irq(IRQ_GPIO(sharpsl_pm.machinfo->gpio_acin), sharpsl_ac_isr);
-       free_irq(IRQ_GPIO(sharpsl_pm.machinfo->gpio_batlock), sharpsl_fatal_isr);
-
-       if (sharpsl_pm.machinfo->gpio_fatal)
-               free_irq(IRQ_GPIO(sharpsl_pm.machinfo->gpio_fatal), sharpsl_fatal_isr);
-
-       if (sharpsl_pm.machinfo->batfull_irq)
-               free_irq(IRQ_GPIO(sharpsl_pm.machinfo->gpio_batfull), sharpsl_chrg_full_isr);
-}
-
 static int get_percentage(int voltage)
 {
        int i = sharpsl_pm.machinfo->bat_levels - 1;
@@ -427,7 +380,7 @@ static void sharpsl_ac_timer(unsigned long data)
 }
 
 
-irqreturn_t sharpsl_ac_isr(int irq, void *dev_id)
+static irqreturn_t sharpsl_ac_isr(int irq, void *dev_id)
 {
        /* Delay the event slightly to debounce */
        /* Must be a smaller delay than the chrg_full_isr below */
@@ -462,7 +415,7 @@ static void sharpsl_chrg_full_timer(unsigned long data)
 /* Charging Finished Interrupt (Not present on Corgi) */
 /* Can trigger at the same time as an AC status change so
    delay until after that has been processed */
-irqreturn_t sharpsl_chrg_full_isr(int irq, void *dev_id)
+static irqreturn_t sharpsl_chrg_full_isr(int irq, void *dev_id)
 {
        if (sharpsl_pm.flags & SHARPSL_SUSPENDED)
                return IRQ_HANDLED;
@@ -473,7 +426,7 @@ irqreturn_t sharpsl_chrg_full_isr(int irq, void *dev_id)
        return IRQ_HANDLED;
 }
 
-irqreturn_t sharpsl_fatal_isr(int irq, void *dev_id)
+static irqreturn_t sharpsl_fatal_isr(int irq, void *dev_id)
 {
        int is_fatal = 0;
 
@@ -966,6 +919,37 @@ static int __init sharpsl_pm_probe(struct platform_device *pdev)
 
        sharpsl_pm.machinfo->init();
 
+       pxa_gpio_mode(sharpsl_pm.machinfo->gpio_acin | GPIO_IN);
+       pxa_gpio_mode(sharpsl_pm.machinfo->gpio_batfull | GPIO_IN);
+       pxa_gpio_mode(sharpsl_pm.machinfo->gpio_batlock | GPIO_IN);
+
+       /* Register interrupt handlers */
+       if (request_irq(IRQ_GPIO(sharpsl_pm.machinfo->gpio_acin), sharpsl_ac_isr, IRQF_DISABLED, "AC Input Detect", sharpsl_ac_isr)) {
+               dev_err(sharpsl_pm.dev, "Could not get irq %d.\n", IRQ_GPIO(sharpsl_pm.machinfo->gpio_acin));
+       }
+       else set_irq_type(IRQ_GPIO(sharpsl_pm.machinfo->gpio_acin),IRQ_TYPE_EDGE_BOTH);
+
+       if (request_irq(IRQ_GPIO(sharpsl_pm.machinfo->gpio_batlock), sharpsl_fatal_isr, IRQF_DISABLED, "Battery Cover", sharpsl_fatal_isr)) {
+               dev_err(sharpsl_pm.dev, "Could not get irq %d.\n", IRQ_GPIO(sharpsl_pm.machinfo->gpio_batlock));
+       }
+       else set_irq_type(IRQ_GPIO(sharpsl_pm.machinfo->gpio_batlock),IRQ_TYPE_EDGE_FALLING);
+
+       if (sharpsl_pm.machinfo->gpio_fatal) {
+               if (request_irq(IRQ_GPIO(sharpsl_pm.machinfo->gpio_fatal), sharpsl_fatal_isr, IRQF_DISABLED, "Fatal Battery", sharpsl_fatal_isr)) {
+                       dev_err(sharpsl_pm.dev, "Could not get irq %d.\n", IRQ_GPIO(sharpsl_pm.machinfo->gpio_fatal));
+               }
+               else set_irq_type(IRQ_GPIO(sharpsl_pm.machinfo->gpio_fatal),IRQ_TYPE_EDGE_FALLING);
+       }
+
+       if (sharpsl_pm.machinfo->batfull_irq)
+       {
+               /* Register interrupt handler. */
+               if (request_irq(IRQ_GPIO(sharpsl_pm.machinfo->gpio_batfull), sharpsl_chrg_full_isr, IRQF_DISABLED, "CO", sharpsl_chrg_full_isr)) {
+                       dev_err(sharpsl_pm.dev, "Could not get irq %d.\n", IRQ_GPIO(sharpsl_pm.machinfo->gpio_batfull));
+               }
+               else set_irq_type(IRQ_GPIO(sharpsl_pm.machinfo->gpio_batfull),IRQ_TYPE_EDGE_RISING);
+       }
+
        ret = device_create_file(&pdev->dev, &dev_attr_battery_percentage);
        ret |= device_create_file(&pdev->dev, &dev_attr_battery_voltage);
        if (ret != 0)
@@ -991,7 +975,17 @@ static int sharpsl_pm_remove(struct platform_device *pdev)
 
        led_trigger_unregister_simple(sharpsl_charge_led_trigger);
 
-       sharpsl_pm.machinfo->exit();
+       free_irq(IRQ_GPIO(sharpsl_pm.machinfo->gpio_acin), sharpsl_ac_isr);
+       free_irq(IRQ_GPIO(sharpsl_pm.machinfo->gpio_batlock), sharpsl_fatal_isr);
+
+       if (sharpsl_pm.machinfo->gpio_fatal)
+               free_irq(IRQ_GPIO(sharpsl_pm.machinfo->gpio_fatal), sharpsl_fatal_isr);
+
+       if (sharpsl_pm.machinfo->batfull_irq)
+               free_irq(IRQ_GPIO(sharpsl_pm.machinfo->gpio_batfull), sharpsl_chrg_full_isr);
+
+       if (sharpsl_pm.machinfo->exit)
+               sharpsl_pm.machinfo->exit();
 
        del_timer_sync(&sharpsl_pm.chrg_full_timer);
        del_timer_sync(&sharpsl_pm.ac_timer);
index 2e4490562c9e85d5a4891c823a9e17d83a78923a..724ffb0303176f3fa4fd3256fbe17ad0df416786 100644 (file)
@@ -41,7 +41,6 @@ static void spitz_charger_init(void)
 {
        pxa_gpio_mode(SPITZ_GPIO_KEY_INT | GPIO_IN);
        pxa_gpio_mode(SPITZ_GPIO_SYNC | GPIO_IN);
-       sharpsl_pm_pxa_init();
 }
 
 static void spitz_measure_temp(int on)
@@ -182,7 +181,7 @@ unsigned long spitzpm_read_devdata(int type)
 
 struct sharpsl_charger_machinfo spitz_pm_machinfo = {
        .init             = spitz_charger_init,
-       .exit             = sharpsl_pm_pxa_remove,
+       .exit             = NULL,
        .gpio_batlock     = SPITZ_GPIO_BAT_COVER,
        .gpio_acin        = SPITZ_GPIO_AC_IN,
        .gpio_batfull     = SPITZ_GPIO_CHRG_FULL,