From 614683faf8029100802db06a825648d0b6490285 Mon Sep 17 00:00:00 2001 From: Mirko Vogt Date: Fri, 12 Dec 2008 11:58:53 +0000 Subject: changed Makefile and profiles, added patches for kernel 2.6.24 (stable-branch of Openmoko) SVN-Revision: 13613 --- ...3-only-do-platform-callback-once-per-even.patch | 78 ++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 target/linux/s3c24xx/patches-2.6.24/1245-fix-pcf50633-only-do-platform-callback-once-per-even.patch (limited to 'target/linux/s3c24xx/patches-2.6.24/1245-fix-pcf50633-only-do-platform-callback-once-per-even.patch') diff --git a/target/linux/s3c24xx/patches-2.6.24/1245-fix-pcf50633-only-do-platform-callback-once-per-even.patch b/target/linux/s3c24xx/patches-2.6.24/1245-fix-pcf50633-only-do-platform-callback-once-per-even.patch new file mode 100644 index 0000000000..c0418b596f --- /dev/null +++ b/target/linux/s3c24xx/patches-2.6.24/1245-fix-pcf50633-only-do-platform-callback-once-per-even.patch @@ -0,0 +1,78 @@ +From be0f111b3d1570dec174ff301d08bad995ccf1e6 Mon Sep 17 00:00:00 2001 +From: Andy Green +Date: Tue, 22 Jul 2008 22:17:15 +0100 +Subject: [PATCH] fix-pcf50633-only-do-platform-callback-once-per-event.patch + Reported-by: Holger Freyther + +We harmlessly repeated PMU platform callbacks about charging state twice. +Clean it up and leave it to pcf50633_charge_enable() to report once. + +Also tidies the sequencing so we set current limit before we enable +charger now. + +Signed-off-by: Andy Green +--- + drivers/i2c/chips/pcf50633.c | 35 ++++++++++++++++------------------- + 1 files changed, 16 insertions(+), 19 deletions(-) + +diff --git a/drivers/i2c/chips/pcf50633.c b/drivers/i2c/chips/pcf50633.c +index bd47ebc..98c254c 100644 +--- a/drivers/i2c/chips/pcf50633.c ++++ b/drivers/i2c/chips/pcf50633.c +@@ -1392,6 +1392,7 @@ static DEVICE_ATTR(voltage_hcldo, S_IRUGO | S_IWUSR, show_vreg, set_vreg); + static void pcf50633_usb_curlim_set(struct pcf50633_data *pcf, int ma) + { + u_int8_t bits; ++ int active = 0; + + pcf->last_curlim_set = ma; + +@@ -1407,30 +1408,26 @@ static void pcf50633_usb_curlim_set(struct pcf50633_data *pcf, int ma) + else + bits = PCF50633_MBCC7_USB_SUSPEND; + +- DEBUGPC("pcf50633_usb_curlim_set -> %dmA\n", ma); +- +- if (!pcf->pdata->cb) +- goto set_it; ++ /* set the nearest charging limit */ ++ reg_set_bit_mask(pcf, PCF50633_REG_MBCC7, PCF56033_MBCC7_USB_MASK, ++ bits); + ++ /* with this charging limit, is charging actually meaningful? */ + switch (bits) { +- case PCF50633_MBCC7_USB_100mA: +- case PCF50633_MBCC7_USB_SUSPEND: +- /* no charging is gonna be happening */ +- pcf->pdata->cb(&pcf->client.dev, +- PCF50633_FEAT_MBC, PMU_EVT_CHARGER_IDLE); +- pcf50633_charge_enable(pcf50633_global, 0); ++ case PCF50633_MBCC7_USB_500mA: ++ case PCF50633_MBCC7_USB_1000mA: ++ /* yes with this charging limit, we can do real charging */ ++ active = 1; + break; +- default: /* right charging context that if there is power, we charge */ +- if (pcf->flags & PCF50633_F_USB_PRESENT) +- pcf->pdata->cb(&pcf->client.dev, +- PCF50633_FEAT_MBC, PMU_EVT_CHARGER_ACTIVE); +- pcf50633_charge_enable(pcf50633_global, 1); ++ default: ++ /* no charging is gonna be happening */ + break; + } +- +-set_it: +- reg_set_bit_mask(pcf, PCF50633_REG_MBCC7, PCF56033_MBCC7_USB_MASK, +- bits); ++ /* ++ * enable or disable charging according to current limit -- this will ++ * also throw a platform notification callback about it ++ */ ++ pcf50633_charge_enable(pcf50633_global, active); + + /* clear batfull */ + reg_set_bit_mask(pcf, PCF50633_REG_MBCC1, +-- +1.5.6.5 + -- cgit v1.2.3