summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDenis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>2021-06-02 16:15:36 +0200
committerDenis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>2021-06-02 16:15:36 +0200
commit7744ec8ec80b08747b5dca683fbf30712aed1199 (patch)
treef3963c9f8f112219a0680f7521f796d977cb4bc3
parenta4a6b9237cd01da78206de8894a1a009705ce796 (diff)
downloadexynos-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.c21
-rw-r--r--exynos4412_gpios.h5
-rw-r--r--tests.c24
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);