aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-pxa
diff options
context:
space:
mode:
authorRichard Purdie <rpurdie@rpsys.net>2006-06-19 14:58:52 -0400
committerRussell King <rmk+kernel@arm.linux.org.uk>2006-06-19 14:58:52 -0400
commitf8703dc8cb10eca7f6fe6ef364d8e106fe07f034 (patch)
tree371f01b78f7fa205128b9ba9127b30904dfdd7b7 /arch/arm/mach-pxa
parent88660351cb6daa85baf9700f12dff3af564dc14a (diff)
[ARM] 3564/1: sharpsl_pm: Abstract some machine specific parameters
Patch from Richard Purdie Abstract some machine specific parameters from the sharpsl_pm core into the machine specific drivers. This allows the core to support tosa/poodle. Signed-off-by: Richard Purdie <rpurdie@rpsys.net> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/mach-pxa')
-rw-r--r--arch/arm/mach-pxa/corgi_pm.c23
-rw-r--r--arch/arm/mach-pxa/sharpsl_pm.c7
-rw-r--r--arch/arm/mach-pxa/spitz_pm.c15
3 files changed, 40 insertions, 5 deletions
diff --git a/arch/arm/mach-pxa/corgi_pm.c b/arch/arm/mach-pxa/corgi_pm.c
index 7a1ab73e9e10..4c3de4008a43 100644
--- a/arch/arm/mach-pxa/corgi_pm.c
+++ b/arch/arm/mach-pxa/corgi_pm.c
@@ -27,6 +27,13 @@
27#include <asm/arch/pxa-regs.h> 27#include <asm/arch/pxa-regs.h>
28#include "sharpsl.h" 28#include "sharpsl.h"
29 29
30#define SHARPSL_CHARGE_ON_VOLT 0x99 /* 2.9V */
31#define SHARPSL_CHARGE_ON_TEMP 0xe0 /* 2.9V */
32#define SHARPSL_CHARGE_ON_ACIN_HIGH 0x9b /* 6V */
33#define SHARPSL_CHARGE_ON_ACIN_LOW 0x34 /* 2V */
34#define SHARPSL_FATAL_ACIN_VOLT 182 /* 3.45V */
35#define SHARPSL_FATAL_NOACIN_VOLT 170 /* 3.40V */
36
30static void corgi_charger_init(void) 37static void corgi_charger_init(void)
31{ 38{
32 pxa_gpio_mode(CORGI_GPIO_ADC_TEMP_ON | GPIO_OUT); 39 pxa_gpio_mode(CORGI_GPIO_ADC_TEMP_ON | GPIO_OUT);
@@ -195,9 +202,16 @@ static struct sharpsl_charger_machinfo corgi_pm_machinfo = {
195 .read_devdata = corgipm_read_devdata, 202 .read_devdata = corgipm_read_devdata,
196 .charger_wakeup = corgi_charger_wakeup, 203 .charger_wakeup = corgi_charger_wakeup,
197 .should_wakeup = corgi_should_wakeup, 204 .should_wakeup = corgi_should_wakeup,
198 .bat_levels = 40, 205 .backlight_limit = corgibl_limit_intensity,
199 .bat_levels_noac = spitz_battery_levels_noac, 206 .charge_on_volt = SHARPSL_CHARGE_ON_VOLT,
200 .bat_levels_acin = spitz_battery_levels_acin, 207 .charge_on_temp = SHARPSL_CHARGE_ON_TEMP,
208 .charge_acin_high = SHARPSL_CHARGE_ON_ACIN_HIGH,
209 .charge_acin_low = SHARPSL_CHARGE_ON_ACIN_LOW,
210 .fatal_acin_volt = SHARPSL_FATAL_ACIN_VOLT,
211 .fatal_noacin_volt= SHARPSL_FATAL_NOACIN_VOLT,
212 .bat_levels = 40,
213 .bat_levels_noac = spitz_battery_levels_noac,
214 .bat_levels_acin = spitz_battery_levels_acin,
201 .status_high_acin = 188, 215 .status_high_acin = 188,
202 .status_low_acin = 178, 216 .status_low_acin = 178,
203 .status_high_noac = 185, 217 .status_high_noac = 185,
@@ -214,6 +228,9 @@ static int __devinit corgipm_init(void)
214 if (!corgipm_device) 228 if (!corgipm_device)
215 return -ENOMEM; 229 return -ENOMEM;
216 230
231 if (!machine_is_corgi())
232 corgi_pm_machinfo.batfull_irq = 1;
233
217 corgipm_device->dev.platform_data = &corgi_pm_machinfo; 234 corgipm_device->dev.platform_data = &corgi_pm_machinfo;
218 ret = platform_device_add(corgipm_device); 235 ret = platform_device_add(corgipm_device);
219 236
diff --git a/arch/arm/mach-pxa/sharpsl_pm.c b/arch/arm/mach-pxa/sharpsl_pm.c
index 6d402b262d8a..0f1648780c41 100644
--- a/arch/arm/mach-pxa/sharpsl_pm.c
+++ b/arch/arm/mach-pxa/sharpsl_pm.c
@@ -128,6 +128,9 @@ struct battery_thresh spitz_battery_levels_noac[] = {
128 */ 128 */
129int sharpsl_pm_pxa_read_max1111(int channel) 129int sharpsl_pm_pxa_read_max1111(int channel)
130{ 130{
131 if (machine_is_tosa()) // Ugly, better move this function into another module
132 return 0;
133
131 return corgi_ssp_max1111_get((channel << MAXCTRL_SEL_SH) | MAXCTRL_PD0 | MAXCTRL_PD1 134 return corgi_ssp_max1111_get((channel << MAXCTRL_SEL_SH) | MAXCTRL_PD0 | MAXCTRL_PD1
132 | MAXCTRL_SGL | MAXCTRL_UNI | MAXCTRL_STR); 135 | MAXCTRL_SGL | MAXCTRL_UNI | MAXCTRL_STR);
133} 136}
@@ -156,7 +159,7 @@ void sharpsl_pm_pxa_init(void)
156 else set_irq_type(IRQ_GPIO(sharpsl_pm.machinfo->gpio_fatal),IRQT_FALLING); 159 else set_irq_type(IRQ_GPIO(sharpsl_pm.machinfo->gpio_fatal),IRQT_FALLING);
157 } 160 }
158 161
159 if (!machine_is_corgi()) 162 if (sharpsl_pm.machinfo->batfull_irq)
160 { 163 {
161 /* Register interrupt handler. */ 164 /* Register interrupt handler. */
162 if (request_irq(IRQ_GPIO(sharpsl_pm.machinfo->gpio_batfull), sharpsl_chrg_full_isr, SA_INTERRUPT, "CO", sharpsl_chrg_full_isr)) { 165 if (request_irq(IRQ_GPIO(sharpsl_pm.machinfo->gpio_batfull), sharpsl_chrg_full_isr, SA_INTERRUPT, "CO", sharpsl_chrg_full_isr)) {
@@ -174,6 +177,6 @@ void sharpsl_pm_pxa_remove(void)
174 if (sharpsl_pm.machinfo->gpio_fatal) 177 if (sharpsl_pm.machinfo->gpio_fatal)
175 free_irq(IRQ_GPIO(sharpsl_pm.machinfo->gpio_fatal), sharpsl_fatal_isr); 178 free_irq(IRQ_GPIO(sharpsl_pm.machinfo->gpio_fatal), sharpsl_fatal_isr);
176 179
177 if (!machine_is_corgi()) 180 if (sharpsl_pm.machinfo->batfull_irq)
178 free_irq(IRQ_GPIO(sharpsl_pm.machinfo->gpio_batfull), sharpsl_chrg_full_isr); 181 free_irq(IRQ_GPIO(sharpsl_pm.machinfo->gpio_batfull), sharpsl_chrg_full_isr);
179} 182}
diff --git a/arch/arm/mach-pxa/spitz_pm.c b/arch/arm/mach-pxa/spitz_pm.c
index 5e5bdc898482..40be833079c7 100644
--- a/arch/arm/mach-pxa/spitz_pm.c
+++ b/arch/arm/mach-pxa/spitz_pm.c
@@ -27,6 +27,13 @@
27#include <asm/arch/pxa-regs.h> 27#include <asm/arch/pxa-regs.h>
28#include "sharpsl.h" 28#include "sharpsl.h"
29 29
30#define SHARPSL_CHARGE_ON_VOLT 0x99 /* 2.9V */
31#define SHARPSL_CHARGE_ON_TEMP 0xe0 /* 2.9V */
32#define SHARPSL_CHARGE_ON_ACIN_HIGH 0x9b /* 6V */
33#define SHARPSL_CHARGE_ON_ACIN_LOW 0x34 /* 2V */
34#define SHARPSL_FATAL_ACIN_VOLT 182 /* 3.45V */
35#define SHARPSL_FATAL_NOACIN_VOLT 170 /* 3.40V */
36
30static int spitz_last_ac_status; 37static int spitz_last_ac_status;
31 38
32static void spitz_charger_init(void) 39static void spitz_charger_init(void)
@@ -190,6 +197,7 @@ struct sharpsl_charger_machinfo spitz_pm_machinfo = {
190 .gpio_batlock = SPITZ_GPIO_BAT_COVER, 197 .gpio_batlock = SPITZ_GPIO_BAT_COVER,
191 .gpio_acin = SPITZ_GPIO_AC_IN, 198 .gpio_acin = SPITZ_GPIO_AC_IN,
192 .gpio_batfull = SPITZ_GPIO_CHRG_FULL, 199 .gpio_batfull = SPITZ_GPIO_CHRG_FULL,
200 .batfull_irq = 1,
193 .gpio_fatal = SPITZ_GPIO_FATAL_BAT, 201 .gpio_fatal = SPITZ_GPIO_FATAL_BAT,
194 .discharge = spitz_discharge, 202 .discharge = spitz_discharge,
195 .discharge1 = spitz_discharge1, 203 .discharge1 = spitz_discharge1,
@@ -200,6 +208,13 @@ struct sharpsl_charger_machinfo spitz_pm_machinfo = {
200 .read_devdata = spitzpm_read_devdata, 208 .read_devdata = spitzpm_read_devdata,
201 .charger_wakeup = spitz_charger_wakeup, 209 .charger_wakeup = spitz_charger_wakeup,
202 .should_wakeup = spitz_should_wakeup, 210 .should_wakeup = spitz_should_wakeup,
211 .backlight_limit = corgibl_limit_intensity,
212 .charge_on_volt = SHARPSL_CHARGE_ON_VOLT,
213 .charge_on_temp = SHARPSL_CHARGE_ON_TEMP,
214 .charge_acin_high = SHARPSL_CHARGE_ON_ACIN_HIGH,
215 .charge_acin_low = SHARPSL_CHARGE_ON_ACIN_LOW,
216 .fatal_acin_volt = SHARPSL_FATAL_ACIN_VOLT,
217 .fatal_noacin_volt= SHARPSL_FATAL_NOACIN_VOLT,
203 .bat_levels = 40, 218 .bat_levels = 40,
204 .bat_levels_noac = spitz_battery_levels_noac, 219 .bat_levels_noac = spitz_battery_levels_noac,
205 .bat_levels_acin = spitz_battery_levels_acin, 220 .bat_levels_acin = spitz_battery_levels_acin,