xref: /aosp_15_r20/external/kernel-headers/original/uapi/linux/gpio.h (revision f80ad8b4341604f5951dab671d41019a6d7087ce)
1*f80ad8b4SAndroid Build Coastguard Worker /* SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note */
2*f80ad8b4SAndroid Build Coastguard Worker /*
3*f80ad8b4SAndroid Build Coastguard Worker  * <linux/gpio.h> - userspace ABI for the GPIO character devices
4*f80ad8b4SAndroid Build Coastguard Worker  *
5*f80ad8b4SAndroid Build Coastguard Worker  * Copyright (C) 2016 Linus Walleij
6*f80ad8b4SAndroid Build Coastguard Worker  *
7*f80ad8b4SAndroid Build Coastguard Worker  * This program is free software; you can redistribute it and/or modify it
8*f80ad8b4SAndroid Build Coastguard Worker  * under the terms of the GNU General Public License version 2 as published by
9*f80ad8b4SAndroid Build Coastguard Worker  * the Free Software Foundation.
10*f80ad8b4SAndroid Build Coastguard Worker  */
11*f80ad8b4SAndroid Build Coastguard Worker #ifndef _UAPI_GPIO_H_
12*f80ad8b4SAndroid Build Coastguard Worker #define _UAPI_GPIO_H_
13*f80ad8b4SAndroid Build Coastguard Worker 
14*f80ad8b4SAndroid Build Coastguard Worker #include <linux/const.h>
15*f80ad8b4SAndroid Build Coastguard Worker #include <linux/ioctl.h>
16*f80ad8b4SAndroid Build Coastguard Worker #include <linux/types.h>
17*f80ad8b4SAndroid Build Coastguard Worker 
18*f80ad8b4SAndroid Build Coastguard Worker /*
19*f80ad8b4SAndroid Build Coastguard Worker  * The maximum size of name and label arrays.
20*f80ad8b4SAndroid Build Coastguard Worker  *
21*f80ad8b4SAndroid Build Coastguard Worker  * Must be a multiple of 8 to ensure 32/64-bit alignment of structs.
22*f80ad8b4SAndroid Build Coastguard Worker  */
23*f80ad8b4SAndroid Build Coastguard Worker #define GPIO_MAX_NAME_SIZE 32
24*f80ad8b4SAndroid Build Coastguard Worker 
25*f80ad8b4SAndroid Build Coastguard Worker /**
26*f80ad8b4SAndroid Build Coastguard Worker  * struct gpiochip_info - Information about a certain GPIO chip
27*f80ad8b4SAndroid Build Coastguard Worker  * @name: the Linux kernel name of this GPIO chip
28*f80ad8b4SAndroid Build Coastguard Worker  * @label: a functional name for this GPIO chip, such as a product
29*f80ad8b4SAndroid Build Coastguard Worker  * number, may be empty (i.e. label[0] == '\0')
30*f80ad8b4SAndroid Build Coastguard Worker  * @lines: number of GPIO lines on this chip
31*f80ad8b4SAndroid Build Coastguard Worker  */
32*f80ad8b4SAndroid Build Coastguard Worker struct gpiochip_info {
33*f80ad8b4SAndroid Build Coastguard Worker 	char name[GPIO_MAX_NAME_SIZE];
34*f80ad8b4SAndroid Build Coastguard Worker 	char label[GPIO_MAX_NAME_SIZE];
35*f80ad8b4SAndroid Build Coastguard Worker 	__u32 lines;
36*f80ad8b4SAndroid Build Coastguard Worker };
37*f80ad8b4SAndroid Build Coastguard Worker 
38*f80ad8b4SAndroid Build Coastguard Worker /*
39*f80ad8b4SAndroid Build Coastguard Worker  * Maximum number of requested lines.
40*f80ad8b4SAndroid Build Coastguard Worker  *
41*f80ad8b4SAndroid Build Coastguard Worker  * Must be no greater than 64, as bitmaps are restricted here to 64-bits
42*f80ad8b4SAndroid Build Coastguard Worker  * for simplicity, and a multiple of 2 to ensure 32/64-bit alignment of
43*f80ad8b4SAndroid Build Coastguard Worker  * structs.
44*f80ad8b4SAndroid Build Coastguard Worker  */
45*f80ad8b4SAndroid Build Coastguard Worker #define GPIO_V2_LINES_MAX 64
46*f80ad8b4SAndroid Build Coastguard Worker 
47*f80ad8b4SAndroid Build Coastguard Worker /*
48*f80ad8b4SAndroid Build Coastguard Worker  * The maximum number of configuration attributes associated with a line
49*f80ad8b4SAndroid Build Coastguard Worker  * request.
50*f80ad8b4SAndroid Build Coastguard Worker  */
51*f80ad8b4SAndroid Build Coastguard Worker #define GPIO_V2_LINE_NUM_ATTRS_MAX 10
52*f80ad8b4SAndroid Build Coastguard Worker 
53*f80ad8b4SAndroid Build Coastguard Worker /**
54*f80ad8b4SAndroid Build Coastguard Worker  * enum gpio_v2_line_flag - &struct gpio_v2_line_attribute.flags values
55*f80ad8b4SAndroid Build Coastguard Worker  * @GPIO_V2_LINE_FLAG_USED: line is not available for request
56*f80ad8b4SAndroid Build Coastguard Worker  * @GPIO_V2_LINE_FLAG_ACTIVE_LOW: line active state is physical low
57*f80ad8b4SAndroid Build Coastguard Worker  * @GPIO_V2_LINE_FLAG_INPUT: line is an input
58*f80ad8b4SAndroid Build Coastguard Worker  * @GPIO_V2_LINE_FLAG_OUTPUT: line is an output
59*f80ad8b4SAndroid Build Coastguard Worker  * @GPIO_V2_LINE_FLAG_EDGE_RISING: line detects rising (inactive to active)
60*f80ad8b4SAndroid Build Coastguard Worker  * edges
61*f80ad8b4SAndroid Build Coastguard Worker  * @GPIO_V2_LINE_FLAG_EDGE_FALLING: line detects falling (active to
62*f80ad8b4SAndroid Build Coastguard Worker  * inactive) edges
63*f80ad8b4SAndroid Build Coastguard Worker  * @GPIO_V2_LINE_FLAG_OPEN_DRAIN: line is an open drain output
64*f80ad8b4SAndroid Build Coastguard Worker  * @GPIO_V2_LINE_FLAG_OPEN_SOURCE: line is an open source output
65*f80ad8b4SAndroid Build Coastguard Worker  * @GPIO_V2_LINE_FLAG_BIAS_PULL_UP: line has pull-up bias enabled
66*f80ad8b4SAndroid Build Coastguard Worker  * @GPIO_V2_LINE_FLAG_BIAS_PULL_DOWN: line has pull-down bias enabled
67*f80ad8b4SAndroid Build Coastguard Worker  * @GPIO_V2_LINE_FLAG_BIAS_DISABLED: line has bias disabled
68*f80ad8b4SAndroid Build Coastguard Worker  * @GPIO_V2_LINE_FLAG_EVENT_CLOCK_REALTIME: line events contain REALTIME timestamps
69*f80ad8b4SAndroid Build Coastguard Worker  * @GPIO_V2_LINE_FLAG_EVENT_CLOCK_HTE: line events contain timestamps from
70*f80ad8b4SAndroid Build Coastguard Worker  * the hardware timestamping engine (HTE) subsystem
71*f80ad8b4SAndroid Build Coastguard Worker  */
72*f80ad8b4SAndroid Build Coastguard Worker enum gpio_v2_line_flag {
73*f80ad8b4SAndroid Build Coastguard Worker 	GPIO_V2_LINE_FLAG_USED			= _BITULL(0),
74*f80ad8b4SAndroid Build Coastguard Worker 	GPIO_V2_LINE_FLAG_ACTIVE_LOW		= _BITULL(1),
75*f80ad8b4SAndroid Build Coastguard Worker 	GPIO_V2_LINE_FLAG_INPUT			= _BITULL(2),
76*f80ad8b4SAndroid Build Coastguard Worker 	GPIO_V2_LINE_FLAG_OUTPUT		= _BITULL(3),
77*f80ad8b4SAndroid Build Coastguard Worker 	GPIO_V2_LINE_FLAG_EDGE_RISING		= _BITULL(4),
78*f80ad8b4SAndroid Build Coastguard Worker 	GPIO_V2_LINE_FLAG_EDGE_FALLING		= _BITULL(5),
79*f80ad8b4SAndroid Build Coastguard Worker 	GPIO_V2_LINE_FLAG_OPEN_DRAIN		= _BITULL(6),
80*f80ad8b4SAndroid Build Coastguard Worker 	GPIO_V2_LINE_FLAG_OPEN_SOURCE		= _BITULL(7),
81*f80ad8b4SAndroid Build Coastguard Worker 	GPIO_V2_LINE_FLAG_BIAS_PULL_UP		= _BITULL(8),
82*f80ad8b4SAndroid Build Coastguard Worker 	GPIO_V2_LINE_FLAG_BIAS_PULL_DOWN	= _BITULL(9),
83*f80ad8b4SAndroid Build Coastguard Worker 	GPIO_V2_LINE_FLAG_BIAS_DISABLED		= _BITULL(10),
84*f80ad8b4SAndroid Build Coastguard Worker 	GPIO_V2_LINE_FLAG_EVENT_CLOCK_REALTIME	= _BITULL(11),
85*f80ad8b4SAndroid Build Coastguard Worker 	GPIO_V2_LINE_FLAG_EVENT_CLOCK_HTE	= _BITULL(12),
86*f80ad8b4SAndroid Build Coastguard Worker };
87*f80ad8b4SAndroid Build Coastguard Worker 
88*f80ad8b4SAndroid Build Coastguard Worker /**
89*f80ad8b4SAndroid Build Coastguard Worker  * struct gpio_v2_line_values - Values of GPIO lines
90*f80ad8b4SAndroid Build Coastguard Worker  * @bits: a bitmap containing the value of the lines, set to 1 for active
91*f80ad8b4SAndroid Build Coastguard Worker  * and 0 for inactive
92*f80ad8b4SAndroid Build Coastguard Worker  * @mask: a bitmap identifying the lines to get or set, with each bit
93*f80ad8b4SAndroid Build Coastguard Worker  * number corresponding to the index into &struct
94*f80ad8b4SAndroid Build Coastguard Worker  * gpio_v2_line_request.offsets
95*f80ad8b4SAndroid Build Coastguard Worker  */
96*f80ad8b4SAndroid Build Coastguard Worker struct gpio_v2_line_values {
97*f80ad8b4SAndroid Build Coastguard Worker 	__aligned_u64 bits;
98*f80ad8b4SAndroid Build Coastguard Worker 	__aligned_u64 mask;
99*f80ad8b4SAndroid Build Coastguard Worker };
100*f80ad8b4SAndroid Build Coastguard Worker 
101*f80ad8b4SAndroid Build Coastguard Worker /**
102*f80ad8b4SAndroid Build Coastguard Worker  * enum gpio_v2_line_attr_id - &struct gpio_v2_line_attribute.id values
103*f80ad8b4SAndroid Build Coastguard Worker  * identifying which field of the attribute union is in use.
104*f80ad8b4SAndroid Build Coastguard Worker  * @GPIO_V2_LINE_ATTR_ID_FLAGS: flags field is in use
105*f80ad8b4SAndroid Build Coastguard Worker  * @GPIO_V2_LINE_ATTR_ID_OUTPUT_VALUES: values field is in use
106*f80ad8b4SAndroid Build Coastguard Worker  * @GPIO_V2_LINE_ATTR_ID_DEBOUNCE: debounce_period_us field is in use
107*f80ad8b4SAndroid Build Coastguard Worker  */
108*f80ad8b4SAndroid Build Coastguard Worker enum gpio_v2_line_attr_id {
109*f80ad8b4SAndroid Build Coastguard Worker 	GPIO_V2_LINE_ATTR_ID_FLAGS		= 1,
110*f80ad8b4SAndroid Build Coastguard Worker 	GPIO_V2_LINE_ATTR_ID_OUTPUT_VALUES	= 2,
111*f80ad8b4SAndroid Build Coastguard Worker 	GPIO_V2_LINE_ATTR_ID_DEBOUNCE		= 3,
112*f80ad8b4SAndroid Build Coastguard Worker };
113*f80ad8b4SAndroid Build Coastguard Worker 
114*f80ad8b4SAndroid Build Coastguard Worker /**
115*f80ad8b4SAndroid Build Coastguard Worker  * struct gpio_v2_line_attribute - a configurable attribute of a line
116*f80ad8b4SAndroid Build Coastguard Worker  * @id: attribute identifier with value from &enum gpio_v2_line_attr_id
117*f80ad8b4SAndroid Build Coastguard Worker  * @padding: reserved for future use and must be zero filled
118*f80ad8b4SAndroid Build Coastguard Worker  * @flags: if id is %GPIO_V2_LINE_ATTR_ID_FLAGS, the flags for the GPIO
119*f80ad8b4SAndroid Build Coastguard Worker  * line, with values from &enum gpio_v2_line_flag, such as
120*f80ad8b4SAndroid Build Coastguard Worker  * %GPIO_V2_LINE_FLAG_ACTIVE_LOW, %GPIO_V2_LINE_FLAG_OUTPUT etc, added
121*f80ad8b4SAndroid Build Coastguard Worker  * together.  This overrides the default flags contained in the &struct
122*f80ad8b4SAndroid Build Coastguard Worker  * gpio_v2_line_config for the associated line.
123*f80ad8b4SAndroid Build Coastguard Worker  * @values: if id is %GPIO_V2_LINE_ATTR_ID_OUTPUT_VALUES, a bitmap
124*f80ad8b4SAndroid Build Coastguard Worker  * containing the values to which the lines will be set, with each bit
125*f80ad8b4SAndroid Build Coastguard Worker  * number corresponding to the index into &struct
126*f80ad8b4SAndroid Build Coastguard Worker  * gpio_v2_line_request.offsets
127*f80ad8b4SAndroid Build Coastguard Worker  * @debounce_period_us: if id is %GPIO_V2_LINE_ATTR_ID_DEBOUNCE, the
128*f80ad8b4SAndroid Build Coastguard Worker  * desired debounce period, in microseconds
129*f80ad8b4SAndroid Build Coastguard Worker  */
130*f80ad8b4SAndroid Build Coastguard Worker struct gpio_v2_line_attribute {
131*f80ad8b4SAndroid Build Coastguard Worker 	__u32 id;
132*f80ad8b4SAndroid Build Coastguard Worker 	__u32 padding;
133*f80ad8b4SAndroid Build Coastguard Worker 	union {
134*f80ad8b4SAndroid Build Coastguard Worker 		__aligned_u64 flags;
135*f80ad8b4SAndroid Build Coastguard Worker 		__aligned_u64 values;
136*f80ad8b4SAndroid Build Coastguard Worker 		__u32 debounce_period_us;
137*f80ad8b4SAndroid Build Coastguard Worker 	};
138*f80ad8b4SAndroid Build Coastguard Worker };
139*f80ad8b4SAndroid Build Coastguard Worker 
140*f80ad8b4SAndroid Build Coastguard Worker /**
141*f80ad8b4SAndroid Build Coastguard Worker  * struct gpio_v2_line_config_attribute - a configuration attribute
142*f80ad8b4SAndroid Build Coastguard Worker  * associated with one or more of the requested lines.
143*f80ad8b4SAndroid Build Coastguard Worker  * @attr: the configurable attribute
144*f80ad8b4SAndroid Build Coastguard Worker  * @mask: a bitmap identifying the lines to which the attribute applies,
145*f80ad8b4SAndroid Build Coastguard Worker  * with each bit number corresponding to the index into &struct
146*f80ad8b4SAndroid Build Coastguard Worker  * gpio_v2_line_request.offsets
147*f80ad8b4SAndroid Build Coastguard Worker  */
148*f80ad8b4SAndroid Build Coastguard Worker struct gpio_v2_line_config_attribute {
149*f80ad8b4SAndroid Build Coastguard Worker 	struct gpio_v2_line_attribute attr;
150*f80ad8b4SAndroid Build Coastguard Worker 	__aligned_u64 mask;
151*f80ad8b4SAndroid Build Coastguard Worker };
152*f80ad8b4SAndroid Build Coastguard Worker 
153*f80ad8b4SAndroid Build Coastguard Worker /**
154*f80ad8b4SAndroid Build Coastguard Worker  * struct gpio_v2_line_config - Configuration for GPIO lines
155*f80ad8b4SAndroid Build Coastguard Worker  * @flags: flags for the GPIO lines, with values from &enum
156*f80ad8b4SAndroid Build Coastguard Worker  * gpio_v2_line_flag, such as %GPIO_V2_LINE_FLAG_ACTIVE_LOW,
157*f80ad8b4SAndroid Build Coastguard Worker  * %GPIO_V2_LINE_FLAG_OUTPUT etc, added together.  This is the default for
158*f80ad8b4SAndroid Build Coastguard Worker  * all requested lines but may be overridden for particular lines using
159*f80ad8b4SAndroid Build Coastguard Worker  * @attrs.
160*f80ad8b4SAndroid Build Coastguard Worker  * @num_attrs: the number of attributes in @attrs
161*f80ad8b4SAndroid Build Coastguard Worker  * @padding: reserved for future use and must be zero filled
162*f80ad8b4SAndroid Build Coastguard Worker  * @attrs: the configuration attributes associated with the requested
163*f80ad8b4SAndroid Build Coastguard Worker  * lines.  Any attribute should only be associated with a particular line
164*f80ad8b4SAndroid Build Coastguard Worker  * once.  If an attribute is associated with a line multiple times then the
165*f80ad8b4SAndroid Build Coastguard Worker  * first occurrence (i.e. lowest index) has precedence.
166*f80ad8b4SAndroid Build Coastguard Worker  */
167*f80ad8b4SAndroid Build Coastguard Worker struct gpio_v2_line_config {
168*f80ad8b4SAndroid Build Coastguard Worker 	__aligned_u64 flags;
169*f80ad8b4SAndroid Build Coastguard Worker 	__u32 num_attrs;
170*f80ad8b4SAndroid Build Coastguard Worker 	/* Pad to fill implicit padding and reserve space for future use. */
171*f80ad8b4SAndroid Build Coastguard Worker 	__u32 padding[5];
172*f80ad8b4SAndroid Build Coastguard Worker 	struct gpio_v2_line_config_attribute attrs[GPIO_V2_LINE_NUM_ATTRS_MAX];
173*f80ad8b4SAndroid Build Coastguard Worker };
174*f80ad8b4SAndroid Build Coastguard Worker 
175*f80ad8b4SAndroid Build Coastguard Worker /**
176*f80ad8b4SAndroid Build Coastguard Worker  * struct gpio_v2_line_request - Information about a request for GPIO lines
177*f80ad8b4SAndroid Build Coastguard Worker  * @offsets: an array of desired lines, specified by offset index for the
178*f80ad8b4SAndroid Build Coastguard Worker  * associated GPIO chip
179*f80ad8b4SAndroid Build Coastguard Worker  * @consumer: a desired consumer label for the selected GPIO lines such as
180*f80ad8b4SAndroid Build Coastguard Worker  * "my-bitbanged-relay"
181*f80ad8b4SAndroid Build Coastguard Worker  * @config: requested configuration for the lines
182*f80ad8b4SAndroid Build Coastguard Worker  * @num_lines: number of lines requested in this request, i.e. the number
183*f80ad8b4SAndroid Build Coastguard Worker  * of valid fields in the %GPIO_V2_LINES_MAX sized arrays, set to 1 to
184*f80ad8b4SAndroid Build Coastguard Worker  * request a single line
185*f80ad8b4SAndroid Build Coastguard Worker  * @event_buffer_size: a suggested minimum number of line events that the
186*f80ad8b4SAndroid Build Coastguard Worker  * kernel should buffer.  This is only relevant if edge detection is
187*f80ad8b4SAndroid Build Coastguard Worker  * enabled in the configuration. Note that this is only a suggested value
188*f80ad8b4SAndroid Build Coastguard Worker  * and the kernel may allocate a larger buffer or cap the size of the
189*f80ad8b4SAndroid Build Coastguard Worker  * buffer. If this field is zero then the buffer size defaults to a minimum
190*f80ad8b4SAndroid Build Coastguard Worker  * of @num_lines * 16.
191*f80ad8b4SAndroid Build Coastguard Worker  * @padding: reserved for future use and must be zero filled
192*f80ad8b4SAndroid Build Coastguard Worker  * @fd: after a successful %GPIO_V2_GET_LINE_IOCTL operation, contains
193*f80ad8b4SAndroid Build Coastguard Worker  * a valid anonymous file descriptor representing the request
194*f80ad8b4SAndroid Build Coastguard Worker  */
195*f80ad8b4SAndroid Build Coastguard Worker struct gpio_v2_line_request {
196*f80ad8b4SAndroid Build Coastguard Worker 	__u32 offsets[GPIO_V2_LINES_MAX];
197*f80ad8b4SAndroid Build Coastguard Worker 	char consumer[GPIO_MAX_NAME_SIZE];
198*f80ad8b4SAndroid Build Coastguard Worker 	struct gpio_v2_line_config config;
199*f80ad8b4SAndroid Build Coastguard Worker 	__u32 num_lines;
200*f80ad8b4SAndroid Build Coastguard Worker 	__u32 event_buffer_size;
201*f80ad8b4SAndroid Build Coastguard Worker 	/* Pad to fill implicit padding and reserve space for future use. */
202*f80ad8b4SAndroid Build Coastguard Worker 	__u32 padding[5];
203*f80ad8b4SAndroid Build Coastguard Worker 	__s32 fd;
204*f80ad8b4SAndroid Build Coastguard Worker };
205*f80ad8b4SAndroid Build Coastguard Worker 
206*f80ad8b4SAndroid Build Coastguard Worker /**
207*f80ad8b4SAndroid Build Coastguard Worker  * struct gpio_v2_line_info - Information about a certain GPIO line
208*f80ad8b4SAndroid Build Coastguard Worker  * @name: the name of this GPIO line, such as the output pin of the line on
209*f80ad8b4SAndroid Build Coastguard Worker  * the chip, a rail or a pin header name on a board, as specified by the
210*f80ad8b4SAndroid Build Coastguard Worker  * GPIO chip, may be empty (i.e. name[0] == '\0')
211*f80ad8b4SAndroid Build Coastguard Worker  * @consumer: a functional name for the consumer of this GPIO line as set
212*f80ad8b4SAndroid Build Coastguard Worker  * by whatever is using it, will be empty if there is no current user but
213*f80ad8b4SAndroid Build Coastguard Worker  * may also be empty if the consumer doesn't set this up
214*f80ad8b4SAndroid Build Coastguard Worker  * @offset: the local offset on this GPIO chip, fill this in when
215*f80ad8b4SAndroid Build Coastguard Worker  * requesting the line information from the kernel
216*f80ad8b4SAndroid Build Coastguard Worker  * @num_attrs: the number of attributes in @attrs
217*f80ad8b4SAndroid Build Coastguard Worker  * @flags: flags for this GPIO line, with values from &enum
218*f80ad8b4SAndroid Build Coastguard Worker  * gpio_v2_line_flag, such as %GPIO_V2_LINE_FLAG_ACTIVE_LOW,
219*f80ad8b4SAndroid Build Coastguard Worker  * %GPIO_V2_LINE_FLAG_OUTPUT etc, added together
220*f80ad8b4SAndroid Build Coastguard Worker  * @attrs: the configuration attributes associated with the line
221*f80ad8b4SAndroid Build Coastguard Worker  * @padding: reserved for future use
222*f80ad8b4SAndroid Build Coastguard Worker  */
223*f80ad8b4SAndroid Build Coastguard Worker struct gpio_v2_line_info {
224*f80ad8b4SAndroid Build Coastguard Worker 	char name[GPIO_MAX_NAME_SIZE];
225*f80ad8b4SAndroid Build Coastguard Worker 	char consumer[GPIO_MAX_NAME_SIZE];
226*f80ad8b4SAndroid Build Coastguard Worker 	__u32 offset;
227*f80ad8b4SAndroid Build Coastguard Worker 	__u32 num_attrs;
228*f80ad8b4SAndroid Build Coastguard Worker 	__aligned_u64 flags;
229*f80ad8b4SAndroid Build Coastguard Worker 	struct gpio_v2_line_attribute attrs[GPIO_V2_LINE_NUM_ATTRS_MAX];
230*f80ad8b4SAndroid Build Coastguard Worker 	/* Space reserved for future use. */
231*f80ad8b4SAndroid Build Coastguard Worker 	__u32 padding[4];
232*f80ad8b4SAndroid Build Coastguard Worker };
233*f80ad8b4SAndroid Build Coastguard Worker 
234*f80ad8b4SAndroid Build Coastguard Worker /**
235*f80ad8b4SAndroid Build Coastguard Worker  * enum gpio_v2_line_changed_type - &struct gpio_v2_line_changed.event_type
236*f80ad8b4SAndroid Build Coastguard Worker  * values
237*f80ad8b4SAndroid Build Coastguard Worker  * @GPIO_V2_LINE_CHANGED_REQUESTED: line has been requested
238*f80ad8b4SAndroid Build Coastguard Worker  * @GPIO_V2_LINE_CHANGED_RELEASED: line has been released
239*f80ad8b4SAndroid Build Coastguard Worker  * @GPIO_V2_LINE_CHANGED_CONFIG: line has been reconfigured
240*f80ad8b4SAndroid Build Coastguard Worker  */
241*f80ad8b4SAndroid Build Coastguard Worker enum gpio_v2_line_changed_type {
242*f80ad8b4SAndroid Build Coastguard Worker 	GPIO_V2_LINE_CHANGED_REQUESTED	= 1,
243*f80ad8b4SAndroid Build Coastguard Worker 	GPIO_V2_LINE_CHANGED_RELEASED	= 2,
244*f80ad8b4SAndroid Build Coastguard Worker 	GPIO_V2_LINE_CHANGED_CONFIG	= 3,
245*f80ad8b4SAndroid Build Coastguard Worker };
246*f80ad8b4SAndroid Build Coastguard Worker 
247*f80ad8b4SAndroid Build Coastguard Worker /**
248*f80ad8b4SAndroid Build Coastguard Worker  * struct gpio_v2_line_info_changed - Information about a change in status
249*f80ad8b4SAndroid Build Coastguard Worker  * of a GPIO line
250*f80ad8b4SAndroid Build Coastguard Worker  * @info: updated line information
251*f80ad8b4SAndroid Build Coastguard Worker  * @timestamp_ns: estimate of time of status change occurrence, in nanoseconds
252*f80ad8b4SAndroid Build Coastguard Worker  * @event_type: the type of change with a value from &enum
253*f80ad8b4SAndroid Build Coastguard Worker  * gpio_v2_line_changed_type
254*f80ad8b4SAndroid Build Coastguard Worker  * @padding: reserved for future use
255*f80ad8b4SAndroid Build Coastguard Worker  */
256*f80ad8b4SAndroid Build Coastguard Worker struct gpio_v2_line_info_changed {
257*f80ad8b4SAndroid Build Coastguard Worker 	struct gpio_v2_line_info info;
258*f80ad8b4SAndroid Build Coastguard Worker 	__aligned_u64 timestamp_ns;
259*f80ad8b4SAndroid Build Coastguard Worker 	__u32 event_type;
260*f80ad8b4SAndroid Build Coastguard Worker 	/* Pad struct to 64-bit boundary and reserve space for future use. */
261*f80ad8b4SAndroid Build Coastguard Worker 	__u32 padding[5];
262*f80ad8b4SAndroid Build Coastguard Worker };
263*f80ad8b4SAndroid Build Coastguard Worker 
264*f80ad8b4SAndroid Build Coastguard Worker /**
265*f80ad8b4SAndroid Build Coastguard Worker  * enum gpio_v2_line_event_id - &struct gpio_v2_line_event.id values
266*f80ad8b4SAndroid Build Coastguard Worker  * @GPIO_V2_LINE_EVENT_RISING_EDGE: event triggered by a rising edge
267*f80ad8b4SAndroid Build Coastguard Worker  * @GPIO_V2_LINE_EVENT_FALLING_EDGE: event triggered by a falling edge
268*f80ad8b4SAndroid Build Coastguard Worker  */
269*f80ad8b4SAndroid Build Coastguard Worker enum gpio_v2_line_event_id {
270*f80ad8b4SAndroid Build Coastguard Worker 	GPIO_V2_LINE_EVENT_RISING_EDGE	= 1,
271*f80ad8b4SAndroid Build Coastguard Worker 	GPIO_V2_LINE_EVENT_FALLING_EDGE	= 2,
272*f80ad8b4SAndroid Build Coastguard Worker };
273*f80ad8b4SAndroid Build Coastguard Worker 
274*f80ad8b4SAndroid Build Coastguard Worker /**
275*f80ad8b4SAndroid Build Coastguard Worker  * struct gpio_v2_line_event - The actual event being pushed to userspace
276*f80ad8b4SAndroid Build Coastguard Worker  * @timestamp_ns: best estimate of time of event occurrence, in nanoseconds
277*f80ad8b4SAndroid Build Coastguard Worker  * @id: event identifier with value from &enum gpio_v2_line_event_id
278*f80ad8b4SAndroid Build Coastguard Worker  * @offset: the offset of the line that triggered the event
279*f80ad8b4SAndroid Build Coastguard Worker  * @seqno: the sequence number for this event in the sequence of events for
280*f80ad8b4SAndroid Build Coastguard Worker  * all the lines in this line request
281*f80ad8b4SAndroid Build Coastguard Worker  * @line_seqno: the sequence number for this event in the sequence of
282*f80ad8b4SAndroid Build Coastguard Worker  * events on this particular line
283*f80ad8b4SAndroid Build Coastguard Worker  * @padding: reserved for future use
284*f80ad8b4SAndroid Build Coastguard Worker  *
285*f80ad8b4SAndroid Build Coastguard Worker  * By default the @timestamp_ns is read from %CLOCK_MONOTONIC and is
286*f80ad8b4SAndroid Build Coastguard Worker  * intended to allow the accurate measurement of the time between events.
287*f80ad8b4SAndroid Build Coastguard Worker  * It does not provide the wall-clock time.
288*f80ad8b4SAndroid Build Coastguard Worker  *
289*f80ad8b4SAndroid Build Coastguard Worker  * If the %GPIO_V2_LINE_FLAG_EVENT_CLOCK_REALTIME flag is set then the
290*f80ad8b4SAndroid Build Coastguard Worker  * @timestamp_ns is read from %CLOCK_REALTIME.
291*f80ad8b4SAndroid Build Coastguard Worker  *
292*f80ad8b4SAndroid Build Coastguard Worker  * If the %GPIO_V2_LINE_FLAG_EVENT_CLOCK_HTE flag is set then the
293*f80ad8b4SAndroid Build Coastguard Worker  * @timestamp_ns is provided by the hardware timestamping engine (HTE)
294*f80ad8b4SAndroid Build Coastguard Worker  * subsystem.
295*f80ad8b4SAndroid Build Coastguard Worker  */
296*f80ad8b4SAndroid Build Coastguard Worker struct gpio_v2_line_event {
297*f80ad8b4SAndroid Build Coastguard Worker 	__aligned_u64 timestamp_ns;
298*f80ad8b4SAndroid Build Coastguard Worker 	__u32 id;
299*f80ad8b4SAndroid Build Coastguard Worker 	__u32 offset;
300*f80ad8b4SAndroid Build Coastguard Worker 	__u32 seqno;
301*f80ad8b4SAndroid Build Coastguard Worker 	__u32 line_seqno;
302*f80ad8b4SAndroid Build Coastguard Worker 	/* Space reserved for future use. */
303*f80ad8b4SAndroid Build Coastguard Worker 	__u32 padding[6];
304*f80ad8b4SAndroid Build Coastguard Worker };
305*f80ad8b4SAndroid Build Coastguard Worker 
306*f80ad8b4SAndroid Build Coastguard Worker /*
307*f80ad8b4SAndroid Build Coastguard Worker  * ABI v1
308*f80ad8b4SAndroid Build Coastguard Worker  *
309*f80ad8b4SAndroid Build Coastguard Worker  * This version of the ABI is deprecated.
310*f80ad8b4SAndroid Build Coastguard Worker  * Use the latest version of the ABI, defined above, instead.
311*f80ad8b4SAndroid Build Coastguard Worker  */
312*f80ad8b4SAndroid Build Coastguard Worker 
313*f80ad8b4SAndroid Build Coastguard Worker /* Informational flags */
314*f80ad8b4SAndroid Build Coastguard Worker #define GPIOLINE_FLAG_KERNEL		(1UL << 0) /* Line used by the kernel */
315*f80ad8b4SAndroid Build Coastguard Worker #define GPIOLINE_FLAG_IS_OUT		(1UL << 1)
316*f80ad8b4SAndroid Build Coastguard Worker #define GPIOLINE_FLAG_ACTIVE_LOW	(1UL << 2)
317*f80ad8b4SAndroid Build Coastguard Worker #define GPIOLINE_FLAG_OPEN_DRAIN	(1UL << 3)
318*f80ad8b4SAndroid Build Coastguard Worker #define GPIOLINE_FLAG_OPEN_SOURCE	(1UL << 4)
319*f80ad8b4SAndroid Build Coastguard Worker #define GPIOLINE_FLAG_BIAS_PULL_UP	(1UL << 5)
320*f80ad8b4SAndroid Build Coastguard Worker #define GPIOLINE_FLAG_BIAS_PULL_DOWN	(1UL << 6)
321*f80ad8b4SAndroid Build Coastguard Worker #define GPIOLINE_FLAG_BIAS_DISABLE	(1UL << 7)
322*f80ad8b4SAndroid Build Coastguard Worker 
323*f80ad8b4SAndroid Build Coastguard Worker /**
324*f80ad8b4SAndroid Build Coastguard Worker  * struct gpioline_info - Information about a certain GPIO line
325*f80ad8b4SAndroid Build Coastguard Worker  * @line_offset: the local offset on this GPIO device, fill this in when
326*f80ad8b4SAndroid Build Coastguard Worker  * requesting the line information from the kernel
327*f80ad8b4SAndroid Build Coastguard Worker  * @flags: various flags for this line
328*f80ad8b4SAndroid Build Coastguard Worker  * @name: the name of this GPIO line, such as the output pin of the line on the
329*f80ad8b4SAndroid Build Coastguard Worker  * chip, a rail or a pin header name on a board, as specified by the gpio
330*f80ad8b4SAndroid Build Coastguard Worker  * chip, may be empty (i.e. name[0] == '\0')
331*f80ad8b4SAndroid Build Coastguard Worker  * @consumer: a functional name for the consumer of this GPIO line as set by
332*f80ad8b4SAndroid Build Coastguard Worker  * whatever is using it, will be empty if there is no current user but may
333*f80ad8b4SAndroid Build Coastguard Worker  * also be empty if the consumer doesn't set this up
334*f80ad8b4SAndroid Build Coastguard Worker  *
335*f80ad8b4SAndroid Build Coastguard Worker  * Note: This struct is part of ABI v1 and is deprecated.
336*f80ad8b4SAndroid Build Coastguard Worker  * Use ABI v2 and &struct gpio_v2_line_info instead.
337*f80ad8b4SAndroid Build Coastguard Worker  */
338*f80ad8b4SAndroid Build Coastguard Worker struct gpioline_info {
339*f80ad8b4SAndroid Build Coastguard Worker 	__u32 line_offset;
340*f80ad8b4SAndroid Build Coastguard Worker 	__u32 flags;
341*f80ad8b4SAndroid Build Coastguard Worker 	char name[GPIO_MAX_NAME_SIZE];
342*f80ad8b4SAndroid Build Coastguard Worker 	char consumer[GPIO_MAX_NAME_SIZE];
343*f80ad8b4SAndroid Build Coastguard Worker };
344*f80ad8b4SAndroid Build Coastguard Worker 
345*f80ad8b4SAndroid Build Coastguard Worker /* Maximum number of requested handles */
346*f80ad8b4SAndroid Build Coastguard Worker #define GPIOHANDLES_MAX 64
347*f80ad8b4SAndroid Build Coastguard Worker 
348*f80ad8b4SAndroid Build Coastguard Worker /* Possible line status change events */
349*f80ad8b4SAndroid Build Coastguard Worker enum {
350*f80ad8b4SAndroid Build Coastguard Worker 	GPIOLINE_CHANGED_REQUESTED = 1,
351*f80ad8b4SAndroid Build Coastguard Worker 	GPIOLINE_CHANGED_RELEASED,
352*f80ad8b4SAndroid Build Coastguard Worker 	GPIOLINE_CHANGED_CONFIG,
353*f80ad8b4SAndroid Build Coastguard Worker };
354*f80ad8b4SAndroid Build Coastguard Worker 
355*f80ad8b4SAndroid Build Coastguard Worker /**
356*f80ad8b4SAndroid Build Coastguard Worker  * struct gpioline_info_changed - Information about a change in status
357*f80ad8b4SAndroid Build Coastguard Worker  * of a GPIO line
358*f80ad8b4SAndroid Build Coastguard Worker  * @info: updated line information
359*f80ad8b4SAndroid Build Coastguard Worker  * @timestamp: estimate of time of status change occurrence, in nanoseconds
360*f80ad8b4SAndroid Build Coastguard Worker  * @event_type: one of %GPIOLINE_CHANGED_REQUESTED,
361*f80ad8b4SAndroid Build Coastguard Worker  * %GPIOLINE_CHANGED_RELEASED and %GPIOLINE_CHANGED_CONFIG
362*f80ad8b4SAndroid Build Coastguard Worker  * @padding: reserved for future use
363*f80ad8b4SAndroid Build Coastguard Worker  *
364*f80ad8b4SAndroid Build Coastguard Worker  * The &struct gpioline_info embedded here has 32-bit alignment on its own,
365*f80ad8b4SAndroid Build Coastguard Worker  * but it works fine with 64-bit alignment too. With its 72 byte size, we can
366*f80ad8b4SAndroid Build Coastguard Worker  * guarantee there are no implicit holes between it and subsequent members.
367*f80ad8b4SAndroid Build Coastguard Worker  * The 20-byte padding at the end makes sure we don't add any implicit padding
368*f80ad8b4SAndroid Build Coastguard Worker  * at the end of the structure on 64-bit architectures.
369*f80ad8b4SAndroid Build Coastguard Worker  *
370*f80ad8b4SAndroid Build Coastguard Worker  * Note: This struct is part of ABI v1 and is deprecated.
371*f80ad8b4SAndroid Build Coastguard Worker  * Use ABI v2 and &struct gpio_v2_line_info_changed instead.
372*f80ad8b4SAndroid Build Coastguard Worker  */
373*f80ad8b4SAndroid Build Coastguard Worker struct gpioline_info_changed {
374*f80ad8b4SAndroid Build Coastguard Worker 	struct gpioline_info info;
375*f80ad8b4SAndroid Build Coastguard Worker 	__u64 timestamp;
376*f80ad8b4SAndroid Build Coastguard Worker 	__u32 event_type;
377*f80ad8b4SAndroid Build Coastguard Worker 	__u32 padding[5]; /* for future use */
378*f80ad8b4SAndroid Build Coastguard Worker };
379*f80ad8b4SAndroid Build Coastguard Worker 
380*f80ad8b4SAndroid Build Coastguard Worker /* Linerequest flags */
381*f80ad8b4SAndroid Build Coastguard Worker #define GPIOHANDLE_REQUEST_INPUT	(1UL << 0)
382*f80ad8b4SAndroid Build Coastguard Worker #define GPIOHANDLE_REQUEST_OUTPUT	(1UL << 1)
383*f80ad8b4SAndroid Build Coastguard Worker #define GPIOHANDLE_REQUEST_ACTIVE_LOW	(1UL << 2)
384*f80ad8b4SAndroid Build Coastguard Worker #define GPIOHANDLE_REQUEST_OPEN_DRAIN	(1UL << 3)
385*f80ad8b4SAndroid Build Coastguard Worker #define GPIOHANDLE_REQUEST_OPEN_SOURCE	(1UL << 4)
386*f80ad8b4SAndroid Build Coastguard Worker #define GPIOHANDLE_REQUEST_BIAS_PULL_UP	(1UL << 5)
387*f80ad8b4SAndroid Build Coastguard Worker #define GPIOHANDLE_REQUEST_BIAS_PULL_DOWN	(1UL << 6)
388*f80ad8b4SAndroid Build Coastguard Worker #define GPIOHANDLE_REQUEST_BIAS_DISABLE	(1UL << 7)
389*f80ad8b4SAndroid Build Coastguard Worker 
390*f80ad8b4SAndroid Build Coastguard Worker /**
391*f80ad8b4SAndroid Build Coastguard Worker  * struct gpiohandle_request - Information about a GPIO handle request
392*f80ad8b4SAndroid Build Coastguard Worker  * @lineoffsets: an array of desired lines, specified by offset index for the
393*f80ad8b4SAndroid Build Coastguard Worker  * associated GPIO device
394*f80ad8b4SAndroid Build Coastguard Worker  * @flags: desired flags for the desired GPIO lines, such as
395*f80ad8b4SAndroid Build Coastguard Worker  * %GPIOHANDLE_REQUEST_OUTPUT, %GPIOHANDLE_REQUEST_ACTIVE_LOW etc, added
396*f80ad8b4SAndroid Build Coastguard Worker  * together. Note that even if multiple lines are requested, the same flags
397*f80ad8b4SAndroid Build Coastguard Worker  * must be applicable to all of them, if you want lines with individual
398*f80ad8b4SAndroid Build Coastguard Worker  * flags set, request them one by one. It is possible to select
399*f80ad8b4SAndroid Build Coastguard Worker  * a batch of input or output lines, but they must all have the same
400*f80ad8b4SAndroid Build Coastguard Worker  * characteristics, i.e. all inputs or all outputs, all active low etc
401*f80ad8b4SAndroid Build Coastguard Worker  * @default_values: if the %GPIOHANDLE_REQUEST_OUTPUT is set for a requested
402*f80ad8b4SAndroid Build Coastguard Worker  * line, this specifies the default output value, should be 0 (inactive) or
403*f80ad8b4SAndroid Build Coastguard Worker  * 1 (active).  Anything other than 0 or 1 will be interpreted as active.
404*f80ad8b4SAndroid Build Coastguard Worker  * @consumer_label: a desired consumer label for the selected GPIO line(s)
405*f80ad8b4SAndroid Build Coastguard Worker  * such as "my-bitbanged-relay"
406*f80ad8b4SAndroid Build Coastguard Worker  * @lines: number of lines requested in this request, i.e. the number of
407*f80ad8b4SAndroid Build Coastguard Worker  * valid fields in the above arrays, set to 1 to request a single line
408*f80ad8b4SAndroid Build Coastguard Worker  * @fd: after a successful %GPIO_GET_LINEHANDLE_IOCTL operation, contains
409*f80ad8b4SAndroid Build Coastguard Worker  * a valid anonymous file descriptor representing the request
410*f80ad8b4SAndroid Build Coastguard Worker  *
411*f80ad8b4SAndroid Build Coastguard Worker  * Note: This struct is part of ABI v1 and is deprecated.
412*f80ad8b4SAndroid Build Coastguard Worker  * Use ABI v2 and &struct gpio_v2_line_request instead.
413*f80ad8b4SAndroid Build Coastguard Worker  */
414*f80ad8b4SAndroid Build Coastguard Worker struct gpiohandle_request {
415*f80ad8b4SAndroid Build Coastguard Worker 	__u32 lineoffsets[GPIOHANDLES_MAX];
416*f80ad8b4SAndroid Build Coastguard Worker 	__u32 flags;
417*f80ad8b4SAndroid Build Coastguard Worker 	__u8 default_values[GPIOHANDLES_MAX];
418*f80ad8b4SAndroid Build Coastguard Worker 	char consumer_label[GPIO_MAX_NAME_SIZE];
419*f80ad8b4SAndroid Build Coastguard Worker 	__u32 lines;
420*f80ad8b4SAndroid Build Coastguard Worker 	int fd;
421*f80ad8b4SAndroid Build Coastguard Worker };
422*f80ad8b4SAndroid Build Coastguard Worker 
423*f80ad8b4SAndroid Build Coastguard Worker /**
424*f80ad8b4SAndroid Build Coastguard Worker  * struct gpiohandle_config - Configuration for a GPIO handle request
425*f80ad8b4SAndroid Build Coastguard Worker  * @flags: updated flags for the requested GPIO lines, such as
426*f80ad8b4SAndroid Build Coastguard Worker  * %GPIOHANDLE_REQUEST_OUTPUT, %GPIOHANDLE_REQUEST_ACTIVE_LOW etc, added
427*f80ad8b4SAndroid Build Coastguard Worker  * together
428*f80ad8b4SAndroid Build Coastguard Worker  * @default_values: if the %GPIOHANDLE_REQUEST_OUTPUT is set in flags,
429*f80ad8b4SAndroid Build Coastguard Worker  * this specifies the default output value, should be 0 (inactive) or
430*f80ad8b4SAndroid Build Coastguard Worker  * 1 (active).  Anything other than 0 or 1 will be interpreted as active.
431*f80ad8b4SAndroid Build Coastguard Worker  * @padding: reserved for future use and should be zero filled
432*f80ad8b4SAndroid Build Coastguard Worker  *
433*f80ad8b4SAndroid Build Coastguard Worker  * Note: This struct is part of ABI v1 and is deprecated.
434*f80ad8b4SAndroid Build Coastguard Worker  * Use ABI v2 and &struct gpio_v2_line_config instead.
435*f80ad8b4SAndroid Build Coastguard Worker  */
436*f80ad8b4SAndroid Build Coastguard Worker struct gpiohandle_config {
437*f80ad8b4SAndroid Build Coastguard Worker 	__u32 flags;
438*f80ad8b4SAndroid Build Coastguard Worker 	__u8 default_values[GPIOHANDLES_MAX];
439*f80ad8b4SAndroid Build Coastguard Worker 	__u32 padding[4]; /* padding for future use */
440*f80ad8b4SAndroid Build Coastguard Worker };
441*f80ad8b4SAndroid Build Coastguard Worker 
442*f80ad8b4SAndroid Build Coastguard Worker /**
443*f80ad8b4SAndroid Build Coastguard Worker  * struct gpiohandle_data - Information of values on a GPIO handle
444*f80ad8b4SAndroid Build Coastguard Worker  * @values: when getting the state of lines this contains the current
445*f80ad8b4SAndroid Build Coastguard Worker  * state of a line, when setting the state of lines these should contain
446*f80ad8b4SAndroid Build Coastguard Worker  * the desired target state.  States are 0 (inactive) or 1 (active).
447*f80ad8b4SAndroid Build Coastguard Worker  * When setting, anything other than 0 or 1 will be interpreted as active.
448*f80ad8b4SAndroid Build Coastguard Worker  *
449*f80ad8b4SAndroid Build Coastguard Worker  * Note: This struct is part of ABI v1 and is deprecated.
450*f80ad8b4SAndroid Build Coastguard Worker  * Use ABI v2 and &struct gpio_v2_line_values instead.
451*f80ad8b4SAndroid Build Coastguard Worker  */
452*f80ad8b4SAndroid Build Coastguard Worker struct gpiohandle_data {
453*f80ad8b4SAndroid Build Coastguard Worker 	__u8 values[GPIOHANDLES_MAX];
454*f80ad8b4SAndroid Build Coastguard Worker };
455*f80ad8b4SAndroid Build Coastguard Worker 
456*f80ad8b4SAndroid Build Coastguard Worker /* Eventrequest flags */
457*f80ad8b4SAndroid Build Coastguard Worker #define GPIOEVENT_REQUEST_RISING_EDGE	(1UL << 0)
458*f80ad8b4SAndroid Build Coastguard Worker #define GPIOEVENT_REQUEST_FALLING_EDGE	(1UL << 1)
459*f80ad8b4SAndroid Build Coastguard Worker #define GPIOEVENT_REQUEST_BOTH_EDGES	((1UL << 0) | (1UL << 1))
460*f80ad8b4SAndroid Build Coastguard Worker 
461*f80ad8b4SAndroid Build Coastguard Worker /**
462*f80ad8b4SAndroid Build Coastguard Worker  * struct gpioevent_request - Information about a GPIO event request
463*f80ad8b4SAndroid Build Coastguard Worker  * @lineoffset: the desired line to subscribe to events from, specified by
464*f80ad8b4SAndroid Build Coastguard Worker  * offset index for the associated GPIO device
465*f80ad8b4SAndroid Build Coastguard Worker  * @handleflags: desired handle flags for the desired GPIO line, such as
466*f80ad8b4SAndroid Build Coastguard Worker  * %GPIOHANDLE_REQUEST_ACTIVE_LOW or %GPIOHANDLE_REQUEST_OPEN_DRAIN
467*f80ad8b4SAndroid Build Coastguard Worker  * @eventflags: desired flags for the desired GPIO event line, such as
468*f80ad8b4SAndroid Build Coastguard Worker  * %GPIOEVENT_REQUEST_RISING_EDGE or %GPIOEVENT_REQUEST_FALLING_EDGE
469*f80ad8b4SAndroid Build Coastguard Worker  * @consumer_label: a desired consumer label for the selected GPIO line(s)
470*f80ad8b4SAndroid Build Coastguard Worker  * such as "my-listener"
471*f80ad8b4SAndroid Build Coastguard Worker  * @fd: after a successful %GPIO_GET_LINEEVENT_IOCTL operation, contains a
472*f80ad8b4SAndroid Build Coastguard Worker  * valid anonymous file descriptor representing the request
473*f80ad8b4SAndroid Build Coastguard Worker  *
474*f80ad8b4SAndroid Build Coastguard Worker  * Note: This struct is part of ABI v1 and is deprecated.
475*f80ad8b4SAndroid Build Coastguard Worker  * Use ABI v2 and &struct gpio_v2_line_request instead.
476*f80ad8b4SAndroid Build Coastguard Worker  */
477*f80ad8b4SAndroid Build Coastguard Worker struct gpioevent_request {
478*f80ad8b4SAndroid Build Coastguard Worker 	__u32 lineoffset;
479*f80ad8b4SAndroid Build Coastguard Worker 	__u32 handleflags;
480*f80ad8b4SAndroid Build Coastguard Worker 	__u32 eventflags;
481*f80ad8b4SAndroid Build Coastguard Worker 	char consumer_label[GPIO_MAX_NAME_SIZE];
482*f80ad8b4SAndroid Build Coastguard Worker 	int fd;
483*f80ad8b4SAndroid Build Coastguard Worker };
484*f80ad8b4SAndroid Build Coastguard Worker 
485*f80ad8b4SAndroid Build Coastguard Worker /*
486*f80ad8b4SAndroid Build Coastguard Worker  * GPIO event types
487*f80ad8b4SAndroid Build Coastguard Worker  */
488*f80ad8b4SAndroid Build Coastguard Worker #define GPIOEVENT_EVENT_RISING_EDGE 0x01
489*f80ad8b4SAndroid Build Coastguard Worker #define GPIOEVENT_EVENT_FALLING_EDGE 0x02
490*f80ad8b4SAndroid Build Coastguard Worker 
491*f80ad8b4SAndroid Build Coastguard Worker /**
492*f80ad8b4SAndroid Build Coastguard Worker  * struct gpioevent_data - The actual event being pushed to userspace
493*f80ad8b4SAndroid Build Coastguard Worker  * @timestamp: best estimate of time of event occurrence, in nanoseconds
494*f80ad8b4SAndroid Build Coastguard Worker  * @id: event identifier, one of %GPIOEVENT_EVENT_RISING_EDGE or
495*f80ad8b4SAndroid Build Coastguard Worker  *  %GPIOEVENT_EVENT_FALLING_EDGE
496*f80ad8b4SAndroid Build Coastguard Worker  *
497*f80ad8b4SAndroid Build Coastguard Worker  * Note: This struct is part of ABI v1 and is deprecated.
498*f80ad8b4SAndroid Build Coastguard Worker  * Use ABI v2 and &struct gpio_v2_line_event instead.
499*f80ad8b4SAndroid Build Coastguard Worker  */
500*f80ad8b4SAndroid Build Coastguard Worker struct gpioevent_data {
501*f80ad8b4SAndroid Build Coastguard Worker 	__u64 timestamp;
502*f80ad8b4SAndroid Build Coastguard Worker 	__u32 id;
503*f80ad8b4SAndroid Build Coastguard Worker };
504*f80ad8b4SAndroid Build Coastguard Worker 
505*f80ad8b4SAndroid Build Coastguard Worker /*
506*f80ad8b4SAndroid Build Coastguard Worker  * v1 and v2 ioctl()s
507*f80ad8b4SAndroid Build Coastguard Worker  */
508*f80ad8b4SAndroid Build Coastguard Worker #define GPIO_GET_CHIPINFO_IOCTL _IOR(0xB4, 0x01, struct gpiochip_info)
509*f80ad8b4SAndroid Build Coastguard Worker #define GPIO_GET_LINEINFO_UNWATCH_IOCTL _IOWR(0xB4, 0x0C, __u32)
510*f80ad8b4SAndroid Build Coastguard Worker 
511*f80ad8b4SAndroid Build Coastguard Worker /*
512*f80ad8b4SAndroid Build Coastguard Worker  * v2 ioctl()s
513*f80ad8b4SAndroid Build Coastguard Worker  */
514*f80ad8b4SAndroid Build Coastguard Worker #define GPIO_V2_GET_LINEINFO_IOCTL _IOWR(0xB4, 0x05, struct gpio_v2_line_info)
515*f80ad8b4SAndroid Build Coastguard Worker #define GPIO_V2_GET_LINEINFO_WATCH_IOCTL _IOWR(0xB4, 0x06, struct gpio_v2_line_info)
516*f80ad8b4SAndroid Build Coastguard Worker #define GPIO_V2_GET_LINE_IOCTL _IOWR(0xB4, 0x07, struct gpio_v2_line_request)
517*f80ad8b4SAndroid Build Coastguard Worker #define GPIO_V2_LINE_SET_CONFIG_IOCTL _IOWR(0xB4, 0x0D, struct gpio_v2_line_config)
518*f80ad8b4SAndroid Build Coastguard Worker #define GPIO_V2_LINE_GET_VALUES_IOCTL _IOWR(0xB4, 0x0E, struct gpio_v2_line_values)
519*f80ad8b4SAndroid Build Coastguard Worker #define GPIO_V2_LINE_SET_VALUES_IOCTL _IOWR(0xB4, 0x0F, struct gpio_v2_line_values)
520*f80ad8b4SAndroid Build Coastguard Worker 
521*f80ad8b4SAndroid Build Coastguard Worker /*
522*f80ad8b4SAndroid Build Coastguard Worker  * v1 ioctl()s
523*f80ad8b4SAndroid Build Coastguard Worker  *
524*f80ad8b4SAndroid Build Coastguard Worker  * These ioctl()s are deprecated.  Use the v2 equivalent instead.
525*f80ad8b4SAndroid Build Coastguard Worker  */
526*f80ad8b4SAndroid Build Coastguard Worker #define GPIO_GET_LINEINFO_IOCTL _IOWR(0xB4, 0x02, struct gpioline_info)
527*f80ad8b4SAndroid Build Coastguard Worker #define GPIO_GET_LINEHANDLE_IOCTL _IOWR(0xB4, 0x03, struct gpiohandle_request)
528*f80ad8b4SAndroid Build Coastguard Worker #define GPIO_GET_LINEEVENT_IOCTL _IOWR(0xB4, 0x04, struct gpioevent_request)
529*f80ad8b4SAndroid Build Coastguard Worker #define GPIOHANDLE_GET_LINE_VALUES_IOCTL _IOWR(0xB4, 0x08, struct gpiohandle_data)
530*f80ad8b4SAndroid Build Coastguard Worker #define GPIOHANDLE_SET_LINE_VALUES_IOCTL _IOWR(0xB4, 0x09, struct gpiohandle_data)
531*f80ad8b4SAndroid Build Coastguard Worker #define GPIOHANDLE_SET_CONFIG_IOCTL _IOWR(0xB4, 0x0A, struct gpiohandle_config)
532*f80ad8b4SAndroid Build Coastguard Worker #define GPIO_GET_LINEINFO_WATCH_IOCTL _IOWR(0xB4, 0x0B, struct gpioline_info)
533*f80ad8b4SAndroid Build Coastguard Worker 
534*f80ad8b4SAndroid Build Coastguard Worker #endif /* _UAPI_GPIO_H_ */
535