1
0
Fork 0
forked from len0rd/rockbox

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
This commit is contained in:
Rafaël Carré 2009-10-15 10:03:20 +00:00
parent 5303ab101b
commit 8bd8d06842
2 changed files with 26 additions and 26 deletions

View file

@ -22,6 +22,7 @@
#include <stdbool.h>
#include "config.h"
#include "usb.h"
#include "usb_core.h"
#include "usb-target.h"
#include "power.h"
#include "as3525.h"
@ -38,7 +39,10 @@
void usb_enable(bool on)
{
(void)on;
if (on)
usb_core_init();
else
usb_core_exit();
}
void usb_init_device(void)

View file

@ -26,6 +26,10 @@
#include "ascodec.h"
#include "as3514.h"
#include <stdbool.h>
#include "panic.h"
//#define LOGF_ENABLE
#include "logf.h"
/* 4 input endpoints */
#define USB_IEP_CTRL(i) *((volatile unsigned long*) USB_BASE + 0x0000 + (i*0x20))
@ -120,11 +124,6 @@ void usb_drv_init(void)
ascodec_write(AS3514_CVDD_DCDC3, ascodec_read(AS3514_CVDD_DCDC3) | 1<<2);
ascodec_write(AS3514_USB_UTIL, ascodec_read(AS3514_USB_UTIL) & ~(1<<4));
USB_GPIO_CSR |= 0x1C00000; //sleep(3)
sleep(1);
USB_GPIO_CSR |= 0x200000; //sleep(10)
sleep(1);
/* PHY part */
CGU_USB = 1<<5 /* enable */
| (CLK_DIV(AS3525_PLLA_FREQ, 48000000) / 2) << 2
@ -133,37 +132,33 @@ void usb_drv_init(void)
/* AHB part */
CGU_PERI |= CGU_USB_CLOCK_ENABLE;
USB_GPIO_CSR = 0x6180000;
USB_DEV_CFG = (USB_DEV_CFG & ~3) | 1; /* full speed */
USB_DEV_CTRL |= 0x400; /* soft disconnect */
/* UVDD */
ascodec_write(AS3514_USB_UTIL, ascodec_read(AS3514_USB_UTIL) | (1<<4));
sleep(10);
USB_DEV_CFG |= (1<<31); /* soft reset */
volatile int tmp = USB_DEV_CFG;
(void)tmp;
sleep(10); //msleep(100)
USB_GPIO_CSR = 0x6180000;
USB_DEV_CFG = (USB_DEV_CFG & ~3) | 1; /* full speed */
USB_GPIO_CSR |= 0x1C00000;
sleep(1); //msleep(3)
USB_GPIO_CSR |= 0x200000;
sleep(1); //msleep(10)
USB_DEV_CTRL |= 0x400; /* soft disconnect */
USB_GPIO_CSR &= ~0x1C00000;
sleep(1); //msleep(3)
USB_GPIO_CSR &= ~0x200000;
sleep(1); //msleep(10)
USB_DEV_CTRL &= ~0x400; /* clear soft disconnect */
USB_GPIO_CSR |= 0x1C00000; //sleep(3)
sleep(1);
USB_GPIO_CSR |= 0x200000; //sleep(10)
sleep(1);
USB_DEV_CTRL |= 0x400; /* soft disconnect */
USB_GPIO_CSR &= ~0x1C00000; //sleep(3)
sleep(1);
USB_GPIO_CSR &= ~0x200000; //sleep(10)
sleep(1);
USB_DEV_CTRL &= ~0x400; /* soft disconnect */
/* note : this pin might be Clip specific */
GPIOA_DIR |= (1<<6);
GPIOA_PIN(6) = (1<<6);
GPIOA_DIR &= ~(1<<6); /* restore direction for usb_detect() */
#if 0 /* linux */
USB_DEV_CFG |= (1<<17) /* csr programming */
@ -260,6 +255,7 @@ int usb_drv_send_nonblocking(int ep, void *ptr, int len)
/* interrupt service routine */
void INT_USB(void)
{
panicf("USB interrupt !");
}
/* (not essential? , not implemented in usb-tcc.c) */