1 /* drivers/staging/dream/include/linux/gpio_event.h
3 * Copyright (C) 2007 Google, Inc.
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.
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.
16 #ifndef _LINUX_GPIO_EVENT_H
17 #define _LINUX_GPIO_EVENT_H
19 #include <linux/input.h>
22 GPIO_EVENT_FUNC_UNINIT
= 0x0,
23 GPIO_EVENT_FUNC_INIT
= 0x1,
24 GPIO_EVENT_FUNC_SUSPEND
= 0x2,
25 GPIO_EVENT_FUNC_RESUME
= 0x3,
27 struct gpio_event_info
{
28 int (*func
)(struct input_dev
*input_dev
,
29 struct gpio_event_info
*info
,
30 void **data
, int func
);
31 int (*event
)(struct input_dev
*input_dev
,
32 struct gpio_event_info
*info
,
33 void **data
, unsigned int type
,
34 unsigned int code
, int value
); /* out events */
37 struct gpio_event_platform_data
{
39 struct gpio_event_info
**info
;
41 int (*power
)(const struct gpio_event_platform_data
*pdata
, bool on
);
44 #define GPIO_EVENT_DEV_NAME "gpio-event"
48 enum gpio_event_matrix_flags
{
49 /* unset: drive active output low, set: drive active output high */
50 GPIOKPF_ACTIVE_HIGH
= 1U << 0,
51 GPIOKPF_DEBOUNCE
= 1U << 1,
52 GPIOKPF_REMOVE_SOME_PHANTOM_KEYS
= 1U << 2,
53 GPIOKPF_REMOVE_PHANTOM_KEYS
= GPIOKPF_REMOVE_SOME_PHANTOM_KEYS
|
55 GPIOKPF_DRIVE_INACTIVE
= 1U << 3,
56 GPIOKPF_LEVEL_TRIGGERED_IRQ
= 1U << 4,
57 GPIOKPF_PRINT_UNMAPPED_KEYS
= 1U << 16,
58 GPIOKPF_PRINT_MAPPED_KEYS
= 1U << 17,
59 GPIOKPF_PRINT_PHANTOM_KEYS
= 1U << 18,
62 extern int gpio_event_matrix_func(struct input_dev
*input_dev
,
63 struct gpio_event_info
*info
, void **data
, int func
);
64 struct gpio_event_matrix_info
{
65 /* initialize to gpio_event_matrix_func */
66 struct gpio_event_info info
;
67 /* size must be ninputs * noutputs */
68 const unsigned short *keymap
;
69 unsigned int *input_gpios
;
70 unsigned int *output_gpios
;
72 unsigned int noutputs
;
73 /* time to wait before reading inputs after driving each output */
75 /* time to wait before scanning the keypad a second time */
76 ktime_t debounce_delay
;
81 /* Directly connected inputs and outputs */
83 enum gpio_event_direct_flags
{
84 GPIOEDF_ACTIVE_HIGH
= 1U << 0,
85 /* GPIOEDF_USE_DOWN_IRQ = 1U << 1, */
86 /* GPIOEDF_USE_IRQ = (1U << 2) | GPIOIDF_USE_DOWN_IRQ, */
87 GPIOEDF_PRINT_KEYS
= 1U << 8,
88 GPIOEDF_PRINT_KEY_DEBOUNCE
= 1U << 9,
91 struct gpio_event_direct_entry
{
97 extern int gpio_event_input_func(struct input_dev
*input_dev
,
98 struct gpio_event_info
*info
, void **data
, int func
);
99 struct gpio_event_input_info
{
100 /* initialize to gpio_event_input_func */
101 struct gpio_event_info info
;
102 ktime_t debounce_time
;
106 const struct gpio_event_direct_entry
*keymap
;
111 extern int gpio_event_output_func(struct input_dev
*input_dev
,
112 struct gpio_event_info
*info
, void **data
, int func
);
113 extern int gpio_event_output_event(struct input_dev
*input_dev
,
114 struct gpio_event_info
*info
, void **data
,
115 unsigned int type
, unsigned int code
, int value
);
116 struct gpio_event_output_info
{
117 /* initialize to gpio_event_output_func and gpio_event_output_event */
118 struct gpio_event_info info
;
121 const struct gpio_event_direct_entry
*keymap
;
128 enum gpio_event_axis_flags
{
129 GPIOEAF_PRINT_UNKNOWN_DIRECTION
= 1U << 16,
130 GPIOEAF_PRINT_RAW
= 1U << 17,
131 GPIOEAF_PRINT_EVENT
= 1U << 18,
134 extern int gpio_event_axis_func(struct input_dev
*input_dev
,
135 struct gpio_event_info
*info
, void **data
, int func
);
136 struct gpio_event_axis_info
{
137 /* initialize to gpio_event_axis_func */
138 struct gpio_event_info info
;
140 uint8_t type
; /* EV_REL or EV_ABS */
142 uint16_t decoded_size
;
143 uint16_t (*map
)(struct gpio_event_axis_info
*info
, uint16_t in
);
147 #define gpio_axis_2bit_gray_map gpio_axis_4bit_gray_map
148 #define gpio_axis_3bit_gray_map gpio_axis_4bit_gray_map
149 uint16_t gpio_axis_4bit_gray_map(
150 struct gpio_event_axis_info
*info
, uint16_t in
);
151 uint16_t gpio_axis_5bit_singletrack_map(
152 struct gpio_event_axis_info
*info
, uint16_t in
);