summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRafaël Carré <rafael.carre@gmail.com>2009-10-15 10:03:20 +0000
committerRafaël Carré <rafael.carre@gmail.com>2009-10-15 10:03:20 +0000
commit8bd8d06842f9fe5d9c25d47c28f064052b375fa3 (patch)
treea279ce246a3388a0c8e7da5af577226fbf6c1b02
parent5303ab101be6f2497f43da5db83edf2adeb362fe (diff)
downloadrockbox-8bd8d06842f9fe5d9c25d47c28f064052b375fa3.tar.gz
rockbox-8bd8d06842f9fe5d9c25d47c28f064052b375fa3.zip
Sansa AMS USB driver : still not working
Implement usb_enable() Reorder/Modify usb_drv_init() to match closer the OF and remove a freeze (USB registers were accessed before the USB module was enabled) Add a panic in USB isr to be sure we notice when it's called Reset GPIOA direction for usb_detect() to notice extraction Add some comments git-svn-id: svn://svn.rockbox.org/rockbox/trunk@23184 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/target/arm/as3525/usb-as3525.c6
-rw-r--r--firmware/target/arm/as3525/usb-drv-as3525.c46
2 files changed, 26 insertions, 26 deletions
diff --git a/firmware/target/arm/as3525/usb-as3525.c b/firmware/target/arm/as3525/usb-as3525.c
index 5e913789b5..c32aa3c249 100644
--- a/firmware/target/arm/as3525/usb-as3525.c
+++ b/firmware/target/arm/as3525/usb-as3525.c
@@ -22,6 +22,7 @@
22#include <stdbool.h> 22#include <stdbool.h>
23#include "config.h" 23#include "config.h"
24#include "usb.h" 24#include "usb.h"
25#include "usb_core.h"
25#include "usb-target.h" 26#include "usb-target.h"
26#include "power.h" 27#include "power.h"
27#include "as3525.h" 28#include "as3525.h"
@@ -38,7 +39,10 @@
38 39
39void usb_enable(bool on) 40void usb_enable(bool on)
40{ 41{
41 (void)on; 42 if (on)
43 usb_core_init();
44 else
45 usb_core_exit();
42} 46}
43 47
44void usb_init_device(void) 48void usb_init_device(void)
diff --git a/firmware/target/arm/as3525/usb-drv-as3525.c b/firmware/target/arm/as3525/usb-drv-as3525.c
index bac5f6776b..8a1abea74f 100644
--- a/firmware/target/arm/as3525/usb-drv-as3525.c
+++ b/firmware/target/arm/as3525/usb-drv-as3525.c
@@ -26,6 +26,10 @@
26#include "ascodec.h" 26#include "ascodec.h"
27#include "as3514.h" 27#include "as3514.h"
28#include <stdbool.h> 28#include <stdbool.h>
29#include "panic.h"
30//#define LOGF_ENABLE
31#include "logf.h"
32
29 33
30/* 4 input endpoints */ 34/* 4 input endpoints */
31#define USB_IEP_CTRL(i) *((volatile unsigned long*) USB_BASE + 0x0000 + (i*0x20)) 35#define USB_IEP_CTRL(i) *((volatile unsigned long*) USB_BASE + 0x0000 + (i*0x20))
@@ -120,11 +124,6 @@ void usb_drv_init(void)
120 ascodec_write(AS3514_CVDD_DCDC3, ascodec_read(AS3514_CVDD_DCDC3) | 1<<2); 124 ascodec_write(AS3514_CVDD_DCDC3, ascodec_read(AS3514_CVDD_DCDC3) | 1<<2);
121 ascodec_write(AS3514_USB_UTIL, ascodec_read(AS3514_USB_UTIL) & ~(1<<4)); 125 ascodec_write(AS3514_USB_UTIL, ascodec_read(AS3514_USB_UTIL) & ~(1<<4));
122 126
123 USB_GPIO_CSR |= 0x1C00000; //sleep(3)
124 sleep(1);
125 USB_GPIO_CSR |= 0x200000; //sleep(10)
126 sleep(1);
127
128 /* PHY part */ 127 /* PHY part */
129 CGU_USB = 1<<5 /* enable */ 128 CGU_USB = 1<<5 /* enable */
130 | (CLK_DIV(AS3525_PLLA_FREQ, 48000000) / 2) << 2 129 | (CLK_DIV(AS3525_PLLA_FREQ, 48000000) / 2) << 2
@@ -133,37 +132,33 @@ void usb_drv_init(void)
133 /* AHB part */ 132 /* AHB part */
134 CGU_PERI |= CGU_USB_CLOCK_ENABLE; 133 CGU_PERI |= CGU_USB_CLOCK_ENABLE;
135 134
136 /* UVDD */
137 ascodec_write(AS3514_USB_UTIL, ascodec_read(AS3514_USB_UTIL) | (1<<4));
138
139 sleep(10);
140
141 USB_DEV_CFG |= (1<<31); /* soft reset */
142 volatile int tmp = USB_DEV_CFG;
143 (void)tmp;
144
145 USB_GPIO_CSR = 0x6180000; 135 USB_GPIO_CSR = 0x6180000;
146
147 USB_DEV_CFG = (USB_DEV_CFG & ~3) | 1; /* full speed */ 136 USB_DEV_CFG = (USB_DEV_CFG & ~3) | 1; /* full speed */
148
149 USB_DEV_CTRL |= 0x400; /* soft disconnect */ 137 USB_DEV_CTRL |= 0x400; /* soft disconnect */
150 138
139 /* UVDD */
140 ascodec_write(AS3514_USB_UTIL, ascodec_read(AS3514_USB_UTIL) | (1<<4));
141 sleep(10); //msleep(100)
142
143 USB_GPIO_CSR = 0x6180000;
151 144
152 USB_GPIO_CSR |= 0x1C00000; //sleep(3) 145 USB_GPIO_CSR |= 0x1C00000;
153 sleep(1); 146 sleep(1); //msleep(3)
154 USB_GPIO_CSR |= 0x200000; //sleep(10) 147 USB_GPIO_CSR |= 0x200000;
155 sleep(1); 148 sleep(1); //msleep(10)
156 149
157 USB_DEV_CTRL |= 0x400; /* soft disconnect */ 150 USB_DEV_CTRL |= 0x400; /* soft disconnect */
158 151
159 USB_GPIO_CSR &= ~0x1C00000; //sleep(3) 152 USB_GPIO_CSR &= ~0x1C00000;
160 sleep(1); 153 sleep(1); //msleep(3)
161 USB_GPIO_CSR &= ~0x200000; //sleep(10) 154 USB_GPIO_CSR &= ~0x200000;
162 sleep(1); 155 sleep(1); //msleep(10)
163 USB_DEV_CTRL &= ~0x400; /* soft disconnect */ 156 USB_DEV_CTRL &= ~0x400; /* clear soft disconnect */
164 157
158 /* note : this pin might be Clip specific */
165 GPIOA_DIR |= (1<<6); 159 GPIOA_DIR |= (1<<6);
166 GPIOA_PIN(6) = (1<<6); 160 GPIOA_PIN(6) = (1<<6);
161 GPIOA_DIR &= ~(1<<6); /* restore direction for usb_detect() */
167 162
168#if 0 /* linux */ 163#if 0 /* linux */
169 USB_DEV_CFG |= (1<<17) /* csr programming */ 164 USB_DEV_CFG |= (1<<17) /* csr programming */
@@ -260,6 +255,7 @@ int usb_drv_send_nonblocking(int ep, void *ptr, int len)
260/* interrupt service routine */ 255/* interrupt service routine */
261void INT_USB(void) 256void INT_USB(void)
262{ 257{
258 panicf("USB interrupt !");
263} 259}
264 260
265/* (not essential? , not implemented in usb-tcc.c) */ 261/* (not essential? , not implemented in usb-tcc.c) */