diff options
Diffstat (limited to 'target/linux/s3c24xx/patches-2.6.26/0143-fix-reduce-wake-reasons-in-pcf50633.patch.patch')
-rwxr-xr-x | target/linux/s3c24xx/patches-2.6.26/0143-fix-reduce-wake-reasons-in-pcf50633.patch.patch | 237 |
1 files changed, 237 insertions, 0 deletions
diff --git a/target/linux/s3c24xx/patches-2.6.26/0143-fix-reduce-wake-reasons-in-pcf50633.patch.patch b/target/linux/s3c24xx/patches-2.6.26/0143-fix-reduce-wake-reasons-in-pcf50633.patch.patch new file mode 100755 index 0000000000..73cdb830df --- /dev/null +++ b/target/linux/s3c24xx/patches-2.6.26/0143-fix-reduce-wake-reasons-in-pcf50633.patch.patch @@ -0,0 +1,237 @@ +From 84a38fd3678b3473c890f7e1b1d7b697afb142a7 Mon Sep 17 00:00:00 2001 +From: Andy Green <andy@openmoko.com> +Date: Fri, 25 Jul 2008 23:06:10 +0100 +Subject: [PATCH] fix-reduce-wake-reasons-in-pcf50633.patch + +Currently we are willing to wake from sleep from +pcf50633 interrupts we don't actually do anything about +even when we wake (somewhat puzzled). + +Let's disable some of these wake sources. + +Signed-off-by: Andy Green <andy@openmoko.com> +--- + arch/arm/mach-s3c2440/mach-gta02.c | 20 +++++++++++++ + drivers/i2c/chips/pcf50633.c | 28 ++++-------------- + drivers/i2c/chips/pcf50633.h | 53 ---------------------------------- + include/linux/pcf50633.h | 56 ++++++++++++++++++++++++++++++++++++ + 4 files changed, 82 insertions(+), 75 deletions(-) + +diff --git a/arch/arm/mach-s3c2440/mach-gta02.c b/arch/arm/mach-s3c2440/mach-gta02.c +index 90b62c1..601f7bc 100644 +--- a/arch/arm/mach-s3c2440/mach-gta02.c ++++ b/arch/arm/mach-s3c2440/mach-gta02.c +@@ -462,6 +462,26 @@ static struct pcf50633_platform_data gta02_pcf_pdata = { + .r_fix_batt = 10000, + .r_fix_batt_par = 10000, + .r_sense_milli = 220, ++ .resumers = { ++ [0] = /* PCF50633_INT1_ADPINS | */ ++ /* PCF50633_INT1_ADPREM | */ ++ PCF50633_INT1_USBINS | ++ PCF50633_INT1_USBREM | ++ PCF50633_INT1_ALARM, ++ [1] = PCF50633_INT2_ONKEYF, ++ [2] = /* PCF50633_INT3_BATFULL | */ ++ /* PCF50633_INT3_CHGHALT | */ ++ /* PCF50633_INT3_THLIMON | */ ++ /* PCF50633_INT3_THLIMOFF | */ ++ /* PCF50633_INT3_USBLIMON | */ ++ /* PCF50633_INT3_USBLIMOFF | */ ++ PCF50633_INT3_ONKEY1S , ++ [3] = 0 /* | ++ PCF50633_INT4_LOWSYS | */ ++ /* PCF50633_INT4_LOWBAT | */ ++ /* PCF50633_INT4_HIGHTMP */, ++ [4] = 0 ++ }, + .rails = { + [PCF50633_REGULATOR_AUTO] = { + .name = "io_3v3", +diff --git a/drivers/i2c/chips/pcf50633.c b/drivers/i2c/chips/pcf50633.c +index d2ff2c1..8ba81d2 100644 +--- a/drivers/i2c/chips/pcf50633.c ++++ b/drivers/i2c/chips/pcf50633.c +@@ -1935,23 +1935,7 @@ int pcf50633_report_resumers(struct pcf50633_data *pcf, char *buf) + + + #ifdef CONFIG_PM +-#define INT1M_RESUMERS (PCF50633_INT1_ADPINS | \ +- PCF50633_INT1_ADPREM | \ +- PCF50633_INT1_USBINS | \ +- PCF50633_INT1_USBREM | \ +- PCF50633_INT1_ALARM) +-#define INT2M_RESUMERS (PCF50633_INT2_ONKEYF) +-#define INT3M_RESUMERS (PCF50633_INT3_BATFULL | \ +- PCF50633_INT3_CHGHALT | \ +- PCF50633_INT3_THLIMON | \ +- PCF50633_INT3_THLIMOFF | \ +- PCF50633_INT3_USBLIMON | \ +- PCF50633_INT3_USBLIMOFF | \ +- PCF50633_INT3_ONKEY1S) +-#define INT4M_RESUMERS (PCF50633_INT4_LOWSYS | \ +- PCF50633_INT4_LOWBAT | \ +- PCF50633_INT4_HIGHTMP) +-#define INT5M_RESUMERS (0) ++ + + static int pcf50633_suspend(struct device *dev, pm_message_t state) + { +@@ -2010,11 +1994,11 @@ static int pcf50633_suspend(struct device *dev, pm_message_t state) + pcf->standby_regs.int3m = __reg_read(pcf, PCF50633_REG_INT3M); + pcf->standby_regs.int4m = __reg_read(pcf, PCF50633_REG_INT4M); + pcf->standby_regs.int5m = __reg_read(pcf, PCF50633_REG_INT5M); +- __reg_write(pcf, PCF50633_REG_INT1M, ~INT1M_RESUMERS & 0xff); +- __reg_write(pcf, PCF50633_REG_INT2M, ~INT2M_RESUMERS & 0xff); +- __reg_write(pcf, PCF50633_REG_INT3M, ~INT3M_RESUMERS & 0xff); +- __reg_write(pcf, PCF50633_REG_INT4M, ~INT4M_RESUMERS & 0xff); +- __reg_write(pcf, PCF50633_REG_INT5M, ~INT5M_RESUMERS & 0xff); ++ __reg_write(pcf, PCF50633_REG_INT1M, ~pcf->pdata->resumers[0]); ++ __reg_write(pcf, PCF50633_REG_INT2M, ~pcf->pdata->resumers[1]); ++ __reg_write(pcf, PCF50633_REG_INT3M, ~pcf->pdata->resumers[2]); ++ __reg_write(pcf, PCF50633_REG_INT4M, ~pcf->pdata->resumers[3]); ++ __reg_write(pcf, PCF50633_REG_INT5M, ~pcf->pdata->resumers[4]); + + pcf->have_been_suspended = 1; + +diff --git a/drivers/i2c/chips/pcf50633.h b/drivers/i2c/chips/pcf50633.h +index 93dfd99..5d54131 100644 +--- a/drivers/i2c/chips/pcf50633.h ++++ b/drivers/i2c/chips/pcf50633.h +@@ -125,59 +125,6 @@ enum pfc50633_regs { + __NUM_PCF50633_REGS + }; + +-enum pcf50633_reg_int1 { +- PCF50633_INT1_ADPINS = 0x01, /* Adapter inserted */ +- PCF50633_INT1_ADPREM = 0x02, /* Adapter removed */ +- PCF50633_INT1_USBINS = 0x04, /* USB inserted */ +- PCF50633_INT1_USBREM = 0x08, /* USB removed */ +- /* reserved */ +- PCF50633_INT1_ALARM = 0x40, /* RTC alarm time is reached */ +- PCF50633_INT1_SECOND = 0x80, /* RTC periodic second interrupt */ +-}; +- +-enum pcf50633_reg_int2 { +- PCF50633_INT2_ONKEYR = 0x01, /* ONKEY rising edge */ +- PCF50633_INT2_ONKEYF = 0x02, /* ONKEY falling edge */ +- PCF50633_INT2_EXTON1R = 0x04, /* EXTON1 rising edge */ +- PCF50633_INT2_EXTON1F = 0x08, /* EXTON1 falling edge */ +- PCF50633_INT2_EXTON2R = 0x10, /* EXTON2 rising edge */ +- PCF50633_INT2_EXTON2F = 0x20, /* EXTON2 falling edge */ +- PCF50633_INT2_EXTON3R = 0x40, /* EXTON3 rising edge */ +- PCF50633_INT2_EXTON3F = 0x80, /* EXTON3 falling edge */ +-}; +- +-enum pcf50633_reg_int3 { +- PCF50633_INT3_BATFULL = 0x01, /* Battery full */ +- PCF50633_INT3_CHGHALT = 0x02, /* Charger halt */ +- PCF50633_INT3_THLIMON = 0x04, +- PCF50633_INT3_THLIMOFF = 0x08, +- PCF50633_INT3_USBLIMON = 0x10, +- PCF50633_INT3_USBLIMOFF = 0x20, +- PCF50633_INT3_ADCRDY = 0x40, /* ADC conversion finished */ +- PCF50633_INT3_ONKEY1S = 0x80, /* ONKEY pressed 1 second */ +-}; +- +-enum pcf50633_reg_int4 { +- PCF50633_INT4_LOWSYS = 0x01, +- PCF50633_INT4_LOWBAT = 0x02, +- PCF50633_INT4_HIGHTMP = 0x04, +- PCF50633_INT4_AUTOPWRFAIL = 0x08, +- PCF50633_INT4_DWN1PWRFAIL = 0x10, +- PCF50633_INT4_DWN2PWRFAIL = 0x20, +- PCF50633_INT4_LEDPWRFAIL = 0x40, +- PCF50633_INT4_LEDOVP = 0x80, +-}; +- +-enum pcf50633_reg_int5 { +- PCF50633_INT5_LDO1PWRFAIL = 0x01, +- PCF50633_INT5_LDO2PWRFAIL = 0x02, +- PCF50633_INT5_LDO3PWRFAIL = 0x04, +- PCF50633_INT5_LDO4PWRFAIL = 0x08, +- PCF50633_INT5_LDO5PWRFAIL = 0x10, +- PCF50633_INT5_LDO6PWRFAIL = 0x20, +- PCF50633_INT5_HCLDOPWRFAIL = 0x40, +- PCF50633_INT5_HCLDOOVL = 0x80, +-}; + + enum pcf50633_reg_oocshdwn { + PCF50633_OOCSHDWN_GOSTDBY = 0x01, +diff --git a/include/linux/pcf50633.h b/include/linux/pcf50633.h +index 39d919d..c0fdbe8 100644 +--- a/include/linux/pcf50633.h ++++ b/include/linux/pcf50633.h +@@ -20,6 +20,60 @@ enum pcf50633_regulator_id { + __NUM_PCF50633_REGULATORS + }; + ++enum pcf50633_reg_int1 { ++ PCF50633_INT1_ADPINS = 0x01, /* Adapter inserted */ ++ PCF50633_INT1_ADPREM = 0x02, /* Adapter removed */ ++ PCF50633_INT1_USBINS = 0x04, /* USB inserted */ ++ PCF50633_INT1_USBREM = 0x08, /* USB removed */ ++ /* reserved */ ++ PCF50633_INT1_ALARM = 0x40, /* RTC alarm time is reached */ ++ PCF50633_INT1_SECOND = 0x80, /* RTC periodic second interrupt */ ++}; ++ ++enum pcf50633_reg_int2 { ++ PCF50633_INT2_ONKEYR = 0x01, /* ONKEY rising edge */ ++ PCF50633_INT2_ONKEYF = 0x02, /* ONKEY falling edge */ ++ PCF50633_INT2_EXTON1R = 0x04, /* EXTON1 rising edge */ ++ PCF50633_INT2_EXTON1F = 0x08, /* EXTON1 falling edge */ ++ PCF50633_INT2_EXTON2R = 0x10, /* EXTON2 rising edge */ ++ PCF50633_INT2_EXTON2F = 0x20, /* EXTON2 falling edge */ ++ PCF50633_INT2_EXTON3R = 0x40, /* EXTON3 rising edge */ ++ PCF50633_INT2_EXTON3F = 0x80, /* EXTON3 falling edge */ ++}; ++ ++enum pcf50633_reg_int3 { ++ PCF50633_INT3_BATFULL = 0x01, /* Battery full */ ++ PCF50633_INT3_CHGHALT = 0x02, /* Charger halt */ ++ PCF50633_INT3_THLIMON = 0x04, ++ PCF50633_INT3_THLIMOFF = 0x08, ++ PCF50633_INT3_USBLIMON = 0x10, ++ PCF50633_INT3_USBLIMOFF = 0x20, ++ PCF50633_INT3_ADCRDY = 0x40, /* ADC conversion finished */ ++ PCF50633_INT3_ONKEY1S = 0x80, /* ONKEY pressed 1 second */ ++}; ++ ++enum pcf50633_reg_int4 { ++ PCF50633_INT4_LOWSYS = 0x01, ++ PCF50633_INT4_LOWBAT = 0x02, ++ PCF50633_INT4_HIGHTMP = 0x04, ++ PCF50633_INT4_AUTOPWRFAIL = 0x08, ++ PCF50633_INT4_DWN1PWRFAIL = 0x10, ++ PCF50633_INT4_DWN2PWRFAIL = 0x20, ++ PCF50633_INT4_LEDPWRFAIL = 0x40, ++ PCF50633_INT4_LEDOVP = 0x80, ++}; ++ ++enum pcf50633_reg_int5 { ++ PCF50633_INT5_LDO1PWRFAIL = 0x01, ++ PCF50633_INT5_LDO2PWRFAIL = 0x02, ++ PCF50633_INT5_LDO3PWRFAIL = 0x04, ++ PCF50633_INT5_LDO4PWRFAIL = 0x08, ++ PCF50633_INT5_LDO5PWRFAIL = 0x10, ++ PCF50633_INT5_LDO6PWRFAIL = 0x20, ++ PCF50633_INT5_HCLDOPWRFAIL = 0x40, ++ PCF50633_INT5_HCLDOOVL = 0x80, ++}; ++ + struct pcf50633_data; + extern struct pcf50633_data *pcf50633_global; + +@@ -94,6 +148,8 @@ struct pcf50633_platform_data { + unsigned int r_fix_batt_par; + unsigned int r_sense_milli; + ++ unsigned char resumers[5]; ++ + struct { + u_int8_t mbcc3; /* charger voltage / current */ + } charger; +-- +1.5.6.3 + |