summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAmaury Pouly <pamaury@rockbox.org>2010-06-21 20:25:46 +0000
committerAmaury Pouly <pamaury@rockbox.org>2010-06-21 20:25:46 +0000
commit7ef8b0ec4bb60b489958349123a24a0e19591e66 (patch)
tree6dda975d4346a5c08ba5120aa471bf2311c95b21
parent2a259105414180a75e7d26a12daf5f9cadc08360 (diff)
downloadrockbox-7ef8b0ec4bb60b489958349123a24a0e19591e66.tar.gz
rockbox-7ef8b0ec4bb60b489958349123a24a0e19591e66.zip
as3525-usb: change clock handling
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27032 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/target/arm/as3525/usb-drv-as3525v2.c71
-rw-r--r--firmware/target/arm/as3525/usb-drv-as3525v2.h2
2 files changed, 26 insertions, 47 deletions
diff --git a/firmware/target/arm/as3525/usb-drv-as3525v2.c b/firmware/target/arm/as3525/usb-drv-as3525v2.c
index 8218fa4bd9..8acc3685d7 100644
--- a/firmware/target/arm/as3525/usb-drv-as3525v2.c
+++ b/firmware/target/arm/as3525/usb-drv-as3525v2.c
@@ -63,7 +63,7 @@ struct usb_endpoint
63#if 0 63#if 0
64static struct usb_endpoint endpoints[USB_NUM_ENDPOINTS*2]; 64static struct usb_endpoint endpoints[USB_NUM_ENDPOINTS*2];
65#endif 65#endif
66static struct usb_ctrlrequest ep0_setup_pkt; 66static struct usb_ctrlrequest ep0_setup_pkt __attribute__((aligned(16)));
67 67
68void usb_attach(void) 68void usb_attach(void)
69{ 69{
@@ -81,29 +81,6 @@ static void usb_delay(void)
81 } 81 }
82} 82}
83 83
84#if AS3525_MCLK_SEL != AS3525_CLK_PLLB
85static inline void usb_enable_pll(void)
86{
87 CGU_COUNTB = CGU_LOCK_CNT;
88 CGU_PLLB = AS3525_PLLB_SETTING;
89 CGU_PLLBSUP = 0; /* enable PLLB */
90 while(!(CGU_INTCTRL & CGU_PLLB_LOCK)); /* wait until PLLB is locked */
91}
92
93static inline void usb_disable_pll(void)
94{
95 CGU_PLLBSUP = CGU_PLL_POWERDOWN;
96}
97#else
98static inline void usb_enable_pll(void)
99{
100}
101
102static inline void usb_disable_pll(void)
103{
104}
105#endif /* AS3525_MCLK_SEL != AS3525_CLK_PLLB */
106
107static void as3525v2_connect(void) 84static void as3525v2_connect(void)
108{ 85{
109 logf("usb: init as3525v2"); 86 logf("usb: init as3525v2");
@@ -112,11 +89,10 @@ static void as3525v2_connect(void)
112 usb_delay(); 89 usb_delay();
113 /* 2) enable usb phy clock */ 90 /* 2) enable usb phy clock */
114 /* PHY clock */ 91 /* PHY clock */
115 #if 0 92 #if 1
116 usb_enable_pll();
117 CGU_USB = 1<<5 /* enable */ 93 CGU_USB = 1<<5 /* enable */
118 | (CLK_DIV(AS3525_PLLB_FREQ, 48000000) / 2) << 2 94 | (CLK_DIV(AS3525_PLLA_FREQ, 60000000)) << 2
119 | 2; /* source = PLLB */ 95 | 1; /* source = PLLA */
120 #else 96 #else
121 CGU_USB = 0x20; 97 CGU_USB = 0x20;
122 #endif 98 #endif
@@ -222,8 +198,6 @@ static void reset_endpoints(void)
222 /* 64 bytes packet size, active endpoint */ 198 /* 64 bytes packet size, active endpoint */
223 DIEPCTL(0) = (DEPCTL_MPS_64 << DEPCTL_mps_bitp) 199 DIEPCTL(0) = (DEPCTL_MPS_64 << DEPCTL_mps_bitp)
224 | DEPCTL_usbactep; 200 | DEPCTL_usbactep;
225
226 DCTL = DCTL_cgnpinnak | DCTL_cgoutnak;
227} 201}
228 202
229static void core_dev_init(void) 203static void core_dev_init(void)
@@ -411,10 +385,30 @@ void usb_drv_exit(void)
411 disable_global_interrupts(); 385 disable_global_interrupts();
412} 386}
413 387
388static void dump_regs(void)
389{
390 logf("DSTS: %lx", DSTS);
391 logf("DOEPCTL0=%lx", DOEPCTL(0));
392 logf("DOEPTSIZ=%lx", DOEPTSIZ(0));
393 logf("DIEPCTL0=%lx", DIEPCTL(0));
394 logf("DOEPMSK=%lx", DOEPMSK);
395 logf("DIEPMSK=%lx", DIEPMSK);
396 logf("DAINTMSK=%lx", DAINTMSK);
397 logf("DAINT=%lx", DAINT);
398 logf("GINTSTS=%lx", GINTSTS);
399 logf("GINTMSK=%lx", GINTMSK);
400 logf("DCTL=%lx", DCTL);
401 logf("GAHBCFG=%lx", GAHBCFG);
402 logf("GUSBCFG=%lx", GUSBCFG);
403 logf("DCFG=%lx", DCFG);
404 logf("DTHRCTL=%lx", DTHRCTL);
405}
406
414static bool handle_reset(void) 407static bool handle_reset(void)
415{ 408{
416 logf("usb: bus reset"); 409 logf("usb: bus reset");
417 410
411 dump_regs();
418 /* Clear the Remote Wakeup Signalling */ 412 /* Clear the Remote Wakeup Signalling */
419 DCTL &= ~DCTL_rmtwkupsig; 413 DCTL &= ~DCTL_rmtwkupsig;
420 414
@@ -436,22 +430,6 @@ static bool handle_enum_done(void)
436 logf("usb: enum done"); 430 logf("usb: enum done");
437 431
438 /* read speed */ 432 /* read speed */
439 logf("DSTS: %lx", DSTS);
440 logf("DOEPCTL0=%lx", DOEPCTL(0));
441 logf("DOEPTSIZ=%lx", DOEPTSIZ(0));
442 logf("DIEPCTL0=%lx", DIEPCTL(0));
443 logf("DOEPMSK=%lx", DOEPMSK);
444 logf("DIEPMSK=%lx", DIEPMSK);
445 logf("DAINTMSK=%lx", DAINTMSK);
446 logf("DAINT=%lx", DAINT);
447 logf("GINTSTS=%lx", GINTSTS);
448 logf("GINTMSK=%lx", GINTMSK);
449 logf("DCTL=%lx", DCTL);
450 logf("GAHBCFG=%lx", GAHBCFG);
451 logf("GUSBCFG=%lx", GUSBCFG);
452 logf("DCFG=%lx", DCFG);
453 logf("DTHRCTL=%lx", DTHRCTL);
454
455 switch(extract(DSTS, enumspd)) 433 switch(extract(DSTS, enumspd))
456 { 434 {
457 case DSTS_ENUMSPD_HS_PHY_30MHZ_OR_60MHZ: 435 case DSTS_ENUMSPD_HS_PHY_30MHZ_OR_60MHZ:
@@ -466,6 +444,7 @@ static bool handle_enum_done(void)
466 } 444 }
467 445
468 /* fixme: change EP0 mps here */ 446 /* fixme: change EP0 mps here */
447 dump_regs();
469 448
470 return true; 449 return true;
471} 450}
diff --git a/firmware/target/arm/as3525/usb-drv-as3525v2.h b/firmware/target/arm/as3525/usb-drv-as3525v2.h
index c058b4e062..78df811d11 100644
--- a/firmware/target/arm/as3525/usb-drv-as3525v2.h
+++ b/firmware/target/arm/as3525/usb-drv-as3525v2.h
@@ -452,7 +452,7 @@
452/** 452/**
453 * Parameters 453 * Parameters
454 */ 454 */
455//#define USE_CUSTOM_FIFO_LAYOUT 455#define USE_CUSTOM_FIFO_LAYOUT
456 456
457#ifdef USE_CUSTOM_FIFO_LAYOUT 457#ifdef USE_CUSTOM_FIFO_LAYOUT
458/* Data fifo: includes RX fifo, non period TX fifo and periodic fifos 458/* Data fifo: includes RX fifo, non period TX fifo and periodic fifos