aboutsummaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorAndy Green <andy@openmoko.com>2008-11-19 17:09:57 +0000
committerAndy Green <agreen@pads.home.warmcat.com>2008-11-19 17:09:57 +0000
commit0bbf22c374ca069c0c7ae3f039cd5adb272484d1 (patch)
tree208862830edc2f10c62bd2eadb3e34656f5463fa /drivers
parentd27a76a81ca41ea161c5c3329d46c08b994ae059 (diff)
fix-pcf50633-only-do-platform-callback-once-per-event.patch
Reported-by: Holger Freyther <zecke@openmoko.org> 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 <andy@openmoko.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/i2c/chips/pcf50633.c27
1 files changed, 14 insertions, 13 deletions
diff --git a/drivers/i2c/chips/pcf50633.c b/drivers/i2c/chips/pcf50633.c
index a5efb4e5ac9..01ffa1dc543 100644
--- a/drivers/i2c/chips/pcf50633.c
+++ b/drivers/i2c/chips/pcf50633.c
@@ -1391,6 +1391,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;
@@ -1406,17 +1407,16 @@ 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);
+ 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)
@@ -1424,10 +1424,11 @@ static void pcf50633_usb_curlim_set(struct pcf50633_data *pcf, int ma)
PCF50633_FEAT_MBC, PMU_EVT_CHARGER_ACTIVE);
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,