1
0
Fork 0
forked from len0rd/rockbox

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
This commit is contained in:
Torne Wuff 2010-06-06 13:01:19 +00:00
parent 32a2b3e3fa
commit 4a2cab6aa1
7 changed files with 87 additions and 0 deletions

View file

@ -146,6 +146,10 @@
/* define this if the unit can be powered or charged via USB */ /* define this if the unit can be powered or charged via USB */
#define HAVE_USB_POWER #define HAVE_USB_POWER
/* define this if the unit can have USB charging disabled by user -
* if USB/MAIN power is discernable and hardware doesn't compel charging */
#define HAVE_USB_CHARGING_ENABLE
/* define current usage levels */ /* define current usage levels */
#define CURRENT_NORMAL 100 /* MP3: ~10.5h out of 1100mAh battery */ #define CURRENT_NORMAL 100 /* MP3: ~10.5h out of 1100mAh battery */
#define CURRENT_BACKLIGHT 20 /* FIXME: this needs adjusting */ #define CURRENT_BACKLIGHT 20 /* FIXME: this needs adjusting */

View file

@ -130,6 +130,10 @@
/* define this if the unit can be powered or charged via USB */ /* define this if the unit can be powered or charged via USB */
#define HAVE_USB_POWER #define HAVE_USB_POWER
/* define this if the unit can have USB charging disabled by user -
* if USB/MAIN power is discernable and hardware doesn't compel charging */
#define HAVE_USB_CHARGING_ENABLE
/* define current usage levels */ /* define current usage levels */
#define CURRENT_NORMAL 69 /* ~10h (700mAh), see FS#9072 */ #define CURRENT_NORMAL 69 /* ~10h (700mAh), see FS#9072 */
#define CURRENT_BACKLIGHT 20 /* FIXME: this needs adjusting */ #define CURRENT_BACKLIGHT 20 /* FIXME: this needs adjusting */

View file

@ -143,6 +143,11 @@
/* define this if the unit can be powered or charged via USB */ /* define this if the unit can be powered or charged via USB */
#define HAVE_USB_POWER #define HAVE_USB_POWER
/* define this if the unit can have USB charging disabled by user -
:Qa
* if USB/MAIN power is discernable and hardware doesn't compel charging */
#define HAVE_USB_CHARGING_ENABLE
/* Define this if you have a PortalPlayer PP5020 */ /* Define this if you have a PortalPlayer PP5020 */
#define CONFIG_CPU PP5020 #define CONFIG_CPU PP5020

View file

@ -150,6 +150,10 @@
/* define this if the unit can be powered or charged via USB */ /* define this if the unit can be powered or charged via USB */
#define HAVE_USB_POWER #define HAVE_USB_POWER
/* define this if the unit can have USB charging disabled by user -
* if USB/MAIN power is discernable and hardware doesn't compel charging */
#define HAVE_USB_CHARGING_ENABLE
/* Define this if you have a PortalPlayer PP5022 */ /* Define this if you have a PortalPlayer PP5022 */
#define CONFIG_CPU PP5022 #define CONFIG_CPU PP5022

View file

@ -131,6 +131,10 @@
/* define this if the unit can be powered or charged via USB */ /* define this if the unit can be powered or charged via USB */
#define HAVE_USB_POWER #define HAVE_USB_POWER
/* define this if the unit can have USB charging disabled by user -
* if USB/MAIN power is discernable and hardware doesn't compel charging */
#define HAVE_USB_CHARGING_ENABLE
#define CURRENT_NORMAL 32 /* MP3: ~9h playback out of 300mAh battery */ #define CURRENT_NORMAL 32 /* MP3: ~9h playback out of 300mAh battery */
#define CURRENT_BACKLIGHT 20 /* FIXME: this needs adjusting */ #define CURRENT_BACKLIGHT 20 /* FIXME: this needs adjusting */
#if defined(HAVE_RECORDING) #if defined(HAVE_RECORDING)

View file

@ -154,6 +154,10 @@
/* define this if the unit can be powered or charged via USB */ /* define this if the unit can be powered or charged via USB */
#define HAVE_USB_POWER #define HAVE_USB_POWER
/* define this if the unit can have USB charging disabled by user -
* if USB/MAIN power is discernable and hardware doesn't compel charging */
#define HAVE_USB_CHARGING_ENABLE
/* define current usage levels */ /* define current usage levels */
#define CURRENT_NORMAL 24 /* 30MHz clock, LCD off, accessory supply on */ #define CURRENT_NORMAL 24 /* 30MHz clock, LCD off, accessory supply on */
#define CURRENT_BACKLIGHT 20 /* FIXME: this needs adjusting */ #define CURRENT_BACKLIGHT 20 /* FIXME: this needs adjusting */

View file

@ -182,3 +182,65 @@ void power_off(void)
#endif #endif
#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 */