summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrank Gevaerts <frank@gevaerts.be>2008-03-20 20:01:28 +0000
committerFrank Gevaerts <frank@gevaerts.be>2008-03-20 20:01:28 +0000
commita6108b90978e1f8c33963043149061640423c4a3 (patch)
tree53b7541bb3f930cf5fe178bd8c3b75a01a2deab3
parent8113717da9af4977065702a682bc8d71f85180b2 (diff)
downloadrockbox-a6108b90978e1f8c33963043149061640423c4a3.tar.gz
rockbox-a6108b90978e1f8c33963043149061640423c4a3.zip
differentiate between connected and powered in usb_detect()
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@16723 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/export/usb_drv.h1
-rw-r--r--firmware/target/arm/usb-drv-pp502x.c6
-rw-r--r--firmware/target/arm/usb-fw-pp502x.c7
3 files changed, 13 insertions, 1 deletions
diff --git a/firmware/export/usb_drv.h b/firmware/export/usb_drv.h
index 89eca01325..71db88963a 100644
--- a/firmware/export/usb_drv.h
+++ b/firmware/export/usb_drv.h
@@ -37,5 +37,6 @@ bool usb_drv_powered(void);
37int usb_drv_port_speed(void); 37int usb_drv_port_speed(void);
38void usb_drv_cancel_all_transfers(void); 38void usb_drv_cancel_all_transfers(void);
39void usb_drv_set_test_mode(int mode); 39void usb_drv_set_test_mode(int mode);
40bool usb_drv_connected(void);
40 41
41#endif 42#endif
diff --git a/firmware/target/arm/usb-drv-pp502x.c b/firmware/target/arm/usb-drv-pp502x.c
index 06358669c6..7a88e2bbc2 100644
--- a/firmware/target/arm/usb-drv-pp502x.c
+++ b/firmware/target/arm/usb-drv-pp502x.c
@@ -353,6 +353,7 @@ bool usb_drv_powered(void)
353/* manual: 32.14.1 Device Controller Initialization */ 353/* manual: 32.14.1 Device Controller Initialization */
354void usb_drv_init(void) 354void usb_drv_init(void)
355{ 355{
356 trigger_cpu_boost();
356 REG_USBCMD &= ~USBCMD_RUN; 357 REG_USBCMD &= ~USBCMD_RUN;
357 udelay(50000); 358 udelay(50000);
358 REG_USBCMD |= USBCMD_CTRL_RESET; 359 REG_USBCMD |= USBCMD_CTRL_RESET;
@@ -522,6 +523,11 @@ int usb_drv_port_speed(void)
522 return (REG_PORTSC1 & 0x08000000) ? 1 : 0; 523 return (REG_PORTSC1 & 0x08000000) ? 1 : 0;
523} 524}
524 525
526bool usb_drv_connected(void)
527{
528 return ((REG_PORTSC1 & PORTSCX_CURRENT_CONNECT_STATUS) !=0);
529}
530
525void usb_drv_set_address(int address) 531void usb_drv_set_address(int address)
526{ 532{
527 REG_DEVICEADDR = address << USBDEVICEADDRESS_BIT_POS; 533 REG_DEVICEADDR = address << USBDEVICEADDRESS_BIT_POS;
diff --git a/firmware/target/arm/usb-fw-pp502x.c b/firmware/target/arm/usb-fw-pp502x.c
index 008d42d991..d881488094 100644
--- a/firmware/target/arm/usb-fw-pp502x.c
+++ b/firmware/target/arm/usb-fw-pp502x.c
@@ -119,7 +119,12 @@ static bool usb_pin_detect(void)
119int usb_detect(void) 119int usb_detect(void)
120{ 120{
121 if(usb_pin_detect()) { 121 if(usb_pin_detect()) {
122 return USB_INSERTED; 122 if(usb_drv_connected()) {
123 return USB_INSERTED;
124 }
125 else {
126 return USB_POWERED;
127 }
123 } 128 }
124 else { 129 else {
125 return USB_EXTRACTED; 130 return USB_EXTRACTED;