summaryrefslogtreecommitdiff
path: root/firmware/target/arm/iriver/h10/usb-h10.c
diff options
context:
space:
mode:
authorBarry Wardell <rockbox@barrywardell.net>2006-09-20 23:21:59 +0000
committerBarry Wardell <rockbox@barrywardell.net>2006-09-20 23:21:59 +0000
commite63e62b2a1d849b9a965e989b3ce18576c0ac521 (patch)
tree4a992431717e4ba4218f1da6feb0e9be01165215 /firmware/target/arm/iriver/h10/usb-h10.c
parent9acc450e716b0c2accfa3922aba91cb707d4ae14 (diff)
downloadrockbox-e63e62b2a1d849b9a965e989b3ce18576c0ac521.tar.gz
rockbox-e63e62b2a1d849b9a965e989b3ce18576c0ac521.zip
Detect charger connected on H10. No need to sleep(HZ) when powering off.
More sensible USB support for H10: plugging in puts it into USB charging mode and leaves Rockbox usable, holding 'O' while pluggin in the USB cable will reboot the H10 (continuing to hold 'O' starts it up in UMS mode), holding any other button brings up the USB screen as previously. Implement system_reboot() for all PP5020 devices. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@11015 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/arm/iriver/h10/usb-h10.c')
-rw-r--r--firmware/target/arm/iriver/h10/usb-h10.c63
1 files changed, 6 insertions, 57 deletions
diff --git a/firmware/target/arm/iriver/h10/usb-h10.c b/firmware/target/arm/iriver/h10/usb-h10.c
index bf687fef47..55d2a0ff75 100644
--- a/firmware/target/arm/iriver/h10/usb-h10.c
+++ b/firmware/target/arm/iriver/h10/usb-h10.c
@@ -16,10 +16,6 @@
16 * KIND, either express or implied. 16 * KIND, either express or implied.
17 * 17 *
18 ****************************************************************************/ 18 ****************************************************************************/
19
20/* Code from the iPod port but commented out. USB detection custom made based
21 on GPIO analysis */
22
23#include "config.h" 19#include "config.h"
24#include "cpu.h" 20#include "cpu.h"
25#include "kernel.h" 21#include "kernel.h"
@@ -37,52 +33,11 @@
37#include "sprintf.h" 33#include "sprintf.h"
38#include "string.h" 34#include "string.h"
39#include "hwcompat.h" 35#include "hwcompat.h"
40#ifdef HAVE_MMC 36#include "pp5020.h"
41#include "ata_mmc.h"
42#endif
43 37
44void usb_init_device(void) 38void usb_init_device(void)
45{ 39{
46#if 0 40 /* USB is initialized by bootloader */
47 int r0;
48 outl(inl(0x70000084) | 0x200, 0x70000084);
49
50 outl(inl(0x7000002C) | 0x3000000, 0x7000002C);
51 outl(inl(0x6000600C) | 0x400000, 0x6000600C);
52
53 outl(inl(0x60006004) | 0x400000, 0x60006004); /* reset usb start */
54 outl(inl(0x60006004) & ~0x400000, 0x60006004); /* reset usb end */
55
56 outl(inl(0x70000020) | 0x80000000, 0x70000020);
57 while ((inl(0x70000028) & 0x80) == 0);
58
59 outl(inl(0xc5000184) | 0x100, 0xc5000184);
60 while ((inl(0xc5000184) & 0x100) != 0);
61
62 outl(inl(0xc50001A4) | 0x5F000000, 0xc50001A4);
63 if ((inl(0xc50001A4) & 0x100) == 0) {
64 outl(inl(0xc50001A8) & ~0x3, 0xc50001A8);
65 outl(inl(0xc50001A8) | 0x2, 0xc50001A8);
66 outl(inl(0x70000028) | 0x4000, 0x70000028);
67 outl(inl(0x70000028) | 0x2, 0x70000028);
68 } else {
69 outl(inl(0xc50001A8) | 0x3, 0xc50001A8);
70 outl(inl(0x70000028) &~0x4000, 0x70000028);
71 outl(inl(0x70000028) | 0x2, 0x70000028);
72 }
73 outl(inl(0xc5000140) | 0x2, 0xc5000140);
74 while((inl(0xc5000140) & 0x2) != 0);
75 r0 = inl(0xc5000184);
76
77 /* Note from IPL source (referring to next 5 lines of code:
78 THIS NEEDS TO BE CHANGED ONCE THERE IS KERNEL USB */
79 outl(inl(0x70000020) | 0x80000000, 0x70000020);
80 outl(inl(0x6000600C) | 0x400000, 0x6000600C);
81 while ((inl(0x70000028) & 0x80) == 0);
82 outl(inl(0x70000028) | 0x2, 0x70000028);
83
84 udelay(0x186A0);
85#endif
86} 41}
87 42
88bool usb_detect(void) 43bool usb_detect(void)
@@ -92,16 +47,10 @@ bool usb_detect(void)
92 47
93void usb_enable(bool on) 48void usb_enable(bool on)
94{ 49{
95 (void)on; 50 /* For the H10, we reboot if BUTTON_RIGHT is held so that the iriver
96#if 0 51 * bootloader can start up in UMS mode. This does not return. */
97 /* For the ipod, we can only do one thing with USB mode - reboot 52 if (on && (button_status()==BUTTON_RIGHT))
98 into Apple's flash-based disk-mode. This does not return. */
99 if (on)
100 { 53 {
101 /* The following code is copied from ipodlinux */ 54 system_reboot();
102 unsigned char* storage_ptr = (unsigned char *)0x40017F00;
103 memcpy(storage_ptr, "diskmode\0\0hotstuff\0\0\1", 21);
104 DEV_RS |= 4; /* Reboot */
105 } 55 }
106#endif
107} 56}