From: <mar...@us...> - 2007-04-06 20:21:03
|
Revision: 951 http://svn.sourceforge.net/hackndev/?rev=951&view=rev Author: marex_z71 Date: 2007-04-06 13:20:59 -0700 (Fri, 06 Apr 2007) Log Message: ----------- PalmLD: Basic stone for USB2 driver ... this can enumerate with builtin descriptor Modified Paths: -------------- linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld_usb.c linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-gpio.h linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-init.h linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-usb2.h Modified: linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld_usb.c =================================================================== --- linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld_usb.c 2007-04-04 22:59:08 UTC (rev 950) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld_usb.c 2007-04-06 20:20:59 UTC (rev 951) @@ -14,98 +14,112 @@ #include <asm/arch/palmld-gpio.h> #include <asm/arch/palmld-usb2.h> -u16 palmld_usb2_cmd_read(int addr) +u16 palmld_usb2_cmd_read(int reg) { - u16 data = PALMLD_USB2_CMD_ADDR | PALMLD_USB2_CMD_READ - | (addr & PALMLD_USB2_ADDR_MASK); + u8 data = PALMLD_USB2_CMD_ADDR | PALMLD_USB2_CMD_READ + | (reg & PALMLD_USB2_ADDR_MASK); + PALMLD_USB2_ADDR_CMD = data; + while((GET_PALMLD_GPIO(USB_READY)?1:0)==0) { + }; +/* printk("REG 0x%02x F2 0x%02x F4 0x%02x\n",reg,PALMLD_USB2_ADDR_FIFO2,PALMLD_USB2_ADDR_FIFO4); + printk("REG 0x%02x F2 0x%02x F4 0x%02x\n",reg,PALMLD_USB2_ADDR_FIFO6,PALMLD_USB2_ADDR_FIFO8); + printk("REG 0x%02x CD 0x%02x\n",reg,PALMLD_USB2_ADDR_CMD); +*/ return 0; +} - PALMLD_USB2_ADDR_FIFO6 = data; - - // ... wait for interrupt ... - udelay(100); - - return PALMLD_USB2_ADDR_FIFO6; +int palmld_usb2_cmd_set_reg(int reg) +{ + /* initiate write to addr */ + printk("SETTING 0x%02x\n",(reg | PALMLD_USB2_CMD_ADDR)); + PALMLD_USB2_ADDR_CMD=(reg | PALMLD_USB2_CMD_ADDR); + /* wait for READY line */ + while((GET_PALMLD_GPIO(USB_READY)?1:0)==0) { + }; + return 0; } -u16 palmld_usb2_dumpregs(void) +int palmld_usb2_cmd_write(u8 data) { - printk ("- CY7C68001 REGISTER DUMP -\n"); + /* prepare data */ + u8 data1 = ((data & 0xf0)>>3); /* Upper nibble */ + u8 data2 = (data & 0x0f); /* Lower nibble */ - printk (">> ADDRESS DUMP\n"); - printk ("FIFO2 %04x\n", PALMLD_USB2_ADDR_FIFO2); - printk ("FIFO4 %04x\n", PALMLD_USB2_ADDR_FIFO4); - printk ("FIFO6 %04x\n", PALMLD_USB2_ADDR_FIFO6); - printk ("FIFO8 %04x\n", PALMLD_USB2_ADDR_FIFO8); - printk ("CMD %04x\n", PALMLD_USB2_ADDR_CMD); - printk ("RESERVED1 %04x\n", PALMLD_USB2_ADDR_RESERVED1); - printk ("RESERVED2 %04x\n", PALMLD_USB2_ADDR_RESERVED2); - printk ("RESERVED3 %04x\n", PALMLD_USB2_ADDR_RESERVED3); + /* initiate write to reg */ + printk("UPPER NIBBLE %02x\n",(data1 | PALMLD_USB2_CMD_WRITE)); + PALMLD_USB2_ADDR_CMD=(data1 | PALMLD_USB2_CMD_WRITE); + /* wait for READY line */ + while((GET_PALMLD_GPIO(USB_READY)?1:0)==0) { + }; - printk ("\n\n>> REGISTER DUMP\n"); - printk ("*** GENERAL CONFIG\n"); - printk ("IFCONFIG %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_IFCONFIG)); - printk ("FLAGSAB %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_FLAGSAB)); - printk ("FLAGSCD %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_FLAGSCD)); - printk ("POLAR %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_POLAR)); - printk ("REVID %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_REVID)); + printk("LOWER NIBBLE %02x\n",(data2 | PALMLD_USB2_CMD_WRITE)); + PALMLD_USB2_ADDR_CMD=(data2 | PALMLD_USB2_CMD_WRITE); + /* wait for READY line */ + while((GET_PALMLD_GPIO(USB_READY)?1:0)==0) { + }; - printk ("\n*** ENDPOINT CONFIG\n"); - printk ("EP2CFG %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP2CFG)); - printk ("EP4CFG %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP4CFG)); - printk ("EP6CFG %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP6CFG)); - printk ("EP8CFG %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP8CFG)); - printk ("EP2PKTLENH %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP2PKTLENH)); - printk ("EP2PKTLENL %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP2PKTLENL)); - printk ("EP4PKTLENH %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP4PKTLENH)); - printk ("EP4PKTLENL %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP4PKTLENL)); - printk ("EP6PKTLENH %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP6PKTLENH)); - printk ("EP6PKTLENL %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP6PKTLENL)); - printk ("EP8PKTLENH %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP8PKTLENH)); - printk ("EP8PKTLENL %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP8PKTLENL)); - printk ("EP2PFH %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP2PFH)); - printk ("EP2PFL %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP2PFL)); - printk ("EP4PFH %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP4PFH)); - printk ("EP4PFL %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP4PFL)); - printk ("EP6PFH %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP6PFH)); - printk ("EP6PFL %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP6PFL)); - printk ("EP8PFH %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP8PFH)); - printk ("EP8PFL %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP8PFL)); - printk ("EP2ISOINPKTS %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP2ISOINPKTS)); - printk ("EP4ISOINPKTS %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP4ISOINPKTS)); - printk ("EP6ISOINPKTS %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP6ISOINPKTS)); - printk ("EP8ISOINPKTS %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP8ISOINPKTS)); - - printk ("\n*** INPKTEND/FLUSH\n"); - printk ("INPKTEND/FLUSH %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_INPKTEND)); + return 0; +} - printk ("\n*** USB CONFIG\n"); - printk ("USBFRAMEH %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_USBFRAMEH)); - printk ("USBFRAMEL %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_USBFRAMEL)); - printk ("MICROFRAME %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_MICROFRAME)); - printk ("FNADDR %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_FNADDR)); - - printk ("\n*** INTERRUPTS\n"); - printk ("INTENABLE %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_INTENABLE)); - - printk ("\n*** DESCRIPTOR\n"); - printk ("DESC %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_DESC)); - - printk ("\n*** ENDPOINT 0\n"); - printk ("EP0BUF %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP0BUF)); - printk ("SETUP %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_SETUP)); - printk ("EP0BC %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_EP0BC)); - - printk ("\n*** UNINDEXED REG CTRL\n"); - printk ("UIRC0 %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_UIRC0)); - printk ("UIRC1 %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_UIRC1)); - printk ("UIRC2 %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_UIRC2)); +u8 palmld_usb2_test_cmd(void) { + /* RESET THE CHIP */ + SET_GPIO(118,0); + udelay(100); + SET_GPIO(118,1); + udelay(500); - printk ("\n*** UNINDEXED REGS IN XDATA\n"); - printk ("FIFOPINPOLAR %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_FIFOPINPOLAR)); - printk ("TOGCTL %04x\n", palmld_usb2_cmd_read(PALMLD_USB2_REG_TOGCTL)); + /* ENUMERATE WITH BUILTIN DESCRIPTOR */ + /* select register 0x30 - descriptor RAM*/ + palmld_usb2_cmd_set_reg(0x30); + printk("SET ADDR to 0x30,GPIO86 %i\n",(GET_GPIO(86)?1:0)); + /* write descriptor length */ + palmld_usb2_cmd_write(0x06); + palmld_usb2_cmd_write(0x00); + printk("WRITE DESR size to 0x30,GPIO86 %i\n",(GET_GPIO(86)?1:0)); - printk ("\n- END OF DUMP -\n"); + /* write descriptor as described in SX2 docs */ + palmld_usb2_cmd_write(0x04); + palmld_usb2_cmd_write(0x0B); + palmld_usb2_cmd_write(0x04); + palmld_usb2_cmd_write(0x00); + + palmld_usb2_cmd_write(0x02); + palmld_usb2_cmd_write(0x00); + + palmld_usb2_cmd_write(0x00); + palmld_usb2_cmd_write(0x01); + + palmld_usb2_cmd_write(0x01); + palmld_usb2_cmd_write(0x00); + + palmld_usb2_cmd_write(0x00); + palmld_usb2_cmd_write(0x00); + + /* A LOT OF DEBUGING CRAP */ +/* printk("GPIO106 %i\n",(GET_GPIO(106)?1:0)); + printk("GPIO106 %i\n",(GET_GPIO(106)?1:0)); + printk("GPIO106 %i\n",(GET_GPIO(106)?1:0)); + printk("GPIO106 %i\n",(GET_GPIO(106)?1:0)); + printk("GPIO106 %i\n",(GET_GPIO(106)?1:0)); + printk("GPIO106 %i\n",(GET_GPIO(106)?1:0)); + printk("GPIO106 %i\n",(GET_GPIO(106)?1:0)); + printk("GPIO106 %i\n",(GET_GPIO(106)?1:0)); + printk("GPIO106 %i\n",(GET_GPIO(106)?1:0)); + printk("GPIO106 %i\n",(GET_GPIO(106)?1:0)); + printk("GPIO106 %i\n",(GET_GPIO(106)?1:0)); +*/ + + for (;;) { + /* printk("%02x%02x|%02x%02x|%02x%02x|%02x%02x|%i|%i|%i|%i|%i|%i\n", + PALMLD_USB2_ADDR_FIFO2,PALMLD_USB2_ADDR_FIFO4, + PALMLD_USB2_ADDR_FIFO6,PALMLD_USB2_ADDR_FIFO8, + PALMLD_USB2_ADDR_CMD,PALMLD_USB2_ADDR_RESERVED1, + PALMLD_USB2_ADDR_RESERVED2,PALMLD_USB2_ADDR_RESERVED3, + (GET_GPIO(18)?1:0),(GET_GPIO(20)?1:0), + (GET_GPIO(53)?1:0),(GET_GPIO(86)?1:0), + (GET_GPIO(90)?1:0),(GET_GPIO(106)?1:0)); + */} + return 0; } @@ -115,10 +129,9 @@ if(!machine_is_xscale_palmld()) return -ENODEV; - palmld_usb2_dumpregs(); + palmld_usb2_test_cmd(); return -ENODEV; - } static void __exit palmld_usb2_exit(void) Modified: linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-gpio.h =================================================================== --- linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-gpio.h 2007-04-04 22:59:08 UTC (rev 950) +++ linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-gpio.h 2007-04-06 20:20:59 UTC (rev 951) @@ -21,21 +21,20 @@ /* Palm LifeDrive GPIOs */ -#define GPIO_NR_PALMLD_GPIO_RESET 1 -#define GPIO_NR_PALMLD_USB_DETECT 3 -#define GPIO_NR_PALMLD_POWER_DETECT 4 -#define GPIO_NR_PALMLD_HOTSYNC_BUTTON_N 10 -#define GPIO_NR_PALMLD_POWER_SWITCH 11 -#define GPIO_NR_PALMLD_EARPHONE_DETECT 13 -#define GPIO_NR_PALMLD_SD_DETECT_N 14 /* SD card inserted; RE FE; Input */ -#define GPIO_NR_PALMLD_LOCK_SWITCH 15 /* keypad lock */ -#define GPIO_NR_PALMLD_SCREEN 19 +#define GPIO_NR_PALMLD_GPIO_RESET 1 +#define GPIO_NR_PALMLD_POWER_DETECT 4 +#define GPIO_NR_PALMLD_HOTSYNC_BUTTON_N 10 +#define GPIO_NR_PALMLD_POWER_SWITCH 11 +#define GPIO_NR_PALMLD_EARPHONE_DETECT 13 +#define GPIO_NR_PALMLD_SD_DETECT_N 14 /* SD card inserted; RE FE; Input */ +#define GPIO_NR_PALMLD_LOCK_SWITCH 15 /* keypad lock */ +#define GPIO_NR_PALMLD_SCREEN 19 -#define GPIO_NR_PALMLD_WM9712_IRQ 27 +#define GPIO_NR_PALMLD_WM9712_IRQ 27 -#define GPIO_NR_PALMLD_IR_DISABLE 40 /* IRDA */ -#define GPIO_NR_PALMLD_ICP_RXD 46 -#define GPIO_NR_PALMLD_ICP_TXD 47 +#define GPIO_NR_PALMLD_IR_DISABLE 40 /* IRDA */ +#define GPIO_NR_PALMLD_ICP_RXD 46 +#define GPIO_NR_PALMLD_ICP_TXD 47 #define GPIO_NR_PALMLD_GREEN_LED 52 @@ -74,6 +73,13 @@ #define IRQ_GPIO_PALMLD_WM9712_IRQ IRQ_GPIO(GPIO_NR_PALMLD_WM9712_IRQ) #define IRQ_GPIO_PALMLD_IDE_IRQ IRQ_GPIO(GPIO_NR_PALMLD_IDE_IRQ) +/* USB */ +#define GPIO_NR_PALMLD_USB_DETECT 3 +#define GPIO_NR_PALMLD_USB_READY 86 +#define GPIO_NR_PALMLD_USB_RESET 88 +#define GPIO_NR_PALMLD_USB_INT 106 +#define GPIO_NR_PALMLD_USB_POWER 118 + /* Utility macros */ #define GET_PALMLD_GPIO(gpio) \ (GPLR(GPIO_NR_PALMLD_ ## gpio) & GPIO_bit(GPIO_NR_PALMLD_ ## gpio)) @@ -97,5 +103,13 @@ #define GET_GPIO(gpio) (GPLR(gpio) & GPIO_bit(gpio)) +#define SET_GPIO(gpio, setp) \ +do { \ +if (setp) \ + GPSR(gpio) = GPIO_bit(gpio); \ +else \ + GPCR(gpio) = GPIO_bit(gpio); \ +} while (0) + #endif /* _PALMLD_GPIO_H_ */ Modified: linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-init.h =================================================================== --- linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-init.h 2007-04-04 22:59:08 UTC (rev 950) +++ linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-init.h 2007-04-06 20:20:59 UTC (rev 951) @@ -22,7 +22,7 @@ // BATTERY #define PALMLD_BAT_MAX_VOLTAGE 4000 // 4.00V current voltage at max charge as from PalmOS -#define PALMLD_BAT_MIN_VOLTAGE 3600 // 3.60V critical voltage as from Zlauncher +#define PALMLD_BAT_MIN_VOLTAGE 3550 // 3.55V critical voltage #define PALMLD_BAT_MAX_CURRENT 0 // unknokn #define PALMLD_BAT_MIN_CURRENT 0 // unknown #define PALMLD_BAT_MAX_CHARGE 1 // unknown Modified: linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-usb2.h =================================================================== --- linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-usb2.h 2007-04-04 22:59:08 UTC (rev 950) +++ linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-usb2.h 2007-04-06 20:20:59 UTC (rev 951) @@ -97,16 +97,18 @@ #define PALMLD_USB2_ADDR_BASE PALMLD_USB_VIRT -#define PALMLD_USB2_ADDR_IF(x) (*((volatile u16 *)x)) +#define PALMLD_USB2_ADDR_IF(x) (*((volatile u8 *)x)) +/* We have 16bit bus of the chip connected to 32 bit bus of CPU */ + #define PALMLD_USB2_ADDR_FIFO2 PALMLD_USB2_ADDR_IF (PALMLD_USB2_ADDR_BASE + 0x0) -#define PALMLD_USB2_ADDR_FIFO4 PALMLD_USB2_ADDR_IF (PALMLD_USB2_ADDR_BASE + 0x2) +#define PALMLD_USB2_ADDR_FIFO4 PALMLD_USB2_ADDR_IF (PALMLD_USB2_ADDR_BASE + 0x1) #define PALMLD_USB2_ADDR_FIFO6 PALMLD_USB2_ADDR_IF (PALMLD_USB2_ADDR_BASE + 0x4) -#define PALMLD_USB2_ADDR_FIFO8 PALMLD_USB2_ADDR_IF (PALMLD_USB2_ADDR_BASE + 0x6) +#define PALMLD_USB2_ADDR_FIFO8 PALMLD_USB2_ADDR_IF (PALMLD_USB2_ADDR_BASE + 0x5) #define PALMLD_USB2_ADDR_CMD PALMLD_USB2_ADDR_IF (PALMLD_USB2_ADDR_BASE + 0x8) -#define PALMLD_USB2_ADDR_RESERVED1 PALMLD_USB2_ADDR_IF (PALMLD_USB2_ADDR_BASE + 0x10) -#define PALMLD_USB2_ADDR_RESERVED2 PALMLD_USB2_ADDR_IF (PALMLD_USB2_ADDR_BASE + 0x12) -#define PALMLD_USB2_ADDR_RESERVED3 PALMLD_USB2_ADDR_IF (PALMLD_USB2_ADDR_BASE + 0x14) +#define PALMLD_USB2_ADDR_RESERVED1 PALMLD_USB2_ADDR_IF (PALMLD_USB2_ADDR_BASE + 0x9) +#define PALMLD_USB2_ADDR_RESERVED2 PALMLD_USB2_ADDR_IF (PALMLD_USB2_ADDR_BASE + 0xc) +#define PALMLD_USB2_ADDR_RESERVED3 PALMLD_USB2_ADDR_IF (PALMLD_USB2_ADDR_BASE + 0xd) /*************************************************** * SX2 COMMANDS * This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |