Path: blob/master/arch/arm/mach-pxa/include/mach/idp.h
10820 views
/*1* arch/arm/mach-pxa/include/mach/idp.h2*3* This program is free software; you can redistribute it and/or modify4* it under the terms of the GNU General Public License version 2 as5* published by the Free Software Foundation.6*7* Copyright (c) 2001 Cliff Brake, Accelent Systems Inc.8*9* 2001-09-13: Cliff Brake <[email protected]>10* Initial code11*12* 2005-02-15: Cliff Brake <[email protected]>13* <http://www.vibren.com> <http://bec-systems.com>14* Changes for 2.6 kernel.15*/161718/*19* Note: this file must be safe to include in assembly files20*21* Support for the Vibren PXA255 IDP requires rev04 or later22* IDP hardware.23*/242526#define IDP_FLASH_PHYS (PXA_CS0_PHYS)27#define IDP_ALT_FLASH_PHYS (PXA_CS1_PHYS)28#define IDP_MEDIAQ_PHYS (PXA_CS3_PHYS)29#define IDP_IDE_PHYS (PXA_CS5_PHYS + 0x03000000)30#define IDP_ETH_PHYS (PXA_CS5_PHYS + 0x03400000)31#define IDP_COREVOLT_PHYS (PXA_CS5_PHYS + 0x03800000)32#define IDP_CPLD_PHYS (PXA_CS5_PHYS + 0x03C00000)333435/*36* virtual memory map37*/3839#define IDP_COREVOLT_VIRT (0xf0000000)40#define IDP_COREVOLT_SIZE (1*1024*1024)4142#define IDP_CPLD_VIRT (IDP_COREVOLT_VIRT + IDP_COREVOLT_SIZE)43#define IDP_CPLD_SIZE (1*1024*1024)4445#if (IDP_CPLD_VIRT + IDP_CPLD_SIZE) > 0xfc00000046#error Your custom IO space is getting a bit large !!47#endif4849#define CPLD_P2V(x) ((x) - IDP_CPLD_PHYS + IDP_CPLD_VIRT)50#define CPLD_V2P(x) ((x) - IDP_CPLD_VIRT + IDP_CPLD_PHYS)5152#ifndef __ASSEMBLY__53# define __CPLD_REG(x) (*((volatile unsigned long *)CPLD_P2V(x)))54#else55# define __CPLD_REG(x) CPLD_P2V(x)56#endif5758/* board level registers in the CPLD: (offsets from CPLD_VIRT) */5960#define _IDP_CPLD_REV (IDP_CPLD_PHYS + 0x00)61#define _IDP_CPLD_PERIPH_PWR (IDP_CPLD_PHYS + 0x04)62#define _IDP_CPLD_LED_CONTROL (IDP_CPLD_PHYS + 0x08)63#define _IDP_CPLD_KB_COL_HIGH (IDP_CPLD_PHYS + 0x0C)64#define _IDP_CPLD_KB_COL_LOW (IDP_CPLD_PHYS + 0x10)65#define _IDP_CPLD_PCCARD_EN (IDP_CPLD_PHYS + 0x14)66#define _IDP_CPLD_GPIOH_DIR (IDP_CPLD_PHYS + 0x18)67#define _IDP_CPLD_GPIOH_VALUE (IDP_CPLD_PHYS + 0x1C)68#define _IDP_CPLD_GPIOL_DIR (IDP_CPLD_PHYS + 0x20)69#define _IDP_CPLD_GPIOL_VALUE (IDP_CPLD_PHYS + 0x24)70#define _IDP_CPLD_PCCARD_PWR (IDP_CPLD_PHYS + 0x28)71#define _IDP_CPLD_MISC_CTRL (IDP_CPLD_PHYS + 0x2C)72#define _IDP_CPLD_LCD (IDP_CPLD_PHYS + 0x30)73#define _IDP_CPLD_FLASH_WE (IDP_CPLD_PHYS + 0x34)7475#define _IDP_CPLD_KB_ROW (IDP_CPLD_PHYS + 0x50)76#define _IDP_CPLD_PCCARD0_STATUS (IDP_CPLD_PHYS + 0x54)77#define _IDP_CPLD_PCCARD1_STATUS (IDP_CPLD_PHYS + 0x58)78#define _IDP_CPLD_MISC_STATUS (IDP_CPLD_PHYS + 0x5C)7980/* FPGA register virtual addresses */8182#define IDP_CPLD_REV __CPLD_REG(_IDP_CPLD_REV)83#define IDP_CPLD_PERIPH_PWR __CPLD_REG(_IDP_CPLD_PERIPH_PWR)84#define IDP_CPLD_LED_CONTROL __CPLD_REG(_IDP_CPLD_LED_CONTROL)85#define IDP_CPLD_KB_COL_HIGH __CPLD_REG(_IDP_CPLD_KB_COL_HIGH)86#define IDP_CPLD_KB_COL_LOW __CPLD_REG(_IDP_CPLD_KB_COL_LOW)87#define IDP_CPLD_PCCARD_EN __CPLD_REG(_IDP_CPLD_PCCARD_EN)88#define IDP_CPLD_GPIOH_DIR __CPLD_REG(_IDP_CPLD_GPIOH_DIR)89#define IDP_CPLD_GPIOH_VALUE __CPLD_REG(_IDP_CPLD_GPIOH_VALUE)90#define IDP_CPLD_GPIOL_DIR __CPLD_REG(_IDP_CPLD_GPIOL_DIR)91#define IDP_CPLD_GPIOL_VALUE __CPLD_REG(_IDP_CPLD_GPIOL_VALUE)92#define IDP_CPLD_PCCARD_PWR __CPLD_REG(_IDP_CPLD_PCCARD_PWR)93#define IDP_CPLD_MISC_CTRL __CPLD_REG(_IDP_CPLD_MISC_CTRL)94#define IDP_CPLD_LCD __CPLD_REG(_IDP_CPLD_LCD)95#define IDP_CPLD_FLASH_WE __CPLD_REG(_IDP_CPLD_FLASH_WE)9697#define IDP_CPLD_KB_ROW __CPLD_REG(_IDP_CPLD_KB_ROW)98#define IDP_CPLD_PCCARD0_STATUS __CPLD_REG(_IDP_CPLD_PCCARD0_STATUS)99#define IDP_CPLD_PCCARD1_STATUS __CPLD_REG(_IDP_CPLD_PCCARD1_STATUS)100#define IDP_CPLD_MISC_STATUS __CPLD_REG(_IDP_CPLD_MISC_STATUS)101102103/*104* Bit masks for various registers105*/106107// IDP_CPLD_PCCARD_PWR108#define PCC0_PWR0 (1 << 0)109#define PCC0_PWR1 (1 << 1)110#define PCC0_PWR2 (1 << 2)111#define PCC0_PWR3 (1 << 3)112#define PCC1_PWR0 (1 << 4)113#define PCC1_PWR1 (1 << 5)114#define PCC1_PWR2 (1 << 6)115#define PCC1_PWR3 (1 << 7)116117// IDP_CPLD_PCCARD_EN118#define PCC0_RESET (1 << 6)119#define PCC1_RESET (1 << 7)120#define PCC0_ENABLE (1 << 0)121#define PCC1_ENABLE (1 << 1)122123// IDP_CPLD_PCCARDx_STATUS124#define _PCC_WRPROT (1 << 7) // 7-4 read as low true125#define _PCC_RESET (1 << 6)126#define _PCC_IRQ (1 << 5)127#define _PCC_INPACK (1 << 4)128#define PCC_BVD2 (1 << 3)129#define PCC_BVD1 (1 << 2)130#define PCC_VS2 (1 << 1)131#define PCC_VS1 (1 << 0)132133#define PCC_DETECT(x) (GPLR(7 + (x)) & GPIO_bit(7 + (x)))134135/* A listing of interrupts used by external hardware devices */136137#define TOUCH_PANEL_IRQ IRQ_GPIO(5)138#define IDE_IRQ IRQ_GPIO(21)139140#define TOUCH_PANEL_IRQ_EDGE IRQ_TYPE_EDGE_FALLING141142#define ETHERNET_IRQ IRQ_GPIO(4)143#define ETHERNET_IRQ_EDGE IRQ_TYPE_EDGE_RISING144145#define IDE_IRQ_EDGE IRQ_TYPE_EDGE_RISING146147#define PCMCIA_S0_CD_VALID IRQ_GPIO(7)148#define PCMCIA_S0_CD_VALID_EDGE IRQ_TYPE_EDGE_BOTH149150#define PCMCIA_S1_CD_VALID IRQ_GPIO(8)151#define PCMCIA_S1_CD_VALID_EDGE IRQ_TYPE_EDGE_BOTH152153#define PCMCIA_S0_RDYINT IRQ_GPIO(19)154#define PCMCIA_S1_RDYINT IRQ_GPIO(22)155156157/*158* Macros for LED Driver159*/160161/* leds 0 = ON */162#define IDP_HB_LED (1<<5)163#define IDP_BUSY_LED (1<<6)164165#define IDP_LEDS_MASK (IDP_HB_LED | IDP_BUSY_LED)166167/*168* macros for MTD driver169*/170171#define FLASH_WRITE_PROTECT_DISABLE() ((IDP_CPLD_FLASH_WE) &= ~(0x1))172#define FLASH_WRITE_PROTECT_ENABLE() ((IDP_CPLD_FLASH_WE) |= (0x1))173174/*175* macros for matrix keyboard driver176*/177178#define KEYBD_MATRIX_NUMBER_INPUTS 7179#define KEYBD_MATRIX_NUMBER_OUTPUTS 14180181#define KEYBD_MATRIX_INVERT_OUTPUT_LOGIC FALSE182#define KEYBD_MATRIX_INVERT_INPUT_LOGIC FALSE183184#define KEYBD_MATRIX_SETTLING_TIME_US 100185#define KEYBD_MATRIX_KEYSTATE_DEBOUNCE_CONSTANT 2186187#define KEYBD_MATRIX_SET_OUTPUTS(outputs) \188{\189IDP_CPLD_KB_COL_LOW = outputs;\190IDP_CPLD_KB_COL_HIGH = outputs >> 7;\191}192193#define KEYBD_MATRIX_GET_INPUTS(inputs) \194{\195inputs = (IDP_CPLD_KB_ROW & 0x7f);\196}197198199200201