1/* SPDX-License-Identifier: GPL-2.0-only */ 2/* 3 * GPIO tools - utility helpers library for the GPIO tools 4 * 5 * Copyright (C) 2015 Linus Walleij 6 * 7 * Portions copied from iio_utils and lssio: 8 * Copyright (c) 2010 Manuel Stahl <manuel.stahl@iis.fraunhofer.de> 9 * Copyright (c) 2008 Jonathan Cameron 10 * * 11 */ 12#ifndef _GPIO_UTILS_H_ 13#define _GPIO_UTILS_H_ 14 15#include <stdbool.h> 16#include <string.h> 17#include <linux/types.h> 18 19#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0])) 20 21static inline int check_prefix(const char *str, const char *prefix) 22{ 23 return strlen(str) > strlen(prefix) && 24 strncmp(str, prefix, strlen(prefix)) == 0; 25} 26 27int gpiotools_request_linehandle(const char *device_name, unsigned int *lines, 28 unsigned int num_lines, unsigned int flag, 29 struct gpiohandle_data *data, 30 const char *consumer_label); 31int gpiotools_release_linehandle(const int fd); 32 33int gpiotools_request_line(const char *device_name, 34 unsigned int *lines, 35 unsigned int num_lines, 36 struct gpio_v2_line_config *config, 37 const char *consumer); 38int gpiotools_set_values(const int fd, struct gpio_v2_line_values *values); 39int gpiotools_get_values(const int fd, struct gpio_v2_line_values *values); 40int gpiotools_release_line(const int fd); 41 42int gpiotools_get(const char *device_name, unsigned int line); 43int gpiotools_gets(const char *device_name, unsigned int *lines, 44 unsigned int num_lines, unsigned int *values); 45int gpiotools_set(const char *device_name, unsigned int line, 46 unsigned int value); 47int gpiotools_sets(const char *device_name, unsigned int *lines, 48 unsigned int num_lines, unsigned int *values); 49 50/* helper functions for gpio_v2_line_values bits */ 51static inline void gpiotools_set_bit(__u64 *b, int n) 52{ 53 *b |= _BITULL(n); 54} 55 56static inline void gpiotools_change_bit(__u64 *b, int n) 57{ 58 *b ^= _BITULL(n); 59} 60 61static inline void gpiotools_clear_bit(__u64 *b, int n) 62{ 63 *b &= ~_BITULL(n); 64} 65 66static inline int gpiotools_test_bit(__u64 b, int n) 67{ 68 return !!(b & _BITULL(n)); 69} 70 71static inline void gpiotools_assign_bit(__u64 *b, int n, bool value) 72{ 73 if (value) 74 gpiotools_set_bit(b, n); 75 else 76 gpiotools_clear_bit(b, n); 77} 78 79#endif /* _GPIO_UTILS_H_ */ 80