2019-06-04 11:11:33 +03:00
/* SPDX-License-Identifier: GPL-2.0-only */
2015-10-21 16:45:54 +03:00
/*
* GPIO tools - utility helpers library for the GPIO tools
*
* Copyright ( C ) 2015 Linus Walleij
*
* Portions copied from iio_utils and lssio :
* Copyright ( c ) 2010 Manuel Stahl < manuel . stahl @ iis . fraunhofer . de >
* Copyright ( c ) 2008 Jonathan Cameron
* *
*/
# ifndef _GPIO_UTILS_H_
# define _GPIO_UTILS_H_
2020-09-28 03:28:04 +03:00
# include <stdbool.h>
2015-10-21 16:45:54 +03:00
# include <string.h>
2020-09-28 03:28:04 +03:00
# include <linux/types.h>
2015-10-21 16:45:54 +03:00
2016-02-13 00:25:22 +03:00
# define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
2015-10-21 16:45:54 +03:00
static inline int check_prefix ( const char * str , const char * prefix )
{
return strlen ( str ) > strlen ( prefix ) & &
strncmp ( str , prefix , strlen ( prefix ) ) = = 0 ;
}
2020-09-28 03:28:04 +03:00
int gpiotools_request_line ( const char * device_name ,
unsigned int * lines ,
unsigned int num_lines ,
struct gpio_v2_line_config * config ,
const char * consumer ) ;
int gpiotools_set_values ( const int fd , struct gpio_v2_line_values * values ) ;
int gpiotools_get_values ( const int fd , struct gpio_v2_line_values * values ) ;
int gpiotools_release_line ( const int fd ) ;
2016-10-14 05:48:25 +03:00
int gpiotools_get ( const char * device_name , unsigned int line ) ;
int gpiotools_gets ( const char * device_name , unsigned int * lines ,
2020-09-28 03:28:04 +03:00
unsigned int num_lines , unsigned int * values ) ;
2016-10-14 05:48:25 +03:00
int gpiotools_set ( const char * device_name , unsigned int line ,
unsigned int value ) ;
int gpiotools_sets ( const char * device_name , unsigned int * lines ,
2020-09-28 03:28:04 +03:00
unsigned int num_lines , unsigned int * values ) ;
/* helper functions for gpio_v2_line_values bits */
static inline void gpiotools_set_bit ( __u64 * b , int n )
{
* b | = _BITULL ( n ) ;
}
static inline void gpiotools_change_bit ( __u64 * b , int n )
{
* b ^ = _BITULL ( n ) ;
}
static inline void gpiotools_clear_bit ( __u64 * b , int n )
{
* b & = ~ _BITULL ( n ) ;
}
static inline int gpiotools_test_bit ( __u64 b , int n )
{
return ! ! ( b & _BITULL ( n ) ) ;
}
static inline void gpiotools_assign_bit ( __u64 * b , int n , bool value )
{
if ( value )
gpiotools_set_bit ( b , n ) ;
else
gpiotools_clear_bit ( b , n ) ;
}
2016-10-14 05:48:25 +03:00
2015-10-21 16:45:54 +03:00
# endif /* _GPIO_UTILS_H_ */