summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDenis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>2021-05-25 20:09:07 +0200
committerDenis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>2021-05-25 20:21:40 +0200
commit0e4a12765ce00d1005028cdfc1074b5ccb4da0c6 (patch)
tree509b833f16b6368e965cede4aa31678bb27218cb
parent9a44d04385208a35d9d0e1127c50c5585876447b (diff)
downloadexynos-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.c13
-rw-r--r--exynos4412_gpios_data.h1
-rw-r--r--main.c45
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);
diff --git a/main.c b/main.c
index 4a9fdb2..09e69be 100644
--- a/main.c
+++ b/main.c
@@ -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;