summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBjörn Stenberg <bjorn@haxx.se>2007-11-22 22:17:45 +0000
committerBjörn Stenberg <bjorn@haxx.se>2007-11-22 22:17:45 +0000
commit7af22e1a86a60da44356942fc403e87cca0977f3 (patch)
tree6171e8c288a1456e128474101ba83aeb65da3e42
parentf2815ff32f43fa682e9d577057d6b92e032757b3 (diff)
downloadrockbox-7af22e1a86a60da44356942fc403e87cca0977f3.zip
rockbox-7af22e1a86a60da44356942fc403e87cca0977f3.tar.gz
rockbox-7af22e1a86a60da44356942fc403e87cca0977f3.tar.bz2
rockbox-7af22e1a86a60da44356942fc403e87cca0977f3.tar.xz
Red fix: USB power check implemented in driver instead
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@15761 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--bootloader/main-pp.c4
-rw-r--r--firmware/export/usb_drv.h1
-rw-r--r--firmware/target/arm/usb-drv-pp502x.c7
3 files changed, 10 insertions, 2 deletions
diff --git a/bootloader/main-pp.c b/bootloader/main-pp.c
index c2d0b80..3cf7691 100644
--- a/bootloader/main-pp.c
+++ b/bootloader/main-pp.c
@@ -40,7 +40,7 @@
#endif
#if defined(SANSA_E200) || defined(SANSA_C200)
#include "usb.h"
-#include "arcotg_udc.h"
+#include "usb_drv.h"
#endif
@@ -460,7 +460,7 @@ void* main(void)
btn = button_read_device();
#if defined(SANSA_E200) || defined(SANSA_C200)
usb_init();
- while ((UDC_OTGSC&0x800) && usb_retry < 5 && !usb)
+ while (usb_drv_powered() && usb_retry < 5 && !usb)
{
usb_retry++;
sleep(HZ/4);
diff --git a/firmware/export/usb_drv.h b/firmware/export/usb_drv.h
index a30f2ec..264b5d1 100644
--- a/firmware/export/usb_drv.h
+++ b/firmware/export/usb_drv.h
@@ -31,5 +31,6 @@ void usb_drv_ack(struct usb_ctrlrequest* req);
void usb_drv_set_address(int address);
void usb_drv_reset_endpoint(int endpoint, bool send);
void usb_drv_wait(int endpoint, bool send);
+bool usb_drv_powered(void);
#endif
diff --git a/firmware/target/arm/usb-drv-pp502x.c b/firmware/target/arm/usb-drv-pp502x.c
index a837728..c77b881 100644
--- a/firmware/target/arm/usb-drv-pp502x.c
+++ b/firmware/target/arm/usb-drv-pp502x.c
@@ -247,6 +247,9 @@
#define USB_CTRL_IOENB (0x00000004)
#define USB_CTRL_ULPI_INT0EN (0x00000001)
+/* OTGSC Register Bit Masks */
+#define OTGSC_B_SESSION_VALID (0x00000800)
+
#define QH_MULT_POS (30)
#define QH_ZLT_SEL (0x20000000)
#define QH_MAX_PKT_LEN_POS (16)
@@ -322,6 +325,10 @@ static void init_queue_heads(void);
static void init_endpoints(void);
/*-------------------------------------------------------------------------*/
+bool usb_drv_powered(void)
+{
+ return (REG_OTGSC & OTGSC_B_SESSION_VALID) ? true : false;
+}
/* manual: 32.14.1 Device Controller Initialization */
void usb_drv_init(void)