From a6108b90978e1f8c33963043149061640423c4a3 Mon Sep 17 00:00:00 2001 From: Frank Gevaerts Date: Thu, 20 Mar 2008 20:01:28 +0000 Subject: differentiate between connected and powered in usb_detect() git-svn-id: svn://svn.rockbox.org/rockbox/trunk@16723 a1c6a512-1295-4272-9138-f99709370657 --- firmware/export/usb_drv.h | 1 + firmware/target/arm/usb-drv-pp502x.c | 6 ++++++ firmware/target/arm/usb-fw-pp502x.c | 7 ++++++- 3 files changed, 13 insertions(+), 1 deletion(-) (limited to 'firmware') 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); int usb_drv_port_speed(void); void usb_drv_cancel_all_transfers(void); void usb_drv_set_test_mode(int mode); +bool usb_drv_connected(void); #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) /* manual: 32.14.1 Device Controller Initialization */ void usb_drv_init(void) { + trigger_cpu_boost(); REG_USBCMD &= ~USBCMD_RUN; udelay(50000); REG_USBCMD |= USBCMD_CTRL_RESET; @@ -522,6 +523,11 @@ int usb_drv_port_speed(void) return (REG_PORTSC1 & 0x08000000) ? 1 : 0; } +bool usb_drv_connected(void) +{ + return ((REG_PORTSC1 & PORTSCX_CURRENT_CONNECT_STATUS) !=0); +} + void usb_drv_set_address(int address) { 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) int usb_detect(void) { if(usb_pin_detect()) { - return USB_INSERTED; + if(usb_drv_connected()) { + return USB_INSERTED; + } + else { + return USB_POWERED; + } } else { return USB_EXTRACTED; -- cgit v1.2.3