summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBarry Wardell <rockbox@barrywardell.net>2006-12-20 15:28:32 +0000
committerBarry Wardell <rockbox@barrywardell.net>2006-12-20 15:28:32 +0000
commit4b54302b0713be2995a33cfa30d1615fc206f1eb (patch)
treeca05677c3d23d5091c9abd4949732c6ea91519e7
parent57228769a2a0da43042d57048215ad67cd49e443 (diff)
downloadrockbox-4b54302b0713be2995a33cfa30d1615fc206f1eb.tar.gz
rockbox-4b54302b0713be2995a33cfa30d1615fc206f1eb.zip
Combine USB code for all PortalPlayer targets since they most likely all use the same USB hardware. Add register defines for the USB hardware addresses, based off the Freescale i.MX31 datasheet. Use usb_init() from the iPod code, but modified to use the new register defines rather than oul/inl on the hardware addresses.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@11823 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/SOURCES22
-rw-r--r--firmware/export/pp5020.h8
-rw-r--r--firmware/target/arm/ipod/usb-target.h24
-rw-r--r--firmware/target/arm/iriver/h10/usb-h10.c58
-rw-r--r--firmware/target/arm/sandisk/sansa-e200/usb-e200.c39
-rw-r--r--firmware/target/arm/sandisk/sansa-e200/usb-target.h25
-rw-r--r--firmware/target/arm/tatung/tpj1022/usb-target.h27
-rw-r--r--firmware/target/arm/tatung/tpj1022/usb-tpj1022.c107
-rw-r--r--firmware/target/arm/usb-pp.c (renamed from firmware/target/arm/ipod/usb-ipod.c)73
-rw-r--r--firmware/target/arm/usb-target.h128
10 files changed, 190 insertions, 321 deletions
diff --git a/firmware/SOURCES b/firmware/SOURCES
index 386d3707c4..6a4f172e47 100644
--- a/firmware/SOURCES
+++ b/firmware/SOURCES
@@ -331,7 +331,7 @@ target/arm/sandisk/sansa-e200/ata-e200.c
331target/arm/sandisk/sansa-e200/lcd-e200.c 331target/arm/sandisk/sansa-e200/lcd-e200.c
332target/arm/sandisk/sansa-e200/adc-e200.c 332target/arm/sandisk/sansa-e200/adc-e200.c
333target/arm/sandisk/sansa-e200/backlight-e200.c 333target/arm/sandisk/sansa-e200/backlight-e200.c
334target/arm/sandisk/sansa-e200/usb-e200.c 334target/arm/usb-pp.c
335target/arm/sandisk/sansa-e200/button-e200.c 335target/arm/sandisk/sansa-e200/button-e200.c
336target/arm/sandisk/sansa-e200/power-e200.c 336target/arm/sandisk/sansa-e200/power-e200.c
337target/arm/i2s-pp.c 337target/arm/i2s-pp.c
@@ -416,7 +416,7 @@ target/arm/iriver/h10/backlight-h10.c
416target/arm/iriver/h10/button-h10.c 416target/arm/iriver/h10/button-h10.c
417target/arm/iriver/h10/lcd-h10_20gb.c 417target/arm/iriver/h10/lcd-h10_20gb.c
418target/arm/iriver/h10/power-h10.c 418target/arm/iriver/h10/power-h10.c
419target/arm/iriver/h10/usb-h10.c 419target/arm/usb-pp.c
420#endif /* SIMULATOR */ 420#endif /* SIMULATOR */
421#endif /* IRIVER_H10 */ 421#endif /* IRIVER_H10 */
422 422
@@ -430,7 +430,7 @@ target/arm/iriver/h10/backlight-h10.c
430target/arm/iriver/h10/button-h10.c 430target/arm/iriver/h10/button-h10.c
431target/arm/iriver/h10/lcd-h10_5gb.c 431target/arm/iriver/h10/lcd-h10_5gb.c
432target/arm/iriver/h10/power-h10.c 432target/arm/iriver/h10/power-h10.c
433target/arm/iriver/h10/usb-h10.c 433target/arm/usb-pp.c
434#endif /* SIMULATOR */ 434#endif /* SIMULATOR */
435#endif /* IRIVER_H10_5GB */ 435#endif /* IRIVER_H10_5GB */
436 436
@@ -460,7 +460,7 @@ target/arm/tatung/tpj1022/backlight-tpj1022.c
460target/arm/tatung/tpj1022/button-tpj1022.c 460target/arm/tatung/tpj1022/button-tpj1022.c
461target/arm/tatung/tpj1022/lcd-tpj1022.c 461target/arm/tatung/tpj1022/lcd-tpj1022.c
462target/arm/tatung/tpj1022/power-tpj1022.c 462target/arm/tatung/tpj1022/power-tpj1022.c
463target/arm/tatung/tpj1022/usb-tpj1022.c 463target/arm/usb-pp.c
464#endif /* SIMULATOR */ 464#endif /* SIMULATOR */
465#endif /* ELIO_TPJ1022 */ 465#endif /* ELIO_TPJ1022 */
466 466
@@ -475,7 +475,7 @@ target/arm/ipod/adc-ipod.c
475target/arm/ipod/backlight-4g_color.c 475target/arm/ipod/backlight-4g_color.c
476target/arm/ipod/button-clickwheel.c 476target/arm/ipod/button-clickwheel.c
477target/arm/ipod/power-ipod.c 477target/arm/ipod/power-ipod.c
478target/arm/ipod/usb-ipod.c 478target/arm/usb-pp.c
479#endif /* SIMULATOR */ 479#endif /* SIMULATOR */
480#endif /* IPOD_4G */ 480#endif /* IPOD_4G */
481 481
@@ -490,7 +490,7 @@ target/arm/ipod/adc-ipod.c
490target/arm/ipod/backlight-4g_color.c 490target/arm/ipod/backlight-4g_color.c
491target/arm/ipod/button-clickwheel.c 491target/arm/ipod/button-clickwheel.c
492target/arm/ipod/power-ipod.c 492target/arm/ipod/power-ipod.c
493target/arm/ipod/usb-ipod.c 493target/arm/usb-pp.c
494#endif /* SIMULATOR */ 494#endif /* SIMULATOR */
495#endif /* IPOD_COLOR */ 495#endif /* IPOD_COLOR */
496 496
@@ -505,7 +505,7 @@ target/arm/ipod/adc-ipod.c
505target/arm/ipod/backlight-nano_video.c 505target/arm/ipod/backlight-nano_video.c
506target/arm/ipod/button-clickwheel.c 506target/arm/ipod/button-clickwheel.c
507target/arm/ipod/power-ipod.c 507target/arm/ipod/power-ipod.c
508target/arm/ipod/usb-ipod.c 508target/arm/usb-pp.c
509#endif /* SIMULATOR */ 509#endif /* SIMULATOR */
510#endif /* IPOD_NANO */ 510#endif /* IPOD_NANO */
511 511
@@ -520,7 +520,7 @@ target/arm/ipod/adc-ipod.c
520target/arm/ipod/backlight-nano_video.c 520target/arm/ipod/backlight-nano_video.c
521target/arm/ipod/button-clickwheel.c 521target/arm/ipod/button-clickwheel.c
522target/arm/ipod/power-ipod.c 522target/arm/ipod/power-ipod.c
523target/arm/ipod/usb-ipod.c 523target/arm/usb-pp.c
524#endif /* SIMULATOR */ 524#endif /* SIMULATOR */
525#endif /* IPOD_VIDEO */ 525#endif /* IPOD_VIDEO */
526 526
@@ -535,7 +535,7 @@ target/arm/ipod/adc-ipod.c
535target/arm/ipod/3g/backlight-3g.c 535target/arm/ipod/3g/backlight-3g.c
536target/arm/ipod/3g/button-3g.c 536target/arm/ipod/3g/button-3g.c
537target/arm/ipod/power-ipod.c 537target/arm/ipod/power-ipod.c
538target/arm/ipod/usb-ipod.c 538target/arm/usb-pp.c
539#endif /* SIMULATOR */ 539#endif /* SIMULATOR */
540#endif /* IPOD_3G */ 540#endif /* IPOD_3G */
541 541
@@ -550,7 +550,7 @@ target/arm/ipod/adc-ipod.c
550target/arm/ipod/backlight-mini1g_mini2g.c 550target/arm/ipod/backlight-mini1g_mini2g.c
551target/arm/ipod/button-mini1g.c 551target/arm/ipod/button-mini1g.c
552target/arm/ipod/power-ipod.c 552target/arm/ipod/power-ipod.c
553target/arm/ipod/usb-ipod.c 553target/arm/usb-pp.c
554#endif /* SIMULATOR */ 554#endif /* SIMULATOR */
555#endif /* IPOD_MINI */ 555#endif /* IPOD_MINI */
556 556
@@ -565,7 +565,7 @@ target/arm/ipod/adc-ipod.c
565target/arm/ipod/backlight-mini1g_mini2g.c 565target/arm/ipod/backlight-mini1g_mini2g.c
566target/arm/ipod/button-clickwheel.c 566target/arm/ipod/button-clickwheel.c
567target/arm/ipod/power-ipod.c 567target/arm/ipod/power-ipod.c
568target/arm/ipod/usb-ipod.c 568target/arm/usb-pp.c
569#endif /* SIMULATOR */ 569#endif /* SIMULATOR */
570#endif /* IPOD_MINI2G */ 570#endif /* IPOD_MINI2G */
571 571
diff --git a/firmware/export/pp5020.h b/firmware/export/pp5020.h
index 37d8882519..cbae083913 100644
--- a/firmware/export/pp5020.h
+++ b/firmware/export/pp5020.h
@@ -126,6 +126,11 @@
126#define DEV_EN (*(volatile unsigned long *)(0x6000600c)) 126#define DEV_EN (*(volatile unsigned long *)(0x6000600c))
127 127
128#define DEV_SYSTEM 0x4 128#define DEV_SYSTEM 0x4
129#define DEV_USB 0x400000
130
131#define DEV_INIT (*(volatile unsigned long *)(0x70000020))
132
133#define INIT_USB 0x80000000
129 134
130#define TIMER1_CFG (*(volatile unsigned long *)(0x60005000)) 135#define TIMER1_CFG (*(volatile unsigned long *)(0x60005000))
131#define TIMER1_VAL (*(volatile unsigned long *)(0x60005004)) 136#define TIMER1_VAL (*(volatile unsigned long *)(0x60005004))
@@ -158,9 +163,6 @@
158#define SER1_MASK (1 << (SER1_IRQ-32)) 163#define SER1_MASK (1 << (SER1_IRQ-32))
159#define I2C_MASK (1 << (I2C_IRQ-32)) 164#define I2C_MASK (1 << (I2C_IRQ-32))
160 165
161#define USB2D_IDENT (*(volatile unsigned long*)(0xc5000000))
162#define USB_STATUS (*(volatile unsigned long*)(0xc50001a4))
163
164#define IISCONFIG (*(volatile unsigned long*)(0x70002800)) 166#define IISCONFIG (*(volatile unsigned long*)(0x70002800))
165 167
166#define IISFIFO_CFG (*(volatile unsigned long*)(0x7000280c)) 168#define IISFIFO_CFG (*(volatile unsigned long*)(0x7000280c))
diff --git a/firmware/target/arm/ipod/usb-target.h b/firmware/target/arm/ipod/usb-target.h
deleted file mode 100644
index 69a81472f8..0000000000
--- a/firmware/target/arm/ipod/usb-target.h
+++ /dev/null
@@ -1,24 +0,0 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 *
10 * Copyright (C) 2006 by Barry Wardelll
11 *
12 * All files in this archive are subject to the GNU General Public License.
13 * See the file COPYING in the source tree root for full license agreement.
14 *
15 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
16 * KIND, either express or implied.
17 *
18 ****************************************************************************/
19#ifndef USB_TARGET_H
20#define USB_TARGET_H
21
22bool usb_init_device(void);
23
24#endif
diff --git a/firmware/target/arm/iriver/h10/usb-h10.c b/firmware/target/arm/iriver/h10/usb-h10.c
deleted file mode 100644
index b11eb53deb..0000000000
--- a/firmware/target/arm/iriver/h10/usb-h10.c
+++ /dev/null
@@ -1,58 +0,0 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 *
10 * Copyright (C) 2006 by Barry Wardell
11 *
12 * All files in this archive are subject to the GNU General Public License.
13 * See the file COPYING in the source tree root for full license agreement.
14 *
15 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
16 * KIND, either express or implied.
17 *
18 ****************************************************************************/
19#include "config.h"
20#include "cpu.h"
21#include "kernel.h"
22#include "thread.h"
23#include "system.h"
24#include "debug.h"
25#include "ata.h"
26#include "fat.h"
27#include "disk.h"
28#include "panic.h"
29#include "lcd.h"
30#include "adc.h"
31#include "usb.h"
32#include "button.h"
33#include "sprintf.h"
34#include "string.h"
35#include "hwcompat.h"
36#include "pp5020.h"
37
38void usb_init_device(void)
39{
40 /* USB is initialized by bootloader */
41}
42
43bool usb_detect(void)
44{
45 return (GPIOL_INPUT_VAL & 0x04)?true:false;
46}
47
48void usb_enable(bool on)
49{
50 /* For the H10, we reboot if BUTTON_RIGHT is held so that the iriver
51 * bootloader can start up in UMS mode. This does not return. */
52 if (on && (button_status()==BUTTON_RIGHT))
53 {
54 ata_sleepnow(); /* Immediately spindown the disk. */
55 sleep(HZ*2);
56 system_reboot();
57 }
58}
diff --git a/firmware/target/arm/sandisk/sansa-e200/usb-e200.c b/firmware/target/arm/sandisk/sansa-e200/usb-e200.c
deleted file mode 100644
index 031ba07253..0000000000
--- a/firmware/target/arm/sandisk/sansa-e200/usb-e200.c
+++ /dev/null
@@ -1,39 +0,0 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 *
10 * Copyright (C) 2006 by Barry Wardelll
11 *
12 * All files in this archive are subject to the GNU General Public License.
13 * See the file COPYING in the source tree root for full license agreement.
14 *
15 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
16 * KIND, either express or implied.
17 *
18 ****************************************************************************/
19
20#include <stdbool.h>
21#include "system.h"
22
23bool usb_init_device(void)
24{
25 return true;
26}
27
28bool usb_detect(void)
29{
30 if(GPIOB_INPUT_VAL & 0x10)
31 return true;
32 return false;
33}
34
35void usb_enable(bool on)
36{
37 (void)on;
38}
39
diff --git a/firmware/target/arm/sandisk/sansa-e200/usb-target.h b/firmware/target/arm/sandisk/sansa-e200/usb-target.h
deleted file mode 100644
index 3f309ff30b..0000000000
--- a/firmware/target/arm/sandisk/sansa-e200/usb-target.h
+++ /dev/null
@@ -1,25 +0,0 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 *
10 * Copyright (C) 2006 by Barry Wardelll
11 *
12 * All files in this archive are subject to the GNU General Public License.
13 * See the file COPYING in the source tree root for full license agreement.
14 *
15 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
16 * KIND, either express or implied.
17 *
18 ****************************************************************************/
19#ifndef USB_TARGET_H
20#define USB_TARGET_H
21
22bool usb_init_device(void);
23
24#endif
25
diff --git a/firmware/target/arm/tatung/tpj1022/usb-target.h b/firmware/target/arm/tatung/tpj1022/usb-target.h
deleted file mode 100644
index 7a17f7bacf..0000000000
--- a/firmware/target/arm/tatung/tpj1022/usb-target.h
+++ /dev/null
@@ -1,27 +0,0 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 *
10 * Copyright (C) 2006 by Barry Wardelll
11 *
12 * All files in this archive are subject to the GNU General Public License.
13 * See the file COPYING in the source tree root for full license agreement.
14 *
15 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
16 * KIND, either express or implied.
17 *
18 ****************************************************************************/
19
20/* Based off x5 version */
21
22#ifndef USB_TARGET_H
23#define USB_TARGET_H
24
25bool usb_init_device(void);
26
27#endif
diff --git a/firmware/target/arm/tatung/tpj1022/usb-tpj1022.c b/firmware/target/arm/tatung/tpj1022/usb-tpj1022.c
deleted file mode 100644
index b238de4369..0000000000
--- a/firmware/target/arm/tatung/tpj1022/usb-tpj1022.c
+++ /dev/null
@@ -1,107 +0,0 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 *
10 * Copyright (C) 2006 by Barry Wardell
11 *
12 * All files in this archive are subject to the GNU General Public License.
13 * See the file COPYING in the source tree root for full license agreement.
14 *
15 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
16 * KIND, either express or implied.
17 *
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"
24#include "cpu.h"
25#include "kernel.h"
26#include "thread.h"
27#include "system.h"
28#include "debug.h"
29#include "ata.h"
30#include "fat.h"
31#include "disk.h"
32#include "panic.h"
33#include "lcd.h"
34#include "adc.h"
35#include "usb.h"
36#include "button.h"
37#include "sprintf.h"
38#include "string.h"
39#include "hwcompat.h"
40#ifdef HAVE_MMC
41#include "ata_mmc.h"
42#endif
43
44void usb_init_device(void)
45{
46#if 0
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}
87
88bool usb_detect(void)
89{
90 return false;
91}
92
93void usb_enable(bool on)
94{
95 (void)on;
96#if 0
97 /* For the ipod, we can only do one thing with USB mode - reboot
98 into Apple's flash-based disk-mode. This does not return. */
99 if (on)
100 {
101 /* The following code is copied from ipodlinux */
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 }
106#endif
107}
diff --git a/firmware/target/arm/ipod/usb-ipod.c b/firmware/target/arm/usb-pp.c
index 9298d65ff7..f8d0a836ad 100644
--- a/firmware/target/arm/ipod/usb-ipod.c
+++ b/firmware/target/arm/usb-pp.c
@@ -38,6 +38,8 @@
38#include "sprintf.h" 38#include "sprintf.h"
39#include "string.h" 39#include "string.h"
40#include "hwcompat.h" 40#include "hwcompat.h"
41
42#include "usb-target.h"
41 43
42void usb_init_device(void) 44void usb_init_device(void)
43{ 45{
@@ -45,36 +47,36 @@ void usb_init_device(void)
45 outl(inl(0x70000084) | 0x200, 0x70000084); 47 outl(inl(0x70000084) | 0x200, 0x70000084);
46 48
47 outl(inl(0x7000002C) | 0x3000000, 0x7000002C); 49 outl(inl(0x7000002C) | 0x3000000, 0x7000002C);
48 outl(inl(0x6000600C) | 0x400000, 0x6000600C); 50 DEV_EN |= DEV_USB;
49 51
50 outl(inl(0x60006004) | 0x400000, 0x60006004); /* reset usb start */ 52 DEV_RS |= DEV_USB; /* reset usb start */
51 outl(inl(0x60006004) & ~0x400000, 0x60006004); /* reset usb end */ 53 DEV_RS &=~DEV_USB;/* reset usb end */
52 54
53 outl(inl(0x70000020) | 0x80000000, 0x70000020); 55 DEV_INIT |= INIT_USB;
54 while ((inl(0x70000028) & 0x80) == 0); 56 while ((inl(0x70000028) & 0x80) == 0);
55 57
56 outl(inl(0xc5000184) | 0x100, 0xc5000184); 58 UOG_PORTSC1 |= 0x100;
57 while ((inl(0xc5000184) & 0x100) != 0); 59 while ((UOG_PORTSC1 & 0x100) != 0);
58 60
59 outl(inl(0xc50001A4) | 0x5F000000, 0xc50001A4); 61 UOG_OTGSC |= 0x5F000000;
60 if ((inl(0xc50001A4) & 0x100) == 0) { 62 if( (UOG_OTGSC & 0x100) == 0) {
61 outl(inl(0xc50001A8) & ~0x3, 0xc50001A8); 63 UOG_USBMODE &=~ 0x3;
62 outl(inl(0xc50001A8) | 0x2, 0xc50001A8); 64 UOG_USBMODE |= 0x2;
63 outl(inl(0x70000028) | 0x4000, 0x70000028); 65 outl(inl(0x70000028) | 0x4000, 0x70000028);
64 outl(inl(0x70000028) | 0x2, 0x70000028); 66 outl(inl(0x70000028) | 0x2, 0x70000028);
65 } else { 67 } else {
66 outl(inl(0xc50001A8) | 0x3, 0xc50001A8); 68 UOG_USBMODE |= 0x2;
67 outl(inl(0x70000028) &~0x4000, 0x70000028); 69 outl(inl(0x70000028) &~0x4000, 0x70000028);
68 outl(inl(0x70000028) | 0x2, 0x70000028); 70 outl(inl(0x70000028) | 0x2, 0x70000028);
69 } 71 }
70 outl(inl(0xc5000140) | 0x2, 0xc5000140); 72 UOG_USBCMD |= 0x2;
71 while((inl(0xc5000140) & 0x2) != 0); 73 while((UOG_USBCMD & 0x2) != 0);
72 r0 = inl(0xc5000184); 74 r0 = UOG_PORTSC1;
73 75
74 /* Note from IPL source (referring to next 5 lines of code: 76 /* Note from IPL source (referring to next 5 lines of code:
75 THIS NEEDS TO BE CHANGED ONCE THERE IS KERNEL USB */ 77 THIS NEEDS TO BE CHANGED ONCE THERE IS KERNEL USB */
76 outl(inl(0x70000020) | 0x80000000, 0x70000020); 78 outl(inl(0x70000020) | 0x80000000, 0x70000020);
77 outl(inl(0x6000600C) | 0x400000, 0x6000600C); 79 DEV_EN |= DEV_USB;
78 while ((inl(0x70000028) & 0x80) == 0); 80 while ((inl(0x70000028) & 0x80) == 0);
79 outl(inl(0x70000028) | 0x2, 0x70000028); 81 outl(inl(0x70000028) | 0x2, 0x70000028);
80 82
@@ -83,22 +85,34 @@ void usb_init_device(void)
83 85
84void usb_enable(bool on) 86void usb_enable(bool on)
85{ 87{
86 /* For the ipod, we can only do one thing with USB mode - reboot 88 /* This device specific code will eventually give way to proper USB
87 into Apple's flash-based disk-mode. This does not return. */ 89 handling, which should be the same for all PortalPlayer targets. */
88 if (on) 90 if (on)
89 { 91 {
90 /* The following code is copied from ipodlinux */ 92#if IPOD_ARCH || defined(IRIVER_H10) || defined (IRIVER_H10_5GB)
93 /* For the H10 and iPod, we can only do one thing with USB mode - reboot
94 into the flash-based disk-mode. This does not return. */
95
96 /* The following code is copied from ipodlinux */
91#if defined(IPOD_COLOR) || defined(IPOD_3G) || \ 97#if defined(IPOD_COLOR) || defined(IPOD_3G) || \
92 defined(IPOD_4G) || defined(IPOD_MINI) 98 defined(IPOD_4G) || defined(IPOD_MINI)
93 unsigned char* storage_ptr = (unsigned char *)0x40017F00; 99 unsigned char* storage_ptr = (unsigned char *)0x40017F00;
94#elif defined(IPOD_NANO) || defined(IPOD_VIDEO) || defined(IPOD_MINI2G) 100#elif defined(IPOD_NANO) || defined(IPOD_VIDEO) || defined(IPOD_MINI2G)
95 unsigned char* storage_ptr = (unsigned char *)0x4001FF00; 101 unsigned char* storage_ptr = (unsigned char *)0x4001FF00;
96#endif 102#endif
97 103
98 ata_sleepnow(); /* Immediately spindown the disk. */ 104#if defined(IRIVER_H10) || defined (IRIVER_H10_5GB)
99 sleep(HZ*2); 105 if(button_status()==BUTTON_RIGHT)
100 memcpy(storage_ptr, "diskmode\0\0hotstuff\0\0\1", 21); 106#endif
101 DEV_RS |= 4; /* Reboot */ 107 {
108 ata_sleepnow(); /* Immediately spindown the disk. */
109 sleep(HZ*2);
110#ifdef IPOD_ARCH
111 memcpy(storage_ptr, "diskmode\0\0hotstuff\0\0\1", 21);
112#endif
113 system_reboot(); /* Reboot */
114 }
115#endif
102 } 116 }
103} 117}
104 118
@@ -106,12 +120,17 @@ bool usb_detect(void)
106{ 120{
107 bool current_status; 121 bool current_status;
108 122
109 /* The following check is in the ipodlinux source, with the 123 /* UOG_ID should have the bit format:
110 comment "USB2D_IDENT is bad" if USB2D_IDENT != 0x22FA05 */ 124 [31:24] = 0x0
111 if (USB2D_IDENT != 0x22FA05) { 125 [23:16] = 0x22 (Revision number)
126 [15:14] = 0x3 (Reserved)
127 [13:8] = 0x3a (NID - 1's compliment of ID)
128 [7:6] = 0x0 (Reserved)
129 [5:0] = 0x05 (ID) */
130 if (UOG_ID != 0x22FA05) {
112 return false; 131 return false;
113 } 132 }
114 current_status = (USB_STATUS & 0x800)?true:false; 133 current_status = (UOG_OTGSC & 0x800)?true:false;
115 134
116 return current_status; 135 return current_status;
117} 136}
diff --git a/firmware/target/arm/usb-target.h b/firmware/target/arm/usb-target.h
new file mode 100644
index 0000000000..2a5400be7e
--- /dev/null
+++ b/firmware/target/arm/usb-target.h
@@ -0,0 +1,128 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 *
10 * Copyright (C) 2006 by Barry Wardelll
11 *
12 * All files in this archive are subject to the GNU General Public License.
13 * See the file COPYING in the source tree root for full license agreement.
14 *
15 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
16 * KIND, either express or implied.
17 *
18 ****************************************************************************/
19#ifndef USB_TARGET_H
20#define USB_TARGET_H
21
22/* The PortalPlayer USB controller is compatible with Freescale i.MX31 */
23
24/* Register addresses */
25/* OTG */
26#define UOG_ID (*(volatile unsigned long *)(0xc5000000))
27#define UOG_HWGENERAL (*(volatile unsigned long *)(0xc5000004))
28#define UOG_HWHOST (*(volatile unsigned long *)(0xc5000008))
29#define UOG_HWTXBUF (*(volatile unsigned long *)(0xc5000010))
30#define UOG_HWRXBUF (*(volatile unsigned long *)(0xc5000014))
31#define UOG_CAPLENGTH (*(volatile unsigned char *)(0xc5000100))
32#define UOG_HCIVERSION (*(volatile unsigned short *)(0xc5000102))
33#define UOG_HCSPARAMS (*(volatile unsigned long *)(0xc5000104))
34#define UOG_HCCPARAMS (*(volatile unsigned long *)(0xc5000108))
35#define UOG_DCIVERSION (*(volatile unsigned short *)(0xc5000120))
36#define UOG_DCCPARAMS (*(volatile unsigned long *)(0xc5000124))
37#define UOG_USBCMD (*(volatile unsigned long *)(0xc5000140))
38#define UOG_USBSTS (*(volatile unsigned long *)(0xc5000144))
39#define UOG_USBINTR (*(volatile unsigned long *)(0xc5000148))
40#define UOG_FRINDEX (*(volatile unsigned long *)(0xc500014c))
41#define UOG_PERIODICLISTBASE (*(volatile unsigned long *)(0xc5000154))
42#define UOG_ASYNCLISTADDR (*(volatile unsigned long *)(0xc5000158))
43#define UOG_BURSTSIZE (*(volatile unsigned long *)(0xc5000160))
44#define UOG_TXFILLTUNING (*(volatile unsigned long *)(0xc5000164))
45#define UOG_ULPIVIEW (*(volatile unsigned long *)(0xc5000170))
46#define UOG_CFGFLAG (*(volatile unsigned long *)(0xc5000180))
47#define UOG_PORTSC1 (*(volatile unsigned long *)(0xc5000184))
48/*#define UOG_PORTSC2 (*(volatile unsigned long *)(0xc5000188))
49#define UOG_PORTSC3 (*(volatile unsigned long *)(0xc500018c))
50#define UOG_PORTSC4 (*(volatile unsigned long *)(0xc5000190))
51#define UOG_PORTSC5 (*(volatile unsigned long *)(0xc5000194))
52#define UOG_PORTSC6 (*(volatile unsigned long *)(0xc5000198))
53#define UOG_PORTSC7 (*(volatile unsigned long *)(0xc500019c))
54#define UOG_PORTSC8 (*(volatile unsigned long *)(0xc50001a0))*/
55#define UOG_OTGSC (*(volatile unsigned long *)(0xc50001a4))
56#define UOG_USBMODE (*(volatile unsigned long *)(0xc50001a8))
57#define UOG_ENDPTSETUPSTAT (*(volatile unsigned long *)(0xc50001ac))
58#define UOG_ENDPTPRIME (*(volatile unsigned long *)(0xc50001b0))
59#define UOG_ENDPTFLUSH (*(volatile unsigned long *)(0xc50001b4))
60#define UOG_ENDPTSTAT (*(volatile unsigned long *)(0xc50001b8))
61#define UOG_ENDPTCOMPLETE (*(volatile unsigned long *)(0xc50001bc))
62#define ENDPTCRTL0 (*(volatile unsigned long *)(0xc50001c0))
63#define ENDPTCRTL1 (*(volatile unsigned long *)(0xc50001c4))
64#define ENDPTCRTL2 (*(volatile unsigned long *)(0xc50001c8))
65#define ENDPTCRTL3 (*(volatile unsigned long *)(0xc50001cc))
66#define ENDPTCRTL4 (*(volatile unsigned long *)(0xc50001d0))
67#define ENDPTCRTL5 (*(volatile unsigned long *)(0xc50001d4))
68#define ENDPTCRTL6 (*(volatile unsigned long *)(0xc50001d8))
69#define ENDPTCRTL7 (*(volatile unsigned long *)(0xc50001dc))
70/*#define ENDPTCRTL8 (*(volatile unsigned long *)(0xc50001e0))
71#define ENDPTCRTL9 (*(volatile unsigned long *)(0xc50001e4))
72#define ENDPTCRTL10 (*(volatile unsigned long *)(0xc50001e8))
73#define ENDPTCRTL11 (*(volatile unsigned long *)(0xc50001ec))
74#define ENDPTCRTL12 (*(volatile unsigned long *)(0xc50001f0))
75#define ENDPTCRTL13 (*(volatile unsigned long *)(0xc50001f4))
76#define ENDPTCRTL14 (*(volatile unsigned long *)(0xc50001f8))
77#define ENDPTCRTL15 (*(volatile unsigned long *)(0xc50001fc))*/
78
79/* Host 1 */
80#define UH1_ID (*(volatile unsigned long *)(0xc5000200))
81#define UH1_HWGENERAL (*(volatile unsigned long *)(0xc5000204))
82#define UH1_HWHOST (*(volatile unsigned long *)(0xc5000208))
83#define UH1_HWTXBUF (*(volatile unsigned long *)(0xc5000210))
84#define UH1_HWRXBUF (*(volatile unsigned long *)(0xc5000214))
85#define UH1_CAPLENGTH (*(volatile unsigned long *)(0xc5000300))
86#define UH1_HCIVERSION (*(volatile unsigned long *)(0xc5000302))
87#define UH1_HCSPARAMS (*(volatile unsigned long *)(0xc5000304))
88#define UH1_HCCPARAMS (*(volatile unsigned long *)(0xc5000308))
89#define UH1_USBCMD (*(volatile unsigned long *)(0xc5000340))
90#define UH1_USBSTS (*(volatile unsigned long *)(0xc5000344))
91#define UH1_USBINTR (*(volatile unsigned long *)(0xc5000348))
92#define UH1_FRINDEX (*(volatile unsigned long *)(0xc500034c))
93#define UH1_PERIODICLISTBASE (*(volatile unsigned long *)(0xc5000354))
94#define UH1_ASYNCLISTADDR (*(volatile unsigned long *)(0xc5000358))
95#define UH1_BURSTSIZE (*(volatile unsigned long *)(0xc5000360))
96#define UH1_TXFILLTUNING (*(volatile unsigned long *)(0xc5000364))
97#define UH1_PORTSC1 (*(volatile unsigned long *)(0xc5000384))
98#define UH1_USBMODE (*(volatile unsigned long *)(0xc50003a8))
99
100/* Host 2 */
101#define UH2_ID (*(volatile unsigned long *)(0xc5000400))
102#define UH2_HWGENERAL (*(volatile unsigned long *)(0xc5000404))
103#define UH2_HWHOST (*(volatile unsigned long *)(0xc5000408))
104#define UH2_HWTXBUF (*(volatile unsigned long *)(0xc5000410))
105#define UH2_HWRXBUF (*(volatile unsigned long *)(0xc5000414))
106#define UH2_CAPLENGTH (*(volatile unsigned long *)(0xc5000500))
107#define UH2_HCIVERSION (*(volatile unsigned long *)(0xc5000502))
108#define UH2_HCSPARAMS (*(volatile unsigned long *)(0xc5000504))
109#define UH2_HCCPARAMS (*(volatile unsigned long *)(0xc5000508))
110#define UH2_USBCMD (*(volatile unsigned long *)(0xc5000540))
111#define UH2_USBSTS (*(volatile unsigned long *)(0xc5000544))
112#define UH2_USBINTR (*(volatile unsigned long *)(0xc5000548))
113#define UH2_FRINDEX (*(volatile unsigned long *)(0xc500054c))
114#define UH2_PERIODICLISTBASE (*(volatile unsigned long *)(0xc5000554))
115#define UH2_ASYNCLISTADDR (*(volatile unsigned long *)(0xc5000558))
116#define UH2_BURSTSIZE (*(volatile unsigned long *)(0xc5000560))
117#define UH2_TXFILLTUNING (*(volatile unsigned long *)(0xc5000564))
118#define UH2_ULPIVIEW (*(volatile unsigned long *)(0xc5000570))
119#define UH2_PORTSC1 (*(volatile unsigned long *)(0xc5000584))
120#define UH2_USBMODE (*(volatile unsigned long *)(0xc50005a8))
121
122/* General */
123#define USB_CTRL (*(volatile unsigned long *)(0xc5000600))
124#define USB_OTG_MIRROR (*(volatile unsigned long *)(0xc5000604))
125
126void usb_init_device(void);
127
128#endif