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