On Thu, Jul 29, 2021 at 1:46 AM Ben Hutchings <ben.hutchings@xxxxxxx> wrote: > > gpioinfo shows most settings for each GPIO line, but currently misses > edge detection and debouncing. > > * If edge detection is enabled, report it as an additional flag > * If debouncing is enabled, report the duration > > Signed-off-by: Ben Hutchings <ben.hutchings@xxxxxxx> > --- > tools/gpioinfo.c | 33 +++++++++++++++++++++++++++++++++ > 1 file changed, 33 insertions(+) > > diff --git a/tools/gpioinfo.c b/tools/gpioinfo.c > index cd2b9e4..ed0018c 100644 > --- a/tools/gpioinfo.c > +++ b/tools/gpioinfo.c > @@ -44,6 +44,21 @@ static bool line_drive_is_open_source(struct gpiod_line_info *info) > return gpiod_line_info_get_drive(info) == GPIOD_LINE_DRIVE_OPEN_SOURCE; > } > > +static bool edge_detection_is_rising(struct gpiod_line_info *info) > +{ > + return gpiod_line_info_get_edge_detection(info) == GPIOD_LINE_EDGE_RISING; > +} > + > +static bool edge_detection_is_falling(struct gpiod_line_info *info) > +{ > + return gpiod_line_info_get_edge_detection(info) == GPIOD_LINE_EDGE_FALLING; > +} > + > +static bool edge_detection_is_both(struct gpiod_line_info *info) > +{ > + return gpiod_line_info_get_edge_detection(info) == GPIOD_LINE_EDGE_BOTH; > +} > + > static const struct flag flags[] = { > { > .name = "used", > @@ -69,6 +84,18 @@ static const struct flag flags[] = { > .name = "bias-disabled", > .is_set = line_bias_is_disabled, > }, > + { > + .name = "edge-rising", > + .is_set = edge_detection_is_rising, > + }, > + { > + .name = "edge-failling", > + .is_set = edge_detection_is_falling, > + }, > + { > + .name = "edge-both", > + .is_set = edge_detection_is_both, > + }, > }; > > static const struct option longopts[] = { > @@ -129,6 +156,7 @@ static void list_lines(struct gpiod_chip *chip) > const char *name, *consumer; > unsigned int i, offset; > int direction; > + unsigned long debounce_period; > > printf("%s - %u lines:\n", > gpiod_chip_get_name(chip), gpiod_chip_get_num_lines(chip)); > @@ -142,6 +170,8 @@ static void list_lines(struct gpiod_chip *chip) > consumer = gpiod_line_info_get_consumer(info); > direction = gpiod_line_info_get_direction(info); > active_low = gpiod_line_info_is_active_low(info); > + debounce_period = gpiod_line_info_is_debounced(info) ? > + gpiod_line_info_get_debounce_period(info) : 0; > > of = false; > > @@ -166,6 +196,9 @@ static void list_lines(struct gpiod_chip *chip) > prinfo(&of, 13, "%s ", > active_low ? "active-low" : "active-high"); > > + if (debounce_period) > + printf("debounce=%lu ", debounce_period); You should use prinfo here for formatting. But it would be even better if this became a flag - like the bias, drive etc settings and be shown inside the [] brackets at the end of the line - something like: "[pull-up, used, debounce-period=1000us]". Bart > + > flag_printed = false; > for (i = 0; i < ARRAY_SIZE(flags); i++) { > if (flags[i].is_set(info)) { > -- > 2.20.1