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