[PATCH 2/2] fix-pcf50633-only-do-platform-callback-once-per-event.patch

Andy Green andy at openmoko.com
Tue Jul 22 21:30:08 CEST 2008


Reported-by: Holger Freyther <zecke at 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 at openmoko.com>
---

 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,





More information about the openmoko-kernel mailing list