linuxgpio: fix build with libgpiod < v2.0

Commit 83909096b8 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 <mhei@heimpold.de>
This commit is contained in:
Michael Heimpold
2024-04-26 22:28:58 +02:00
parent 6a75ac7057
commit 9ba3a9220b

View File

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