Coverage Report

Created: 2026-10-13 06:38

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/barebox/commands/gpio.c
Line
Count
Source
1
// SPDX-License-Identifier: GPL-2.0-or-later
2
3
#include <common.h>
4
#include <command.h>
5
#include <errno.h>
6
#include <gpio.h>
7
#include <getopt.h>
8
9
static int get_gpio_and_value(int argc, char *argv[],
10
            int *gpio, int *value)
11
0
{
12
0
  struct gpio_chip *chip = NULL;
13
0
  struct device *dev;
14
0
  int count = 1;
15
0
  int ret = 0;
16
0
  int opt;
17
18
0
  while ((opt = getopt(argc, argv, "d:")) > 0) {
19
0
    switch (opt) {
20
0
    case 'd':
21
0
      dev = find_device(optarg);
22
0
      if (!dev)
23
0
        return -ENODEV;
24
25
0
      chip = gpio_get_chip_by_dev(dev);
26
0
      if (!chip)
27
0
        return -EINVAL;
28
0
      break;
29
0
    default:
30
0
      return COMMAND_ERROR_USAGE;
31
0
    }
32
0
  }
33
34
0
  if (value)
35
0
    count++;
36
37
0
  if (argc < optind + count)
38
0
    return COMMAND_ERROR_USAGE;
39
40
0
  *gpio = gpio_find_by_name(argv[optind]);
41
0
  if (*gpio < 0)
42
0
    *gpio = gpio_find_by_label(argv[optind]);
43
0
  if (*gpio < 0) {
44
0
    ret = kstrtoint(argv[optind], 0, gpio);
45
0
    if (ret < 0)
46
0
      return ret;
47
48
0
    if (chip)
49
0
      *gpio += chip->base;
50
0
  } else if (chip) {
51
0
    if (gpio_get_chip(*gpio) != chip) {
52
0
      printf("%s: not exporting pin %u\n", dev_name(chip->dev), *gpio);
53
0
      return -EINVAL;
54
0
    }
55
0
  }
56
57
0
  if (value)
58
0
    ret = kstrtoint(argv[optind + 1], 0, value);
59
60
0
  return ret;
61
0
}
62
63
static int do_gpio_get_value(int argc, char *argv[])
64
0
{
65
0
  int gpio, value, ret;
66
67
0
  ret = get_gpio_and_value(argc, argv, &gpio, NULL);
68
0
  if (ret)
69
0
    return ret;
70
71
0
  value = gpio_get_value(gpio);
72
0
  if (value < 0)
73
0
    return 1;
74
75
0
  return value;
76
0
}
77
78
BAREBOX_CMD_START(gpio_get_value)
79
  .cmd    = do_gpio_get_value,
80
  BAREBOX_CMD_DESC("return value of a GPIO pin")
81
  BAREBOX_CMD_OPTS("[-d CONTROLLER] GPIO")
82
  BAREBOX_CMD_GROUP(CMD_GRP_HWMANIP)
83
BAREBOX_CMD_END
84
85
static int do_gpio_set_value(int argc, char *argv[])
86
0
{
87
0
  int gpio, value, ret;
88
89
0
  ret = get_gpio_and_value(argc, argv, &gpio, &value);
90
0
  if (ret)
91
0
    return ret;
92
93
0
  gpio_set_value(gpio, value);
94
95
0
  return 0;
96
0
}
97
98
BAREBOX_CMD_START(gpio_set_value)
99
  .cmd    = do_gpio_set_value,
100
  BAREBOX_CMD_DESC("set a GPIO's output value")
101
  BAREBOX_CMD_OPTS("[-d CONTROLLER] GPIO VALUE")
102
  BAREBOX_CMD_GROUP(CMD_GRP_HWMANIP)
103
BAREBOX_CMD_END
104
105
static int do_gpio_direction_input(int argc, char *argv[])
106
0
{
107
0
  int gpio, ret;
108
109
0
  ret = get_gpio_and_value(argc, argv, &gpio, NULL);
110
0
  if (ret)
111
0
    return ret;
112
113
0
  ret = gpio_direction_input(gpio);
114
0
  if (ret)
115
0
    return 1;
116
117
0
  return 0;
118
0
}
119
120
BAREBOX_CMD_START(gpio_direction_input)
121
  .cmd    = do_gpio_direction_input,
122
  BAREBOX_CMD_DESC("set direction of a GPIO pin to input")
123
  BAREBOX_CMD_OPTS("[-d CONTROLLER] GPIO")
124
  BAREBOX_CMD_GROUP(CMD_GRP_HWMANIP)
125
BAREBOX_CMD_END
126
127
static int do_gpio_direction_output(int argc, char *argv[])
128
0
{
129
0
  int gpio, value, ret;
130
131
0
  ret = get_gpio_and_value(argc, argv, &gpio, &value);
132
0
  if (ret)
133
0
    return ret;
134
135
0
  ret = gpio_direction_output(gpio, value);
136
0
  if (ret)
137
0
    return 1;
138
139
0
  return 0;
140
0
}
141
142
BAREBOX_CMD_START(gpio_direction_output)
143
  .cmd    = do_gpio_direction_output,
144
  BAREBOX_CMD_DESC("set direction of a GPIO pin to output")
145
  BAREBOX_CMD_OPTS("[-d CONTROLLER] GPIO VALUE")
146
  BAREBOX_CMD_GROUP(CMD_GRP_HWMANIP)
147
BAREBOX_CMD_END