OSDN Git Service

Retry when sysfs_write_str fails
authorViorel Suman <viorel.suman@intel.com>
Tue, 7 Oct 2014 13:01:48 +0000 (16:01 +0300)
committerViorel Suman <viorel.suman@intel.com>
Tue, 7 Oct 2014 13:09:01 +0000 (16:09 +0300)
The sysfs_write_str might fail if called
often on the same file. We retry a few times
in that case.

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

index 61b81c5..a1c06b1 100644 (file)
--- a/control.c
+++ b/control.c
@@ -77,9 +77,10 @@ static int enable_buffer(int dev_num, int enabled)
 }
 
 
-static void setup_trigger (int s, const char* trigger_val)
+static int setup_trigger (int s, const char* trigger_val)
 {
        char sysfs_path[PATH_MAX];
+       int ret = -1, attempts = 5;
 
        sprintf(sysfs_path, TRIGGER_PATH, sensor_info[s].dev_num);
 
@@ -87,9 +88,17 @@ static void setup_trigger (int s, const char* trigger_val)
                ALOGI("Setting S%d (%s) trigger to %s\n", s,
                        sensor_info[s].friendly_name, trigger_val);
 
-       sysfs_write_str(sysfs_path, trigger_val);
+       while (ret == -1 && attempts) {
+               ret = sysfs_write_str(sysfs_path, trigger_val);
+               attempts--;
+       }
 
-       sensor_info[s].selected_trigger = trigger_val;
+       if (ret != -1)
+               sensor_info[s].selected_trigger = trigger_val;
+       else
+               ALOGE("Setting S%d (%s) trigger to %s FAILED.\n", s,
+                       sensor_info[s].friendly_name, trigger_val);
+       return ret;
 }