diff options
author | Michael Giacomelli <giac2000@hotmail.com> | 2008-02-10 05:39:20 +0000 |
---|---|---|
committer | Michael Giacomelli <giac2000@hotmail.com> | 2008-02-10 05:39:20 +0000 |
commit | 054447f9e6037e4feb1a4c4313bd0afd4eb382a6 (patch) | |
tree | 57d78a645d2700d78a66f1807cc26dca9b6c45c9 /firmware/target/arm/usb-fw-pp502x.c | |
parent | 2b3136e1f350721fa65cc304cad7a00504390850 (diff) | |
download | rockbox-054447f9e6037e4feb1a4c4313bd0afd4eb382a6.tar.gz rockbox-054447f9e6037e4feb1a4c4313bd0afd4eb382a6.zip |
Commit FS#8379 by Andree Buschmann. Disables much of the remaining unneeded hardware on PP50xx targets (Ipods, Sansa, H10s, etc) resulting in a large savings in power and consequent increase in battery life. Results vary from target to target and from codec to codec, but we now approach the OF runtime on several PP devices. For now, leave base CPU clock at 30MHz, although further savings is possible with some codecs if clock is reduced. Additionally, fix battery capacity on c200 and use my measurements to improve runtime estimation for Sandisk targets.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@16259 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/arm/usb-fw-pp502x.c')
-rw-r--r-- | firmware/target/arm/usb-fw-pp502x.c | 46 |
1 files changed, 35 insertions, 11 deletions
diff --git a/firmware/target/arm/usb-fw-pp502x.c b/firmware/target/arm/usb-fw-pp502x.c index 7af699c064..0813ae1c59 100644 --- a/firmware/target/arm/usb-fw-pp502x.c +++ b/firmware/target/arm/usb-fw-pp502x.c | |||
@@ -33,18 +33,29 @@ | |||
33 | void usb_init_device(void) | 33 | void usb_init_device(void) |
34 | { | 34 | { |
35 | /* enable usb module */ | 35 | /* enable usb module */ |
36 | GPO32_ENABLE |= 0x200; | ||
37 | |||
38 | outl(inl(0x7000002C) | 0x3000000, 0x7000002C); | 36 | outl(inl(0x7000002C) | 0x3000000, 0x7000002C); |
39 | DEV_EN |= DEV_USB; | 37 | DEV_EN |= DEV_USB0; |
38 | DEV_EN |= DEV_USB1; | ||
40 | 39 | ||
41 | DEV_RS |= DEV_USB; /* reset usb start */ | 40 | /* reset both USBs */ |
42 | DEV_RS &=~DEV_USB;/* reset usb end */ | 41 | DEV_RS |= DEV_USB0; |
42 | DEV_RS &=~DEV_USB0; | ||
43 | DEV_RS |= DEV_USB1; | ||
44 | DEV_RS &=~DEV_USB1; | ||
43 | 45 | ||
46 | #if CONFIG_CPU == PP5020 | ||
44 | DEV_INIT2 |= INIT_USB; | 47 | DEV_INIT2 |= INIT_USB; |
48 | #endif | ||
45 | while ((inl(0x70000028) & 0x80) == 0); | 49 | while ((inl(0x70000028) & 0x80) == 0); |
46 | outl(inl(0x70000028) | 0x2, 0x70000028); | 50 | outl(inl(0x70000028) | 0x2, 0x70000028); |
47 | udelay(0x186A0); | 51 | udelay(0x186A0); |
52 | |||
53 | /* disable USB-devices until USB is detected via GPIO */ | ||
54 | DEV_EN &= ~DEV_USB0; | ||
55 | DEV_EN &= ~DEV_USB1; | ||
56 | #if CONFIG_CPU == PP5020 | ||
57 | DEV_INIT2 &= ~INIT_USB; | ||
58 | #endif | ||
48 | 59 | ||
49 | #if defined(IPOD_COLOR) || defined(IPOD_4G) \ | 60 | #if defined(IPOD_COLOR) || defined(IPOD_4G) \ |
50 | || defined(IPOD_MINI) || defined(IPOD_MINI2G) | 61 | || defined(IPOD_MINI) || defined(IPOD_MINI2G) |
@@ -85,33 +96,46 @@ void usb_enable(bool on) | |||
85 | 96 | ||
86 | static bool usb_pin_detect(void) | 97 | static bool usb_pin_detect(void) |
87 | { | 98 | { |
99 | bool retval = false; | ||
100 | |||
88 | #if defined(IPOD_4G) || defined(IPOD_COLOR) \ | 101 | #if defined(IPOD_4G) || defined(IPOD_COLOR) \ |
89 | || defined(IPOD_MINI) || defined(IPOD_MINI2G) | 102 | || defined(IPOD_MINI) || defined(IPOD_MINI2G) |
90 | /* GPIO D bit 3 is usb detect */ | 103 | /* GPIO D bit 3 is usb detect */ |
91 | if (GPIOD_INPUT_VAL & 0x08) | 104 | if (GPIOD_INPUT_VAL & 0x08) |
92 | return true; | 105 | retval = true; |
93 | 106 | ||
94 | #elif defined(IPOD_NANO) || defined(IPOD_VIDEO) | 107 | #elif defined(IPOD_NANO) || defined(IPOD_VIDEO) |
95 | /* GPIO L bit 4 is usb detect */ | 108 | /* GPIO L bit 4 is usb detect */ |
96 | if (GPIOL_INPUT_VAL & 0x10) | 109 | if (GPIOL_INPUT_VAL & 0x10) |
97 | return true; | 110 | retval = true; |
98 | 111 | ||
99 | #elif defined(SANSA_C200) | 112 | #elif defined(SANSA_C200) |
100 | /* GPIO H bit 1 is usb detect */ | 113 | /* GPIO H bit 1 is usb detect */ |
101 | if (GPIOH_INPUT_VAL & 0x02) | 114 | if (GPIOH_INPUT_VAL & 0x02) |
102 | return true; | 115 | retval = true; |
103 | 116 | ||
104 | #elif defined(SANSA_E200) | 117 | #elif defined(SANSA_E200) |
105 | /* GPIO B bit 4 is usb detect */ | 118 | /* GPIO B bit 4 is usb detect */ |
106 | if (GPIOB_INPUT_VAL & 0x10) | 119 | if (GPIOB_INPUT_VAL & 0x10) |
107 | return true; | 120 | retval = true; |
108 | 121 | ||
109 | #elif defined(IRIVER_H10) || defined(IRIVER_H10_5GB) | 122 | #elif defined(IRIVER_H10) || defined(IRIVER_H10_5GB) |
110 | /* GPIO L bit 2 is usb detect */ | 123 | /* GPIO L bit 2 is usb detect */ |
111 | if (GPIOL_INPUT_VAL & 0x4) | 124 | if (GPIOL_INPUT_VAL & 0x4) |
112 | return true; | 125 | retval = true; |
113 | #endif | 126 | #endif |
114 | return false; | 127 | |
128 | /* if USB is detected, re-enable the USB-devices */ | ||
129 | if (retval) | ||
130 | { | ||
131 | DEV_EN |= DEV_USB0; | ||
132 | DEV_EN |= DEV_USB1; | ||
133 | #if CONFIG_CPU == PP5020 | ||
134 | DEV_INIT2 |= INIT_USB; | ||
135 | #endif | ||
136 | } | ||
137 | |||
138 | return retval; | ||
115 | } | 139 | } |
116 | 140 | ||
117 | /* detect host or charger (INSERTED or POWERED) */ | 141 | /* detect host or charger (INSERTED or POWERED) */ |