Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
include
asm-generic
gpio.h
Go to the documentation of this file.
1
#ifndef _ASM_GENERIC_GPIO_H
2
#define _ASM_GENERIC_GPIO_H
3
4
#include <linux/kernel.h>
5
#include <linux/types.h>
6
#include <linux/errno.h>
7
#include <
linux/of.h
>
8
9
#ifdef CONFIG_GPIOLIB
10
11
#include <linux/compiler.h>
12
13
/* Platforms may implement their GPIO interface with library code,
14
* at a small performance cost for non-inlined operations and some
15
* extra memory (for code and for per-GPIO table entries).
16
*
17
* While the GPIO programming interface defines valid GPIO numbers
18
* to be in the range 0..MAX_INT, this library restricts them to the
19
* smaller range 0..ARCH_NR_GPIOS-1.
20
*
21
* ARCH_NR_GPIOS is somewhat arbitrary; it usually reflects the sum of
22
* builtin/SoC GPIOs plus a number of GPIOs on expanders; the latter is
23
* actually an estimate of a board-specific value.
24
*/
25
26
#ifndef ARCH_NR_GPIOS
27
#define ARCH_NR_GPIOS 256
28
#endif
29
30
/*
31
* "valid" GPIO numbers are nonnegative and may be passed to
32
* setup routines like gpio_request(). only some valid numbers
33
* can successfully be requested and used.
34
*
35
* Invalid GPIO numbers are useful for indicating no-such-GPIO in
36
* platform data and other tables.
37
*/
38
39
static
inline
bool
gpio_is_valid(
int
number)
40
{
41
return
number >= 0 && number <
ARCH_NR_GPIOS
;
42
}
43
44
struct
device
;
45
struct
gpio
;
46
struct
seq_file
;
47
struct
module
;
48
struct
device_node
;
49
94
struct
gpio_chip {
95
const
char
*
label
;
96
struct
device
*
dev
;
97
struct
module
*
owner
;
98
99
int
(*
request
)(
struct
gpio_chip *
chip
,
100
unsigned
offset
);
101
void
(*
free
)(
struct
gpio_chip *
chip
,
102
unsigned
offset
);
103
104
int
(*direction_input)(
struct
gpio_chip *
chip
,
105
unsigned
offset
);
106
int
(*
get
)(
struct
gpio_chip *
chip
,
107
unsigned
offset
);
108
int
(*direction_output)(
struct
gpio_chip *
chip
,
109
unsigned
offset
,
int
value
);
110
int
(*set_debounce)(
struct
gpio_chip *
chip
,
111
unsigned
offset
,
unsigned
debounce);
112
113
void
(*
set
)(
struct
gpio_chip *
chip
,
114
unsigned
offset
,
int
value
);
115
116
int
(*to_irq)(
struct
gpio_chip *
chip
,
117
unsigned
offset
);
118
119
void
(*dbg_show)(
struct
seq_file
*
s
,
120
struct
gpio_chip *
chip
);
121
int
base
;
122
u16
ngpio;
123
const
char
*
const
*names;
124
unsigned
can_sleep:1;
125
unsigned
exported:1;
126
127
#if defined(CONFIG_OF_GPIO)
128
/*
129
* If CONFIG_OF is enabled, then all GPIO controllers described in the
130
* device tree automatically may have an OF translation
131
*/
132
struct
device_node
*of_node;
133
int
of_gpio_n_cells;
134
int
(*of_xlate)(
struct
gpio_chip *
gc
,
135
const
struct
of_phandle_args
*gpiospec,
u32
*
flags
);
136
#endif
137
};
138
139
extern
const
char
*
gpiochip_is_requested
(
struct
gpio_chip *
chip
,
140
unsigned
offset
);
141
extern
struct
gpio_chip *
gpio_to_chip
(
unsigned
gpio
);
142
extern
int
__must_check
gpiochip_reserve
(
int
start
,
int
ngpio);
143
144
/* add/remove chips */
145
extern
int
gpiochip_add
(
struct
gpio_chip *
chip
);
146
extern
int
__must_check
gpiochip_remove
(
struct
gpio_chip *
chip
);
147
extern
struct
gpio_chip *
gpiochip_find
(
void
*
data
,
148
int
(*
match
)(
struct
gpio_chip *
chip
,
149
void
*data));
150
151
152
/* Always use the library code for GPIO management calls,
153
* or when sleeping may be involved.
154
*/
155
extern
int
gpio_request
(
unsigned
gpio
,
const
char
*
label
);
156
extern
void
gpio_free
(
unsigned
gpio
);
157
158
extern
int
gpio_direction_input
(
unsigned
gpio
);
159
extern
int
gpio_direction_output
(
unsigned
gpio
,
int
value
);
160
161
extern
int
gpio_set_debounce
(
unsigned
gpio
,
unsigned
debounce);
162
163
extern
int
gpio_get_value_cansleep
(
unsigned
gpio
);
164
extern
void
gpio_set_value_cansleep
(
unsigned
gpio
,
int
value
);
165
166
167
/* A platform's <asm/gpio.h> code may want to inline the I/O calls when
168
* the GPIO is constant and refers to some always-present controller,
169
* giving direct access to chip registers and tight bitbanging loops.
170
*/
171
extern
int
__gpio_get_value
(
unsigned
gpio
);
172
extern
void
__gpio_set_value
(
unsigned
gpio
,
int
value
);
173
174
extern
int
__gpio_cansleep
(
unsigned
gpio
);
175
176
extern
int
__gpio_to_irq
(
unsigned
gpio
);
177
178
extern
int
gpio_request_one
(
unsigned
gpio
,
unsigned
long
flags
,
const
char
*
label
);
179
extern
int
gpio_request_array
(
const
struct
gpio
*array,
size_t
num);
180
extern
void
gpio_free_array
(
const
struct
gpio
*array,
size_t
num);
181
182
/* bindings for managed devices that want to request gpios */
183
int
devm_gpio_request
(
struct
device
*
dev
,
unsigned
gpio
,
const
char
*
label
);
184
int
devm_gpio_request_one
(
struct
device
*
dev
,
unsigned
gpio
,
185
unsigned
long
flags
,
const
char
*
label
);
186
void
devm_gpio_free
(
struct
device
*
dev
,
unsigned
int
gpio
);
187
188
#ifdef CONFIG_GPIO_SYSFS
189
190
/*
191
* A sysfs interface can be exported by individual drivers if they want,
192
* but more typically is configured entirely from userspace.
193
*/
194
extern
int
gpio_export(
unsigned
gpio
,
bool
direction_may_change);
195
extern
int
gpio_export_link(
struct
device
*
dev
,
const
char
*
name
,
196
unsigned
gpio
);
197
extern
int
gpio_sysfs_set_active_low(
unsigned
gpio
,
int
value
);
198
extern
void
gpio_unexport(
unsigned
gpio
);
199
200
#endif
/* CONFIG_GPIO_SYSFS */
201
202
#else
/* !CONFIG_GPIOLIB */
203
204
static
inline
bool
gpio_is_valid(
int
number)
205
{
206
/* only non-negative numbers are valid */
207
return
number >= 0;
208
}
209
210
/* platforms that don't directly support access to GPIOs through I2C, SPI,
211
* or other blocking infrastructure can use these wrappers.
212
*/
213
214
static
inline
int
gpio_cansleep
(
unsigned
gpio
)
215
{
216
return
0;
217
}
218
219
static
inline
int
gpio_get_value_cansleep
(
unsigned
gpio
)
220
{
221
might_sleep
();
222
return
__gpio_get_value
(gpio);
223
}
224
225
static
inline
void
gpio_set_value_cansleep
(
unsigned
gpio
,
int
value
)
226
{
227
might_sleep
();
228
__gpio_set_value
(gpio, value);
229
}
230
231
#endif
/* !CONFIG_GPIOLIB */
232
233
#ifndef CONFIG_GPIO_SYSFS
234
235
struct
device
;
236
237
/* sysfs support is only available with gpiolib, where it's optional */
238
239
static
inline
int
gpio_export(
unsigned
gpio
,
bool
direction_may_change)
240
{
241
return
-
ENOSYS
;
242
}
243
244
static
inline
int
gpio_export_link(
struct
device
*
dev
,
const
char
*
name
,
245
unsigned
gpio
)
246
{
247
return
-
ENOSYS
;
248
}
249
250
static
inline
int
gpio_sysfs_set_active_low(
unsigned
gpio
,
int
value
)
251
{
252
return
-
ENOSYS
;
253
}
254
255
static
inline
void
gpio_unexport(
unsigned
gpio
)
256
{
257
}
258
#endif
/* CONFIG_GPIO_SYSFS */
259
260
#endif
/* _ASM_GENERIC_GPIO_H */
Generated on Thu Jan 10 2013 12:49:41 for Linux Kernel by
1.8.2