1 /* include/linux/gpio_event.h 2 * 3 * Copyright (C) 2007 Google, Inc. 4 * 5 * This software is licensed under the terms of the GNU General Public 6 * License version 2, as published by the Free Software Foundation, and 7 * may be copied, distributed, and modified under those terms. 8 * 9 * This program is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * GNU General Public License for more details. 13 * 14 */ 15 16 #ifndef _LINUX_GPIO_EVENT_H 17 #define _LINUX_GPIO_EVENT_H 18 19 #include <linux/input.h> 20 21 struct gpio_event_input_devs { 22 int count; 23 struct input_dev *dev[]; 24 }; 25 enum { 26 GPIO_EVENT_FUNC_UNINIT = 0x0, 27 GPIO_EVENT_FUNC_INIT = 0x1, 28 GPIO_EVENT_FUNC_SUSPEND = 0x2, 29 GPIO_EVENT_FUNC_RESUME = 0x3, 30 }; 31 struct gpio_event_info { 32 int (*func)(struct gpio_event_input_devs *input_devs, 33 struct gpio_event_info *info, 34 void **data, int func); 35 int (*event)(struct gpio_event_input_devs *input_devs, 36 struct gpio_event_info *info, 37 void **data, unsigned int dev, unsigned int type, 38 unsigned int code, int value); /* out events */ 39 bool no_suspend; 40 }; 41 42 struct gpio_event_platform_data { 43 const char *name; 44 struct gpio_event_info **info; 45 size_t info_count; 46 int (*power)(const struct gpio_event_platform_data *pdata, bool on); 47 const char *names[]; /* If name is NULL, names contain a NULL */ 48 /* terminated list of input devices to create */ 49 }; 50 51 #define GPIO_EVENT_DEV_NAME "gpio-event" 52 53 /* Key matrix */ 54 55 enum gpio_event_matrix_flags { 56 /* unset: drive active output low, set: drive active output high */ 57 GPIOKPF_ACTIVE_HIGH = 1U << 0, 58 GPIOKPF_DEBOUNCE = 1U << 1, 59 GPIOKPF_REMOVE_SOME_PHANTOM_KEYS = 1U << 2, 60 GPIOKPF_REMOVE_PHANTOM_KEYS = GPIOKPF_REMOVE_SOME_PHANTOM_KEYS | 61 GPIOKPF_DEBOUNCE, 62 GPIOKPF_DRIVE_INACTIVE = 1U << 3, 63 GPIOKPF_LEVEL_TRIGGERED_IRQ = 1U << 4, 64 GPIOKPF_PRINT_UNMAPPED_KEYS = 1U << 16, 65 GPIOKPF_PRINT_MAPPED_KEYS = 1U << 17, 66 GPIOKPF_PRINT_PHANTOM_KEYS = 1U << 18, 67 }; 68 69 #define MATRIX_CODE_BITS (10) 70 #define MATRIX_KEY_MASK ((1U << MATRIX_CODE_BITS) - 1) 71 #define MATRIX_KEY(dev, code) \ 72 (((dev) << MATRIX_CODE_BITS) | (code & MATRIX_KEY_MASK)) 73 74 extern int gpio_event_matrix_func(struct gpio_event_input_devs *input_devs, 75 struct gpio_event_info *info, void **data, int func); 76 struct gpio_event_matrix_info { 77 /* initialize to gpio_event_matrix_func */ 78 struct gpio_event_info info; 79 /* size must be ninputs * noutputs */ 80 const unsigned short *keymap; 81 unsigned int *input_gpios; 82 unsigned int *output_gpios; 83 unsigned int ninputs; 84 unsigned int noutputs; 85 /* time to wait before reading inputs after driving each output */ 86 ktime_t settle_time; 87 /* time to wait before scanning the keypad a second time */ 88 ktime_t debounce_delay; 89 ktime_t poll_time; 90 unsigned flags; 91 }; 92 93 /* Directly connected inputs and outputs */ 94 95 enum gpio_event_direct_flags { 96 GPIOEDF_ACTIVE_HIGH = 1U << 0, 97 /* GPIOEDF_USE_DOWN_IRQ = 1U << 1, */ 98 /* GPIOEDF_USE_IRQ = (1U << 2) | GPIOIDF_USE_DOWN_IRQ, */ 99 GPIOEDF_PRINT_KEYS = 1U << 8, 100 GPIOEDF_PRINT_KEY_DEBOUNCE = 1U << 9, 101 }; 102 103 struct gpio_event_direct_entry { 104 uint32_t gpio:16; 105 uint32_t code:10; 106 uint32_t dev:6; 107 }; 108 109 /* inputs */ 110 extern int gpio_event_input_func(struct gpio_event_input_devs *input_devs, 111 struct gpio_event_info *info, void **data, int func); 112 struct gpio_event_input_info { 113 /* initialize to gpio_event_input_func */ 114 struct gpio_event_info info; 115 ktime_t debounce_time; 116 ktime_t poll_time; 117 uint16_t flags; 118 uint16_t type; 119 const struct gpio_event_direct_entry *keymap; 120 size_t keymap_size; 121 }; 122 123 /* outputs */ 124 extern int gpio_event_output_func(struct gpio_event_input_devs *input_devs, 125 struct gpio_event_info *info, void **data, int func); 126 extern int gpio_event_output_event(struct gpio_event_input_devs *input_devs, 127 struct gpio_event_info *info, void **data, 128 unsigned int dev, unsigned int type, 129 unsigned int code, int value); 130 struct gpio_event_output_info { 131 /* initialize to gpio_event_output_func and gpio_event_output_event */ 132 struct gpio_event_info info; 133 uint16_t flags; 134 uint16_t type; 135 const struct gpio_event_direct_entry *keymap; 136 size_t keymap_size; 137 }; 138 139 140 /* axes */ 141 142 enum gpio_event_axis_flags { 143 GPIOEAF_PRINT_UNKNOWN_DIRECTION = 1U << 16, 144 GPIOEAF_PRINT_RAW = 1U << 17, 145 GPIOEAF_PRINT_EVENT = 1U << 18, 146 }; 147 148 extern int gpio_event_axis_func(struct gpio_event_input_devs *input_devs, 149 struct gpio_event_info *info, void **data, int func); 150 struct gpio_event_axis_info { 151 /* initialize to gpio_event_axis_func */ 152 struct gpio_event_info info; 153 uint8_t count; /* number of gpios for this axis */ 154 uint8_t dev; /* device index when using multiple input devices */ 155 uint8_t type; /* EV_REL or EV_ABS */ 156 uint16_t code; 157 uint16_t decoded_size; 158 uint16_t (*map)(struct gpio_event_axis_info *info, uint16_t in); 159 uint32_t *gpio; 160 uint32_t flags; 161 }; 162 #define gpio_axis_2bit_gray_map gpio_axis_4bit_gray_map 163 #define gpio_axis_3bit_gray_map gpio_axis_4bit_gray_map 164 uint16_t gpio_axis_4bit_gray_map( 165 struct gpio_event_axis_info *info, uint16_t in); 166 uint16_t gpio_axis_5bit_singletrack_map( 167 struct gpio_event_axis_info *info, uint16_t in); 168 169 #endif 170