Philipp Zabel | a1635b8 | 2008-04-09 19:20:34 +0100 | [diff] [blame] | 1 | /* |
| 2 | * HTC simple EGPIO irq and gpio extender |
| 3 | */ |
| 4 | |
| 5 | #ifndef __HTC_EGPIO_H__ |
| 6 | #define __HTC_EGPIO_H__ |
| 7 | |
| 8 | #include <linux/gpio.h> |
| 9 | |
| 10 | /* Descriptive values for all-in or all-out htc_egpio_chip descriptors. */ |
| 11 | #define HTC_EGPIO_OUTPUT (~0) |
| 12 | #define HTC_EGPIO_INPUT 0 |
| 13 | |
| 14 | /** |
| 15 | * struct htc_egpio_chip - descriptor to create gpio_chip for register range |
| 16 | * @reg_start: index of first register |
| 17 | * @gpio_base: gpio number of first pin in this register range |
| 18 | * @num_gpios: number of gpios in this register range, max BITS_PER_LONG |
| 19 | * (number of registers = DIV_ROUND_UP(num_gpios, reg_width)) |
| 20 | * @direction: bitfield, '0' = input, '1' = output, |
| 21 | */ |
| 22 | struct htc_egpio_chip { |
| 23 | int reg_start; |
| 24 | int gpio_base; |
| 25 | int num_gpios; |
| 26 | unsigned long direction; |
| 27 | unsigned long initial_values; |
| 28 | }; |
| 29 | |
| 30 | /** |
| 31 | * struct htc_egpio_platform_data - description provided by the arch |
| 32 | * @irq_base: beginning of available IRQs (eg, IRQ_BOARD_START) |
| 33 | * @num_irqs: number of irqs |
| 34 | * @reg_width: number of bits per register, either 8 or 16 bit |
| 35 | * @bus_width: alignment of the registers, either 16 or 32 bit |
| 36 | * @invert_acks: set if chip requires writing '0' to ack an irq, instead of '1' |
| 37 | * @ack_register: location of the irq/ack register |
| 38 | * @chip: pointer to array of htc_egpio_chip descriptors |
| 39 | * @num_chips: number of egpio chip descriptors |
| 40 | */ |
| 41 | struct htc_egpio_platform_data { |
| 42 | int bus_width; |
| 43 | int reg_width; |
| 44 | |
| 45 | int irq_base; |
| 46 | int num_irqs; |
| 47 | int invert_acks; |
| 48 | int ack_register; |
| 49 | |
| 50 | struct htc_egpio_chip *chip; |
| 51 | int num_chips; |
| 52 | }; |
| 53 | |
| 54 | /* Determine the wakeup irq, to be called during early resume */ |
| 55 | extern int htc_egpio_get_wakeup_irq(struct device *dev); |
| 56 | |
| 57 | #endif |