summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Sevakis <jethead71@rockbox.org>2009-01-29 01:28:34 +0000
committerMichael Sevakis <jethead71@rockbox.org>2009-01-29 01:28:34 +0000
commitbf1cddf3e890944e0108913b4271e403c094375c (patch)
tree8863c0a8ea2ccd187a922ade3170389db6d0ebc0
parent077ce00fdda0cec473973e5d63696cd634e3a21d (diff)
downloadrockbox-bf1cddf3e890944e0108913b4271e403c094375c.tar.gz
rockbox-bf1cddf3e890944e0108913b4271e403c094375c.zip
Hopefully make some progress against FS#9831. iPod Video seems fine now under XP at least. Move false reset detection to the USB target code. Gigabeat S works using the OTG module upon bus reset. Portal Player targets verify that the USB pin detect is ok upon bus reset.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@19874 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/target/arm/imx31/gigabeat-s/usb-imx31.c3
-rw-r--r--firmware/target/arm/usb-drv-arc.c5
-rw-r--r--firmware/target/arm/usb-fw-pp502x.c15
3 files changed, 14 insertions, 9 deletions
diff --git a/firmware/target/arm/imx31/gigabeat-s/usb-imx31.c b/firmware/target/arm/imx31/gigabeat-s/usb-imx31.c
index 99f3e072eb..8682cff7c7 100644
--- a/firmware/target/arm/imx31/gigabeat-s/usb-imx31.c
+++ b/firmware/target/arm/imx31/gigabeat-s/usb-imx31.c
@@ -125,5 +125,6 @@ void usb_drv_int_enable(bool enable)
125/* Called during the bus reset interrupt when in detect mode */ 125/* Called during the bus reset interrupt when in detect mode */
126void usb_drv_usb_detect_event(void) 126void usb_drv_usb_detect_event(void)
127{ 127{
128 usb_status_event(USB_INSERTED); 128 if (usb_drv_powered())
129 usb_status_event(USB_INSERTED);
129} 130}
diff --git a/firmware/target/arm/usb-drv-arc.c b/firmware/target/arm/usb-drv-arc.c
index 15f3bf2c6c..5a08acb348 100644
--- a/firmware/target/arm/usb-drv-arc.c
+++ b/firmware/target/arm/usb-drv-arc.c
@@ -509,10 +509,7 @@ void usb_drv_int(void)
509 if (UNLIKELY(usbintr == USBINTR_RESET_EN)) { 509 if (UNLIKELY(usbintr == USBINTR_RESET_EN)) {
510 /* USB detected - detach and inform */ 510 /* USB detected - detach and inform */
511 usb_drv_stop(); 511 usb_drv_stop();
512 /* A false reset may occur upon unplugging, be sure VBUS is above 512 usb_drv_usb_detect_event();
513 * the 4V4 threshold. */
514 if (usb_drv_powered())
515 usb_drv_usb_detect_event();
516 } 513 }
517 else 514 else
518 { 515 {
diff --git a/firmware/target/arm/usb-fw-pp502x.c b/firmware/target/arm/usb-fw-pp502x.c
index 883ca1e8e2..cf5a82f37c 100644
--- a/firmware/target/arm/usb-fw-pp502x.c
+++ b/firmware/target/arm/usb-fw-pp502x.c
@@ -177,6 +177,11 @@ void usb_attach(void)
177 usb_drv_attach(); 177 usb_drv_attach();
178} 178}
179 179
180static bool usb_pin_state(void)
181{
182 return (USB_GPIO_INPUT_VAL & USB_GPIO_MASK) == USB_GPIO_VAL;
183}
184
180#ifdef USB_STATUS_BY_EVENT 185#ifdef USB_STATUS_BY_EVENT
181/* Cannot always tell power pin from USB pin */ 186/* Cannot always tell power pin from USB pin */
182static int usb_status = USB_EXTRACTED; 187static int usb_status = USB_EXTRACTED;
@@ -197,10 +202,13 @@ void usb_insert_int(void)
197 timeout_register(&usb_oneshot, usb_timeout_event, HZ/5, val); 202 timeout_register(&usb_oneshot, usb_timeout_event, HZ/5, val);
198} 203}
199 204
200/* Called during the bus reset interrupt when in detect mode */ 205/* Called during the bus reset interrupt when in detect mode - filter for
206 * invalid bus reset when unplugging by checking the pin state. */
201void usb_drv_usb_detect_event(void) 207void usb_drv_usb_detect_event(void)
202{ 208{
203 usb_status_event(USB_INSERTED); 209 if(usb_pin_state()) {
210 usb_status_event(USB_INSERTED);
211 }
204} 212}
205#endif /* USB_STATUS_BY_EVENT */ 213#endif /* USB_STATUS_BY_EVENT */
206 214
@@ -221,8 +229,7 @@ int usb_detect(void)
221#ifdef USB_STATUS_BY_EVENT 229#ifdef USB_STATUS_BY_EVENT
222 return usb_status; 230 return usb_status;
223#else 231#else
224 return ((USB_GPIO_INPUT_VAL & USB_GPIO_MASK) == USB_GPIO_VAL) ? 232 return usb_pin_state() ? USB_INSERTED : USB_EXTRACTED;
225 USB_INSERTED : USB_EXTRACTED;
226#endif 233#endif
227} 234}
228 235