The definitions of line settings are mostly duplicated between the line-info and line-config objects. Unify them by merging any differences into common enums. Signed-off-by: Bartosz Golaszewski <brgl@xxxxxxxx> --- include/gpiod.h | 93 ++++++++++---------------------------------- lib/line-config.c | 38 +++++++++--------- tools/gpioget.c | 4 +- tools/gpiomon.c | 6 +-- tools/gpioset.c | 7 ++-- tools/tools-common.c | 6 +-- 6 files changed, 51 insertions(+), 103 deletions(-) diff --git a/include/gpiod.h b/include/gpiod.h index 4506571..85a671f 100644 --- a/include/gpiod.h +++ b/include/gpiod.h @@ -185,21 +185,19 @@ gpiod_chip_request_lines(struct gpiod_chip *chip, /** * @} * - * @defgroup line_info Line info + * @defgroup line_settings Line settings * @{ * - * Definitions and functions for retrieving kernel information about both - * requested and free lines. - * - * Line info object contains an immutable snapshot of the line's state at the - * time when it was created. + * These defines are used both by gpiod_line_info and gpiod_line_config. */ /** * @brief Direction settings. */ enum { - GPIOD_LINE_DIRECTION_INPUT = 1, + GPIOD_LINE_DIRECTION_AS_IS = 1, + /**< Request the line(s), but don't change current direction. */ + GPIOD_LINE_DIRECTION_INPUT, /**< Direction is input - we're reading the state of a GPIO line. */ GPIOD_LINE_DIRECTION_OUTPUT /**< Direction is output - we're driving the GPIO line. */ @@ -209,7 +207,9 @@ enum { * @brief Internal bias settings. */ enum { - GPIOD_LINE_BIAS_UNKNOWN = 1, + GPIOD_LINE_BIAS_AS_IS = 1, + /**< Don't change the bias setting when applying line config. */ + GPIOD_LINE_BIAS_UNKNOWN, /**< The internal bias state is unknown. */ GPIOD_LINE_BIAS_DISABLED, /**< The internal bias is disabled. */ @@ -255,6 +255,19 @@ enum { /**< Line uses the realtime clock for edge event timestamps. */ }; +/** + * @} + * + * @defgroup line_info Line info + * @{ + * + * Functions for retrieving kernel information about both requested and free + * lines. + * + * Line info object contains an immutable snapshot of the line's state at the + * time when it was created. + */ + /** * @brief Free a line info object and release all associated resources. * @param info GPIO line info object to free. @@ -445,70 +458,6 @@ gpiod_info_event_get_line_info(struct gpiod_info_event *event); * a single line offset or for multiple line offsets. */ -/** - * @brief Available direction settings. - */ -enum { - GPIOD_LINE_CONFIG_DIRECTION_AS_IS = 1, - /**< Request the line(s), but don't change current direction. */ - GPIOD_LINE_CONFIG_DIRECTION_INPUT, - /**< Request the line(s) for reading the GPIO line state. */ - GPIOD_LINE_CONFIG_DIRECTION_OUTPUT - /**< Request the line(s) for setting the GPIO line state. */ -}; - -/** - * @brief Available edge event detection settings. Only relevant for input - * direction. - */ -enum { - GPIOD_LINE_CONFIG_EDGE_NONE = 1, - /**< Don't report edge events. */ - GPIOD_LINE_CONFIG_EDGE_FALLING, - /**< Only watch falling edge events. */ - GPIOD_LINE_CONFIG_EDGE_RISING, - /**< Only watch rising edge events. */ - GPIOD_LINE_CONFIG_EDGE_BOTH - /**< Monitor both types of events. */ -}; - -/** - * @brief Available internal bias settings for line requests. - */ -enum { - GPIOD_LINE_CONFIG_BIAS_AS_IS = 1, - /**< Don't change the current bias setting. */ - GPIOD_LINE_CONFIG_BIAS_DISABLED, - /**< The internal bias should be disabled (the default). */ - GPIOD_LINE_CONFIG_BIAS_PULL_UP, - /**< The internal pull-up bias is enabled. */ - GPIOD_LINE_CONFIG_BIAS_PULL_DOWN - /**< The internal pull-down bias is enabled. */ -}; - -/** - * @brief Available drive settings for line requests. Only relevant for output - * direction. - */ -enum { - GPIOD_LINE_CONFIG_DRIVE_PUSH_PULL = 1, - /**< Drive setting should be set to push-pull (the default). */ - GPIOD_LINE_CONFIG_DRIVE_OPEN_DRAIN, - /**< Line output should be set to open-drain. */ - GPIOD_LINE_CONFIG_DRIVE_OPEN_SOURCE - /**< Line output should be set to open-source. */ -}; - -/** - * @brief Available clock types used for event timestamps. - */ -enum { - GPIOD_LINE_CONFIG_EVENT_CLOCK_MONOTONIC = 1, - /**< Use the monotonic clock. */ - GPIOD_LINE_CONFIG_EVENT_CLOCK_REALTIME - /**< Use the realtime clock. */ -}; - /** * @brief Create a new line config object. * @return New line config object or NULL on error. diff --git a/lib/line-config.c b/lib/line-config.c index 24dc5f4..6cc4676 100644 --- a/lib/line-config.c +++ b/lib/line-config.c @@ -435,13 +435,13 @@ static int gpiod_make_kernel_flags(uint64_t *flags, struct base_config *config) *flags = 0; switch (config->direction) { - case GPIOD_LINE_CONFIG_DIRECTION_INPUT: + case GPIOD_LINE_DIRECTION_INPUT: *flags |= GPIO_V2_LINE_FLAG_INPUT; break; - case GPIOD_LINE_CONFIG_DIRECTION_OUTPUT: + case GPIOD_LINE_DIRECTION_OUTPUT: *flags |= GPIO_V2_LINE_FLAG_OUTPUT; break; - case GPIOD_LINE_CONFIG_DIRECTION_AS_IS: + case GPIOD_LINE_DIRECTION_AS_IS: case 0: break; default: @@ -449,23 +449,23 @@ static int gpiod_make_kernel_flags(uint64_t *flags, struct base_config *config) } switch (config->edge) { - case GPIOD_LINE_CONFIG_EDGE_FALLING: + case GPIOD_LINE_EDGE_FALLING: *flags |= (GPIO_V2_LINE_FLAG_EDGE_FALLING | GPIO_V2_LINE_FLAG_INPUT); - *flags &= ~GPIOD_LINE_CONFIG_DIRECTION_OUTPUT; + *flags &= ~GPIOD_LINE_DIRECTION_OUTPUT; break; - case GPIOD_LINE_CONFIG_EDGE_RISING: + case GPIOD_LINE_EDGE_RISING: *flags |= (GPIO_V2_LINE_FLAG_EDGE_RISING | GPIO_V2_LINE_FLAG_INPUT); - *flags &= ~GPIOD_LINE_CONFIG_DIRECTION_OUTPUT; + *flags &= ~GPIOD_LINE_DIRECTION_OUTPUT; break; - case GPIOD_LINE_CONFIG_EDGE_BOTH: + case GPIOD_LINE_EDGE_BOTH: *flags |= (GPIO_V2_LINE_FLAG_EDGE_FALLING | GPIO_V2_LINE_FLAG_EDGE_RISING | GPIO_V2_LINE_FLAG_INPUT); - *flags &= ~GPIOD_LINE_CONFIG_DIRECTION_OUTPUT; + *flags &= ~GPIOD_LINE_DIRECTION_OUTPUT; break; - case GPIOD_LINE_CONFIG_EDGE_NONE: + case GPIOD_LINE_EDGE_NONE: case 0: break; default: @@ -473,13 +473,13 @@ static int gpiod_make_kernel_flags(uint64_t *flags, struct base_config *config) } switch (config->drive) { - case GPIOD_LINE_CONFIG_DRIVE_OPEN_DRAIN: + case GPIOD_LINE_DRIVE_OPEN_DRAIN: *flags |= GPIO_V2_LINE_FLAG_OPEN_DRAIN; break; - case GPIOD_LINE_CONFIG_DRIVE_OPEN_SOURCE: + case GPIOD_LINE_DRIVE_OPEN_SOURCE: *flags |= GPIO_V2_LINE_FLAG_OPEN_SOURCE; break; - case GPIOD_LINE_CONFIG_DRIVE_PUSH_PULL: + case GPIOD_LINE_DRIVE_PUSH_PULL: case 0: break; default: @@ -487,16 +487,16 @@ static int gpiod_make_kernel_flags(uint64_t *flags, struct base_config *config) } switch (config->bias) { - case GPIOD_LINE_CONFIG_BIAS_DISABLED: + case GPIOD_LINE_BIAS_DISABLED: *flags |= GPIO_V2_LINE_FLAG_BIAS_DISABLED; break; - case GPIOD_LINE_CONFIG_BIAS_PULL_UP: + case GPIOD_LINE_BIAS_PULL_UP: *flags |= GPIO_V2_LINE_FLAG_BIAS_PULL_UP; break; - case GPIOD_LINE_CONFIG_BIAS_PULL_DOWN: + case GPIOD_LINE_BIAS_PULL_DOWN: *flags |= GPIO_V2_LINE_FLAG_BIAS_PULL_DOWN; break; - case GPIOD_LINE_CONFIG_BIAS_AS_IS: + case GPIOD_LINE_BIAS_AS_IS: case 0: break; default: @@ -507,10 +507,10 @@ static int gpiod_make_kernel_flags(uint64_t *flags, struct base_config *config) *flags |= GPIO_V2_LINE_FLAG_ACTIVE_LOW; switch (config->clock) { - case GPIOD_LINE_CONFIG_EVENT_CLOCK_REALTIME: + case GPIOD_LINE_EVENT_CLOCK_REALTIME: *flags |= GPIO_V2_LINE_FLAG_EVENT_CLOCK_REALTIME; break; - case GPIOD_LINE_CONFIG_EVENT_CLOCK_MONOTONIC: + case GPIOD_LINE_EVENT_CLOCK_MONOTONIC: case 0: break; default: diff --git a/tools/gpioget.c b/tools/gpioget.c index afa2ccb..965af3b 100644 --- a/tools/gpioget.c +++ b/tools/gpioget.c @@ -41,7 +41,7 @@ static void print_help(void) int main(int argc, char **argv) { - int direction = GPIOD_LINE_CONFIG_DIRECTION_INPUT; + int direction = GPIOD_LINE_DIRECTION_INPUT; int optc, opti, bias = 0, ret, *values; struct gpiod_request_config *req_cfg; unsigned int *offsets, i, num_lines; @@ -67,7 +67,7 @@ int main(int argc, char **argv) active_low = true; break; case 'n': - direction = GPIOD_LINE_CONFIG_DIRECTION_AS_IS; + direction = GPIOD_LINE_DIRECTION_AS_IS; break; case 'B': bias = parse_bias(optarg); diff --git a/tools/gpiomon.c b/tools/gpiomon.c index 66fbb13..740c249 100644 --- a/tools/gpiomon.c +++ b/tools/gpiomon.c @@ -225,11 +225,11 @@ int main(int argc, char **argv) argv += optind; if (watch_rising && !watch_falling) - edge = GPIOD_LINE_CONFIG_EDGE_RISING; + edge = GPIOD_LINE_EDGE_RISING; else if (watch_falling && !watch_rising) - edge = GPIOD_LINE_CONFIG_EDGE_FALLING; + edge = GPIOD_LINE_EDGE_FALLING; else - edge = GPIOD_LINE_CONFIG_EDGE_BOTH; + edge = GPIOD_LINE_EDGE_BOTH; if (argc < 1) die("gpiochip must be specified"); diff --git a/tools/gpioset.c b/tools/gpioset.c index bf90087..55fcfe9 100644 --- a/tools/gpioset.c +++ b/tools/gpioset.c @@ -179,9 +179,9 @@ static const struct mode_mapping *parse_mode(const char *mode) static int parse_drive(const char *option) { if (strcmp(option, "open-drain") == 0) - return GPIOD_LINE_CONFIG_DRIVE_OPEN_DRAIN; + return GPIOD_LINE_DRIVE_OPEN_DRAIN; if (strcmp(option, "open-source") == 0) - return GPIOD_LINE_CONFIG_DRIVE_OPEN_SOURCE; + return GPIOD_LINE_DRIVE_OPEN_SOURCE; if (strcmp(option, "push-pull") != 0) die("invalid drive: %s", option); return 0; @@ -301,8 +301,7 @@ int main(int argc, char **argv) gpiod_line_config_set_drive(line_cfg, drive); if (active_low) gpiod_line_config_set_active_low(line_cfg); - gpiod_line_config_set_direction(line_cfg, - GPIOD_LINE_CONFIG_DIRECTION_OUTPUT); + gpiod_line_config_set_direction(line_cfg, GPIOD_LINE_DIRECTION_OUTPUT); gpiod_line_config_set_output_values(line_cfg, num_lines, offsets, values); diff --git a/tools/tools-common.c b/tools/tools-common.c index 36724d5..f5fd50c 100644 --- a/tools/tools-common.c +++ b/tools/tools-common.c @@ -60,11 +60,11 @@ void print_version(void) int parse_bias(const char *option) { if (strcmp(option, "pull-down") == 0) - return GPIOD_LINE_CONFIG_BIAS_PULL_DOWN; + return GPIOD_LINE_BIAS_PULL_DOWN; if (strcmp(option, "pull-up") == 0) - return GPIOD_LINE_CONFIG_BIAS_PULL_UP; + return GPIOD_LINE_BIAS_PULL_UP; if (strcmp(option, "disable") == 0) - return GPIOD_LINE_CONFIG_BIAS_DISABLED; + return GPIOD_LINE_BIAS_DISABLED; if (strcmp(option, "as-is") != 0) die("invalid bias: %s", option); return 0; -- 2.30.1