1 | // SPDX-License-Identifier: GPL-2.0-or-later |
2 | /* |
3 | * GPIO character device helper for reading chip information. |
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-chip-info <chip path> [name|label|num-lines]\n" ); |
20 | } |
21 | |
22 | int main(int argc, char **argv) |
23 | { |
24 | struct gpiochip_info info; |
25 | int fd, ret; |
26 | |
27 | if (argc != 3) { |
28 | print_usage(); |
29 | return EXIT_FAILURE; |
30 | } |
31 | |
32 | fd = open(argv[1], O_RDWR); |
33 | if (fd < 0) { |
34 | perror("unable to open the GPIO chip" ); |
35 | return EXIT_FAILURE; |
36 | } |
37 | |
38 | memset(&info, 0, sizeof(info)); |
39 | ret = ioctl(fd, GPIO_GET_CHIPINFO_IOCTL, &info); |
40 | if (ret) { |
41 | perror("chip info ioctl failed" ); |
42 | return EXIT_FAILURE; |
43 | } |
44 | |
45 | if (strcmp(argv[2], "name" ) == 0) { |
46 | printf("%s\n" , info.name); |
47 | } else if (strcmp(argv[2], "label" ) == 0) { |
48 | printf("%s\n" , info.label); |
49 | } else if (strcmp(argv[2], "num-lines" ) == 0) { |
50 | printf("%u\n" , info.lines); |
51 | } else { |
52 | fprintf(stderr, "unknown command: %s\n" , argv[2]); |
53 | return EXIT_FAILURE; |
54 | } |
55 | |
56 | return EXIT_SUCCESS; |
57 | } |
58 | |