aboutsummaryrefslogtreecommitdiff
path: root/drivers/power
diff options
context:
space:
mode:
authorBalaji Rao <balajirrao@openmoko.org>2009-01-28 19:31:11 +0000
committerAndy Green <agreen@octopus.localdomain>2009-01-28 19:31:11 +0000
commitad99a335ca77d81173140187fe20a946b0c309af (patch)
tree076c437e98fafc7bfda4d38b38299f3e45589d60 /drivers/power
parent477bfff4d5fc47611c1a0e84bdaa0c1a3595012f (diff)
Subject: pcf50633_introduce_charging_restart_interval.patch
X-Git-Url: http://git.openmoko.org/?p=kernel.git;a=commitdiff_plain;h=1bb6adaa6a59f52d616b5260cb776eafd40ef05e pcf50633_introduce_charging_restart_interval.patch Signed-off-by: Balaji Rao <balajirrao@openmoko.org>
Diffstat (limited to 'drivers/power')
-rw-r--r--drivers/power/pcf50633-charger.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/drivers/power/pcf50633-charger.c b/drivers/power/pcf50633-charger.c
index 98fb64557e0..1efd7987517 100644
--- a/drivers/power/pcf50633-charger.c
+++ b/drivers/power/pcf50633-charger.c
@@ -172,12 +172,10 @@ static struct attribute_group mbc_attr_group = {
* batteries is marginal(1~2 %) till about 80% of its capacity - which means,
* after a BATFULL, charging won't be restarted until 80%.
*
- * This work_struct function restarts charging every
- * CHARGING_RESTART_TIMEOUT seconds and makes sure we don't discharge too much
+ * This work_struct function restarts charging every few seconds and makes
+ * sure we don't discharge too much
*/
-#define CHARGING_RESTART_TIMEOUT (900 * HZ) /* 15 minutes */
-
static void pcf50633_mbc_charging_restart(struct work_struct *work)
{
struct pcf50633_mbc *mbc;
@@ -205,6 +203,8 @@ static void
pcf50633_mbc_irq_handler(int irq, void *data)
{
struct pcf50633_mbc *mbc = data;
+ int chg_restart_interval =
+ mbc->pcf->pdata->charging_restart_interval;
/* USB */
if (irq == PCF50633_IRQ_USBINS) {
@@ -212,7 +212,7 @@ pcf50633_mbc_irq_handler(int irq, void *data)
} else if (irq == PCF50633_IRQ_USBREM) {
mbc->usb_online = 0;
mbc->usb_active = 0;
- pcf50633_mbc_usb_curlim_set(mbc->pcf, 0);
+ pcf50633_mbc_usb_curlim_set(mbc->pcf, 0);
cancel_delayed_work_sync(&mbc->charging_restart_work);
}
@@ -228,8 +228,10 @@ pcf50633_mbc_irq_handler(int irq, void *data)
if (irq == PCF50633_IRQ_BATFULL) {
mbc->usb_active = 0;
mbc->adapter_active = 0;
- schedule_delayed_work(&mbc->charging_restart_work,
- CHARGING_RESTART_TIMEOUT);
+
+ if (chg_restart_interval > 0)
+ schedule_delayed_work(&mbc->charging_restart_work,
+ chg_restart_interval);
} else if (irq == PCF50633_IRQ_USBLIMON)
mbc->usb_active = 0;
else if (irq == PCF50633_IRQ_USBLIMOFF)
@@ -419,6 +421,8 @@ static int __devexit pcf50633_mbc_remove(struct platform_device *pdev)
power_supply_unregister(&mbc->usb);
power_supply_unregister(&mbc->adapter);
+ cancel_delayed_work_sync(&mbc->charging_restart_work);
+
kfree(mbc);
return 0;