diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-01-06 19:50:35 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-01-06 19:50:35 -0500 |
| commit | 3c0cb7c31c206aaedb967e44b98442bbeb17a6c4 (patch) | |
| tree | 3ecba45d7ffae4fba4a5aafaef4af5b0b1105bde /include/linux | |
| parent | f70f5b9dc74ca7d0a64c4ead3fb28da09dc1b234 (diff) | |
| parent | 404a02cbd2ae8bf256a2fa1169bdfe86bb5ebb34 (diff) | |
Merge branch 'devel' of master.kernel.org:/home/rmk/linux-2.6-arm
* 'devel' of master.kernel.org:/home/rmk/linux-2.6-arm: (416 commits)
ARM: DMA: add support for DMA debugging
ARM: PL011: add DMA burst threshold support for ST variants
ARM: PL011: Add support for transmit DMA
ARM: PL011: Ensure IRQs are disabled in UART interrupt handler
ARM: PL011: Separate hardware FIFO size from TTY FIFO size
ARM: PL011: Allow better handling of vendor data
ARM: PL011: Ensure error flags are clear at startup
ARM: PL011: include revision number in boot-time port printk
ARM: vexpress: add sched_clock() for Versatile Express
ARM i.MX53: Make MX53 EVK bootable
ARM i.MX53: Some bug fix about MX53 MSL code
ARM: 6607/1: sa1100: Update platform device registration
ARM: 6606/1: sa1100: Fix platform device registration
ARM i.MX51: rename IPU irqs
ARM i.MX51: Add ipu clock support
ARM: imx/mx27_3ds: Add PMIC support
ARM: DMA: Replace page_to_dma()/dma_to_page() with pfn_to_dma()/dma_to_pfn()
mx51: fix usb clock support
MX51: Add support for usb host 2
arch/arm/plat-mxc/ehci.c: fix errors/typos
...
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/amba/bus.h | 8 | ||||
| -rw-r--r-- | include/linux/amba/serial.h | 22 | ||||
| -rw-r--r-- | include/linux/clkdev.h | 36 | ||||
| -rw-r--r-- | include/linux/crash_dump.h | 9 | ||||
| -rw-r--r-- | include/linux/mfd/tc35892.h | 136 | ||||
| -rw-r--r-- | include/linux/mfd/tc3589x.h | 195 |
6 files changed, 269 insertions, 137 deletions
diff --git a/include/linux/amba/bus.h b/include/linux/amba/bus.h index c6454cca0447..9e7f259346e1 100644 --- a/include/linux/amba/bus.h +++ b/include/linux/amba/bus.h | |||
| @@ -18,6 +18,7 @@ | |||
| 18 | #include <linux/device.h> | 18 | #include <linux/device.h> |
| 19 | #include <linux/err.h> | 19 | #include <linux/err.h> |
| 20 | #include <linux/resource.h> | 20 | #include <linux/resource.h> |
| 21 | #include <linux/regulator/consumer.h> | ||
| 21 | 22 | ||
| 22 | #define AMBA_NR_IRQS 2 | 23 | #define AMBA_NR_IRQS 2 |
| 23 | #define AMBA_CID 0xb105f00d | 24 | #define AMBA_CID 0xb105f00d |
| @@ -28,6 +29,7 @@ struct amba_device { | |||
| 28 | struct device dev; | 29 | struct device dev; |
| 29 | struct resource res; | 30 | struct resource res; |
| 30 | struct clk *pclk; | 31 | struct clk *pclk; |
| 32 | struct regulator *vcore; | ||
| 31 | u64 dma_mask; | 33 | u64 dma_mask; |
| 32 | unsigned int periphid; | 34 | unsigned int periphid; |
| 33 | unsigned int irq[AMBA_NR_IRQS]; | 35 | unsigned int irq[AMBA_NR_IRQS]; |
| @@ -71,6 +73,12 @@ void amba_release_regions(struct amba_device *); | |||
| 71 | #define amba_pclk_disable(d) \ | 73 | #define amba_pclk_disable(d) \ |
| 72 | do { if (!IS_ERR((d)->pclk)) clk_disable((d)->pclk); } while (0) | 74 | do { if (!IS_ERR((d)->pclk)) clk_disable((d)->pclk); } while (0) |
| 73 | 75 | ||
| 76 | #define amba_vcore_enable(d) \ | ||
| 77 | (IS_ERR((d)->vcore) ? 0 : regulator_enable((d)->vcore)) | ||
| 78 | |||
| 79 | #define amba_vcore_disable(d) \ | ||
| 80 | do { if (!IS_ERR((d)->vcore)) regulator_disable((d)->vcore); } while (0) | ||
| 81 | |||
| 74 | /* Some drivers don't use the struct amba_device */ | 82 | /* Some drivers don't use the struct amba_device */ |
| 75 | #define AMBA_CONFIG_BITS(a) (((a) >> 24) & 0xff) | 83 | #define AMBA_CONFIG_BITS(a) (((a) >> 24) & 0xff) |
| 76 | #define AMBA_REV_BITS(a) (((a) >> 20) & 0x0f) | 84 | #define AMBA_REV_BITS(a) (((a) >> 20) & 0x0f) |
diff --git a/include/linux/amba/serial.h b/include/linux/amba/serial.h index 6021588ba0a8..5479fdc849e9 100644 --- a/include/linux/amba/serial.h +++ b/include/linux/amba/serial.h | |||
| @@ -113,6 +113,21 @@ | |||
| 113 | #define UART01x_LCRH_PEN 0x02 | 113 | #define UART01x_LCRH_PEN 0x02 |
| 114 | #define UART01x_LCRH_BRK 0x01 | 114 | #define UART01x_LCRH_BRK 0x01 |
| 115 | 115 | ||
| 116 | #define ST_UART011_DMAWM_RX_1 (0 << 3) | ||
| 117 | #define ST_UART011_DMAWM_RX_2 (1 << 3) | ||
| 118 | #define ST_UART011_DMAWM_RX_4 (2 << 3) | ||
| 119 | #define ST_UART011_DMAWM_RX_8 (3 << 3) | ||
| 120 | #define ST_UART011_DMAWM_RX_16 (4 << 3) | ||
| 121 | #define ST_UART011_DMAWM_RX_32 (5 << 3) | ||
| 122 | #define ST_UART011_DMAWM_RX_48 (6 << 3) | ||
| 123 | #define ST_UART011_DMAWM_TX_1 0 | ||
| 124 | #define ST_UART011_DMAWM_TX_2 1 | ||
| 125 | #define ST_UART011_DMAWM_TX_4 2 | ||
| 126 | #define ST_UART011_DMAWM_TX_8 3 | ||
| 127 | #define ST_UART011_DMAWM_TX_16 4 | ||
| 128 | #define ST_UART011_DMAWM_TX_32 5 | ||
| 129 | #define ST_UART011_DMAWM_TX_48 6 | ||
| 130 | |||
| 116 | #define UART010_IIR_RTIS 0x08 | 131 | #define UART010_IIR_RTIS 0x08 |
| 117 | #define UART010_IIR_TIS 0x04 | 132 | #define UART010_IIR_TIS 0x04 |
| 118 | #define UART010_IIR_RIS 0x02 | 133 | #define UART010_IIR_RIS 0x02 |
| @@ -180,6 +195,13 @@ struct amba_device; /* in uncompress this is included but amba/bus.h is not */ | |||
| 180 | struct amba_pl010_data { | 195 | struct amba_pl010_data { |
| 181 | void (*set_mctrl)(struct amba_device *dev, void __iomem *base, unsigned int mctrl); | 196 | void (*set_mctrl)(struct amba_device *dev, void __iomem *base, unsigned int mctrl); |
| 182 | }; | 197 | }; |
| 198 | |||
| 199 | struct dma_chan; | ||
| 200 | struct amba_pl011_data { | ||
| 201 | bool (*dma_filter)(struct dma_chan *chan, void *filter_param); | ||
| 202 | void *dma_rx_param; | ||
| 203 | void *dma_tx_param; | ||
| 204 | }; | ||
| 183 | #endif | 205 | #endif |
| 184 | 206 | ||
| 185 | #endif | 207 | #endif |
diff --git a/include/linux/clkdev.h b/include/linux/clkdev.h new file mode 100644 index 000000000000..457bcb0a310a --- /dev/null +++ b/include/linux/clkdev.h | |||
| @@ -0,0 +1,36 @@ | |||
| 1 | /* | ||
| 2 | * include/linux/clkdev.h | ||
| 3 | * | ||
| 4 | * Copyright (C) 2008 Russell King. | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License version 2 as | ||
| 8 | * published by the Free Software Foundation. | ||
| 9 | * | ||
| 10 | * Helper for the clk API to assist looking up a struct clk. | ||
| 11 | */ | ||
| 12 | #ifndef __CLKDEV_H | ||
| 13 | #define __CLKDEV_H | ||
| 14 | |||
| 15 | #include <asm/clkdev.h> | ||
| 16 | |||
| 17 | struct clk; | ||
| 18 | struct device; | ||
| 19 | |||
| 20 | struct clk_lookup { | ||
| 21 | struct list_head node; | ||
| 22 | const char *dev_id; | ||
| 23 | const char *con_id; | ||
| 24 | struct clk *clk; | ||
| 25 | }; | ||
| 26 | |||
| 27 | struct clk_lookup *clkdev_alloc(struct clk *clk, const char *con_id, | ||
| 28 | const char *dev_fmt, ...); | ||
| 29 | |||
| 30 | void clkdev_add(struct clk_lookup *cl); | ||
| 31 | void clkdev_drop(struct clk_lookup *cl); | ||
| 32 | |||
| 33 | void clkdev_add_table(struct clk_lookup *, size_t); | ||
| 34 | int clk_add_alias(const char *, const char *, char *, struct device *); | ||
| 35 | |||
| 36 | #endif | ||
diff --git a/include/linux/crash_dump.h b/include/linux/crash_dump.h index 0026f267da20..088cd4ace4ef 100644 --- a/include/linux/crash_dump.h +++ b/include/linux/crash_dump.h | |||
| @@ -20,7 +20,14 @@ extern ssize_t copy_oldmem_page(unsigned long, char *, size_t, | |||
| 20 | #define vmcore_elf_check_arch_cross(x) 0 | 20 | #define vmcore_elf_check_arch_cross(x) 0 |
| 21 | #endif | 21 | #endif |
| 22 | 22 | ||
| 23 | #define vmcore_elf_check_arch(x) (elf_check_arch(x) || vmcore_elf_check_arch_cross(x)) | 23 | /* |
| 24 | * Architecture code can redefine this if there are any special checks | ||
| 25 | * needed for 64-bit ELF vmcores. In case of 32-bit only architecture, | ||
| 26 | * this can be set to zero. | ||
| 27 | */ | ||
| 28 | #ifndef vmcore_elf64_check_arch | ||
| 29 | #define vmcore_elf64_check_arch(x) (elf_check_arch(x) || vmcore_elf_check_arch_cross(x)) | ||
| 30 | #endif | ||
| 24 | 31 | ||
| 25 | /* | 32 | /* |
| 26 | * is_kdump_kernel() checks whether this kernel is booting after a panic of | 33 | * is_kdump_kernel() checks whether this kernel is booting after a panic of |
diff --git a/include/linux/mfd/tc35892.h b/include/linux/mfd/tc35892.h deleted file mode 100644 index eff3094ca84e..000000000000 --- a/include/linux/mfd/tc35892.h +++ /dev/null | |||
| @@ -1,136 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) ST-Ericsson SA 2010 | ||
| 3 | * | ||
| 4 | * License Terms: GNU General Public License, version 2 | ||
| 5 | */ | ||
| 6 | |||
| 7 | #ifndef __LINUX_MFD_TC35892_H | ||
| 8 | #define __LINUX_MFD_TC35892_H | ||
| 9 | |||
| 10 | #include <linux/device.h> | ||
| 11 | |||
| 12 | #define TC35892_RSTCTRL_IRQRST (1 << 4) | ||
| 13 | #define TC35892_RSTCTRL_TIMRST (1 << 3) | ||
| 14 | #define TC35892_RSTCTRL_ROTRST (1 << 2) | ||
| 15 | #define TC35892_RSTCTRL_KBDRST (1 << 1) | ||
| 16 | #define TC35892_RSTCTRL_GPIRST (1 << 0) | ||
| 17 | |||
| 18 | #define TC35892_IRQST 0x91 | ||
| 19 | |||
| 20 | #define TC35892_MANFCODE_MAGIC 0x03 | ||
| 21 | #define TC35892_MANFCODE 0x80 | ||
| 22 | #define TC35892_VERSION 0x81 | ||
| 23 | #define TC35892_IOCFG 0xA7 | ||
| 24 | |||
| 25 | #define TC35892_CLKMODE 0x88 | ||
| 26 | #define TC35892_CLKCFG 0x89 | ||
| 27 | #define TC35892_CLKEN 0x8A | ||
| 28 | |||
| 29 | #define TC35892_RSTCTRL 0x82 | ||
| 30 | #define TC35892_EXTRSTN 0x83 | ||
| 31 | #define TC35892_RSTINTCLR 0x84 | ||
| 32 | |||
| 33 | #define TC35892_GPIOIS0 0xC9 | ||
| 34 | #define TC35892_GPIOIS1 0xCA | ||
| 35 | #define TC35892_GPIOIS2 0xCB | ||
| 36 | #define TC35892_GPIOIBE0 0xCC | ||
| 37 | #define TC35892_GPIOIBE1 0xCD | ||
| 38 | #define TC35892_GPIOIBE2 0xCE | ||
| 39 | #define TC35892_GPIOIEV0 0xCF | ||
| 40 | #define TC35892_GPIOIEV1 0xD0 | ||
| 41 | #define TC35892_GPIOIEV2 0xD1 | ||
| 42 | #define TC35892_GPIOIE0 0xD2 | ||
| 43 | #define TC35892_GPIOIE1 0xD3 | ||
| 44 | #define TC35892_GPIOIE2 0xD4 | ||
| 45 | #define TC35892_GPIORIS0 0xD6 | ||
| 46 | #define TC35892_GPIORIS1 0xD7 | ||
| 47 | #define TC35892_GPIORIS2 0xD8 | ||
| 48 | #define TC35892_GPIOMIS0 0xD9 | ||
| 49 | #define TC35892_GPIOMIS1 0xDA | ||
| 50 | #define TC35892_GPIOMIS2 0xDB | ||
| 51 | #define TC35892_GPIOIC0 0xDC | ||
| 52 | #define TC35892_GPIOIC1 0xDD | ||
| 53 | #define TC35892_GPIOIC2 0xDE | ||
| 54 | |||
| 55 | #define TC35892_GPIODATA0 0xC0 | ||
| 56 | #define TC35892_GPIOMASK0 0xc1 | ||
| 57 | #define TC35892_GPIODATA1 0xC2 | ||
| 58 | #define TC35892_GPIOMASK1 0xc3 | ||
| 59 | #define TC35892_GPIODATA2 0xC4 | ||
| 60 | #define TC35892_GPIOMASK2 0xC5 | ||
| 61 | |||
| 62 | #define TC35892_GPIODIR0 0xC6 | ||
| 63 | #define TC35892_GPIODIR1 0xC7 | ||
| 64 | #define TC35892_GPIODIR2 0xC8 | ||
| 65 | |||
| 66 | #define TC35892_GPIOSYNC0 0xE6 | ||
| 67 | #define TC35892_GPIOSYNC1 0xE7 | ||
| 68 | #define TC35892_GPIOSYNC2 0xE8 | ||
| 69 | |||
| 70 | #define TC35892_GPIOWAKE0 0xE9 | ||
| 71 | #define TC35892_GPIOWAKE1 0xEA | ||
| 72 | #define TC35892_GPIOWAKE2 0xEB | ||
| 73 | |||
| 74 | #define TC35892_GPIOODM0 0xE0 | ||
| 75 | #define TC35892_GPIOODE0 0xE1 | ||
| 76 | #define TC35892_GPIOODM1 0xE2 | ||
| 77 | #define TC35892_GPIOODE1 0xE3 | ||
| 78 | #define TC35892_GPIOODM2 0xE4 | ||
| 79 | #define TC35892_GPIOODE2 0xE5 | ||
| 80 | |||
| 81 | #define TC35892_INT_GPIIRQ 0 | ||
| 82 | #define TC35892_INT_TI0IRQ 1 | ||
| 83 | #define TC35892_INT_TI1IRQ 2 | ||
| 84 | #define TC35892_INT_TI2IRQ 3 | ||
| 85 | #define TC35892_INT_ROTIRQ 5 | ||
| 86 | #define TC35892_INT_KBDIRQ 6 | ||
| 87 | #define TC35892_INT_PORIRQ 7 | ||
| 88 | |||
| 89 | #define TC35892_NR_INTERNAL_IRQS 8 | ||
| 90 | #define TC35892_INT_GPIO(x) (TC35892_NR_INTERNAL_IRQS + (x)) | ||
| 91 | |||
| 92 | struct tc35892 { | ||
| 93 | struct mutex lock; | ||
| 94 | struct device *dev; | ||
| 95 | struct i2c_client *i2c; | ||
| 96 | |||
| 97 | int irq_base; | ||
| 98 | int num_gpio; | ||
| 99 | struct tc35892_platform_data *pdata; | ||
| 100 | }; | ||
| 101 | |||
| 102 | extern int tc35892_reg_write(struct tc35892 *tc35892, u8 reg, u8 data); | ||
| 103 | extern int tc35892_reg_read(struct tc35892 *tc35892, u8 reg); | ||
| 104 | extern int tc35892_block_read(struct tc35892 *tc35892, u8 reg, u8 length, | ||
| 105 | u8 *values); | ||
| 106 | extern int tc35892_block_write(struct tc35892 *tc35892, u8 reg, u8 length, | ||
| 107 | const u8 *values); | ||
| 108 | extern int tc35892_set_bits(struct tc35892 *tc35892, u8 reg, u8 mask, u8 val); | ||
| 109 | |||
| 110 | /** | ||
| 111 | * struct tc35892_gpio_platform_data - TC35892 GPIO platform data | ||
| 112 | * @gpio_base: first gpio number assigned to TC35892. A maximum of | ||
| 113 | * %TC35892_NR_GPIOS GPIOs will be allocated. | ||
| 114 | * @setup: callback for board-specific initialization | ||
| 115 | * @remove: callback for board-specific teardown | ||
| 116 | */ | ||
| 117 | struct tc35892_gpio_platform_data { | ||
| 118 | int gpio_base; | ||
| 119 | void (*setup)(struct tc35892 *tc35892, unsigned gpio_base); | ||
| 120 | void (*remove)(struct tc35892 *tc35892, unsigned gpio_base); | ||
| 121 | }; | ||
| 122 | |||
| 123 | /** | ||
| 124 | * struct tc35892_platform_data - TC35892 platform data | ||
| 125 | * @irq_base: base IRQ number. %TC35892_NR_IRQS irqs will be used. | ||
| 126 | * @gpio: GPIO-specific platform data | ||
| 127 | */ | ||
| 128 | struct tc35892_platform_data { | ||
| 129 | int irq_base; | ||
| 130 | struct tc35892_gpio_platform_data *gpio; | ||
| 131 | }; | ||
| 132 | |||
| 133 | #define TC35892_NR_GPIOS 24 | ||
| 134 | #define TC35892_NR_IRQS TC35892_INT_GPIO(TC35892_NR_GPIOS) | ||
| 135 | |||
| 136 | #endif | ||
diff --git a/include/linux/mfd/tc3589x.h b/include/linux/mfd/tc3589x.h new file mode 100644 index 000000000000..16c76e124f9c --- /dev/null +++ b/include/linux/mfd/tc3589x.h | |||
| @@ -0,0 +1,195 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) ST-Ericsson SA 2010 | ||
| 3 | * | ||
| 4 | * License Terms: GNU General Public License, version 2 | ||
| 5 | */ | ||
| 6 | |||
| 7 | #ifndef __LINUX_MFD_TC3589x_H | ||
| 8 | #define __LINUX_MFD_TC3589x_H | ||
| 9 | |||
| 10 | #include <linux/device.h> | ||
| 11 | |||
| 12 | enum tx3589x_block { | ||
| 13 | TC3589x_BLOCK_GPIO = 1 << 0, | ||
| 14 | TC3589x_BLOCK_KEYPAD = 1 << 1, | ||
| 15 | }; | ||
| 16 | |||
| 17 | #define TC3589x_RSTCTRL_IRQRST (1 << 4) | ||
| 18 | #define TC3589x_RSTCTRL_TIMRST (1 << 3) | ||
| 19 | #define TC3589x_RSTCTRL_ROTRST (1 << 2) | ||
| 20 | #define TC3589x_RSTCTRL_KBDRST (1 << 1) | ||
| 21 | #define TC3589x_RSTCTRL_GPIRST (1 << 0) | ||
| 22 | |||
| 23 | /* Keyboard Configuration Registers */ | ||
| 24 | #define TC3589x_KBDSETTLE_REG 0x01 | ||
| 25 | #define TC3589x_KBDBOUNCE 0x02 | ||
| 26 | #define TC3589x_KBDSIZE 0x03 | ||
| 27 | #define TC3589x_KBCFG_LSB 0x04 | ||
| 28 | #define TC3589x_KBCFG_MSB 0x05 | ||
| 29 | #define TC3589x_KBDIC 0x08 | ||
| 30 | #define TC3589x_KBDMSK 0x09 | ||
| 31 | #define TC3589x_EVTCODE_FIFO 0x10 | ||
| 32 | #define TC3589x_KBDMFS 0x8F | ||
| 33 | |||
| 34 | #define TC3589x_IRQST 0x91 | ||
| 35 | |||
| 36 | #define TC3589x_MANFCODE_MAGIC 0x03 | ||
| 37 | #define TC3589x_MANFCODE 0x80 | ||
| 38 | #define TC3589x_VERSION 0x81 | ||
| 39 | #define TC3589x_IOCFG 0xA7 | ||
| 40 | |||
| 41 | #define TC3589x_CLKMODE 0x88 | ||
| 42 | #define TC3589x_CLKCFG 0x89 | ||
| 43 | #define TC3589x_CLKEN 0x8A | ||
| 44 | |||
| 45 | #define TC3589x_RSTCTRL 0x82 | ||
| 46 | #define TC3589x_EXTRSTN 0x83 | ||
| 47 | #define TC3589x_RSTINTCLR 0x84 | ||
| 48 | |||
| 49 | /* Pull up/down configuration registers */ | ||
| 50 | #define TC3589x_IOCFG 0xA7 | ||
| 51 | #define TC3589x_IOPULLCFG0_LSB 0xAA | ||
| 52 | #define TC3589x_IOPULLCFG0_MSB 0xAB | ||
| 53 | #define TC3589x_IOPULLCFG1_LSB 0xAC | ||
| 54 | #define TC3589x_IOPULLCFG1_MSB 0xAD | ||
| 55 | #define TC3589x_IOPULLCFG2_LSB 0xAE | ||
| 56 | |||
| 57 | #define TC3589x_GPIOIS0 0xC9 | ||
| 58 | #define TC3589x_GPIOIS1 0xCA | ||
| 59 | #define TC3589x_GPIOIS2 0xCB | ||
| 60 | #define TC3589x_GPIOIBE0 0xCC | ||
| 61 | #define TC3589x_GPIOIBE1 0xCD | ||
| 62 | #define TC3589x_GPIOIBE2 0xCE | ||
| 63 | #define TC3589x_GPIOIEV0 0xCF | ||
| 64 | #define TC3589x_GPIOIEV1 0xD0 | ||
| 65 | #define TC3589x_GPIOIEV2 0xD1 | ||
| 66 | #define TC3589x_GPIOIE0 0xD2 | ||
| 67 | #define TC3589x_GPIOIE1 0xD3 | ||
| 68 | #define TC3589x_GPIOIE2 0xD4 | ||
| 69 | #define TC3589x_GPIORIS0 0xD6 | ||
| 70 | #define TC3589x_GPIORIS1 0xD7 | ||
| 71 | #define TC3589x_GPIORIS2 0xD8 | ||
| 72 | #define TC3589x_GPIOMIS0 0xD9 | ||
| 73 | #define TC3589x_GPIOMIS1 0xDA | ||
| 74 | #define TC3589x_GPIOMIS2 0xDB | ||
| 75 | #define TC3589x_GPIOIC0 0xDC | ||
| 76 | #define TC3589x_GPIOIC1 0xDD | ||
| 77 | #define TC3589x_GPIOIC2 0xDE | ||
| 78 | |||
| 79 | #define TC3589x_GPIODATA0 0xC0 | ||
| 80 | #define TC3589x_GPIOMASK0 0xc1 | ||
| 81 | #define TC3589x_GPIODATA1 0xC2 | ||
| 82 | #define TC3589x_GPIOMASK1 0xc3 | ||
| 83 | #define TC3589x_GPIODATA2 0xC4 | ||
| 84 | #define TC3589x_GPIOMASK2 0xC5 | ||
| 85 | |||
| 86 | #define TC3589x_GPIODIR0 0xC6 | ||
| 87 | #define TC3589x_GPIODIR1 0xC7 | ||
| 88 | #define TC3589x_GPIODIR2 0xC8 | ||
| 89 | |||
| 90 | #define TC3589x_GPIOSYNC0 0xE6 | ||
| 91 | #define TC3589x_GPIOSYNC1 0xE7 | ||
| 92 | #define TC3589x_GPIOSYNC2 0xE8 | ||
| 93 | |||
| 94 | #define TC3589x_GPIOWAKE0 0xE9 | ||
| 95 | #define TC3589x_GPIOWAKE1 0xEA | ||
| 96 | #define TC3589x_GPIOWAKE2 0xEB | ||
| 97 | |||
| 98 | #define TC3589x_GPIOODM0 0xE0 | ||
| 99 | #define TC3589x_GPIOODE0 0xE1 | ||
| 100 | #define TC3589x_GPIOODM1 0xE2 | ||
| 101 | #define TC3589x_GPIOODE1 0xE3 | ||
| 102 | #define TC3589x_GPIOODM2 0xE4 | ||
| 103 | #define TC3589x_GPIOODE2 0xE5 | ||
| 104 | |||
| 105 | #define TC3589x_INT_GPIIRQ 0 | ||
| 106 | #define TC3589x_INT_TI0IRQ 1 | ||
| 107 | #define TC3589x_INT_TI1IRQ 2 | ||
| 108 | #define TC3589x_INT_TI2IRQ 3 | ||
| 109 | #define TC3589x_INT_ROTIRQ 5 | ||
| 110 | #define TC3589x_INT_KBDIRQ 6 | ||
| 111 | #define TC3589x_INT_PORIRQ 7 | ||
| 112 | |||
| 113 | #define TC3589x_NR_INTERNAL_IRQS 8 | ||
| 114 | #define TC3589x_INT_GPIO(x) (TC3589x_NR_INTERNAL_IRQS + (x)) | ||
| 115 | |||
| 116 | struct tc3589x { | ||
| 117 | struct mutex lock; | ||
| 118 | struct device *dev; | ||
| 119 | struct i2c_client *i2c; | ||
| 120 | |||
| 121 | int irq_base; | ||
| 122 | int num_gpio; | ||
| 123 | struct tc3589x_platform_data *pdata; | ||
| 124 | }; | ||
| 125 | |||
| 126 | extern int tc3589x_reg_write(struct tc3589x *tc3589x, u8 reg, u8 data); | ||
| 127 | extern int tc3589x_reg_read(struct tc3589x *tc3589x, u8 reg); | ||
| 128 | extern int tc3589x_block_read(struct tc3589x *tc3589x, u8 reg, u8 length, | ||
| 129 | u8 *values); | ||
| 130 | extern int tc3589x_block_write(struct tc3589x *tc3589x, u8 reg, u8 length, | ||
| 131 | const u8 *values); | ||
| 132 | extern int tc3589x_set_bits(struct tc3589x *tc3589x, u8 reg, u8 mask, u8 val); | ||
| 133 | |||
| 134 | /* | ||
| 135 | * Keypad related platform specific constants | ||
| 136 | * These values may be modified for fine tuning | ||
| 137 | */ | ||
| 138 | #define TC_KPD_ROWS 0x8 | ||
| 139 | #define TC_KPD_COLUMNS 0x8 | ||
| 140 | #define TC_KPD_DEBOUNCE_PERIOD 0xA3 | ||
| 141 | #define TC_KPD_SETTLE_TIME 0xA3 | ||
| 142 | |||
| 143 | /** | ||
| 144 | * struct tc35893_platform_data - data structure for platform specific data | ||
| 145 | * @keymap_data: matrix scan code table for keycodes | ||
| 146 | * @krow: mask for available rows, value is 0xFF | ||
| 147 | * @kcol: mask for available columns, value is 0xFF | ||
| 148 | * @debounce_period: platform specific debounce time | ||
| 149 | * @settle_time: platform specific settle down time | ||
| 150 | * @irqtype: type of interrupt, falling or rising edge | ||
| 151 | * @enable_wakeup: specifies if keypad event can wake up system from sleep | ||
| 152 | * @no_autorepeat: flag for auto repetition | ||
| 153 | */ | ||
| 154 | struct tc3589x_keypad_platform_data { | ||
| 155 | const struct matrix_keymap_data *keymap_data; | ||
| 156 | u8 krow; | ||
| 157 | u8 kcol; | ||
| 158 | u8 debounce_period; | ||
| 159 | u8 settle_time; | ||
| 160 | unsigned long irqtype; | ||
| 161 | bool enable_wakeup; | ||
| 162 | bool no_autorepeat; | ||
| 163 | }; | ||
| 164 | |||
| 165 | /** | ||
| 166 | * struct tc3589x_gpio_platform_data - TC3589x GPIO platform data | ||
| 167 | * @gpio_base: first gpio number assigned to TC3589x. A maximum of | ||
| 168 | * %TC3589x_NR_GPIOS GPIOs will be allocated. | ||
| 169 | * @setup: callback for board-specific initialization | ||
| 170 | * @remove: callback for board-specific teardown | ||
| 171 | */ | ||
| 172 | struct tc3589x_gpio_platform_data { | ||
| 173 | int gpio_base; | ||
| 174 | void (*setup)(struct tc3589x *tc3589x, unsigned gpio_base); | ||
| 175 | void (*remove)(struct tc3589x *tc3589x, unsigned gpio_base); | ||
| 176 | }; | ||
| 177 | |||
| 178 | /** | ||
| 179 | * struct tc3589x_platform_data - TC3589x platform data | ||
| 180 | * @block: bitmask of blocks to enable (use TC3589x_BLOCK_*) | ||
| 181 | * @irq_base: base IRQ number. %TC3589x_NR_IRQS irqs will be used. | ||
| 182 | * @gpio: GPIO-specific platform data | ||
| 183 | * @keypad: keypad-specific platform data | ||
| 184 | */ | ||
| 185 | struct tc3589x_platform_data { | ||
| 186 | unsigned int block; | ||
| 187 | int irq_base; | ||
| 188 | struct tc3589x_gpio_platform_data *gpio; | ||
| 189 | const struct tc3589x_keypad_platform_data *keypad; | ||
| 190 | }; | ||
| 191 | |||
| 192 | #define TC3589x_NR_GPIOS 24 | ||
| 193 | #define TC3589x_NR_IRQS TC3589x_INT_GPIO(TC3589x_NR_GPIOS) | ||
| 194 | |||
| 195 | #endif | ||
