]> bbs.cooldavid.org Git - net-next-2.6.git/blame - drivers/staging/dream/include/linux/gpio_event.h
kconfig: Have streamline_config process menuconfigs too
[net-next-2.6.git] / drivers / staging / dream / include / linux / gpio_event.h
CommitLineData
e79753ed
PM
1/* drivers/staging/dream/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
21enum {
22 GPIO_EVENT_FUNC_UNINIT = 0x0,
23 GPIO_EVENT_FUNC_INIT = 0x1,
24 GPIO_EVENT_FUNC_SUSPEND = 0x2,
25 GPIO_EVENT_FUNC_RESUME = 0x3,
26};
27struct 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 */
35};
36
37struct gpio_event_platform_data {
38 const char *name;
39 struct gpio_event_info **info;
40 size_t info_count;
41 int (*power)(const struct gpio_event_platform_data *pdata, bool on);
42};
43
44#define GPIO_EVENT_DEV_NAME "gpio-event"
45
46/* Key matrix */
47
48enum 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 |
54 GPIOKPF_DEBOUNCE,
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,
60};
61
62extern int gpio_event_matrix_func(struct input_dev *input_dev,
63 struct gpio_event_info *info, void **data, int func);
64struct 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;
71 unsigned int ninputs;
72 unsigned int noutputs;
73 /* time to wait before reading inputs after driving each output */
74 ktime_t settle_time;
75 /* time to wait before scanning the keypad a second time */
76 ktime_t debounce_delay;
77 ktime_t poll_time;
78 unsigned flags;
79};
80
81/* Directly connected inputs and outputs */
82
83enum 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,
89};
90
91struct gpio_event_direct_entry {
92 uint32_t gpio:23;
93 uint32_t code:9;
94};
95
96/* inputs */
97extern int gpio_event_input_func(struct input_dev *input_dev,
98 struct gpio_event_info *info, void **data, int func);
99struct gpio_event_input_info {
100 /* initialize to gpio_event_input_func */
101 struct gpio_event_info info;
102 ktime_t debounce_time;
103 ktime_t poll_time;
104 uint16_t flags;
105 uint16_t type;
106 const struct gpio_event_direct_entry *keymap;
107 size_t keymap_size;
108};
109
110/* outputs */
111extern int gpio_event_output_func(struct input_dev *input_dev,
112 struct gpio_event_info *info, void **data, int func);
113extern 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);
116struct gpio_event_output_info {
117 /* initialize to gpio_event_output_func and gpio_event_output_event */
118 struct gpio_event_info info;
119 uint16_t flags;
120 uint16_t type;
121 const struct gpio_event_direct_entry *keymap;
122 size_t keymap_size;
123};
124
125
126/* axes */
127
128enum gpio_event_axis_flags {
129 GPIOEAF_PRINT_UNKNOWN_DIRECTION = 1U << 16,
130 GPIOEAF_PRINT_RAW = 1U << 17,
131 GPIOEAF_PRINT_EVENT = 1U << 18,
132};
133
134extern int gpio_event_axis_func(struct input_dev *input_dev,
135 struct gpio_event_info *info, void **data, int func);
136struct gpio_event_axis_info {
137 /* initialize to gpio_event_axis_func */
138 struct gpio_event_info info;
139 uint8_t count;
140 uint8_t type; /* EV_REL or EV_ABS */
141 uint16_t code;
142 uint16_t decoded_size;
143 uint16_t (*map)(struct gpio_event_axis_info *info, uint16_t in);
144 uint32_t *gpio;
145 uint32_t flags;
146};
147#define gpio_axis_2bit_gray_map gpio_axis_4bit_gray_map
148#define gpio_axis_3bit_gray_map gpio_axis_4bit_gray_map
149uint16_t gpio_axis_4bit_gray_map(
150 struct gpio_event_axis_info *info, uint16_t in);
151uint16_t gpio_axis_5bit_singletrack_map(
152 struct gpio_event_axis_info *info, uint16_t in);
153
154#endif