summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDenis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>2021-06-09 19:18:28 +0200
committerDenis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>2021-06-09 19:18:28 +0200
commit0db1ace160bc41ec11c85954da4ce39b93658851 (patch)
tree939c8502cbca4af88895164e1fc6ce561f5c048a
parente2d9ab665fc7b1414a9708a3b267a5facae814f5 (diff)
downloadexynos-gpio-tool-0db1ace160bc41ec11c85954da4ce39b93658851.tar.gz
exynos-gpio-tool-0db1ace160bc41ec11c85954da4ce39b93658851.tar.bz2
exynos-gpio-tool-0db1ace160bc41ec11c85954da4ce39b93658851.zip
Add working devmem2 value test
Signed-off-by: Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
-rw-r--r--tests.c64
1 files changed, 64 insertions, 0 deletions
diff --git a/tests.c b/tests.c
index 7de909d..9a4456c 100644
--- a/tests.c
+++ b/tests.c
@@ -230,6 +230,68 @@ static int test_direction_with_devmem2(int debug,
}
+static int test_output_value_with_devmem2(int debug,
+ struct memory_mapping *memory_mapping)
+{
+ char *gpio_high_command;
+ char *gpio_low_command;
+
+ off_t gpj1_dat_addr = 0x11400264;
+ unsigned long register_value;
+ int rc = 0;
+
+ /* Test output high for GPJ1 1 */
+ rc = read_word(debug, memory_mapping, gpj1_dat_addr, &register_value);
+ assert(rc == 0);
+
+ register_value |= (1<<1);
+
+ rc = asprintf(&gpio_high_command,
+ "devmem2 0x%lx w 0x%lx",
+ gpj1_dat_addr, register_value);
+ if (rc == -1) {
+ rc = errno;
+ printf("%s: asprintf failed with error %d: %s\n",
+ __func__, rc, strerror(rc));
+ assert(false);
+ }
+
+ rc = run_command(debug, gpio_high_command);
+ assert(rc == 0);
+
+ rc = gpio_get_output_value(debug, memory_mapping, "gpj1", 1);
+ assert (rc == GPIO_VALUE_HIGH);
+
+ /* Test output low for GPJ1 1 */
+ rc = read_word(debug, memory_mapping, gpj1_dat_addr, &register_value);
+ assert(rc == 0);
+
+ register_value &= 0xfffffffd;
+
+ rc = asprintf(&gpio_low_command,
+ "devmem2 0x%lx w 0x%lx",
+ gpj1_dat_addr, register_value);
+ if (rc == -1) {
+ rc = errno;
+ printf("%s: asprintf failed with error %d: %s\n",
+ __func__, rc, strerror(rc));
+ assert(false);
+ }
+
+ rc = run_command(debug, gpio_low_command);
+ assert(rc == 0);
+
+ rc = gpio_get_output_value(debug, memory_mapping, "gpj1", 1);
+ assert (rc == GPIO_VALUE_LOW);
+
+ /* Free resources */
+ free(gpio_high_command);
+ free(gpio_low_command);
+
+ return 0;
+
+}
+
int run_tests(int debug, struct memory_mapping *memory_mapping)
{
bool has_devmem2;
@@ -259,6 +321,8 @@ int run_tests(int debug, struct memory_mapping *memory_mapping)
if (has_devmem2) {
test_direction_with_devmem2(debug, memory_mapping);
printf("[ OK ] devmem2 GPIO direction test\n");
+ test_output_value_with_devmem2(debug, memory_mapping);
+ printf("[ OK ] devmem2 GPIO output value test\n");
} else {
printf("[ !! ] devmem2 not found: skipping"
" devmem2 direction and output tests\n");