From 9ba3a9220b5a099bf2db64c0a362f9494bdbc2dd Mon Sep 17 00:00:00 2001 From: Michael Heimpold Date: Fri, 26 Apr 2024 22:28:58 +0200 Subject: [PATCH] linuxgpio: fix build with libgpiod < v2.0 Commit 83909096b8f29 introduced a regression with libgpiod versions below 2.0. Fix it by introducing a tiny helper function which returns the GPIO number (offset). Signed-off-by: Michael Heimpold --- src/linuxgpio.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/linuxgpio.c b/src/linuxgpio.c index e5fcf67f..9095445b 100644 --- a/src/linuxgpio.c +++ b/src/linuxgpio.c @@ -506,6 +506,14 @@ static inline int gpiod_line_get_value(struct gpiod_line *gpio_line) { #endif +static inline unsigned int linuxgpio_get_gpio_num(struct gpiod_line *gpio_line) { +#if HAVE_LIBGPIOD_V2 + return gpio_line->gpio_num; +#else + return gpiod_line_offset(gpio_line); +#endif +} + struct gpiod_line * linuxgpio_libgpiod_lines[N_PINS]; // Try to tell if libgpiod is going to work. @@ -588,7 +596,7 @@ static void linuxgpio_libgpiod_close(PROGRAMMER *pgm) { #endif if (r != 0) { msg_error("failed to set pin %u to input: %s\n", - linuxgpio_libgpiod_lines[i]->gpio_num, strerror(errno)); + linuxgpio_get_gpio_num(linuxgpio_libgpiod_lines[i]), strerror(errno)); } gpiod_line_release(linuxgpio_libgpiod_lines[i]); linuxgpio_libgpiod_lines[i] = NULL; @@ -604,7 +612,7 @@ static void linuxgpio_libgpiod_close(PROGRAMMER *pgm) { #endif if (r != 0) { msg_error("failed to set pin %u to input: %s\n", - linuxgpio_libgpiod_lines[PIN_AVR_RESET]->gpio_num, strerror(errno)); + linuxgpio_get_gpio_num(linuxgpio_libgpiod_lines[PIN_AVR_RESET]), strerror(errno)); } gpiod_line_release(linuxgpio_libgpiod_lines[PIN_AVR_RESET]); linuxgpio_libgpiod_lines[PIN_AVR_RESET] = NULL; @@ -630,7 +638,7 @@ static int linuxgpio_libgpiod_setpin(const PROGRAMMER *pgm, int pinfunc, int val int r = gpiod_line_set_value(linuxgpio_libgpiod_lines[pinfunc], value); if (r != 0) { msg_error("failed to set value of %s (%u) to %d: %s\n", avr_pin_name(pinfunc), - linuxgpio_libgpiod_lines[pinfunc]->gpio_num, value, strerror(errno)); + linuxgpio_get_gpio_num(linuxgpio_libgpiod_lines[pinfunc]), value, strerror(errno)); return -1; } @@ -656,7 +664,7 @@ static int linuxgpio_libgpiod_getpin(const PROGRAMMER *pgm, int pinfunc) { int r = gpiod_line_get_value(linuxgpio_libgpiod_lines[pinfunc]); if (r == -1) { - msg_error("failed to read %u: %s\n", linuxgpio_libgpiod_lines[pinfunc]->gpio_num, strerror(errno)); + msg_error("failed to read %u: %s\n", linuxgpio_get_gpio_num(linuxgpio_libgpiod_lines[pinfunc]), strerror(errno)); return -1; }