summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMathias Agopian <mathias@google.com>2010-03-31 14:28:28 -0700
committerMathias Agopian <mathias@google.com>2010-03-31 14:42:23 -0700
commit38dffd5d6e3538f07bbea00e81630999bdec93c7 (patch)
tree93889e284bd406e66b69a0b462a477875244bf62
parentf3c77c13c4ffa8dd7828c86dfeea364eeec53360 (diff)
downloadpassion-common-38dffd5d6e3538f07bbea00e81630999bdec93c7.tar.gz
fix [2561237] Screen would not turn on after ending call
The sensor values returned didn't match the range advertised in the sensor info struct. Change-Id: I6aa2a317d6d81989cf7b586f33ef7e80a996c462
-rw-r--r--libsensors/sensors.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/libsensors/sensors.c b/libsensors/sensors.c
index 3595f2f..56f5190 100644
--- a/libsensors/sensors.c
+++ b/libsensors/sensors.c
@@ -95,6 +95,16 @@ struct sensors_data_context_t {
* The SENSORS Module
*/
+/* the CM3602 is a binary proximity sensor that triggers around 9 cm on
+ * this hardware */
+#define PROXIMITY_THRESHOLD_CM 9.0f
+
+/*
+ * the AK8973 has a 8-bit ADC but the firmware seems to average 16 samples,
+ * or at least makes its calibration on 12-bits values. This increases the
+ * resolution by 4 bits.
+ */
+
static const struct sensor_t sSensorList[] = {
{ "BMA150 3-axis Accelerometer",
"Bosh",
@@ -103,7 +113,7 @@ static const struct sensor_t sSensorList[] = {
{ "AK8973 3-axis Magnetic field sensor",
"Asahi Kasei",
1, SENSORS_HANDLE_BASE+ID_M,
- SENSOR_TYPE_MAGNETIC_FIELD, 2000.0f, 1.0f, 6.8f, { } },
+ SENSOR_TYPE_MAGNETIC_FIELD, 2000.0f, 1.0f/16.0f, 6.8f, { } },
{ "AK8973 Orientation sensor",
"Asahi Kasei",
1, SENSORS_HANDLE_BASE+ID_O,
@@ -111,7 +121,9 @@ static const struct sensor_t sSensorList[] = {
{ "CM3602 Proximity sensor",
"Capella Microsystems",
1, SENSORS_HANDLE_BASE+ID_P,
- SENSOR_TYPE_PROXIMITY, 2.0f, 2.0f, 0.5f, { } },
+ SENSOR_TYPE_PROXIMITY,
+ PROXIMITY_THRESHOLD_CM, PROXIMITY_THRESHOLD_CM,
+ 0.5f, { } },
{ "CM3602 Light sensor",
"Capella Microsystems",
1, SENSORS_HANDLE_BASE+ID_L,
@@ -773,7 +785,8 @@ static uint32_t data__poll_process_cm_abs(struct sensors_data_context_t *dev,
(int)event->time.tv_sec);
if (event->code == EVENT_TYPE_PROXIMITY) {
new_sensors |= SENSORS_CM_PROXIMITY;
- dev->sensors[ID_P].distance = (float)event->value;
+ /* event->value seems to be 0 or 1, scale it to the threshold */
+ dev->sensors[ID_P].distance = event->value * PROXIMITY_THRESHOLD_CM;
}
}
return new_sensors;