OSDN Git Service

hrtimer: Use the new IIO hrtimer interface
authorAdriana Reus <adriana.reus@intel.com>
Thu, 14 May 2015 10:30:28 +0000 (13:30 +0300)
committerReus, Adriana <adriana.reus@intel.com>
Wed, 13 May 2015 14:07:57 +0000 (15:07 +0100)
After commit bca4c7102b5 ("iio: hrtimer: Move sampling_frequency to trigger dir")
the IIO trigger interface moved the sampling_frequency attribute from:

 /config/triggers/hrtimer-instanceX/sampling_frequency/

to

 /sys/bus/iio/devices/triggerX/sampling_frequency

Change-Id: I0979568102f1f6e3190b84caa507aac67b04fabc
Signed-off-by: Adriana Reus <adriana.reus@intel.com>
common.h
control.c
enumeration.c

index a6360ac..aa2951a 100644 (file)
--- a/common.h
+++ b/common.h
@@ -14,6 +14,7 @@
 #define DEV_FILE_PATH          "/dev/iio:device%d"
 #define BASE_PATH              "/sys/bus/iio/devices/iio:device%d/"
 #define TRIGGER_FILE_PATH      "/sys/bus/iio/devices/trigger%d/name"
+#define IIO_DEVICES            "/sys/bus/iio/devices/"
 
 #define CHANNEL_PATH           BASE_PATH "scan_elements/"
 #define ENABLE_PATH            BASE_PATH "buffer/enable"
@@ -30,7 +31,7 @@
 #define SENSOR_CALIB_BIAS_PATH BASE_PATH "in_%s_calibbias"
 #define MOUNTING_MATRIX_PATH   BASE_PATH "mounting_matrix"
 
-#define CONFIGFS_TRIGGER_PATH  "/config/iio/triggers/"
+#define CONFIGFS_TRIGGER_PATH  "/sys/kernel/config/iio/triggers/"
 
 #define PROP_BASE              "ro.iio.%s.%s" /* Note: PROPERTY_KEY_MAX is small */
 
@@ -156,6 +157,7 @@ typedef struct
        char init_trigger_name[MAX_NAME_SIZE];  /* ex: accel-name-dev1       */
        char motion_trigger_name[MAX_NAME_SIZE];/* ex: accel-any-motion-dev1 */
        char hrtimer_trigger_name[MAX_NAME_SIZE]; /*ex: accel-hr-dev1 */
+       int trigger_nr; /* trigger number associated with this device */
        float max_range;
        float resolution;
        float power;
index cceb3c0..ebf0e23 100644 (file)
--- a/control.c
+++ b/control.c
@@ -747,6 +747,7 @@ static int sensor_set_rate (int s, float requested_rate)
        float cur_sampling_rate; /* Currently used sampling rate              */
        float arb_sampling_rate; /* Granted sampling rate after arbitration   */
        char hrtimer_sampling_path[PATH_MAX];
+       char trigger_path[PATH_MAX];
 
        ALOGV("Sampling rate %g requested on sensor %d (%s)\n", requested_rate, s, sensor[s].friendly_name);
 
@@ -879,7 +880,8 @@ static int sensor_set_rate (int s, float requested_rate)
        ALOGI("Sensor %d (%s) sampling rate set to %g\n", s, sensor[s].friendly_name, arb_sampling_rate);
 
        if (sensor[s].hrtimer_trigger_name[0] != '\0') {
-               snprintf (hrtimer_sampling_path, PATH_MAX, "%s%s/%s", CONFIGFS_TRIGGER_PATH, sensor[s].hrtimer_trigger_name, "sampling_frequency");
+               snprintf(trigger_path, PATH_MAX, "%s%s%d/", IIO_DEVICES, "trigger", sensor[s].trigger_nr);
+               snprintf (hrtimer_sampling_path, PATH_MAX, "%s%s", trigger_path, "sampling_frequency");
                sysfs_write_float(hrtimer_sampling_path, arb_sampling_rate);
        }
 
index e8219cc..e196a46 100644 (file)
@@ -509,6 +509,7 @@ static int add_sensor (int dev_num, int catalog_index, int mode)
        sensor[s].catalog_index = catalog_index;
        sensor[s].type          = sensor_type;
        sensor[s].mode          = mode;
+       sensor[s].trigger_nr = -1;      /* -1 means no trigger - we'll populate these at a later time */
 
         num_channels = sensor_catalog[catalog_index].num_channels;
 
@@ -813,7 +814,7 @@ static void propose_new_trigger (int s, char trigger_name[MAX_NAME_SIZE],
 }
 
 
-static void update_sensor_matching_trigger_name (char name[MAX_NAME_SIZE], int* updated)
+static void update_sensor_matching_trigger_name (char name[MAX_NAME_SIZE], int* updated, int trigger)
 {
        /*
         * Check if we have a sensor matching the specified trigger name, which should then begin with the sensor name, and end with a number
@@ -858,10 +859,11 @@ static void update_sensor_matching_trigger_name (char name[MAX_NAME_SIZE], int*
                                /* Switch to new trigger if appropriate */
                                propose_new_trigger(s, name, sensor_name_len);
                                updated[s] = 1;
+                               sensor[s].trigger_nr = trigger;
                }
 }
 
-static int create_hrtimer_trigger(int s)
+static int create_hrtimer_trigger(int s, int trigger)
 {
        struct stat dir_status;
        char buf[MAX_NAME_SIZE];
@@ -882,6 +884,7 @@ static int create_hrtimer_trigger(int s)
                        return -1;
 
        strncpy (sensor[s].hrtimer_trigger_name, hrtimer_name, MAX_NAME_SIZE);
+       sensor[s].trigger_nr = trigger;
        return 0;
 }
 
@@ -910,14 +913,14 @@ static void setup_trigger_names (void)
                        break;
 
                /* Record initial and any-motion triggers names */
-               update_sensor_matching_trigger_name(buf, updated);
+               update_sensor_matching_trigger_name(buf, updated, trigger);
        }
 
 
        /* If we don't have any other trigger exposed and quirk hrtimer is set setup the hrtimer name here  - and create it also */
        for (s=0; s<sensor_count; s++) {
                if ((sensor[s].quirks & QUIRK_HRTIMER) && !updated[s])
-                       create_hrtimer_trigger(s);
+                       create_hrtimer_trigger(s, trigger);
        }
 
        /*