Commit b7557de4 authored by Richard Purdie's avatar Richard Purdie Committed by Russell King

[ARM] 3228/1: SharpSL: Move PM code to arch/arm/common

Patch from Richard Purdie

This patch moves a large chunk of the sharpsl_pm driver to
arch/arm/common so that it can be reused on other devices such as the
SL-5500 (collie). It also abstracts some functions from the core into
the machine and platform specific parts of the driver to aid reuse.
Signed-off-by: default avatarRichard Purdie <rpurdie@rpsys.net>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent 3125c68d
...@@ -23,5 +23,8 @@ config SHARP_LOCOMO ...@@ -23,5 +23,8 @@ config SHARP_LOCOMO
config SHARP_PARAM config SHARP_PARAM
bool bool
config SHARPSL_PM
bool
config SHARP_SCOOP config SHARP_SCOOP
bool bool
...@@ -13,4 +13,5 @@ obj-$(CONFIG_DMABOUNCE) += dmabounce.o ...@@ -13,4 +13,5 @@ obj-$(CONFIG_DMABOUNCE) += dmabounce.o
obj-$(CONFIG_TIMER_ACORN) += time-acorn.o obj-$(CONFIG_TIMER_ACORN) += time-acorn.o
obj-$(CONFIG_SHARP_LOCOMO) += locomo.o obj-$(CONFIG_SHARP_LOCOMO) += locomo.o
obj-$(CONFIG_SHARP_PARAM) += sharpsl_param.o obj-$(CONFIG_SHARP_PARAM) += sharpsl_param.o
obj-$(CONFIG_SHARPSL_PM) += sharpsl_pm.o
obj-$(CONFIG_SHARP_SCOOP) += scoop.o obj-$(CONFIG_SHARP_SCOOP) += scoop.o
This diff is collapsed.
...@@ -112,12 +112,14 @@ config IWMMXT ...@@ -112,12 +112,14 @@ config IWMMXT
config PXA_SHARP_C7xx config PXA_SHARP_C7xx
bool bool
select PXA_SSP select PXA_SSP
select SHARPSL_PM
help help
Enable support for all Sharp C7xx models Enable support for all Sharp C7xx models
config PXA_SHARP_Cxx00 config PXA_SHARP_Cxx00
bool bool
select PXA_SSP select PXA_SSP
select SHARPSL_PM
help help
Enable common support for Sharp Cxx00 models Enable common support for Sharp Cxx00 models
......
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
#include <asm/mach-types.h> #include <asm/mach-types.h>
#include <asm/hardware.h> #include <asm/hardware.h>
#include <asm/hardware/scoop.h> #include <asm/hardware/scoop.h>
#include <asm/hardware/sharpsl_pm.h>
#include <asm/arch/sharpsl.h> #include <asm/arch/sharpsl.h>
#include <asm/arch/corgi.h> #include <asm/arch/corgi.h>
...@@ -33,19 +34,7 @@ static void corgi_charger_init(void) ...@@ -33,19 +34,7 @@ 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_charge_led(int val)
{
if (val == SHARPSL_LED_ERROR) {
dev_dbg(sharpsl_pm.dev, "Charge LED Error\n");
} else if (val == SHARPSL_LED_ON) {
dev_dbg(sharpsl_pm.dev, "Charge LED On\n");
GPSR0 = GPIO_bit(CORGI_GPIO_LED_ORANGE);
} else {
dev_dbg(sharpsl_pm.dev, "Charge LED Off\n");
GPCR0 = GPIO_bit(CORGI_GPIO_LED_ORANGE);
}
} }
static void corgi_measure_temp(int on) static void corgi_measure_temp(int on)
...@@ -138,15 +127,15 @@ static int corgi_should_wakeup(unsigned int resume_on_alarm) ...@@ -138,15 +127,15 @@ static int corgi_should_wakeup(unsigned int resume_on_alarm)
dev_dbg(sharpsl_pm.dev, "GPLR0 = %x,%x\n", GPLR0, PEDR); dev_dbg(sharpsl_pm.dev, "GPLR0 = %x,%x\n", GPLR0, PEDR);
if ((PEDR & GPIO_bit(CORGI_GPIO_AC_IN))) { if ((PEDR & GPIO_bit(CORGI_GPIO_AC_IN))) {
if (STATUS_AC_IN()) { if (sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_ACIN)) {
/* charge on */ /* charge on */
dev_dbg(sharpsl_pm.dev, "ac insert\n"); dev_dbg(sharpsl_pm.dev, "ac insert\n");
sharpsl_pm.flags |= SHARPSL_DO_OFFLINE_CHRG; sharpsl_pm.flags |= SHARPSL_DO_OFFLINE_CHRG;
} else { } else {
/* charge off */ /* charge off */
dev_dbg(sharpsl_pm.dev, "ac remove\n"); dev_dbg(sharpsl_pm.dev, "ac remove\n");
CHARGE_LED_OFF(); sharpsl_pm_led(SHARPSL_LED_OFF);
CHARGE_OFF(); sharpsl_pm.machinfo->charge(0);
sharpsl_pm.charge_mode = CHRG_OFF; sharpsl_pm.charge_mode = CHRG_OFF;
} }
} }
...@@ -172,23 +161,39 @@ static unsigned long corgi_charger_wakeup(void) ...@@ -172,23 +161,39 @@ static unsigned long corgi_charger_wakeup(void)
return ~GPLR0 & ( GPIO_bit(CORGI_GPIO_AC_IN) | GPIO_bit(CORGI_GPIO_KEY_INT) | GPIO_bit(CORGI_GPIO_WAKEUP) ); return ~GPLR0 & ( GPIO_bit(CORGI_GPIO_AC_IN) | GPIO_bit(CORGI_GPIO_KEY_INT) | GPIO_bit(CORGI_GPIO_WAKEUP) );
} }
static int corgi_acin_status(void) unsigned long corgipm_read_devdata(int type)
{ {
switch(type) {
case SHARPSL_STATUS_ACIN:
return ((GPLR(CORGI_GPIO_AC_IN) & GPIO_bit(CORGI_GPIO_AC_IN)) != 0); return ((GPLR(CORGI_GPIO_AC_IN) & GPIO_bit(CORGI_GPIO_AC_IN)) != 0);
case SHARPSL_STATUS_LOCK:
return READ_GPIO_BIT(sharpsl_pm.machinfo->gpio_batlock);
case SHARPSL_STATUS_CHRGFULL:
return READ_GPIO_BIT(sharpsl_pm.machinfo->gpio_batfull);
case SHARPSL_STATUS_FATAL:
return READ_GPIO_BIT(sharpsl_pm.machinfo->gpio_fatal);
case SHARPSL_ACIN_VOLT:
return sharpsl_pm_pxa_read_max1111(MAX1111_ACIN_VOLT);
case SHARPSL_BATT_TEMP:
return sharpsl_pm_pxa_read_max1111(MAX1111_BATT_TEMP);
case SHARPSL_BATT_VOLT:
default:
return sharpsl_pm_pxa_read_max1111(MAX1111_BATT_VOLT);
}
} }
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,
.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,
.status_acin = corgi_acin_status,
.discharge = corgi_discharge, .discharge = corgi_discharge,
.charge = corgi_charge, .charge = corgi_charge,
.chargeled = corgi_charge_led,
.measure_temp = corgi_measure_temp, .measure_temp = corgi_measure_temp,
.presuspend = corgi_presuspend, .presuspend = corgi_presuspend,
.postsuspend = corgi_postsuspend, .postsuspend = corgi_postsuspend,
.read_devdata = corgipm_read_devdata,
.charger_wakeup = corgi_charger_wakeup, .charger_wakeup = corgi_charger_wakeup,
.should_wakeup = corgi_should_wakeup, .should_wakeup = corgi_should_wakeup,
.bat_levels = 40, .bat_levels = 40,
......
/* /*
* SharpSL SSP Driver * Copyright (c) 2004-2005 Richard Purdie
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
*/ */
/*
* SharpSL SSP Driver
*/
struct corgissp_machinfo { struct corgissp_machinfo {
int port; int port;
int cs_lcdcon; int cs_lcdcon;
...@@ -14,18 +23,18 @@ struct corgissp_machinfo { ...@@ -14,18 +23,18 @@ struct corgissp_machinfo {
void corgi_ssp_set_machinfo(struct corgissp_machinfo *machinfo); void corgi_ssp_set_machinfo(struct corgissp_machinfo *machinfo);
/* /*
* SharpSL Backlight * SharpSL Backlight
*/ */
void corgi_bl_set_intensity(int intensity); void corgi_bl_set_intensity(int intensity);
void spitz_bl_set_intensity(int intensity); void spitz_bl_set_intensity(int intensity);
void akita_bl_set_intensity(int intensity); void akita_bl_set_intensity(int intensity);
/* /*
* SharpSL Touchscreen Driver * SharpSL Touchscreen Driver
*/ */
unsigned long corgi_get_hsync_len(void); unsigned long corgi_get_hsync_len(void);
unsigned long spitz_get_hsync_len(void); unsigned long spitz_get_hsync_len(void);
void corgi_put_hsync(void); void corgi_put_hsync(void);
...@@ -33,89 +42,22 @@ void spitz_put_hsync(void); ...@@ -33,89 +42,22 @@ void spitz_put_hsync(void);
void corgi_wait_hsync(void); void corgi_wait_hsync(void);
void spitz_wait_hsync(void); void spitz_wait_hsync(void);
/* /*
* SharpSL Battery/PM Driver * SharpSL Battery/PM Driver
*/ */
struct sharpsl_charger_machinfo { #define READ_GPIO_BIT(x) (GPLR(x) & GPIO_bit(x))
void (*init)(void);
int gpio_acin;
int gpio_batfull;
int gpio_batlock;
int gpio_fatal;
int (*status_acin)(void);
void (*discharge)(int);
void (*discharge1)(int);
void (*charge)(int);
void (*chargeled)(int);
void (*measure_temp)(int);
void (*presuspend)(void);
void (*postsuspend)(void);
unsigned long (*charger_wakeup)(void);
int (*should_wakeup)(unsigned int resume_on_alarm);
int bat_levels;
struct battery_thresh *bat_levels_noac;
struct battery_thresh *bat_levels_acin;
int status_high_acin;
int status_low_acin;
int status_high_noac;
int status_low_noac;
};
struct battery_thresh {
int voltage;
int percentage;
};
struct battery_stat {
int ac_status; /* APM AC Present/Not Present */
int mainbat_status; /* APM Main Battery Status */
int mainbat_percent; /* Main Battery Percentage Charge */
int mainbat_voltage; /* Main Battery Voltage */
};
struct sharpsl_pm_status {
struct device *dev;
struct timer_list ac_timer;
struct timer_list chrg_full_timer;
int charge_mode;
#define CHRG_ERROR (-1)
#define CHRG_OFF (0)
#define CHRG_ON (1)
#define CHRG_DONE (2)
unsigned int flags;
#define SHARPSL_SUSPENDED (1 << 0) /* Device is Suspended */
#define SHARPSL_ALARM_ACTIVE (1 << 1) /* Alarm is for charging event (not user) */
#define SHARPSL_BL_LIMIT (1 << 2) /* Backlight Intensity Limited */
#define SHARPSL_APM_QUEUED (1 << 3) /* APM Event Queued */
#define SHARPSL_DO_OFFLINE_CHRG (1 << 4) /* Trigger the offline charger */
int full_count; /* MAX1111 Channel Definitions */
unsigned long charge_start_time; #define MAX1111_BATT_VOLT 4u
struct sharpsl_charger_machinfo *machinfo; #define MAX1111_BATT_TEMP 2u
struct battery_stat battstat; #define MAX1111_ACIN_VOLT 6u
};
extern struct sharpsl_pm_status sharpsl_pm;
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);
#define READ_GPIO_BIT(x) (GPLR(x) & GPIO_bit(x))
#define SHARPSL_LED_ERROR 2
#define SHARPSL_LED_ON 1
#define SHARPSL_LED_OFF 0
#define CHARGE_ON() sharpsl_pm.machinfo->charge(1)
#define CHARGE_OFF() sharpsl_pm.machinfo->charge(0)
#define CHARGE_LED_ON() sharpsl_pm.machinfo->chargeled(SHARPSL_LED_ON)
#define CHARGE_LED_OFF() sharpsl_pm.machinfo->chargeled(SHARPSL_LED_OFF)
#define CHARGE_LED_ERR() sharpsl_pm.machinfo->chargeled(SHARPSL_LED_ERROR)
#define DISCHARGE_ON() sharpsl_pm.machinfo->discharge(1)
#define DISCHARGE_OFF() sharpsl_pm.machinfo->discharge(0)
#define STATUS_AC_IN() sharpsl_pm.machinfo->status_acin()
#define STATUS_BATT_LOCKED() READ_GPIO_BIT(sharpsl_pm.machinfo->gpio_batlock)
#define STATUS_CHRG_FULL() READ_GPIO_BIT(sharpsl_pm.machinfo->gpio_batfull)
#define STATUS_FATAL() READ_GPIO_BIT(sharpsl_pm.machinfo->gpio_fatal)
This diff is collapsed.
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
#include <asm/mach-types.h> #include <asm/mach-types.h>
#include <asm/hardware.h> #include <asm/hardware.h>
#include <asm/hardware/scoop.h> #include <asm/hardware/scoop.h>
#include <asm/hardware/sharpsl_pm.h>
#include <asm/arch/sharpsl.h> #include <asm/arch/sharpsl.h>
#include <asm/arch/spitz.h> #include <asm/arch/spitz.h>
...@@ -33,19 +34,7 @@ static void spitz_charger_init(void) ...@@ -33,19 +34,7 @@ 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_charge_led(int val)
{
if (val == SHARPSL_LED_ERROR) {
dev_dbg(sharpsl_pm.dev, "Charge LED Error\n");
} else if (val == SHARPSL_LED_ON) {
dev_dbg(sharpsl_pm.dev, "Charge LED On\n");
set_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_LED_ORANGE);
} else {
dev_dbg(sharpsl_pm.dev, "Charge LED Off\n");
reset_scoop_gpio(&spitzscoop_device.dev, SPITZ_SCP_LED_ORANGE);
}
} }
static void spitz_measure_temp(int on) static void spitz_measure_temp(int on)
...@@ -92,7 +81,7 @@ static void spitz_discharge1(int on) ...@@ -92,7 +81,7 @@ static void spitz_discharge1(int on)
static void spitz_presuspend(void) static void spitz_presuspend(void)
{ {
spitz_last_ac_status = STATUS_AC_IN(); spitz_last_ac_status = sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_ACIN);
/* GPIO Sleep Register */ /* GPIO Sleep Register */
PGSR0 = 0x00144018; PGSR0 = 0x00144018;
...@@ -138,7 +127,7 @@ static void spitz_postsuspend(void) ...@@ -138,7 +127,7 @@ static void spitz_postsuspend(void)
static int spitz_should_wakeup(unsigned int resume_on_alarm) static int spitz_should_wakeup(unsigned int resume_on_alarm)
{ {
int is_resume = 0; int is_resume = 0;
int acin = STATUS_AC_IN(); int acin = sharpsl_pm.machinfo->read_devdata(SHARPSL_STATUS_ACIN);
if (spitz_last_ac_status != acin) { if (spitz_last_ac_status != acin) {
if (acin) { if (acin) {
...@@ -148,8 +137,8 @@ static int spitz_should_wakeup(unsigned int resume_on_alarm) ...@@ -148,8 +137,8 @@ static int spitz_should_wakeup(unsigned int resume_on_alarm)
} else { } else {
/* charge off */ /* charge off */
dev_dbg(sharpsl_pm.dev, "AC Removed\n"); dev_dbg(sharpsl_pm.dev, "AC Removed\n");
CHARGE_LED_OFF(); sharpsl_pm_led(SHARPSL_LED_OFF);
CHARGE_OFF(); sharpsl_pm.machinfo->charge(0);
sharpsl_pm.charge_mode = CHRG_OFF; sharpsl_pm.charge_mode = CHRG_OFF;
} }
spitz_last_ac_status = acin; spitz_last_ac_status = acin;
...@@ -175,25 +164,41 @@ static unsigned long spitz_charger_wakeup(void) ...@@ -175,25 +164,41 @@ static unsigned long spitz_charger_wakeup(void)
return (~GPLR0 & GPIO_bit(SPITZ_GPIO_KEY_INT)) | (GPLR0 & GPIO_bit(SPITZ_GPIO_SYNC)); return (~GPLR0 & GPIO_bit(SPITZ_GPIO_KEY_INT)) | (GPLR0 & GPIO_bit(SPITZ_GPIO_SYNC));
} }
static int spitz_acin_status(void) unsigned long spitzpm_read_devdata(int type)
{ {
switch(type) {
case SHARPSL_STATUS_ACIN:
return (((~GPLR(SPITZ_GPIO_AC_IN)) & GPIO_bit(SPITZ_GPIO_AC_IN)) != 0); return (((~GPLR(SPITZ_GPIO_AC_IN)) & GPIO_bit(SPITZ_GPIO_AC_IN)) != 0);
case SHARPSL_STATUS_LOCK:
return READ_GPIO_BIT(sharpsl_pm.machinfo->gpio_batlock);
case SHARPSL_STATUS_CHRGFULL:
return READ_GPIO_BIT(sharpsl_pm.machinfo->gpio_batfull);
case SHARPSL_STATUS_FATAL:
return READ_GPIO_BIT(sharpsl_pm.machinfo->gpio_fatal);
case SHARPSL_ACIN_VOLT:
return sharpsl_pm_pxa_read_max1111(MAX1111_ACIN_VOLT);
case SHARPSL_BATT_TEMP:
return sharpsl_pm_pxa_read_max1111(MAX1111_BATT_TEMP);
case SHARPSL_BATT_VOLT:
default:
return sharpsl_pm_pxa_read_max1111(MAX1111_BATT_VOLT);
}
} }
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,
.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,
.gpio_fatal = SPITZ_GPIO_FATAL_BAT, .gpio_fatal = SPITZ_GPIO_FATAL_BAT,
.status_acin = spitz_acin_status,
.discharge = spitz_discharge, .discharge = spitz_discharge,
.discharge1 = spitz_discharge1, .discharge1 = spitz_discharge1,
.charge = spitz_charge, .charge = spitz_charge,
.chargeled = spitz_charge_led,
.measure_temp = spitz_measure_temp, .measure_temp = spitz_measure_temp,
.presuspend = spitz_presuspend, .presuspend = spitz_presuspend,
.postsuspend = spitz_postsuspend, .postsuspend = spitz_postsuspend,
.read_devdata = spitzpm_read_devdata,
.charger_wakeup = spitz_charger_wakeup, .charger_wakeup = spitz_charger_wakeup,
.should_wakeup = spitz_should_wakeup, .should_wakeup = spitz_should_wakeup,
.bat_levels = 40, .bat_levels = 40,
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
#include <linux/backlight.h> #include <linux/backlight.h>
#include <asm/arch/sharpsl.h> #include <asm/arch/sharpsl.h>
#include <asm/hardware/sharpsl_pm.h>
#define CORGI_DEFAULT_INTENSITY 0x1f #define CORGI_DEFAULT_INTENSITY 0x1f
#define CORGI_LIMIT_MASK 0x0b #define CORGI_LIMIT_MASK 0x0b
......
/*
* SharpSL Battery/PM Driver
*
* Copyright (c) 2004-2005 Richard Purdie
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
*/
#include <linux/interrupt.h>
struct sharpsl_charger_machinfo {
void (*init)(void);
void (*exit)(void);
int gpio_acin;
int gpio_batfull;
int gpio_batlock;
int gpio_fatal;
void (*discharge)(int);
void (*discharge1)(int);
void (*charge)(int);
void (*measure_temp)(int);
void (*presuspend)(void);
void (*postsuspend)(void);
unsigned long (*read_devdata)(int);
#define SHARPSL_BATT_VOLT 1
#define SHARPSL_BATT_TEMP 2
#define SHARPSL_ACIN_VOLT 3
#define SHARPSL_STATUS_ACIN 4
#define SHARPSL_STATUS_LOCK 5
#define SHARPSL_STATUS_CHRGFULL 6
#define SHARPSL_STATUS_FATAL 7
unsigned long (*charger_wakeup)(void);
int (*should_wakeup)(unsigned int resume_on_alarm);
int bat_levels;
struct battery_thresh *bat_levels_noac;
struct battery_thresh *bat_levels_acin;
int status_high_acin;
int status_low_acin;
int status_high_noac;
int status_low_noac;
};
struct battery_thresh {
int voltage;
int percentage;
};
struct battery_stat {
int ac_status; /* APM AC Present/Not Present */
int mainbat_status; /* APM Main Battery Status */
int mainbat_percent; /* Main Battery Percentage Charge */
int mainbat_voltage; /* Main Battery Voltage */
};
struct sharpsl_pm_status {
struct device *dev;
struct timer_list ac_timer;
struct timer_list chrg_full_timer;
int charge_mode;
#define CHRG_ERROR (-1)
#define CHRG_OFF (0)
#define CHRG_ON (1)
#define CHRG_DONE (2)
unsigned int flags;
#define SHARPSL_SUSPENDED (1 << 0) /* Device is Suspended */
#define SHARPSL_ALARM_ACTIVE (1 << 1) /* Alarm is for charging event (not user) */
#define SHARPSL_BL_LIMIT (1 << 2) /* Backlight Intensity Limited */
#define SHARPSL_APM_QUEUED (1 << 3) /* APM Event Queued */
#define SHARPSL_DO_OFFLINE_CHRG (1 << 4) /* Trigger the offline charger */
int full_count;
unsigned long charge_start_time;
struct sharpsl_charger_machinfo *machinfo;
struct battery_stat battstat;
};
extern struct sharpsl_pm_status sharpsl_pm;
#define SHARPSL_LED_ERROR 2
#define SHARPSL_LED_ON 1
#define SHARPSL_LED_OFF 0
void sharpsl_battery_kick(void);
void sharpsl_pm_led(int val);
irqreturn_t sharpsl_ac_isr(int irq, void *dev_id, struct pt_regs *fp);
irqreturn_t sharpsl_chrg_full_isr(int irq, void *dev_id, struct pt_regs *fp);
irqreturn_t sharpsl_fatal_isr(int irq, void *dev_id, struct pt_regs *fp);
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