am 086bbb4e: am a38914db: Invensense: 6515: adjust minDelay and maxDelay values

* commit '086bbb4e8cf132cf2398d25c34c0e1533edf5ec1':
  Invensense: 6515: adjust minDelay and maxDelay values
diff --git a/6515/libsensors_iio/MPLSensor.cpp b/6515/libsensors_iio/MPLSensor.cpp
index 8c35b9a..ad6d4e9 100644
--- a/6515/libsensors_iio/MPLSensor.cpp
+++ b/6515/libsensors_iio/MPLSensor.cpp
@@ -2909,6 +2909,18 @@
     LOGV_IF(HANDLER_DATA, "HAL:sc data: %lld - %lld - %d",
             s->step_counter, s->timestamp, update);
 #endif
+
+    if (s->timestamp == 0 && update) {
+        struct timespec ts;
+        clock_gettime(CLOCK_MONOTONIC, &ts);
+        s->timestamp = (int64_t) ts.tv_sec * 1000000000 + ts.tv_nsec;
+                // workaround for some platform which has gap between monotonic clock
+                // and Android SystemClock.
+                // Subtract 100ms not to point the future for SystemClock.
+                // s->timestamp -= 100000000LL;
+        LOGV_IF(0, "HAL:sc timestamp %lld", s->timestamp);
+    }
+
     return update;
 }
 
@@ -4975,18 +4987,6 @@
             list[Accelerometer].power = ACCEL_MPU6500_POWER;
             list[Accelerometer].minDelay = ACCEL_MPU6500_MINDELAY;
             return;
