Back to home page

OSCL-LXR

 
 

    


0001 /*
0002  * arch/arm/include/asm/hardware/locomo.h
0003  *
0004  * This file contains the definitions for the LoCoMo G/A Chip
0005  *
0006  * (C) Copyright 2004 John Lenz
0007  *
0008  * May be copied or modified under the terms of the GNU General Public
0009  * License.  See linux/COPYING for more information.
0010  *
0011  * Based on sa1111.h
0012  */
0013 #ifndef _ASM_ARCH_LOCOMO
0014 #define _ASM_ARCH_LOCOMO
0015 
0016 #define locomo_writel(val,addr) ({ *(volatile u16 *)(addr) = (val); })
0017 #define locomo_readl(addr)  (*(volatile u16 *)(addr))
0018 
0019 /* LOCOMO version */
0020 #define LOCOMO_VER  0x00
0021 
0022 /* Pin status */
0023 #define LOCOMO_ST   0x04
0024 
0025 /* Pin status */
0026 #define LOCOMO_C32K 0x08
0027 
0028 /* Interrupt controller */
0029 #define LOCOMO_ICR  0x0C
0030 
0031 /* MCS decoder for boot selecting */
0032 #define LOCOMO_MCSX0    0x10
0033 #define LOCOMO_MCSX1    0x14
0034 #define LOCOMO_MCSX2    0x18
0035 #define LOCOMO_MCSX3    0x1c
0036 
0037 /* Touch panel controller */
0038 #define LOCOMO_ASD  0x20        /* AD start delay */
0039 #define LOCOMO_HSD  0x28        /* HSYS delay */
0040 #define LOCOMO_HSC  0x2c        /* HSYS period */
0041 #define LOCOMO_TADC 0x30        /* tablet ADC clock */
0042 
0043 
0044 /* Long time timer */
0045 #define LOCOMO_LTC  0xd8        /* LTC interrupt setting */
0046 #define LOCOMO_LTINT    0xdc        /* LTC interrupt */
0047 
0048 /* DAC control signal for LCD (COMADJ ) */
0049 #define LOCOMO_DAC      0xe0
0050 /* DAC control */
0051 #define LOCOMO_DAC_SCLOEB   0x08    /* SCL pin output data       */
0052 #define LOCOMO_DAC_TEST     0x04    /* Test bit                  */
0053 #define LOCOMO_DAC_SDA      0x02    /* SDA pin level (read-only) */
0054 #define LOCOMO_DAC_SDAOEB   0x01    /* SDA pin output data       */
0055 
0056 /* SPI interface */
0057 #define LOCOMO_SPI  0x60
0058 #define LOCOMO_SPIMD    0x00        /* SPI mode setting */
0059 #define LOCOMO_SPICT    0x04        /* SPI mode control */
0060 #define LOCOMO_SPIST    0x08        /* SPI status */
0061 #define LOCOMO_SPI_TEND (1 << 3)    /* Transfer end bit */
0062 #define LOCOMO_SPI_REND (1 << 2)    /* Receive end bit */
0063 #define LOCOMO_SPI_RFW  (1 << 1)    /* write buffer bit */
0064 #define LOCOMO_SPI_RFR  (1)     /* read buffer bit */
0065 
0066 #define LOCOMO_SPIIS    0x10        /* SPI interrupt status */
0067 #define LOCOMO_SPIWE    0x14        /* SPI interrupt status write enable */
0068 #define LOCOMO_SPIIE    0x18        /* SPI interrupt enable */
0069 #define LOCOMO_SPIIR    0x1c        /* SPI interrupt request */
0070 #define LOCOMO_SPITD    0x20        /* SPI transfer data write */
0071 #define LOCOMO_SPIRD    0x24        /* SPI receive data read */
0072 #define LOCOMO_SPITS    0x28        /* SPI transfer data shift */
0073 #define LOCOMO_SPIRS    0x2C        /* SPI receive data shift */
0074 
0075 /* GPIO */
0076 #define LOCOMO_GPD      0x90    /* GPIO direction */
0077 #define LOCOMO_GPE      0x94    /* GPIO input enable */
0078 #define LOCOMO_GPL      0x98    /* GPIO level */
0079 #define LOCOMO_GPO      0x9c    /* GPIO out data setting */
0080 #define LOCOMO_GRIE     0xa0    /* GPIO rise detection */
0081 #define LOCOMO_GFIE     0xa4    /* GPIO fall detection */
0082 #define LOCOMO_GIS      0xa8    /* GPIO edge detection status */
0083 #define LOCOMO_GWE      0xac    /* GPIO status write enable */
0084 #define LOCOMO_GIE      0xb0    /* GPIO interrupt enable */
0085 #define LOCOMO_GIR      0xb4    /* GPIO interrupt request */
0086 #define LOCOMO_GPIO(Nb)     (0x01 << (Nb))
0087 #define LOCOMO_GPIO_RTS     LOCOMO_GPIO(0)
0088 #define LOCOMO_GPIO_CTS     LOCOMO_GPIO(1)
0089 #define LOCOMO_GPIO_DSR     LOCOMO_GPIO(2)
0090 #define LOCOMO_GPIO_DTR     LOCOMO_GPIO(3)
0091 #define LOCOMO_GPIO_LCD_VSHA_ON LOCOMO_GPIO(4)
0092 #define LOCOMO_GPIO_LCD_VSHD_ON LOCOMO_GPIO(5)
0093 #define LOCOMO_GPIO_LCD_VEE_ON  LOCOMO_GPIO(6)
0094 #define LOCOMO_GPIO_LCD_MOD LOCOMO_GPIO(7)
0095 #define LOCOMO_GPIO_DAC_ON  LOCOMO_GPIO(8)
0096 #define LOCOMO_GPIO_FL_VR   LOCOMO_GPIO(9)
0097 #define LOCOMO_GPIO_DAC_SDATA   LOCOMO_GPIO(10)
0098 #define LOCOMO_GPIO_DAC_SCK LOCOMO_GPIO(11)
0099 #define LOCOMO_GPIO_DAC_SLOAD   LOCOMO_GPIO(12)
0100 #define LOCOMO_GPIO_CARD_DETECT LOCOMO_GPIO(13)
0101 #define LOCOMO_GPIO_WRITE_PROT  LOCOMO_GPIO(14)
0102 #define LOCOMO_GPIO_CARD_POWER  LOCOMO_GPIO(15)
0103 
0104 /* Start the definitions of the devices.  Each device has an initial
0105  * base address and a series of offsets from that base address. */
0106 
0107 /* Keyboard controller */
0108 #define LOCOMO_KEYBOARD     0x40
0109 #define LOCOMO_KIB      0x00    /* KIB level */
0110 #define LOCOMO_KSC      0x04    /* KSTRB control */
0111 #define LOCOMO_KCMD     0x08    /* KSTRB command */
0112 #define LOCOMO_KIC      0x0c    /* Key interrupt */
0113 
0114 /* Front light adjustment controller */
0115 #define LOCOMO_FRONTLIGHT   0xc8
0116 #define LOCOMO_ALS      0x00    /* Adjust light cycle */
0117 #define LOCOMO_ALD      0x04    /* Adjust light duty */
0118 
0119 #define LOCOMO_ALC_EN       0x8000
0120 
0121 /* Backlight controller: TFT signal */
0122 #define LOCOMO_BACKLIGHT    0x38
0123 #define LOCOMO_TC       0x00        /* TFT control signal */
0124 #define LOCOMO_CPSD     0x04        /* CPS delay */
0125 
0126 /* Audio controller */
0127 #define LOCOMO_AUDIO        0x54
0128 #define LOCOMO_ACC      0x00    /* Audio clock */
0129 #define LOCOMO_PAIF     0xD0    /* PCM audio interface */
0130 /* Audio clock */
0131 #define LOCOMO_ACC_XON      0x80
0132 #define LOCOMO_ACC_XEN      0x40
0133 #define LOCOMO_ACC_XSEL0    0x00
0134 #define LOCOMO_ACC_XSEL1    0x20
0135 #define LOCOMO_ACC_MCLKEN   0x10
0136 #define LOCOMO_ACC_64FSEN   0x08
0137 #define LOCOMO_ACC_CLKSEL000    0x00    /* mclk  2 */
0138 #define LOCOMO_ACC_CLKSEL001    0x01    /* mclk  3 */
0139 #define LOCOMO_ACC_CLKSEL010    0x02    /* mclk  4 */
0140 #define LOCOMO_ACC_CLKSEL011    0x03    /* mclk  6 */
0141 #define LOCOMO_ACC_CLKSEL100    0x04    /* mclk  8 */
0142 #define LOCOMO_ACC_CLKSEL101    0x05    /* mclk 12 */
0143 /* PCM audio interface */
0144 #define LOCOMO_PAIF_SCINV   0x20
0145 #define LOCOMO_PAIF_SCEN    0x10
0146 #define LOCOMO_PAIF_LRCRST  0x08
0147 #define LOCOMO_PAIF_LRCEVE  0x04
0148 #define LOCOMO_PAIF_LRCINV  0x02
0149 #define LOCOMO_PAIF_LRCEN   0x01
0150 
0151 /* LED controller */
0152 #define LOCOMO_LED      0xe8
0153 #define LOCOMO_LPT0     0x00
0154 #define LOCOMO_LPT1     0x04
0155 /* LED control */
0156 #define LOCOMO_LPT_TOFH     0x80
0157 #define LOCOMO_LPT_TOFL     0x08
0158 #define LOCOMO_LPT_TOH(TOH) ((TOH & 0x7) << 4)
0159 #define LOCOMO_LPT_TOL(TOL) ((TOL & 0x7))
0160 
0161 extern struct bus_type locomo_bus_type;
0162 
0163 #define LOCOMO_DEVID_KEYBOARD   0
0164 #define LOCOMO_DEVID_FRONTLIGHT 1
0165 #define LOCOMO_DEVID_BACKLIGHT  2
0166 #define LOCOMO_DEVID_AUDIO  3
0167 #define LOCOMO_DEVID_LED    4
0168 #define LOCOMO_DEVID_UART   5
0169 #define LOCOMO_DEVID_SPI    6
0170 
0171 struct locomo_dev {
0172     struct device   dev;
0173     unsigned int    devid;
0174     unsigned int    irq[1];
0175 
0176     void        *mapbase;
0177     unsigned long   length;
0178 
0179     u64     dma_mask;
0180 };
0181 
0182 #define LOCOMO_DEV(_d)  container_of((_d), struct locomo_dev, dev)
0183 
0184 #define locomo_get_drvdata(d)   dev_get_drvdata(&(d)->dev)
0185 #define locomo_set_drvdata(d,p) dev_set_drvdata(&(d)->dev, p)
0186 
0187 struct locomo_driver {
0188     struct device_driver    drv;
0189     unsigned int        devid;
0190     int (*probe)(struct locomo_dev *);
0191     void (*remove)(struct locomo_dev *);
0192 };
0193 
0194 #define LOCOMO_DRV(_d)  container_of((_d), struct locomo_driver, drv)
0195 
0196 #define LOCOMO_DRIVER_NAME(_ldev) ((_ldev)->dev.driver->name)
0197 
0198 void locomo_lcd_power(struct locomo_dev *, int, unsigned int);
0199 
0200 int locomo_driver_register(struct locomo_driver *);
0201 void locomo_driver_unregister(struct locomo_driver *);
0202 
0203 /* GPIO control functions */
0204 void locomo_gpio_set_dir(struct device *dev, unsigned int bits, unsigned int dir);
0205 int locomo_gpio_read_level(struct device *dev, unsigned int bits);
0206 int locomo_gpio_read_output(struct device *dev, unsigned int bits);
0207 void locomo_gpio_write(struct device *dev, unsigned int bits, unsigned int set);
0208 
0209 /* M62332 control function */
0210 void locomo_m62332_senddata(struct locomo_dev *ldev, unsigned int dac_data, int channel);
0211 
0212 /* Frontlight control */
0213 void locomo_frontlight_set(struct locomo_dev *dev, int duty, int vr, int bpwf);
0214 
0215 struct locomo_platform_data {
0216     int irq_base;   /* IRQ base for cascaded on-chip IRQs */
0217 };
0218 
0219 #endif