diff options
| author | Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org> | 2021-06-02 16:15:36 +0200 |
|---|---|---|
| committer | Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org> | 2021-06-02 16:15:36 +0200 |
| commit | 7744ec8ec80b08747b5dca683fbf30712aed1199 (patch) | |
| tree | f3963c9f8f112219a0680f7521f796d977cb4bc3 | |
| parent | a4a6b9237cd01da78206de8894a1a009705ce796 (diff) | |
| download | exynos-gpio-tool-7744ec8ec80b08747b5dca683fbf30712aed1199.tar.gz exynos-gpio-tool-7744ec8ec80b08747b5dca683fbf30712aed1199.tar.bz2 exynos-gpio-tool-7744ec8ec80b08747b5dca683fbf30712aed1199.zip | |
gpio_get_direction: use global mmap space
Signed-off-by: Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
| -rw-r--r-- | exynos4412_gpios.c | 21 | ||||
| -rw-r--r-- | exynos4412_gpios.h | 5 | ||||
| -rw-r--r-- | tests.c | 24 |
3 files changed, 26 insertions, 24 deletions
diff --git a/exynos4412_gpios.c b/exynos4412_gpios.c index 9e3170a..190a864 100644 --- a/exynos4412_gpios.c +++ b/exynos4412_gpios.c @@ -120,11 +120,11 @@ int dump_gpio_infos(int debug, char *devmem, int fd, size_t page_size, return 0; } -int gpio_get_direction(char *devmem, int fd, size_t page_size, char *bank, - uint32_t gpio_offset) +int gpio_get_direction(char *devmem, int fd, size_t page_size, + void *gpio_hardware_blocks_addr, + char *bank, uint32_t gpio_offset) { int debug = 0; - uint32_t *addr; int rc; off_t offset = 0; @@ -137,19 +137,8 @@ int gpio_get_direction(char *devmem, int fd, size_t page_size, char *bank, return -1; } - addr = mmap_gpio_hardware_blocks(debug, devmem, fd, page_size) + offset; - if (addr == NULL) { - /* mmap_gpio_bank already prints an error */ - return -1; - } - - if (debug) { - printf("%s: Mapped at %p\n", __func__, addr); - print_gpio_banks_data(); - } - - rc = decode_gpio_data(debug, bank, gpio_offset, - "con", addr); + addr = gpio_hardware_blocks_addr + offset; + rc = decode_gpio_data(debug, bank, gpio_offset, "con", addr); if (rc == -1) { rc = errno; printf("%s:" diff --git a/exynos4412_gpios.h b/exynos4412_gpios.h index 44c00fc..4aa2771 100644 --- a/exynos4412_gpios.h +++ b/exynos4412_gpios.h @@ -23,8 +23,9 @@ int dump_gpio_infos(int debug, char *devmem, int fd, size_t page_size, void *gpio_hardware_blocks_addr, char *bank, uint32_t gpio_offset); -int gpio_get_direction(char *devmem, int fd, size_t page_size, char *bank, - uint32_t gpio_offset); +int gpio_get_direction(char *devmem, int fd, size_t page_size, + void *gpio_hardware_blocks_addr, + char *bank, uint32_t gpio_offset); int gpio_get_output_value(char *devmem, int fd, size_t page_size, char *bank, uint32_t gpio_offset); void *mmap_gpio_hardware_blocks(int debug, char *devmem, int fd, @@ -79,7 +79,9 @@ static int test_output_value_with_libgpiod(int debug, char *devmem, int fd, free(gpioset_high_command); - rc = gpio_get_direction(devmem, fd, page_size, bank, gpio_offset); + rc = gpio_get_direction(devmem, fd, page_size, + gpio_hardware_blocks_addr, + bank, gpio_offset); assert (rc == GPIO_OUTPUT); rc = gpio_get_output_value(devmem, fd, page_size, bank, gpio_offset); assert (rc == GPIO_VALUE_HIGH); @@ -96,7 +98,9 @@ static int test_output_value_with_libgpiod(int debug, char *devmem, int fd, rc = run_command(debug, gpioset_low_command); assert(rc == 0); - rc = gpio_get_direction(devmem, fd, page_size, bank, gpio_offset); + rc = gpio_get_direction(devmem, fd, page_size, + gpio_hardware_blocks_addr, + bank, gpio_offset); assert (rc == GPIO_OUTPUT); rc = gpio_get_output_value(devmem, fd, page_size, bank, gpio_offset); @@ -129,7 +133,9 @@ static int test_flash_with_devmem2(int debug, char *devmem, int fd, /* GPJ1CON[4:7] with bit 4 to 7 at 0 => 0xnn0n (n == don't care) */ rc = run_command(debug, "devmem2 0x11400260 w 0x2000"); assert(rc == 0); - rc = gpio_get_direction(devmem, fd, page_size, "gpj1", 1); + rc = gpio_get_direction(devmem, fd, page_size, + gpio_hardware_blocks_addr, + "gpj1", 1); assert (rc == GPIO_INPUT); printf("[ OK ] devmem2 GPIO input test\n"); @@ -139,7 +145,9 @@ static int test_flash_with_devmem2(int debug, char *devmem, int fd, /* GPJ1CON[4:7] with bit 1 @ 1 and the rest at 0 => 1<<5 == 0x20 */ rc = run_command(debug, "devmem2 0x11400260 w 0x2020"); assert(rc == 0); - rc = gpio_get_direction(devmem, fd, page_size, "gpj1", 1); + rc = gpio_get_direction(devmem, fd, page_size, + gpio_hardware_blocks_addr, + "gpj1", 1); assert (rc == GPIO_OUTPUT); printf("[ OK ] devmem2 GPIO output test\n"); @@ -200,7 +208,9 @@ static int test_direction_with_libgpiod(int debug, char *devmem, int fd, free(gpioget_command); - rc = gpio_get_direction(devmem, fd, page_size, bank, gpio_offset); + rc = gpio_get_direction(devmem, fd, page_size, + gpio_hardware_blocks_addr, + bank, gpio_offset); assert (rc == GPIO_INPUT); rc = asprintf(&gpioset_command, "gpioset %s %d=1", bank, @@ -215,7 +225,9 @@ static int test_direction_with_libgpiod(int debug, char *devmem, int fd, rc = run_command(debug, gpioset_command); assert(rc == 0); - rc = gpio_get_direction(devmem, fd, page_size, bank, gpio_offset); + rc = gpio_get_direction(devmem, fd, page_size, + gpio_hardware_blocks_addr, + bank, gpio_offset); assert (rc == GPIO_OUTPUT); free(gpioset_command); |
