summaryrefslogtreecommitdiff
path: root/firmware/target
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target')
-rw-r--r--firmware/target/arm/as3525/usb-as3525.c59
-rw-r--r--firmware/target/arm/as3525/usb-drv-as3525.c4
2 files changed, 13 insertions, 50 deletions
diff --git a/firmware/target/arm/as3525/usb-as3525.c b/firmware/target/arm/as3525/usb-as3525.c
index a6d5d3a245..6dcf99934e 100644
--- a/firmware/target/arm/as3525/usb-as3525.c
+++ b/firmware/target/arm/as3525/usb-as3525.c
@@ -30,39 +30,6 @@
30 30
31static int usb_status = USB_EXTRACTED; 31static int usb_status = USB_EXTRACTED;
32 32
33#if CONFIG_CPU == AS3525v2 && !defined(USE_ROCKBOX_USB)
34/* Rebooting on USB plug can crash these players in a state where
35 * hardware power off (pressing the power button) doesn't work anymore
36 * TODO: Implement USB in rockbox for these players */
37#define USB_INSERT_INT_STATUS USB_EXTRACTED
38#undef USB_DETECT_BY_DRV
39#undef USB_DETECT_BY_CORE
40#undef USB_STATUS_BY_EVENT
41
42#else /* !AS3525v2 */
43
44#if defined(USB_DETECT_BY_DRV) || defined(USB_DETECT_BY_CORE)
45
46#ifdef USB_STATUS_BY_EVENT
47#define USB_INSERT_INT_STATUS USB_INSERTED
48#define USB_INSERT_INT_EVENT USB_POWERED
49#define USB_REMOVE_INT_EVENT USB_UNPOWERED
50#else
51#define USB_INSERT_INT_STATUS USB_POWERED
52#endif /* USB_STATUS_BY_EVENT */
53
54#else /* !USB_DETECT_BY_* */
55
56#define USB_INSERT_INT_STATUS USB_INSERTED
57#ifdef USB_STATUS_BY_EVENT
58#define USB_INSERT_INT_EVENT USB_INSERTED
59#define USB_REMOVE_INT_EVENT USB_EXTRACTED
60#endif /* USB_STATUS_BY_EVENT */
61
62#endif /* USB_DETECT_BY_* */
63
64#endif /* AS3525v2 */
65
66void usb_enable(bool on) 33void usb_enable(bool on)
67{ 34{
68#if defined(HAVE_USBSTACK) && defined(USE_ROCKBOX_USB) 35#if defined(HAVE_USBSTACK) && defined(USE_ROCKBOX_USB)
@@ -77,33 +44,29 @@ void usb_enable(bool on)
77 44
78void usb_insert_int(void) 45void usb_insert_int(void)
79{ 46{
80 usb_status = USB_INSERT_INT_STATUS; 47 usb_status = USB_INSERTED;
81#ifdef USB_STATUS_BY_EVENT 48 usb_status_event(USB_POWERED);
82 usb_status_event(USB_INSERT_INT_EVENT);
83#endif
84} 49}
85 50
86void usb_remove_int(void) 51void usb_remove_int(void)
87{ 52{
88 usb_status = USB_EXTRACTED; 53 usb_status = USB_EXTRACTED;
89#ifdef USB_STATUS_BY_EVENT 54 usb_status_event(USB_UNPOWERED);
90 usb_status_event(USB_REMOVE_INT_EVENT);
91#endif
92} 55}
93 56
94void usb_drv_usb_detect_event(void) 57void usb_drv_usb_detect_event(void)
95{ 58{
96#if defined(USB_DETECT_BY_DRV) || defined(USB_DETECT_BY_CORE) 59#if CONFIG_CPU != AS3525v2 || defined(USE_ROCKBOX_USB)
60/* Rebooting on USB plug can crash these players in a state where
61 * hardware power off (pressing the power button) doesn't work anymore
62 * TODO: Implement USB in rockbox for these players */
97 int oldstatus = disable_irq_save(); /* May come via USB thread */ 63 int oldstatus = disable_irq_save(); /* May come via USB thread */
98 if (usb_status == USB_INSERT_INT_STATUS) 64
99 { 65 if (usb_status == USB_INSERTED)
100 usb_status = USB_INSERTED;
101#ifdef USB_STATUS_BY_EVENT
102 usb_status_event(USB_INSERTED); 66 usb_status_event(USB_INSERTED);
103#endif 67
104 }
105 restore_irq(oldstatus); 68 restore_irq(oldstatus);
106#endif /* USB_DETECT_BY_* */ 69#endif
107} 70}
108 71
109int usb_detect(void) 72int usb_detect(void)
diff --git a/firmware/target/arm/as3525/usb-drv-as3525.c b/firmware/target/arm/as3525/usb-drv-as3525.c
index 69c50cda93..1f52d40ce6 100644
--- a/firmware/target/arm/as3525/usb-drv-as3525.c
+++ b/firmware/target/arm/as3525/usb-drv-as3525.c
@@ -76,7 +76,8 @@ static inline void usb_disable_pll(void)
76 76
77void usb_attach(void) 77void usb_attach(void)
78{ 78{
79 usb_enable(true); 79 logf("usb-drv: attach");
80 /* Nothing to do */
80} 81}
81 82
82static void usb_tick(void); 83static void usb_tick(void);
@@ -768,7 +769,6 @@ void INT_USB(void)
768 } 769 }
769 if (intr & USB_DEV_INTR_USB_RESET) {/* usb reset from host? */ 770 if (intr & USB_DEV_INTR_USB_RESET) {/* usb reset from host? */
770 logf("usb reset\n"); 771 logf("usb reset\n");
771 usb_drv_usb_detect_event();
772 reset_endpoints(1); 772 reset_endpoints(1);
773 usb_core_bus_reset(); 773 usb_core_bus_reset();
774 intr &= ~USB_DEV_INTR_USB_RESET; 774 intr &= ~USB_DEV_INTR_USB_RESET;