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 | |
21 | static 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 | |
27 | int gpiotools_request_line(const char *device_name, |
28 | unsigned int *lines, |
29 | unsigned int num_lines, |
30 | struct gpio_v2_line_config *config, |
31 | const char *consumer); |
32 | int gpiotools_set_values(const int fd, struct gpio_v2_line_values *values); |
33 | int gpiotools_get_values(const int fd, struct gpio_v2_line_values *values); |
34 | int gpiotools_release_line(const int fd); |
35 | |
36 | int gpiotools_get(const char *device_name, unsigned int line); |
37 | int gpiotools_gets(const char *device_name, unsigned int *lines, |
38 | unsigned int num_lines, unsigned int *values); |
39 | int gpiotools_set(const char *device_name, unsigned int line, |
40 | unsigned int value); |
41 | int gpiotools_sets(const char *device_name, unsigned int *lines, |
42 | unsigned int num_lines, unsigned int *values); |
43 | |
44 | /* helper functions for gpio_v2_line_values bits */ |
45 | static inline void gpiotools_set_bit(__u64 *b, int n) |
46 | { |
47 | *b |= _BITULL(n); |
48 | } |
49 | |
50 | static inline void gpiotools_change_bit(__u64 *b, int n) |
51 | { |
52 | *b ^= _BITULL(n); |
53 | } |
54 | |
55 | static inline void gpiotools_clear_bit(__u64 *b, int n) |
56 | { |
57 | *b &= ~_BITULL(n); |
58 | } |
59 | |
60 | static inline int gpiotools_test_bit(__u64 b, int n) |
61 | { |
62 | return !!(b & _BITULL(n)); |
63 | } |
64 | |
65 | static inline void gpiotools_assign_bit(__u64 *b, int n, bool value) |
66 | { |
67 | if (value) |
68 | gpiotools_set_bit(b, n); |
69 | else |
70 | gpiotools_clear_bit(b, n); |
71 | } |
72 | |
73 | #endif /* _GPIO_UTILS_H_ */ |
74 | |