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; }