|
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.
|