| // SPDX-License-Identifier: GPL-2.0-or-later | |
| /* | |
| * GPIO character device helper for reading chip information. | |
| * | |
| * 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-chip-info <chip path> [name|label|num-lines]\n"); | |
| } | |
| int main(int argc, char **argv) | |
| { | |
| struct gpiochip_info info; | |
| int fd, ret; | |
| 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)); | |
| ret = ioctl(fd, GPIO_GET_CHIPINFO_IOCTL, &info); | |
| if (ret) { | |
| perror("chip info ioctl failed"); | |
| return EXIT_FAILURE; | |
| } | |
| if (strcmp(argv[2], "name") == 0) { | |
| printf("%s\n", info.name); | |
| } else if (strcmp(argv[2], "label") == 0) { | |
| printf("%s\n", info.label); | |
| } else if (strcmp(argv[2], "num-lines") == 0) { | |
| printf("%u\n", info.lines); | |
| } else { | |
| fprintf(stderr, "unknown command: %s\n", argv[2]); | |
| return EXIT_FAILURE; | |
| } | |
| return EXIT_SUCCESS; | |
| } |