Commit d48898a3 authored by Dmitry Eremin-Solenikov's avatar Dmitry Eremin-Solenikov Committed by Eric Miao

[ARM] pxa/sharpsl_pm: merge pxa-specific code into generic one

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: default avatarDmitry Eremin-Solenikov <dbaryshkov@gmail.com>
Signed-off-by: default avatarEric Miao <eric.miao@marvell.com>
parent 78731d33
...@@ -41,7 +41,6 @@ static void corgi_charger_init(void) ...@@ -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_ON | GPIO_OUT);
pxa_gpio_mode(CORGI_GPIO_CHRG_UKN | GPIO_OUT); pxa_gpio_mode(CORGI_GPIO_CHRG_UKN | GPIO_OUT);
pxa_gpio_mode(CORGI_GPIO_KEY_INT | GPIO_IN); pxa_gpio_mode(CORGI_GPIO_KEY_INT | GPIO_IN);
sharpsl_pm_pxa_init();
} }
static void corgi_measure_temp(int on) static void corgi_measure_temp(int on)
...@@ -191,7 +190,7 @@ unsigned long corgipm_read_devdata(int type) ...@@ -191,7 +190,7 @@ unsigned long corgipm_read_devdata(int type)
static struct sharpsl_charger_machinfo corgi_pm_machinfo = { static struct sharpsl_charger_machinfo corgi_pm_machinfo = {
.init = corgi_charger_init, .init = corgi_charger_init,
.exit = sharpsl_pm_pxa_remove, .exit = NULL,
.gpio_batlock = CORGI_GPIO_BAT_COVER, .gpio_batlock = CORGI_GPIO_BAT_COVER,
.gpio_acin = CORGI_GPIO_AC_IN, .gpio_acin = CORGI_GPIO_AC_IN,
.gpio_batfull = CORGI_GPIO_CHRG_FULL, .gpio_batfull = CORGI_GPIO_CHRG_FULL,
......
...@@ -8,8 +8,8 @@ ...@@ -8,8 +8,8 @@
* published by the Free Software Foundation. * published by the Free Software Foundation.
* *
*/ */
#ifndef _MACH_SHARPSL_PM
#include <linux/interrupt.h> #define _MACH_SHARPSL_PM
struct sharpsl_charger_machinfo { struct sharpsl_charger_machinfo {
void (*init)(void); void (*init)(void);
...@@ -100,7 +100,5 @@ extern struct sharpsl_pm_status sharpsl_pm; ...@@ -100,7 +100,5 @@ extern struct sharpsl_pm_status sharpsl_pm;
void sharpsl_battery_kick(void); void sharpsl_battery_kick(void);
void sharpsl_pm_led(int val); 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
...@@ -44,8 +44,6 @@ void corgi_lcdtg_hw_init(int mode); ...@@ -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_acin[];
extern struct battery_thresh spitz_battery_levels_noac[]; 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); int sharpsl_pm_pxa_read_max1111(int channel);
...@@ -15,19 +15,16 @@ ...@@ -15,19 +15,16 @@
#undef DEBUG #undef DEBUG
#include <linux/module.h> #include <linux/module.h>
#include <linux/init.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/irq.h> #include <linux/irq.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/apm-emulation.h> #include <linux/apm-emulation.h>
#include <linux/timer.h> #include <linux/timer.h>
#include <linux/apm_bios.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/leds.h> #include <linux/leds.h>
#include <linux/suspend.h> #include <linux/suspend.h>
#include <mach/hardware.h>
#include <asm/mach-types.h> #include <asm/mach-types.h>
#include <mach/pm.h> #include <mach/pm.h>
#include <mach/pxa2xx-regs.h> #include <mach/pxa2xx-regs.h>
...@@ -36,6 +33,8 @@ ...@@ -36,6 +33,8 @@
#include <mach/sharpsl.h> #include <mach/sharpsl.h>
#include <mach/sharpsl_pm.h> #include <mach/sharpsl_pm.h>
#include "sharpsl.h"
/* /*
* Constants * Constants
*/ */
...@@ -73,8 +72,8 @@ static void sharpsl_battery_thread(struct work_struct *private_); ...@@ -73,8 +72,8 @@ static void sharpsl_battery_thread(struct work_struct *private_);
* Variables * Variables
*/ */
struct sharpsl_pm_status sharpsl_pm; struct sharpsl_pm_status sharpsl_pm;
DECLARE_DELAYED_WORK(toggle_charger, sharpsl_charge_toggle); static DECLARE_DELAYED_WORK(toggle_charger, sharpsl_charge_toggle);
DECLARE_DELAYED_WORK(sharpsl_bat, sharpsl_battery_thread); static DECLARE_DELAYED_WORK(sharpsl_bat, sharpsl_battery_thread);
DEFINE_LED_TRIGGER(sharpsl_charge_led_trigger); DEFINE_LED_TRIGGER(sharpsl_charge_led_trigger);
...@@ -194,52 +193,6 @@ int sharpsl_pm_pxa_read_max1111(int channel) ...@@ -194,52 +193,6 @@ int sharpsl_pm_pxa_read_max1111(int channel)
#endif #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) static int get_percentage(int voltage)
{ {
int i = sharpsl_pm.machinfo->bat_levels - 1; int i = sharpsl_pm.machinfo->bat_levels - 1;
...@@ -427,7 +380,7 @@ static void sharpsl_ac_timer(unsigned long data) ...@@ -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 */ /* Delay the event slightly to debounce */
/* Must be a smaller delay than the chrg_full_isr below */ /* Must be a smaller delay than the chrg_full_isr below */
...@@ -462,7 +415,7 @@ static void sharpsl_chrg_full_timer(unsigned long data) ...@@ -462,7 +415,7 @@ static void sharpsl_chrg_full_timer(unsigned long data)
/* Charging Finished Interrupt (Not present on Corgi) */ /* Charging Finished Interrupt (Not present on Corgi) */
/* Can trigger at the same time as an AC status change so /* Can trigger at the same time as an AC status change so
delay until after that has been processed */ 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) if (sharpsl_pm.flags & SHARPSL_SUSPENDED)
return IRQ_HANDLED; return IRQ_HANDLED;
...@@ -473,7 +426,7 @@ irqreturn_t sharpsl_chrg_full_isr(int irq, void *dev_id) ...@@ -473,7 +426,7 @@ irqreturn_t sharpsl_chrg_full_isr(int irq, void *dev_id)
return IRQ_HANDLED; 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; int is_fatal = 0;
...@@ -966,6 +919,37 @@ static int __init sharpsl_pm_probe(struct platform_device *pdev) ...@@ -966,6 +919,37 @@ static int __init sharpsl_pm_probe(struct platform_device *pdev)
sharpsl_pm.machinfo->init(); 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_percentage);
ret |= device_create_file(&pdev->dev, &dev_attr_battery_voltage); ret |= device_create_file(&pdev->dev, &dev_attr_battery_voltage);
if (ret != 0) if (ret != 0)
...@@ -991,6 +975,16 @@ static int sharpsl_pm_remove(struct platform_device *pdev) ...@@ -991,6 +975,16 @@ static int sharpsl_pm_remove(struct platform_device *pdev)
led_trigger_unregister_simple(sharpsl_charge_led_trigger); led_trigger_unregister_simple(sharpsl_charge_led_trigger);
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(); sharpsl_pm.machinfo->exit();
del_timer_sync(&sharpsl_pm.chrg_full_timer); del_timer_sync(&sharpsl_pm.chrg_full_timer);
......
...@@ -41,7 +41,6 @@ static void spitz_charger_init(void) ...@@ -41,7 +41,6 @@ static void spitz_charger_init(void)
{ {
pxa_gpio_mode(SPITZ_GPIO_KEY_INT | GPIO_IN); pxa_gpio_mode(SPITZ_GPIO_KEY_INT | GPIO_IN);
pxa_gpio_mode(SPITZ_GPIO_SYNC | GPIO_IN); pxa_gpio_mode(SPITZ_GPIO_SYNC | GPIO_IN);
sharpsl_pm_pxa_init();
} }
static void spitz_measure_temp(int on) static void spitz_measure_temp(int on)
...@@ -182,7 +181,7 @@ unsigned long spitzpm_read_devdata(int type) ...@@ -182,7 +181,7 @@ unsigned long spitzpm_read_devdata(int type)
struct sharpsl_charger_machinfo spitz_pm_machinfo = { struct sharpsl_charger_machinfo spitz_pm_machinfo = {
.init = spitz_charger_init, .init = spitz_charger_init,
.exit = sharpsl_pm_pxa_remove, .exit = NULL,
.gpio_batlock = SPITZ_GPIO_BAT_COVER, .gpio_batlock = SPITZ_GPIO_BAT_COVER,
.gpio_acin = SPITZ_GPIO_AC_IN, .gpio_acin = SPITZ_GPIO_AC_IN,
.gpio_batfull = SPITZ_GPIO_CHRG_FULL, .gpio_batfull = SPITZ_GPIO_CHRG_FULL,
......
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