From: <mar...@us...> - 2007-03-30 21:01:53
|
Revision: 948 http://svn.sourceforge.net/hackndev/?rev=948&view=rev Author: marex_z71 Date: 2007-03-30 14:01:50 -0700 (Fri, 30 Mar 2007) Log Message: ----------- PalmLD: Restart of works on USB2 driver, reg dumping code Modified Paths: -------------- linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld_usb.c Added Paths: ----------- 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-03-29 18:54:56 UTC (rev 947) +++ linux4palm/linux/trunk/arch/arm/mach-pxa/palmld/palmld_usb.c 2007-03-30 21:01:50 UTC (rev 948) @@ -6,95 +6,128 @@ #include <linux/device.h> #include <linux/platform_device.h> #include <linux/delay.h> -#include <linux/soc-device.h> #include <asm/mach-types.h> #include <asm/hardware.h> -#include <../drivers/pcmcia/soc_common.h> #include <asm/arch/pxa-regs.h> #include <asm/irq.h> #include <asm/arch/palmld-gpio.h> +#include <asm/arch/palmld-usb2.h> -/* -#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) +u16 palmld_usb2_cmd_read(int addr) +{ + u16 data = PALMLD_USB2_CMD_ADDR | PALMLD_USB2_CMD_READ + | (addr & PALMLD_USB2_ADDR_MASK); -static int socket_ready; + PALMLD_USB2_ADDR_FIFO6 = data; + + // ... wait for interrupt ... + udelay(100); + + return PALMLD_USB2_ADDR_FIFO6; +} -static struct platform_device palmld_pcmcia_device = { - .name = "pxa2xx-pcmcia", - .id = 0, - .dev = { - .platform_data = &palmld_pcmcia_ops, - .release = palmld_pcmcia_release - } -}; +u16 palmld_usb2_dumpregs(void) +{ + printk ("- CY7C68001 REGISTER DUMP -\n"); -*/ + 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); -#define SX2_BASE PALMLD_USB_VIRT + 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)); -#define SX2_IF(x) (*((volatile u16 *)x)) + 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)); -#define SX2_FIFO2 SX2_IF(SX2_BASE + 0x0) -#define SX2_FIFO4 SX2_IF(SX2_BASE + 0x2) -#define SX2_FIFO6 SX2_IF(SX2_BASE + 0x4) -#define SX2_FIFO8 SX2_IF(SX2_BASE + 0x6) -#define SX2_CMD SX2_IF(SX2_BASE + 0x8) + 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)); -#define SX2_CMD_READ (0x40) -#define SX2_CMD_ADDR (0x80) + 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)); -#define SX2_ADDR_MASK (0x3f) + printk ("\n- END OF DUMP -\n"); - -#define SX2_REG_REVID (0x05) - -u16 sx2_cmd_read(int addr) -{ - u16 data = SX2_CMD_ADDR | SX2_CMD_READ | (addr & SX2_ADDR_MASK); - SX2_FIFO6 = data; - - // ... wait for interrupt ... - udelay(100); - - return SX2_FIFO6; + return 0; } -static int __init sx2_init(void) +static int __init palmld_usb2_init(void) { printk ("sx2_init()\n"); if(!machine_is_xscale_palmld()) return -ENODEV; - printk ("fifo2 %x\n", SX2_FIFO2); - printk ("fifo4 %x\n", SX2_FIFO4); - printk ("fifo6 %x\n", SX2_FIFO6); - printk ("fifo8 %x\n", SX2_FIFO8); - printk ("cmd %x\n", SX2_CMD); - printk ("res1 %x\n", SX2_IF(SX2_BASE + 10)); - printk ("res2 %x\n", SX2_IF(SX2_BASE + 12)); + palmld_usb2_dumpregs(); + + return -ENODEV; - printk ("Chip revision: %x\n", sx2_cmd_read(SX2_REG_REVID)); - - return -ENODEV; //platform_device_register (&palmld_pcmcia_device); } -static void __exit sx2_exit(void) +static void __exit palmld_usb2_exit(void) { - //platform_device_unregister (&palmld_pcmcia_device); } -module_init(sx2_init); -module_exit(sx2_exit); +module_init(palmld_usb2_init); +module_exit(palmld_usb2_exit); -MODULE_AUTHOR ("Alex Osborne <bob...@gm...>"); -MODULE_DESCRIPTION ("EZ-USB SX2 support for Palm LifeDrive"); +MODULE_AUTHOR ("Marek Vasut <mar...@gm...>"); +MODULE_DESCRIPTION ("USB2 driver for Palm LifeDrive"); MODULE_LICENSE ("GPL"); Added: linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-usb2.h =================================================================== --- linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-usb2.h (rev 0) +++ linux4palm/linux/trunk/include/asm-arm/arch-pxa/palmld-usb2.h 2007-03-30 21:01:50 UTC (rev 948) @@ -0,0 +1,125 @@ +/* + * palmld-usb2.h + * + * Cypress EZUSB SX2 - CY7C68001 External master register definitions + * SX2 is an USB2 controller in PalmOne LifeDrive Handheld Computer + * + * Author: Marek Vasut <mar...@gm...> + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * + * + */ +#ifndef _INCLUDE_PALMLD_USB2_H_ + +#define _INCLUDE_PALMLD_USB2_H_ + +#include <asm/arch/palmld-gpio.h> + +/*************************************************** + * SX2 REGISTERS * + ***************************************************/ + +/* General configuration */ +#define PALMLD_USB2_REG_IFCONFIG 0x01 +#define PALMLD_USB2_REG_FLAGSAB 0x02 +#define PALMLD_USB2_REG_FLAGSCD 0x03 +#define PALMLD_USB2_REG_POLAR 0x04 +#define PALMLD_USB2_REG_REVID 0x05 + +/* Endpoint configuration */ +#define PALMLD_USB2_REG_EP2CFG 0x06 +#define PALMLD_USB2_REG_EP4CFG 0x07 +#define PALMLD_USB2_REG_EP6CFG 0x08 +#define PALMLD_USB2_REG_EP8CFG 0x09 +#define PALMLD_USB2_REG_EP2PKTLENH 0x0A +#define PALMLD_USB2_REG_EP2PKTLENL 0x0B +#define PALMLD_USB2_REG_EP4PKTLENH 0x0C +#define PALMLD_USB2_REG_EP4PKTLENL 0x0D +#define PALMLD_USB2_REG_EP6PKTLENH 0x0E +#define PALMLD_USB2_REG_EP6PKTLENL 0x0F +#define PALMLD_USB2_REG_EP8PKTLENH 0x10 +#define PALMLD_USB2_REG_EP8PKTLENL 0x11 +#define PALMLD_USB2_REG_EP2PFH 0x12 +#define PALMLD_USB2_REG_EP2PFL 0x13 +#define PALMLD_USB2_REG_EP4PFH 0x14 +#define PALMLD_USB2_REG_EP4PFL 0x15 +#define PALMLD_USB2_REG_EP6PFH 0x16 +#define PALMLD_USB2_REG_EP6PFL 0x17 +#define PALMLD_USB2_REG_EP8PFH 0x18 +#define PALMLD_USB2_REG_EP8PFL 0x19 +#define PALMLD_USB2_REG_EP2ISOINPKTS 0x1A +#define PALMLD_USB2_REG_EP4ISOINPKTS 0x1B +#define PALMLD_USB2_REG_EP6ISOINPKTS 0x1C +#define PALMLD_USB2_REG_EP8ISOINPKTS 0x1D + +/* Flags */ +#define PALMLD_USB2_REG_EP24FLAGS 0x1E +#define PALMLD_USB2_REG_EP68FLAGS 0x1F + +/* INPKTEND/FLUSH */ +#define PALMLD_USB2_REG_INPKTEND 0x20 +#define PALMLD_USB2_REG_FLUSH 0x20 + +/* USB Configuration */ +#define PALMLD_USB2_REG_USBFRAMEH 0x2A +#define PALMLD_USB2_REG_USBFRAMEL 0x2B +#define PALMLD_USB2_REG_MICROFRAME 0x2C +#define PALMLD_USB2_REG_FNADDR 0x2D + +/* Interrupts */ +#define PALMLD_USB2_REG_INTENABLE 0x2E + +/* Descriptor */ +#define PALMLD_USB2_REG_DESC 0x30 + +/* Endpoint 0 */ +#define PALMLD_USB2_REG_EP0BUF 0x31 +#define PALMLD_USB2_REG_SETUP 0x32 +#define PALMLD_USB2_REG_EP0BC 0x33 + +/* Un-indexed Register control */ +#define PALMLD_USB2_REG_UIRC0 0x3A +#define PALMLD_USB2_REG_UIRC1 0x3B +#define PALMLD_USB2_REG_UIRC2 0x3C + +/* Un-indexed Registers in XDATA space */ +#define PALMLD_USB2_REG_FIFOPINPOLAR 0xE609 +#define PALMLD_USB2_REG_TOGCTL 0xE683 + +/*************************************************** + * SX2 ADDRESS * + ***************************************************/ + +#define PALMLD_USB2_ADDR_BASE PALMLD_USB_VIRT + +#define PALMLD_USB2_ADDR_IF(x) (*((volatile u16 *)x)) + +#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_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_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) + +/*************************************************** + * SX2 COMMANDS * + ***************************************************/ + +#define PALMLD_USB2_CMD_WRITE (0x00) +#define PALMLD_USB2_CMD_READ (0x40) +#define PALMLD_USB2_CMD_ADDR (0x80) + +/*************************************************** + * SX2 MISC * + ***************************************************/ + +#define PALMLD_USB2_ADDR_MASK (0x3f) + +#endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |