58 lines · c
1// SPDX-License-Identifier: GPL-2.0-or-later2/*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 16static void print_usage(void)17{18 printf("usage:\n");19 printf(" gpio-chip-info <chip path> [name|label|num-lines]\n");20}21 22int 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