-        } else if (accel != NULL && strcmp(accel, "MPU6500") == 0) {
-            list[Accelerometer].maxRange = ACCEL_MPU6500_RANGE;
-            list[Accelerometer].resolution = ACCEL_MPU6500_RESOLUTION;
-            list[Accelerometer].power = ACCEL_MPU6500_POWER;
-            list[Accelerometer].minDelay = ACCEL_MPU6500_MINDELAY;
-            return;
-        } else if (accel != NULL && strcmp(accel, "MPU6500") == 0) {
-            list[Accelerometer].maxRange = ACCEL_MPU6500_RANGE;
-            list[Accelerometer].resolution = ACCEL_MPU6500_RESOLUTION;
-            list[Accelerometer].power = ACCEL_MPU6500_POWER;
-            list[Accelerometer].minDelay = ACCEL_MPU6500_MINDELAY;
-            return;
         } else if (accel != NULL && strcmp(accel, "MPU9150") == 0) {
             list[Accelerometer].maxRange = ACCEL_MPU9150_RANGE;
             list[Accelerometer].resolution = ACCEL_MPU9150_RESOLUTION;
@@ -5753,8 +5753,14 @@
     // limit all rates to reasonable ones */
     if (period_ns < 5000000LL) {
         period_ns = 5000000LL;
+    } else if (period_ns > 200000000LL) {
+        period_ns = 200000000LL;
     }
 
+    LOGV_IF(PROCESS_VERBOSE,
+            "HAL:batch after applying upper and lower limit: %llu ns, (%.2f Hz)",
+			period_ns, 1000000000.f / period_ns);
+
     switch (what) {
     case Gyro:
     case RawGyro:
diff --git a/6515/libsensors_iio/sensors.h b/6515/libsensors_iio/sensors.h
index e299228..4ea3e4d 100644
--- a/6515/libsensors_iio/sensors.h
+++ b/6515/libsensors_iio/sensors.h
@@ -106,67 +106,77 @@
 /*****************************************************************************/
 
 /*
-   Android KitKat
+   Android Lollipop
    Populate sensor_t structure according to hardware sensors.h
-   {    name, vendor, version, handle, type, maxRange, resolution, power, minDelay,
-    fifoReservedEventCount, fifoMaxEventCount, reserved[]    }
+   {name, vendor, version, handle,
+    type, maxRange, resolution, power, minDelay, fifoReservedEventCount, fifoMaxEventCount,
+    stringType, requiredPermission, maxDelay, flags, reserved[]}
 */
 #if defined ANDROID_LOLLIPOP
 static struct sensor_t sBaseSensorList[] =
 {
-    {(const char *)("MPL Gyroscope"), (const char *)("Invensense"), 1,
-     SENSORS_GYROSCOPE_HANDLE,
-     SENSOR_TYPE_GYROSCOPE, 2000.0f, 1.0f, 0.5f, 10000, 0, 124, 0,0,0,0,0,0},
-    {"MPL Raw Gyroscope", "Invensense", 1,
-     SENSORS_RAW_GYROSCOPE_HANDLE,
-     SENSOR_TYPE_GYROSCOPE_UNCALIBRATED, 2000.0f, 1.0f, 0.5f, 10000, 0, 124, 0,0,0,0,0,0},
-    {"MPL Accelerometer", "Invensense", 1,
-     SENSORS_ACCELERATION_HANDLE,
-     SENSOR_TYPE_ACCELEROMETER, 10240.0f, 1.0f, 0.5f, 10000, 0, 124, 0,0,0,0,0,0},
-    {"MPL Magnetic Field", "Invensense", 1,
-     SENSORS_MAGNETIC_FIELD_HANDLE,
-     SENSOR_TYPE_MAGNETIC_FIELD, 10240.0f, 1.0f, 0.5f, 10000, 0, 124, 0,0,0,0,0,0},
-    {"MPL Raw Magnetic Field", "Invensense", 1,
-     SENSORS_RAW_MAGNETIC_FIELD_HANDLE,
-     SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED, 10240.0f, 1.0f, 0.5f, 10000, 0, 124, 0,0,0,0,0,0},
+    {"MPL Gyroscope", "Invensense", 1, SENSORS_GYROSCOPE_HANDLE,
+     SENSOR_TYPE_GYROSCOPE, 2000.0f, 1.0f, 0.5f, 10000, 0, 124,
+     SENSOR_STRING_TYPE_GYROSCOPE, "", 200000, SENSOR_FLAG_CONTINUOUS_MODE, {}},
+    {"MPL Raw Gyroscope", "Invensense", 1, SENSORS_RAW_GYROSCOPE_HANDLE,
+     SENSOR_TYPE_GYROSCOPE_UNCALIBRATED, 2000.0f, 1.0f, 0.5f, 10000, 0, 124,
+     SENSOR_STRING_TYPE_GYROSCOPE_UNCALIBRATED, "", 200000, SENSOR_FLAG_CONTINUOUS_MODE, {}},
+    {"MPL Accelerometer", "Invensense", 1, SENSORS_ACCELERATION_HANDLE,
+     SENSOR_TYPE_ACCELEROMETER, 10240.0f, 1.0f, 0.5f, 10000, 0, 124,
+     SENSOR_STRING_TYPE_ACCELEROMETER, "", 200000, SENSOR_FLAG_CONTINUOUS_MODE, {}},
+    {"MPL Magnetic Field", "Invensense", 1, SENSORS_MAGNETIC_FIELD_HANDLE,
+     SENSOR_TYPE_MAGNETIC_FIELD, 10240.0f, 1.0f, 0.5f, 10000, 0, 124,
+     SENSOR_STRING_TYPE_MAGNETIC_FIELD, "", 200000, SENSOR_FLAG_CONTINUOUS_MODE, {}},
+    {"MPL Raw Magnetic Field", "Invensense", 1, SENSORS_RAW_MAGNETIC_FIELD_HANDLE,
+     SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED, 10240.0f, 1.0f, 0.5f, 10000, 0, 124,
+     SENSOR_STRING_TYPE_MAGNETIC_FIELD_UNCALIBRATED, "", 200000, SENSOR_FLAG_CONTINUOUS_MODE, {}},
 #ifdef ENABLE_PRESSURE
-    {"MPL Pressure", "Invensense", 1,
-     SENSORS_PRESSURE_HANDLE,
-     SENSOR_TYPE_PRESSURE, 10240.0f, 1.0f, 0.5f, 10000, 0, 165, 0,0,0,0,0,0},
+    {"MPL Pressure", "Invensense", 1, SENSORS_PRESSURE_HANDLE,
+     SENSOR_TYPE_PRESSURE, 10240.0f, 1.0f, 0.5f, 10000, 0, 165,
+     SENSOR_STRING_TYPE_PRESSURE, "", 200000, SENSOR_FLAG_CONTINUOUS_MODE, {}},
 #endif
-    {"MPL Orientation", "Invensense", 1,
-     SENSORS_ORIENTATION_HANDLE,
-     SENSOR_TYPE_ORIENTATION, 360.0f, 1.0f, 9.7f, 10000, 0, 0, 0,0,0,0,0,0},
-    {"MPL Rotation Vector", "Invensense", 1,
-     SENSORS_ROTATION_VECTOR_HANDLE,
-     SENSOR_TYPE_ROTATION_VECTOR, 10240.0f, 1.0f, 0.5f, 10000, 0, 0, 0,0,0,0,0,0},
-    {"MPL Game Rotation Vector", "Invensense", 1,
-     SENSORS_GAME_ROTATION_VECTOR_HANDLE,
-     SENSOR_TYPE_GAME_ROTATION_VECTOR, 10240.0f, 1.0f, 0.5f, 10000, 0, 62, 0,0,0,0,0,0},
-    {"MPL Linear Acceleration", "Invensense", 1,
-     SENSORS_LINEAR_ACCEL_HANDLE,
-     SENSOR_TYPE_LINEAR_ACCELERATION, 10240.0f, 1.0f, 0.5f, 10000, 0, 0, 0,0,0,0,0,0},
-    {"MPL Gravity", "Invensense", 1,
-     SENSORS_GRAVITY_HANDLE,
-     SENSOR_TYPE_GRAVITY, 10240.0f, 1.0f, 0.5f, 10000, 0, 0, 0,0,0,0,0,0},
-    {"MPL Significant Motion", "Invensense", 1,
-     SENSORS_SIGNIFICANT_MOTION_HANDLE,
-     SENSOR_TYPE_SIGNIFICANT_MOTION, 100.0f, 1.0f, 1.1f, 0, 0, 0, 0,0,0,0,0,0},
-    {"MPL Step Detector", "Invensense", 1,
-     SENSORS_PEDOMETER_HANDLE,
-     SENSOR_TYPE_STEP_DETECTOR, 100.0f, 1.0f, 1.1f, 0, 0, 124, 0,0,0,0,0,0},
-    {"MPL Step Counter", "Invensense", 1,
-     SENSORS_STEP_COUNTER_HANDLE,
-     SENSOR_TYPE_STEP_COUNTER, 100.0f, 1.0f, 1.1f, 0, 0, 0, 0,0,0,0,0,0},
+    {"MPL Orientation", "Invensense", 1, SENSORS_ORIENTATION_HANDLE,
+     SENSOR_TYPE_ORIENTATION, 360.0f, 1.0f, 9.7f, 10000, 0, 0,
+     SENSOR_STRING_TYPE_ORIENTATION, "", 0, SENSOR_FLAG_CONTINUOUS_MODE, {}},
+    {"MPL Rotation Vector", "Invensense", 1, SENSORS_ROTATION_VECTOR_HANDLE,
+     SENSOR_TYPE_ROTATION_VECTOR, 10240.0f, 1.0f, 0.5f, 10000, 0, 0,
+     SENSOR_STRING_TYPE_ROTATION_VECTOR, "", 0, SENSOR_FLAG_CONTINUOUS_MODE, {}},
+    {"MPL Game Rotation Vector", "Invensense", 1, SENSORS_GAME_ROTATION_VECTOR_HANDLE,
+     SENSOR_TYPE_GAME_ROTATION_VECTOR, 10240.0f, 1.0f, 0.5f, 10000, 0, 62,
+     SENSOR_STRING_TYPE_GAME_ROTATION_VECTOR, "", 200000, SENSOR_FLAG_CONTINUOUS_MODE, {}},
+    {"MPL Linear Acceleration", "Invensense", 1, SENSORS_LINEAR_ACCEL_HANDLE,
+     SENSOR_TYPE_LINEAR_ACCELERATION, 10240.0f, 1.0f, 0.5f, 10000, 0, 0,
+     SENSOR_STRING_TYPE_LINEAR_ACCELERATION, "", 0, SENSOR_FLAG_CONTINUOUS_MODE, {}},
+    {"MPL Gravity", "Invensense", 1, SENSORS_GRAVITY_HANDLE,
+     SENSOR_TYPE_GRAVITY, 10240.0f, 1.0f, 0.5f, 10000, 0, 0,
+     SENSOR_STRING_TYPE_GRAVITY, "", 0, SENSOR_FLAG_CONTINUOUS_MODE, {}},
+    {"MPL Significant Motion", "Invensense", 1, SENSORS_SIGNIFICANT_MOTION_HANDLE,
+     SENSOR_TYPE_SIGNIFICANT_MOTION, 100.0f, 1.0f, 1.1f, 0, 0, 0,
+     SENSOR_STRING_TYPE_SIGNIFICANT_MOTION, "", 0,
+     SENSOR_FLAG_ONE_SHOT_MODE | SENSOR_FLAG_WAKE_UP, {}},
+    {"MPL Step Detector", "Invensense", 1, SENSORS_PEDOMETER_HANDLE,
+     SENSOR_TYPE_STEP_DETECTOR, 100.0f, 1.0f, 1.1f, 0, 0, 124,
+     SENSOR_STRING_TYPE_STEP_DETECTOR, "", 0, SENSOR_FLAG_SPECIAL_REPORTING_MODE, {}},
+    {"MPL Step Counter", "Invensense", 1, SENSORS_STEP_COUNTER_HANDLE,
+     SENSOR_TYPE_STEP_COUNTER, 100.0f, 1.0f, 1.1f, 0, 0, 0,
+     SENSOR_STRING_TYPE_STEP_COUNTER, "", 0, SENSOR_FLAG_ON_CHANGE_MODE, {}},
     {"MPL Geomagnetic Rotation Vector", "Invensense", 1,
      SENSORS_GEOMAGNETIC_ROTATION_VECTOR_HANDLE,
-     SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR, 10240.0f, 1.0f, 0.5f, 5000, 0, 0, 0,0,0,0,0,0},
+     SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR, 10240.0f, 1.0f, 0.5f, 5000, 0, 0,
+     SENSOR_STRING_TYPE_GEOMAGNETIC_ROTATION_VECTOR, "", 0, SENSOR_FLAG_CONTINUOUS_MODE, {}},
 #ifdef ENABLE_DMP_SCREEN_AUTO_ROTATION
-    {"MPL Screen Orientation", "Invensense ", 1,
-     SENSORS_SCREEN_ORIENTATION_HANDLE,
-     SENSOR_TYPE_SCREEN_ORIENTATION, 100.0f, 1.0f, 1.1f, 0, 0, 0, 0,0,0,0,0,0},
+    {"MPL Screen Orientation", "Invensense ", 1, SENSORS_SCREEN_ORIENTATION_HANDLE,
+     SENSOR_TYPE_SCREEN_ORIENTATION, 100.0f, 1.0f, 1.1f, 0, 0, 0,
+     SENSOR_STRING_TYPE_SCREEN_ORIENTATION, "", 0, SENSOR_FLAG_ON_CHANGE_MODE, {}},
 #endif
 };
+/*
+   Android KitKat
+   Populate sensor_t structure according to hardware sensors.h
+   {name, vendor, version,
+    handle,
+    type, maxRange, resolution, power, minDelay, fifoReservedEventCount, fifoMaxEventCount, reserved[]}
+*/
 #elif defined ANDROID_KITKAT
 static struct sensor_t sBaseSensorList[] =
 {
diff --git a/6515/libsensors_iio/sensors_mpl.cpp b/6515/libsensors_iio/sensors_mpl.cpp
index 268b853..7e7b06b 100755
--- a/6515/libsensors_iio/sensors_mpl.cpp
+++ b/6515/libsensors_iio/sensors_mpl.cpp
@@ -438,18 +438,14 @@
     memset(&dev->device, 0, sizeof(sensors_poll_device_1));
 
     dev->device.common.tag = HARDWARE_DEVICE_TAG;
-#if defined ANDROID_KITKAT || defined ANDROID_LOLLIPOP
     dev->device.common.version  = SENSORS_DEVICE_API_VERSION_1_3;
     dev->device.flush           = poll__flush;
-#else
-    dev->device.common.version  = SENSORS_DEVICE_API_VERSION_1_0;
-#endif
     dev->device.common.module   = const_cast<hw_module_t*>(module);
     dev->device.common.close    = poll__close;
     dev->device.activate        = poll__activate;
     dev->device.setDelay        = poll__setDelay;
     dev->device.poll            = poll__poll;
-    dev->device.batch           = poll__batch; 
+    dev->device.batch           = poll__batch;
 
     *device = &dev->device.common;
     status = 0;