Skip to content

Commit da9f48d

Browse files
committed
gpio: add pull up/down flags
Signed-off-by: Nascs <[email protected]>
1 parent 3f6990d commit da9f48d

File tree

5 files changed

+40
-0
lines changed

5 files changed

+40
-0
lines changed

api/mraa/gpio.h

+1
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ typedef enum {
6767
MRAA_GPIOD_ACTIVE_LOW = 4,
6868
MRAA_GPIOD_OPEN_DRAIN = 5,
6969
MRAA_GPIOD_OPEN_SOURCE = 6,
70+
MRAA_GPIO_DISABLE = 7,
7071
} mraa_gpio_mode_t;
7172

7273
/**

include/gpio/gpio_chardev.h

+3
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,9 @@ mraa_boolean_t mraa_is_gpio_line_dir_out(mraa_gpiod_line_info *linfo);
4646
mraa_boolean_t mraa_is_gpio_line_active_low(mraa_gpiod_line_info *linfo);
4747
mraa_boolean_t mraa_is_gpio_line_open_drain(mraa_gpiod_line_info *linfo);
4848
mraa_boolean_t mraa_is_gpio_line_open_source(mraa_gpiod_line_info *linfo);
49+
mraa_boolean_t mraa_is_gpio_line_bias_pull_up(mraa_gpiod_line_info *linfo);
50+
mraa_boolean_t mraa_is_gpio_line_bias_pull_down(mraa_gpiod_line_info *linfo);
51+
mraa_boolean_t mraa_is_gpio_line_disable(mraa_gpiod_line_info *linfo);
4952

5053
int mraa_get_number_of_gpio_chips();
5154
int mraa_get_chip_infos(mraa_gpiod_chip_info*** cinfos);

include/linux/gpio.h

+6
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ struct gpiochip_info {
2121
#define GPIOLINE_FLAG_ACTIVE_LOW (1UL << 2)
2222
#define GPIOLINE_FLAG_OPEN_DRAIN (1UL << 3)
2323
#define GPIOLINE_FLAG_OPEN_SOURCE (1UL << 4)
24+
#define GPIOLINE_FLAG_BIAS_PULL_UP (1UL << 5)
25+
#define GPIOLINE_FLAG_BIAS_PULL_DOWN (1UL << 6)
26+
#define GPIOLINE_FLAG_BIAS_DISABLE (1UL << 7)
2427

2528
struct gpioline_info {
2629
__u32 line_offset;
@@ -36,6 +39,9 @@ struct gpioline_info {
3639
#define GPIOHANDLE_REQUEST_ACTIVE_LOW (1UL << 2)
3740
#define GPIOHANDLE_REQUEST_OPEN_DRAIN (1UL << 3)
3841
#define GPIOHANDLE_REQUEST_OPEN_SOURCE (1UL << 4)
42+
#define GPIOHANDLE_REQUEST_BIAS_PULL_UP (1UL << 5)
43+
#define GPIOHANDLE_REQUEST_BIAS_PULL_DOWN (1UL << 6)
44+
#define GPIOHANDLE_REQUEST_BIAS_DISABLE (1UL << 7)
3945

4046
struct gpiohandle_request {
4147
__u32 lineoffsets[GPIOHANDLES_MAX];

src/gpio/gpio.c

+12
Original file line numberDiff line numberDiff line change
@@ -1110,6 +1110,15 @@ mraa_gpio_mode(mraa_gpio_context dev, mraa_gpio_mode_t mode)
11101110
case MRAA_GPIOD_OPEN_SOURCE:
11111111
flags |= GPIOHANDLE_REQUEST_OPEN_SOURCE;
11121112
break;
1113+
case MRAA_GPIO_PULLUP:
1114+
flags |= GPIOHANDLE_REQUEST_BIAS_PULL_UP;
1115+
break;
1116+
case MRAA_GPIO_PULLDOWN:
1117+
flags |= GPIOHANDLE_REQUEST_BIAS_PULL_DOWN;
1118+
break;
1119+
case MRAA_GPIO_DISABLE:
1120+
flags |= GPIOHANDLE_REQUEST_BIAS_DISABLE;
1121+
break;
11131122
default:
11141123
return MRAA_ERROR_FEATURE_NOT_IMPLEMENTED;
11151124
}
@@ -1153,6 +1162,9 @@ mraa_gpio_mode(mraa_gpio_context dev, mraa_gpio_mode_t mode)
11531162
case MRAA_GPIO_PULLDOWN:
11541163
length = snprintf(bu, sizeof(bu), "pulldown");
11551164
break;
1165+
case MRAA_GPIO_DISABLE:
1166+
length = snprintf(bu, sizeof(bu), "disable");
1167+
break;
11561168
case MRAA_GPIO_HIZ:
11571169
length = snprintf(bu, sizeof(bu), "hiz");
11581170
break;

src/gpio/gpio_chardev.c

+18
Original file line numberDiff line numberDiff line change
@@ -429,6 +429,24 @@ mraa_is_gpio_line_open_source(mraa_gpiod_line_info* linfo)
429429
return (linfo->flags & GPIOLINE_FLAG_OPEN_SOURCE);
430430
}
431431

432+
mraa_boolean_t
433+
mraa_is_gpio_line_bias_pull_up(mraa_gpiod_line_info* linfo)
434+
{
435+
return (linfo->flags & GPIOLINE_FLAG_BIAS_PULL_UP);
436+
}
437+
438+
mraa_boolean_t
439+
mraa_is_gpio_line_bias_pull_down(mraa_gpiod_line_info* linfo)
440+
{
441+
return (linfo->flags & GPIOLINE_FLAG_BIAS_PULL_DOWN);
442+
}
443+
444+
mraa_boolean_t
445+
mraa_is_gpio_line_disable(mraa_gpiod_line_info* linfo)
446+
{
447+
return (linfo->flags & GPIOLINE_FLAG_BIAS_DISABLE);
448+
}
449+
432450
static int
433451
dir_filter(const struct dirent* dir)
434452
{

0 commit comments

Comments
 (0)