From: Kent Gibson Date: Fri, 15 Nov 2019 14:43:37 +0000 (+0800) Subject: core: move request flag to handle flag conversion into a separate function X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=334e4d2aaf8d2e6723411ec06d2eb6fda3ae06b4;p=qemu-gpiodev%2Flibgpiod.git core: move request flag to handle flag conversion into a separate function Move common conversion code from line_request_values and line_request_event_single() into a separate function to simplify adding additional flags. Signed-off-by: Kent Gibson Signed-off-by: Bartosz Golaszewski --- diff --git a/lib/core.c b/lib/core.c index a04514e..f05e595 100644 --- a/lib/core.c +++ b/lib/core.c @@ -463,6 +463,20 @@ static bool line_bulk_all_free(struct gpiod_line_bulk *bulk) return true; } +static __u32 line_request_flag_to_gpio_handleflag(int flags) +{ + int hflags = 0; + + if (flags & GPIOD_LINE_REQUEST_FLAG_OPEN_DRAIN) + hflags |= GPIOHANDLE_REQUEST_OPEN_DRAIN; + if (flags & GPIOD_LINE_REQUEST_FLAG_OPEN_SOURCE) + hflags |= GPIOHANDLE_REQUEST_OPEN_SOURCE; + if (flags & GPIOD_LINE_REQUEST_FLAG_ACTIVE_LOW) + hflags |= GPIOHANDLE_REQUEST_ACTIVE_LOW; + + return hflags; +} + static int line_request_values(struct gpiod_line_bulk *bulk, const struct gpiod_line_request_config *config, const int *default_vals) @@ -488,19 +502,14 @@ static int line_request_values(struct gpiod_line_bulk *bulk, memset(&req, 0, sizeof(req)); - if (config->flags & GPIOD_LINE_REQUEST_FLAG_OPEN_DRAIN) - req.flags |= GPIOHANDLE_REQUEST_OPEN_DRAIN; - if (config->flags & GPIOD_LINE_REQUEST_FLAG_OPEN_SOURCE) - req.flags |= GPIOHANDLE_REQUEST_OPEN_SOURCE; - if (config->flags & GPIOD_LINE_REQUEST_FLAG_ACTIVE_LOW) - req.flags |= GPIOHANDLE_REQUEST_ACTIVE_LOW; + req.lines = gpiod_line_bulk_num_lines(bulk); + req.flags = line_request_flag_to_gpio_handleflag(config->flags); if (config->request_type == GPIOD_LINE_REQUEST_DIRECTION_INPUT) req.flags |= GPIOHANDLE_REQUEST_INPUT; else if (config->request_type == GPIOD_LINE_REQUEST_DIRECTION_OUTPUT) req.flags |= GPIOHANDLE_REQUEST_OUTPUT; - req.lines = gpiod_line_bulk_num_lines(bulk); gpiod_line_bulk_foreach_line_off(bulk, line, i) { req.lineoffsets[i] = gpiod_line_offset(line); @@ -548,15 +557,9 @@ static int line_request_event_single(struct gpiod_line *line, sizeof(req.consumer_label) - 1); req.lineoffset = gpiod_line_offset(line); + req.handleflags = line_request_flag_to_gpio_handleflag(config->flags); req.handleflags |= GPIOHANDLE_REQUEST_INPUT; - if (config->flags & GPIOD_LINE_REQUEST_FLAG_OPEN_DRAIN) - req.handleflags |= GPIOHANDLE_REQUEST_OPEN_DRAIN; - if (config->flags & GPIOD_LINE_REQUEST_FLAG_OPEN_SOURCE) - req.handleflags |= GPIOHANDLE_REQUEST_OPEN_SOURCE; - if (config->flags & GPIOD_LINE_REQUEST_FLAG_ACTIVE_LOW) - req.handleflags |= GPIOHANDLE_REQUEST_ACTIVE_LOW; - if (config->request_type == GPIOD_LINE_REQUEST_EVENT_RISING_EDGE) req.eventflags |= GPIOEVENT_REQUEST_RISING_EDGE; else if (config->request_type == GPIOD_LINE_REQUEST_EVENT_FALLING_EDGE)