diff options
| author | Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org> | 2021-05-25 20:09:07 +0200 |
|---|---|---|
| committer | Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org> | 2021-05-25 20:21:40 +0200 |
| commit | 0e4a12765ce00d1005028cdfc1074b5ccb4da0c6 (patch) | |
| tree | 509b833f16b6368e965cede4aa31678bb27218cb | |
| parent | 9a44d04385208a35d9d0e1127c50c5585876447b (diff) | |
| download | exynos-gpio-tool-0e4a12765ce00d1005028cdfc1074b5ccb4da0c6.tar.gz exynos-gpio-tool-0e4a12765ce00d1005028cdfc1074b5ccb4da0c6.tar.bz2 exynos-gpio-tool-0e4a12765ce00d1005028cdfc1074b5ccb4da0c6.zip | |
main: Add commands to dump GPL banks
Signed-off-by: Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
| -rw-r--r-- | exynos4412_gpios_data.c | 13 | ||||
| -rw-r--r-- | exynos4412_gpios_data.h | 1 | ||||
| -rw-r--r-- | main.c | 45 |
3 files changed, 57 insertions, 2 deletions
diff --git a/exynos4412_gpios_data.c b/exynos4412_gpios_data.c index e0143be..b73158f 100644 --- a/exynos4412_gpios_data.c +++ b/exynos4412_gpios_data.c @@ -431,3 +431,16 @@ off_t get_gpio_register_offset(int debug, char *gpio_bank_name, return offset; } + +int get_bank_gpio_numbers(int debug, char *gpio_bank_name) +{ + struct gpio_bank_data *gpio_bank_data; + + gpio_bank_data = get_gpio_bank_data(gpio_bank_name); + if (gpio_bank_data == NULL) { + errno = EINVAL; + return -1; + } + + return gpio_bank_data->nr_gpios; +} diff --git a/exynos4412_gpios_data.h b/exynos4412_gpios_data.h index 1fea6c7..0c960fa 100644 --- a/exynos4412_gpios_data.h +++ b/exynos4412_gpios_data.h @@ -88,6 +88,7 @@ enum gpio_power_down { int decode_gpio_data(int debug, char *bank, uint32_t gpio_offset, char* gpio_register_name, uint32_t *virt_addr); +int get_bank_gpio_numbers(int debug, char *gpio_bank_name); struct gpio_bank_data *get_gpio_bank_data(char *bank); off_t get_gpio_register_offset(int debug, char *gpio_bank_name, char *register_name); @@ -11,16 +11,21 @@ #include "compatible_devices.h" #include "exynos4412_gpios.h" +#include "exynos4412_gpios_data.h" #include "modem_gpios_data.h" #include "tests.h" int usage(char* progname) { - printf("Usage: %s [test|flash]\n", progname); + printf("Usage: %s <flash|gpl1|gpl2|test>\n", progname); printf("\n"); printf("Available commands:\n"); - printf("\ttest: run self tests\n"); printf("\tflash: dump flash GPIO (gpj1 1) status\n"); + printf("\tgpl1: dump GPL1 GPIOs status" + " (for tests on gpio127 and gpio128)\n"); + printf("\tgpl2: dump GPL2 GPIOs status" + " (for tests on gpio127 and gpio128)\n"); + printf("\ttest: run self tests\n"); return 0; } @@ -40,6 +45,36 @@ int dump_flash_gpio_status(int debug, char* devmem, int fd, size_t page_size) return 0; } +int dump_gpio_bank_status(int debug, char* devmem, int fd, size_t page_size, + char* bank) +{ + int i; + int nr_gpios; + int rc; + + nr_gpios = get_bank_gpio_numbers(debug, bank); + if (nr_gpios == -1) { + /* The get_bank_gpio_numbers function + * already prints some error + */ + + /* TODO: return more precise error */ + return EX_UNAVAILABLE; + } + + for (i=0; i < nr_gpios; i++) { + rc = dump_gpio_infos(devmem, fd, page_size, bank, i); + if (rc == -1) { + printf("dump_gpio_infos failed with error %d\n", rc); + + /* TODO: return more precise error */ + return EX_UNAVAILABLE; + } + } + + return 0; +} + int main(int argc, char *argv[]) { int fd = 0; @@ -80,6 +115,12 @@ int main(int argc, char *argv[]) return run_tests(debug, devmem, fd, page_size); } else if (argc == 2 && !strcmp("flash", argv[1])) { return dump_flash_gpio_status(debug, devmem, fd, page_size); + } else if (argc == 2 && !strcmp("gpl1", argv[1])) { + return dump_gpio_bank_status(debug, devmem, fd, page_size, + "gpl1"); + } else if (argc == 2 && !strcmp("gpl2", argv[1])) { + return dump_gpio_bank_status(debug, devmem, fd, page_size, + "gpl2"); } else { usage(argv[0]); return EX_USAGE; |
