diff options
author | Torne Wuff <torne@wolfpuppy.org.uk> | 2010-06-06 13:01:19 +0000 |
---|---|---|
committer | Torne Wuff <torne@wolfpuppy.org.uk> | 2010-06-06 13:01:19 +0000 |
commit | 4a2cab6aa1008a4f5ac05dac44c99b7f1a05e8f4 (patch) | |
tree | 229c2d69c074b4fa5973ccc6050b7bba187a6d14 /firmware/target | |
parent | 32a2b3e3fa36767fdad90b565fc52a1050b39926 (diff) |
USB charging support for iPods.
This adds proper full speed charging support for iPod 4G, Color, Mini 1G, Mini 2G, Nano 1G, and Video. Nano 2G already has support, so now all ipods charge (except 1G-3G whose hardware doesn't support USB charging).
USB charging defaults to on, but will only charge at full speed from a USB host. To charge from an AC charger, you need to set the USB charging mode to "force". It may be possible to detect AC chargers in a future version, at least on some models.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@26626 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target')
-rw-r--r-- | firmware/target/arm/ipod/power-ipod.c | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/firmware/target/arm/ipod/power-ipod.c b/firmware/target/arm/ipod/power-ipod.c index 4266aad896..0becedf2cd 100644 --- a/firmware/target/arm/ipod/power-ipod.c +++ b/firmware/target/arm/ipod/power-ipod.c @@ -182,3 +182,65 @@ void power_off(void) #endif #endif } + +#ifdef HAVE_USB_CHARGING_ENABLE +void usb_charging_maxcurrent_change(int maxcurrent) +{ + bool suspend_charging = (maxcurrent < 100); + bool fast_charging = (maxcurrent >= 500); + + /* This GPIO is connected to the LTC4066's SUSP pin */ + /* Setting it high prevents any power being drawn over USB */ + /* which supports USB suspend */ +#if defined(IPOD_VIDEO) || defined(IPOD_NANO) + if (suspend_charging) + GPIOL_OUTPUT_VAL |= 4; + else + GPIOL_OUTPUT_VAL &= ~4; +#elif defined(IPOD_MINI2G) + if (suspend_charging) + GPIOJ_OUTPUT_VAL |= 2; + else + GPIOJ_OUTPUT_VAL &= ~2; +#else + if (suspend_charging) + GPO32_VAL |= 0x8000000; + else + GPO32_VAL &= ~0x8000000; +#endif + + /* This GPIO is connected to the LTC4066's HPWR pin */ + /* Setting it low limits current to 100mA, setting it high allows 500mA */ +#if defined(IPOD_VIDEO) || defined(IPOD_NANO) + if (fast_charging) + GPIOA_OUTPUT_VAL |= 4; + else + GPIOA_OUTPUT_VAL &= ~4; +#else + if (fast_charging) + GPO32_VAL |= 0x40; + else + GPO32_VAL &= ~0x40; +#endif + + /* This GPIO is connected to the LTC4066's CLDIS pin */ + /* Setting it high allows up to 1.5A of current to be drawn */ + /* This doesn't appear to actually be safe even with an AC charger */ + /* so for now it is disabled. It's not known (or maybe doesn't exist) */ + /* on all models. */ +#if 0 +#if defined(IPOD_VIDEO) + if (unlimited_charging) + GPO32_VAL |= 0x10000000; + else + GPO32_VAL &= ~0x10000000; +#elif defined(IPOD_4G) || defined(IPOD_COLOR) + if (unlimited_charging) + GPO32_VAL |= 0x200; + else + GPO32_VAL &= ~0x200; +#endif + /* This might be GPIOD & 40 on 2G */ +#endif +} +#endif /* HAVE_USB_CHARGING_ENABLE */ |