OSDN Git Service

Enforce frequency setup for distinct hr trigger and sensor rates
authorViorel Suman <viorel.suman@intel.com>
Tue, 26 May 2015 13:26:34 +0000 (16:26 +0300)
committerViorel Suman <viorel.suman@intel.com>
Thu, 28 May 2015 11:43:46 +0000 (14:43 +0300)
We need to enforce frequency update when current
software trigger rate and current sensor sampling rate
are different.

Change-Id: I951b7b68ffda888d51203f9f719e66ddf4d94eb4
Signed-off-by: Viorel Suman <viorel.suman@intel.com>
control.c

index e6ee245..2fd5b0d 100644 (file)
--- a/control.c
+++ b/control.c
@@ -807,6 +807,15 @@ static int sensor_set_rate (int s, float requested_rate)
                return -ENOSYS;
        }
 
+       if (sensor[s].hrtimer_trigger_name[0] != '\0') {
+               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");
+               /* Enforce frequency update when software trigger
+                * frequency and current sampling rate are different */
+               if (sysfs_read_float(hrtimer_sampling_path, &sr) != -1 && sr != cur_sampling_rate)
+                       cur_sampling_rate = -1;
+       }
+
        /* Check if we have contraints on allowed sampling rates */
 
        sprintf(avail_sysfs_path, DEVICE_AVAIL_FREQ_PATH, dev_num);
@@ -879,11 +888,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(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");
+       if (sensor[s].hrtimer_trigger_name[0] != '\0')
                sysfs_write_float(hrtimer_sampling_path, arb_sampling_rate);
-       }
 
        if (trig_sensors_per_dev[dev_num])
                enable_buffer(dev_num, 0);