From 7744ec8ec80b08747b5dca683fbf30712aed1199 Mon Sep 17 00:00:00 2001 From: Denis 'GNUtoo' Carikli Date: Wed, 2 Jun 2021 16:15:36 +0200 Subject: gpio_get_direction: use global mmap space Signed-off-by: Denis 'GNUtoo' Carikli --- exynos4412_gpios.c | 21 +++++---------------- exynos4412_gpios.h | 5 +++-- 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, diff --git a/tests.c b/tests.c index 8e74438..2956219 100644 --- a/tests.c +++ b/tests.c @@ -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); -- cgit v1.2.3