| // SPDX-License-Identifier: GPL-2.0-or-later |
| /* |
| * GPIO character device helper for reading line names. |
| * |
| * Copyright (C) 2021 Bartosz Golaszewski <brgl@bgdev.pl> |
| */ |
| |
| #include <fcntl.h> |
| #include <linux/gpio.h> |
| #include <stdio.h> |
| #include <stdlib.h> |
| #include <string.h> |
| #include <sys/ioctl.h> |
| #include <sys/types.h> |
| |
| static void print_usage(void) |
| { |
| printf("usage:\n"); |
| printf(" gpio-line-name <chip path> <line offset>\n"); |
| } |
| |
| int main(int argc, char **argv) |
| { |
| struct gpio_v2_line_info info; |
| int fd, ret; |
| char *endp; |
| |
| if (argc != 3) { |
| print_usage(); |
| return EXIT_FAILURE; |
| } |
| |
| fd = open(argv[1], O_RDWR); |
| if (fd < 0) { |
| perror("unable to open the GPIO chip"); |
| return EXIT_FAILURE; |
| } |
| |
| memset(&info, 0, sizeof(info)); |
| info.offset = strtoul(argv[2], &endp, 10); |
| if (*endp != '\0') { |
| print_usage(); |
| return EXIT_FAILURE; |
| } |
| |
| ret = ioctl(fd, GPIO_V2_GET_LINEINFO_IOCTL, &info); |
| if (ret) { |
| perror("line info ioctl failed"); |
| return EXIT_FAILURE; |
| } |
| |
| printf("%s\n", info.name); |
| |
| return EXIT_SUCCESS; |
| } |