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