Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

selftests: gpio: add a helper for reading GPIO line names

Add a simple program that allows to read GPIO line names from the
character device. This will be used in gpio-sim selftests.

Signed-off-by: Bartosz Golaszewski <brgl@bgdev.pl>

+57 -1
+1
tools/testing/selftests/gpio/.gitignore
··· 1 1 # SPDX-License-Identifier: GPL-2.0-only 2 2 gpio-mockup-cdev 3 3 gpio-chip-info 4 + gpio-line-name
+1 -1
tools/testing/selftests/gpio/Makefile
··· 2 2 3 3 TEST_PROGS := gpio-mockup.sh 4 4 TEST_FILES := gpio-mockup-sysfs.sh 5 - TEST_GEN_PROGS_EXTENDED := gpio-mockup-cdev gpio-chip-info 5 + TEST_GEN_PROGS_EXTENDED := gpio-mockup-cdev gpio-chip-info gpio-line-name 6 6 7 7 include ../lib.mk
+55
tools/testing/selftests/gpio/gpio-line-name.c
··· 1 + // SPDX-License-Identifier: GPL-2.0-or-later 2 + /* 3 + * GPIO character device helper for reading line names. 4 + * 5 + * Copyright (C) 2021 Bartosz Golaszewski <brgl@bgdev.pl> 6 + */ 7 + 8 + #include <fcntl.h> 9 + #include <linux/gpio.h> 10 + #include <stdio.h> 11 + #include <stdlib.h> 12 + #include <string.h> 13 + #include <sys/ioctl.h> 14 + #include <sys/types.h> 15 + 16 + static void print_usage(void) 17 + { 18 + printf("usage:\n"); 19 + printf(" gpio-line-name <chip path> <line offset>\n"); 20 + } 21 + 22 + int main(int argc, char **argv) 23 + { 24 + struct gpio_v2_line_info info; 25 + int fd, ret; 26 + char *endp; 27 + 28 + if (argc != 3) { 29 + print_usage(); 30 + return EXIT_FAILURE; 31 + } 32 + 33 + fd = open(argv[1], O_RDWR); 34 + if (fd < 0) { 35 + perror("unable to open the GPIO chip"); 36 + return EXIT_FAILURE; 37 + } 38 + 39 + memset(&info, 0, sizeof(info)); 40 + info.offset = strtoul(argv[2], &endp, 10); 41 + if (*endp != '\0') { 42 + print_usage(); 43 + return EXIT_FAILURE; 44 + } 45 + 46 + ret = ioctl(fd, GPIO_V2_GET_LINEINFO_IOCTL, &info); 47 + if (ret) { 48 + perror("line info ioctl failed"); 49 + return EXIT_FAILURE; 50 + } 51 + 52 + printf("%s\n", info.name); 53 + 54 + return EXIT_SUCCESS; 55 + }