staging: iio: Add notrigger mode for generic_buffer
authorKarol Wrona <k.wrona@samsung.com>
Tue, 4 Nov 2014 14:29:39 +0000 (15:29 +0100)
committerJonathan Cameron <jic23@kernel.org>
Wed, 5 Nov 2014 14:45:18 +0000 (14:45 +0000)
Some IIO devices do not use the triggers. This patch makes trigger setting
conditional so generic_buffer can be used when triggers are disabled.

Signed-off-by: Karol Wrona <k.wrona@samsung.com>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
drivers/staging/iio/Documentation/generic_buffer.c

index 044ea196aa6f6bc5b55fb2d56f4a07de160fe797..2671bf9433cb500889af3ed3b74092cc02bf292d 100644 (file)
@@ -158,11 +158,12 @@ int main(int argc, char **argv)
        char *buffer_access;
        int scan_size;
        int noevents = 0;
+       int notrigger = 0;
        char *dummy;
 
        struct iio_channel_info *channels;
 
-       while ((c = getopt(argc, argv, "l:w:c:et:n:")) != -1) {
+       while ((c = getopt(argc, argv, "l:w:c:et:n:g")) != -1) {
                switch (c) {
                case 'n':
                        device_name = optarg;
@@ -183,6 +184,9 @@ int main(int argc, char **argv)
                case 'l':
                        buf_len = strtoul(optarg, &dummy, 10);
                        break;
+               case 'g':
+                       notrigger = 1;
+                       break;
                case '?':
                        return -1;
                }
@@ -201,28 +205,32 @@ int main(int argc, char **argv)
        printf("iio device number being used is %d\n", dev_num);
 
        asprintf(&dev_dir_name, "%siio:device%d", iio_dir, dev_num);
-       if (trigger_name == NULL) {
-               /*
-                * Build the trigger name. If it is device associated its
-                * name is <device_name>_dev[n] where n matches the device
-                * number found above
-                */
-               ret = asprintf(&trigger_name,
-                              "%s-dev%d", device_name, dev_num);
-               if (ret < 0) {
-                       ret = -ENOMEM;
-                       goto error_ret;
+
+       if (!notrigger) {
+               if (trigger_name == NULL) {
+                       /*
+                        * Build the trigger name. If it is device associated
+                        * its name is <device_name>_dev[n] where n matches
+                        * the device number found above.
+                        */
+                       ret = asprintf(&trigger_name,
+                                      "%s-dev%d", device_name, dev_num);
+                       if (ret < 0) {
+                               ret = -ENOMEM;
+                               goto error_ret;
+                       }
                }
-       }
 
-       /* Verify the trigger exists */
-       trig_num = find_type_by_name(trigger_name, "trigger");
-       if (trig_num < 0) {
-               printf("Failed to find the trigger %s\n", trigger_name);
-               ret = -ENODEV;
-               goto error_free_triggername;
-       }
-       printf("iio trigger number being used is %d\n", trig_num);
+               /* Verify the trigger exists */
+               trig_num = find_type_by_name(trigger_name, "trigger");
+               if (trig_num < 0) {
+                       printf("Failed to find the trigger %s\n", trigger_name);
+                       ret = -ENODEV;
+                       goto error_free_triggername;
+               }
+               printf("iio trigger number being used is %d\n", trig_num);
+       } else
+               printf("trigger-less mode selected\n");
 
        /*
         * Parse the files in scan_elements to identify what channels are
@@ -246,14 +254,18 @@ int main(int argc, char **argv)
                ret = -ENOMEM;
                goto error_free_triggername;
        }
-       printf("%s %s\n", dev_dir_name, trigger_name);
-       /* Set the device trigger to be the data ready trigger found above */
-       ret = write_sysfs_string_and_verify("trigger/current_trigger",
-                                       dev_dir_name,
-                                       trigger_name);
-       if (ret < 0) {
-               printf("Failed to write current_trigger file\n");
-               goto error_free_buf_dir_name;
+
+       if (!notrigger) {
+               printf("%s %s\n", dev_dir_name, trigger_name);
+               /* Set the device trigger to be the data ready trigger found
+                * above */
+               ret = write_sysfs_string_and_verify("trigger/current_trigger",
+                                                   dev_dir_name,
+                                                   trigger_name);
+               if (ret < 0) {
+                       printf("Failed to write current_trigger file\n");
+                       goto error_free_buf_dir_name;
+               }
        }
 
        /* Setup ring buffer parameters */
@@ -323,9 +335,10 @@ int main(int argc, char **argv)
        if (ret < 0)
                goto error_close_buffer_access;
 
-       /* Disconnect the trigger - just write a dummy name. */
-       write_sysfs_string("trigger/current_trigger",
-                       dev_dir_name, "NULL");
+       if (!notrigger)
+               /* Disconnect the trigger - just write a dummy name. */
+               write_sysfs_string("trigger/current_trigger",
+                                  dev_dir_name, "NULL");
 
 error_close_buffer_access:
        close(fp);