| target/linux/xburst/files-2.6.31/arch/mips/jz4740/gpio.c |
| 1 | 1 | /* |
| 2 | | * Copyright (C) 2009, Lars-Peter Clausen <lars@metafoo.de> |
| 3 | | * JZ74xx platform GPIO support |
| 2 | * Copyright (C) 2009-2010, Lars-Peter Clausen <lars@metafoo.de> |
| 3 | * JZ4740 platform GPIO support |
| 4 | 4 | * |
| 5 | 5 | * This program is free software; you can redistribute it and/or modify it |
| 6 | 6 | * under the terms of the GNU General Public License as published by the |
| ... | ... | |
| 22 | 22 | #include <linux/io.h> |
| 23 | 23 | #include <linux/gpio.h> |
| 24 | 24 | #include <linux/delay.h> |
| 25 | | #include <linux/irq.h> |
| 26 | 25 | #include <linux/interrupt.h> |
| 27 | 26 | #include <linux/bitops.h> |
| 28 | 27 | |
| 29 | | |
| 30 | | #include <asm/mach-jz4740/regs.h> |
| 31 | | |
| 32 | 28 | #define JZ_GPIO_BASE_A (32*0) |
| 33 | 29 | #define JZ_GPIO_BASE_B (32*1) |
| 34 | 30 | #define JZ_GPIO_BASE_C (32*2) |
| ... | ... | |
| 99 | 95 | |
| 100 | 96 | static inline void jz_gpio_write_bit(unsigned int gpio, unsigned int reg) |
| 101 | 97 | { |
| 102 | | writel(GPIO_TO_BIT(gpio), GPIO_TO_REG(gpio, reg)); |
| 98 | writel(GPIO_TO_BIT(gpio), GPIO_TO_REG(gpio, reg)); |
| 103 | 99 | } |
| 104 | 100 | |
| 105 | 101 | int jz_gpio_set_function(int gpio, enum jz_gpio_function function) |
| ... | ... | |
| 183 | 179 | } |
| 184 | 180 | EXPORT_SYMBOL_GPL(jz_gpio_bulk_resume); |
| 185 | 181 | |
| 186 | | |
| 187 | 182 | void jz_gpio_enable_pullup(unsigned gpio) |
| 188 | 183 | { |
| 189 | 184 | jz_gpio_write_bit(gpio, JZ_REG_GPIO_PULL_CLEAR); |
| ... | ... | |
| 258 | 253 | #define IRQ_TO_GPIO(irq) (irq - JZ_IRQ_GPIO(0)) |
| 259 | 254 | #define IRQ_TO_BIT(irq) BIT(IRQ_TO_GPIO(irq) & 0x1f) |
| 260 | 255 | |
| 261 | | |
| 262 | 256 | #define IRQ_TO_REG(irq, reg) GPIO_TO_REG(IRQ_TO_GPIO(irq), reg) |
| 263 | | #define IRQ_TO_PIN_REG(irq) IRQ_TO_REG(irq, 0x00) |
| 264 | | #define IRQ_TO_MASK_REG(irq) IRQ_TO_REG(irq, 0x20) |
| 265 | | #define IRQ_TO_MASK_SET_REG(irq) IRQ_TO_REG(irq, 0x24) |
| 266 | | #define IRQ_TO_MASK_CLEAR_REG(irq) IRQ_TO_REG(irq, 0x28) |
| 267 | | #define IRQ_TO_SELECT_REG(irq) IRQ_TO_REG(irq, 0x50) |
| 268 | | #define IRQ_TO_SELECT_SET_REG(irq) IRQ_TO_REG(irq, 0x54) |
| 269 | | #define IRQ_TO_SELECT_CLEAR_REG(irq) IRQ_TO_REG(irq, 0x58) |
| 270 | | #define IRQ_TO_DIRECTION_REG(irq) IRQ_TO_REG(irq, 0x60) |
| 271 | | #define IRQ_TO_DIRECTION_SET_REG(irq) IRQ_TO_REG(irq, 0x64) |
| 272 | | #define IRQ_TO_DIRECTION_CLEAR_REG(irq) IRQ_TO_REG(irq, 0x68) |
| 273 | | #define IRQ_TO_TRIGGER_REG(irq) IRQ_TO_REG(irq, 0x70) |
| 274 | | #define IRQ_TO_TRIGGER_SET_REG(irq) IRQ_TO_REG(irq, 0x74) |
| 275 | | #define IRQ_TO_TRIGGER_CLEAR_REG(irq) IRQ_TO_REG(irq, 0x78) |
| 276 | | #define IRQ_TO_FLAG_REG(irq) IRQ_TO_REG(irq, 0x80) |
| 277 | | #define IRQ_TO_FLAG_CLEAR_REG(irq) IRQ_TO_REG(irq, 0x14) |
| 278 | | |
| 279 | 257 | |
| 280 | 258 | static void jz_gpio_irq_demux_handler(unsigned int irq, struct irq_desc *desc) |
| 281 | 259 | { |