]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/blobdiff - tools/gpio/gpio-hammer.c
Merge tag 'xarray-5.9' of git://git.infradead.org/users/willy/xarray
[mirror_ubuntu-jammy-kernel.git] / tools / gpio / gpio-hammer.c
index 9fd926e8cb5248377c775012786b1dafaeb092ab..54fdf59dd320def06f572e24eee826a770c0fa8b 100644 (file)
 #include <linux/gpio.h>
 #include "gpio-utils.h"
 
-int hammer_device(const char *device_name, unsigned int *lines, int nlines,
+int hammer_device(const char *device_name, unsigned int *lines, int num_lines,
                  unsigned int loops)
 {
-       struct gpiohandle_data data;
+       struct gpio_v2_line_values values;
+       struct gpio_v2_line_config config;
        char swirr[] = "-\\|/";
        int fd;
        int ret;
        int i, j;
        unsigned int iteration = 0;
 
-       memset(&data.values, 0, sizeof(data.values));
-       ret = gpiotools_request_linehandle(device_name, lines, nlines,
-                                          GPIOHANDLE_REQUEST_OUTPUT, &data,
-                                          "gpio-hammer");
+       memset(&config, 0, sizeof(config));
+       config.flags = GPIO_V2_LINE_FLAG_OUTPUT;
+
+       ret = gpiotools_request_line(device_name, lines, num_lines,
+                                    &config, "gpio-hammer");
        if (ret < 0)
                goto exit_error;
        else
                fd = ret;
 
-       ret = gpiotools_get_values(fd, &data);
+       values.mask = 0;
+       values.bits = 0;
+       for (i = 0; i < num_lines; i++)
+               gpiotools_set_bit(&values.mask, i);
+
+       ret = gpiotools_get_values(fd, &values);
        if (ret < 0)
                goto exit_close_error;
 
        fprintf(stdout, "Hammer lines [");
-       for (i = 0; i < nlines; i++) {
+       for (i = 0; i < num_lines; i++) {
                fprintf(stdout, "%d", lines[i]);
-               if (i != (nlines - 1))
+               if (i != (num_lines - 1))
                        fprintf(stdout, ", ");
        }
        fprintf(stdout, "] on %s, initial states: [", device_name);
-       for (i = 0; i < nlines; i++) {
-               fprintf(stdout, "%d", data.values[i]);
-               if (i != (nlines - 1))
+       for (i = 0; i < num_lines; i++) {
+               fprintf(stdout, "%d", gpiotools_test_bit(values.bits, i));
+               if (i != (num_lines - 1))
                        fprintf(stdout, ", ");
        }
        fprintf(stdout, "]\n");
@@ -63,15 +70,15 @@ int hammer_device(const char *device_name, unsigned int *lines, int nlines,
        j = 0;
        while (1) {
                /* Invert all lines so we blink */
-               for (i = 0; i < nlines; i++)
-                       data.values[i] = !data.values[i];
+               for (i = 0; i < num_lines; i++)
+                       gpiotools_change_bit(&values.bits, i);
 
-               ret = gpiotools_set_values(fd, &data);
+               ret = gpiotools_set_values(fd, &values);
                if (ret < 0)
                        goto exit_close_error;
 
                /* Re-read values to get status */
-               ret = gpiotools_get_values(fd, &data);
+               ret = gpiotools_get_values(fd, &values);
                if (ret < 0)
                        goto exit_close_error;
 
@@ -81,9 +88,10 @@ int hammer_device(const char *device_name, unsigned int *lines, int nlines,
                        j = 0;
 
                fprintf(stdout, "[");
-               for (i = 0; i < nlines; i++) {
-                       fprintf(stdout, "%d: %d", lines[i], data.values[i]);
-                       if (i != (nlines - 1))
+               for (i = 0; i < num_lines; i++) {
+                       fprintf(stdout, "%d: %d", lines[i],
+                               gpiotools_test_bit(values.bits, i));
+                       if (i != (num_lines - 1))
                                fprintf(stdout, ", ");
                }
                fprintf(stdout, "]\r");
@@ -97,7 +105,7 @@ int hammer_device(const char *device_name, unsigned int *lines, int nlines,
        ret = 0;
 
 exit_close_error:
-       gpiotools_release_linehandle(fd);
+       gpiotools_release_line(fd);
 exit_error:
        return ret;
 }
@@ -121,7 +129,7 @@ int main(int argc, char **argv)
        const char *device_name = NULL;
        unsigned int lines[GPIOHANDLES_MAX];
        unsigned int loops = 0;
-       int nlines;
+       int num_lines;
        int c;
        int i;
 
@@ -158,11 +166,11 @@ int main(int argc, char **argv)
                return -1;
        }
 
-       nlines = i;
+       num_lines = i;
 
-       if (!device_name || !nlines) {
+       if (!device_name || !num_lines) {
                print_usage();
                return -1;
        }
-       return hammer_device(device_name, lines, nlines, loops);
+       return hammer_device(device_name, lines, num_lines, loops);
 }