diff --git a/gpio.c b/gpio.c index ea97278..0729b62 100644 --- a/gpio.c +++ b/gpio.c @@ -323,35 +323,35 @@ static struct display_ops gpio_ops = { void export_gpios(void) { FILE *fgpio, *fgpio_export; - int ret = 0, gpio[256], num = 0; - char *line; - ssize_t read, len; + char *line = NULL; + ssize_t read; + size_t len; + int i; + int max_gpio = 0; fgpio = fopen("/sys/kernel/debug/gpio", "r"); if (!fgpio) { printf("failed to read debugfs gpio file\n"); - ret = -1; goto out; } fgpio_export = fopen("/sys/class/gpio/export", "w"); if (!fgpio_export) { printf("failed to write open gpio-export file\n"); - ret = -1; goto out; } /* export the gpios */ - while (read = getline(&line, &len, fgpio) != -1) { - char *str; - - if (strstr(line, "gpio-")) { - str = strtok(line, " "); - sscanf(str, "gpio-%d", &gpio[num]); - fprintf(fgpio_export, "%d", gpio[num]); - num++; - } + while ((read = getline(&line, &len, fgpio)) != -1) { + if (strstr(line, "GPIOs ")) + sscanf(line, "GPIOs %*d-%d", &max_gpio); } + + for (i = 1; i <= max_gpio; i++) { + fprintf(fgpio_export, "%d", i); + fflush(NULL); + } + out: return; } diff --git a/regulator.c b/regulator.c index 27d75b6..8cf9288 100644 --- a/regulator.c +++ b/regulator.c @@ -28,6 +28,8 @@ #include #include #include +#include + #include "display.h" #include "powerdebug.h" #include "tree.h" diff --git a/sensor.c b/sensor.c index bf67277..e4174eb 100644 --- a/sensor.c +++ b/sensor.c @@ -21,6 +21,7 @@ #include #include #include +#include #include "powerdebug.h" #include "display.h"