diff options
| -rw-r--r-- | drivers/power/pcf50633-charger.c | 46 | ||||
| -rw-r--r-- | include/linux/mfd/pcf50633/core.h | 2 |
2 files changed, 0 insertions, 48 deletions
diff --git a/drivers/power/pcf50633-charger.c b/drivers/power/pcf50633-charger.c index 21b6e64e7805..338311996eea 100644 --- a/drivers/power/pcf50633-charger.c +++ b/drivers/power/pcf50633-charger.c | |||
| @@ -37,8 +37,6 @@ struct pcf50633_mbc { | |||
| 37 | struct power_supply usb; | 37 | struct power_supply usb; |
| 38 | struct power_supply adapter; | 38 | struct power_supply adapter; |
| 39 | struct power_supply ac; | 39 | struct power_supply ac; |
| 40 | |||
| 41 | struct delayed_work charging_restart_work; | ||
| 42 | }; | 40 | }; |
| 43 | 41 | ||
| 44 | int pcf50633_mbc_usb_curlim_set(struct pcf50633 *pcf, int ma) | 42 | int pcf50633_mbc_usb_curlim_set(struct pcf50633 *pcf, int ma) |
| @@ -236,44 +234,10 @@ static struct attribute_group mbc_attr_group = { | |||
| 236 | .attrs = pcf50633_mbc_sysfs_entries, | 234 | .attrs = pcf50633_mbc_sysfs_entries, |
| 237 | }; | 235 | }; |
| 238 | 236 | ||
| 239 | /* MBC state machine switches into charging mode when the battery voltage | ||
| 240 | * falls below 96% of a battery float voltage. But the voltage drop in Li-ion | ||
| 241 | * batteries is marginal(1~2 %) till about 80% of its capacity - which means, | ||
| 242 | * after a BATFULL, charging won't be restarted until 80%. | ||
| 243 | * | ||
| 244 | * This work_struct function restarts charging at regular intervals to make | ||
| 245 | * sure we don't discharge too much | ||
| 246 | */ | ||
| 247 | |||
| 248 | static void pcf50633_mbc_charging_restart(struct work_struct *work) | ||
| 249 | { | ||
| 250 | struct pcf50633_mbc *mbc; | ||
| 251 | u8 mbcs2, chgmod; | ||
| 252 | |||
| 253 | mbc = container_of(work, struct pcf50633_mbc, | ||
| 254 | charging_restart_work.work); | ||
| 255 | |||
| 256 | mbcs2 = pcf50633_reg_read(mbc->pcf, PCF50633_REG_MBCS2); | ||
| 257 | chgmod = (mbcs2 & PCF50633_MBCS2_MBC_MASK); | ||
| 258 | |||
| 259 | if (chgmod != PCF50633_MBCS2_MBC_BAT_FULL) | ||
| 260 | return; | ||
| 261 | |||
| 262 | /* Restart charging */ | ||
| 263 | pcf50633_reg_set_bit_mask(mbc->pcf, PCF50633_REG_MBCC1, | ||
| 264 | PCF50633_MBCC1_RESUME, PCF50633_MBCC1_RESUME); | ||
| 265 | mbc->usb_active = 1; | ||
| 266 | power_supply_changed(&mbc->usb); | ||
| 267 | |||
| 268 | dev_info(mbc->pcf->dev, "Charging restarted\n"); | ||
| 269 | } | ||
| 270 | |||
| 271 | static void | 237 | static void |
| 272 | pcf50633_mbc_irq_handler(int irq, void *data) | 238 | pcf50633_mbc_irq_handler(int irq, void *data) |
| 273 | { | 239 | { |
| 274 | struct pcf50633_mbc *mbc = data; | 240 | struct pcf50633_mbc *mbc = data; |
| 275 | int chg_restart_interval = | ||
| 276 | mbc->pcf->pdata->charging_restart_interval; | ||
| 277 | 241 | ||
| 278 | /* USB */ | 242 | /* USB */ |
| 279 | if (irq == PCF50633_IRQ_USBINS) { | 243 | if (irq == PCF50633_IRQ_USBINS) { |
| @@ -282,7 +246,6 @@ pcf50633_mbc_irq_handler(int irq, void *data) | |||
| 282 | mbc->usb_online = 0; | 246 | mbc->usb_online = 0; |
| 283 | mbc->usb_active = 0; | 247 | mbc->usb_active = 0; |
| 284 | pcf50633_mbc_usb_curlim_set(mbc->pcf, 0); | 248 | pcf50633_mbc_usb_curlim_set(mbc->pcf, 0); |
| 285 | cancel_delayed_work_sync(&mbc->charging_restart_work); | ||
| 286 | } | 249 | } |
| 287 | 250 | ||
| 288 | /* Adapter */ | 251 | /* Adapter */ |
| @@ -297,10 +260,6 @@ pcf50633_mbc_irq_handler(int irq, void *data) | |||
| 297 | if (irq == PCF50633_IRQ_BATFULL) { | 260 | if (irq == PCF50633_IRQ_BATFULL) { |
| 298 | mbc->usb_active = 0; | 261 | mbc->usb_active = 0; |
| 299 | mbc->adapter_active = 0; | 262 | mbc->adapter_active = 0; |
| 300 | |||
| 301 | if (chg_restart_interval > 0) | ||
| 302 | schedule_delayed_work(&mbc->charging_restart_work, | ||
| 303 | chg_restart_interval); | ||
| 304 | } else if (irq == PCF50633_IRQ_USBLIMON) | 263 | } else if (irq == PCF50633_IRQ_USBLIMON) |
| 305 | mbc->usb_active = 0; | 264 | mbc->usb_active = 0; |
| 306 | else if (irq == PCF50633_IRQ_USBLIMOFF) | 265 | else if (irq == PCF50633_IRQ_USBLIMOFF) |
| @@ -463,9 +422,6 @@ static int __devinit pcf50633_mbc_probe(struct platform_device *pdev) | |||
| 463 | return ret; | 422 | return ret; |
| 464 | } | 423 | } |
| 465 | 424 | ||
| 466 | INIT_DELAYED_WORK(&mbc->charging_restart_work, | ||
| 467 | pcf50633_mbc_charging_restart); | ||
| 468 | |||
| 469 | ret = sysfs_create_group(&pdev->dev.kobj, &mbc_attr_group); | 425 | ret = sysfs_create_group(&pdev->dev.kobj, &mbc_attr_group); |
| 470 | if (ret) | 426 | if (ret) |
| 471 | dev_err(mbc->pcf->dev, "failed to create sysfs entries\n"); | 427 | dev_err(mbc->pcf->dev, "failed to create sysfs entries\n"); |
| @@ -492,8 +448,6 @@ static int __devexit pcf50633_mbc_remove(struct platform_device *pdev) | |||
| 492 | power_supply_unregister(&mbc->adapter); | 448 | power_supply_unregister(&mbc->adapter); |
| 493 | power_supply_unregister(&mbc->ac); | 449 | power_supply_unregister(&mbc->ac); |
| 494 | 450 | ||
| 495 | cancel_delayed_work_sync(&mbc->charging_restart_work); | ||
| 496 | |||
| 497 | kfree(mbc); | 451 | kfree(mbc); |
| 498 | 452 | ||
| 499 | return 0; | 453 | return 0; |
diff --git a/include/linux/mfd/pcf50633/core.h b/include/linux/mfd/pcf50633/core.h index 09af8fdfbb5d..46df7f053c29 100644 --- a/include/linux/mfd/pcf50633/core.h +++ b/include/linux/mfd/pcf50633/core.h | |||
| @@ -29,8 +29,6 @@ struct pcf50633_platform_data { | |||
| 29 | char **batteries; | 29 | char **batteries; |
| 30 | int num_batteries; | 30 | int num_batteries; |
| 31 | 31 | ||
| 32 | int charging_restart_interval; | ||
| 33 | |||
| 34 | /* | 32 | /* |
| 35 | * Should be set accordingly to the reference resistor used, see | 33 | * Should be set accordingly to the reference resistor used, see |
| 36 | * I_{ch(ref)} charger reference current in the pcf50633 User | 34 | * I_{ch(ref)} charger reference current in the pcf50633 User |
