summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoryang-cy.chen <yang-cy.chen@mediatek.com>2015-08-13 09:50:29 +0800
committerIliyan Malchev <malchev@google.com>2015-08-14 20:15:30 +0000
commitbc4fecd7d8666ebcf2604c181b0d6282e68d4300 (patch)
treed58dd714b2b0ff0e6c174cbbe7ff2171bdd30f67
parent0fd12f28b29579aad64382a515a4265c5ff8eaba (diff)
downloadmediatek-bc4fecd7d8666ebcf2604c181b0d6282e68d4300.tar.gz
Mediatek: Proximity and Ambient sensor CTS fail
Description: Test Case: CTS Verifier APK, CTS Sensor test item, TestBatchAndFlush Fail at 'SensorTest:WaitForFlush | sensor='cm36283 Proximity sensor' ... and 'SensorTest:WaitForFlush | sensor='cm36283 ambient sensor' ... Note: Before test, QA also should calibrate magnetometer, and ensure no magnetic fieldinterference. Problem: Ambient sensor issue: In stable light environment, raw data is stable output, however, kernel input layer filter the same data to sensor HAL. Proximity sensor issue: In this case, there is not outside object to trigger p-sensor event , so software need to start a timer directly report a faraway event. And the Other reason, sometimes the data reported to android layer before the case call flush(). Solution: make sure proximity timer can run when ps is enabled. Bug num:23005172 Change-Id: I2eb85681420b352d93f8ff722a53dd110d614980 Signed-off-by: yang-cy.chen <yang-cy.chen@mediatek.com> (cherry picked from commit 962a4186c997f15e72558c421e0e72fd62270474)
-rw-r--r--drivers/misc/mediatek/alsps/alsps.c14
-rw-r--r--drivers/misc/mediatek/alsps/cm36283/cm36283.c6
2 files changed, 9 insertions, 11 deletions
diff --git a/drivers/misc/mediatek/alsps/alsps.c b/drivers/misc/mediatek/alsps/alsps.c
index 405b55ebafca..5c2bc6a928e9 100644
--- a/drivers/misc/mediatek/alsps/alsps.c
+++ b/drivers/misc/mediatek/alsps/alsps.c
@@ -20,12 +20,11 @@ static struct alsps_init_info* alsps_init_list[MAX_CHOOSE_ALSPS_NUM]= {0}; //mod
static void alsps_early_suspend(struct early_suspend *h);
static void alsps_late_resume(struct early_suspend *h);
-
int als_data_report(struct input_dev *dev, int value, int status)
{
//ALSPS_LOG("+als_data_report! %d, %d\n",value,status);
- input_report_abs(dev, EVENT_TYPE_ALS_VALUE, value);
- input_report_abs(dev, EVENT_TYPE_ALS_STATUS, status);
+ input_report_rel(dev, EVENT_TYPE_ALS_VALUE, value);
+ input_report_rel(dev, EVENT_TYPE_ALS_STATUS, status);
input_sync(dev);
return 0;
}
@@ -165,7 +164,7 @@ static void ps_work_func(struct work_struct *work)
}
if (cxt->is_get_valid_ps_data_after_enable == false)
{
- if(ALSPS_INVALID_VALUE != cxt->drv_data.als_data.values[0])
+ if(ALSPS_INVALID_VALUE != cxt->drv_data.ps_data.values[0])
cxt->is_get_valid_ps_data_after_enable = true;
}
//report data to input device
@@ -838,11 +837,10 @@ static int alsps_input_init(struct alsps_context *cxt)
set_bit(EV_SYN, dev->evbit);
input_set_capability(dev, EV_REL, EVENT_TYPE_PS_VALUE);
input_set_capability(dev, EV_REL, EVENT_TYPE_PS_STATUS);
- input_set_capability(dev, EV_ABS, EVENT_TYPE_ALS_VALUE);
- input_set_capability(dev, EV_ABS, EVENT_TYPE_ALS_STATUS);
- input_set_abs_params(dev, EVENT_TYPE_ALS_VALUE, ALSPS_VALUE_MIN, ALSPS_VALUE_MAX, 0, 0);
- input_set_abs_params(dev, EVENT_TYPE_ALS_STATUS, ALSPS_STATUS_MIN, ALSPS_STATUS_MAX, 0, 0);
+ input_set_capability(dev, EV_REL, EVENT_TYPE_ALS_VALUE);
+ input_set_capability(dev, EV_REL, EVENT_TYPE_ALS_STATUS);
+
input_set_drvdata(dev, cxt);
err = input_register_device(dev);
diff --git a/drivers/misc/mediatek/alsps/cm36283/cm36283.c b/drivers/misc/mediatek/alsps/cm36283/cm36283.c
index b4b3a9c109bb..bca7779d6ed5 100644
--- a/drivers/misc/mediatek/alsps/cm36283/cm36283.c
+++ b/drivers/misc/mediatek/alsps/cm36283/cm36283.c
@@ -1794,7 +1794,7 @@ static int ps_set_delay(u64 ns)
static int ps_get_data(int* value, int* status)
{
int err = 0;
-
+ msleep(1000);/* Solve sensor HAL received data before flush() command. */
if(!cm36283_obj)
{
APS_ERR("cm36652_obj is null!!\n");
@@ -1917,9 +1917,9 @@ static int cm36283_i2c_probe(struct i2c_client *client, const struct i2c_device_
ps_ctl.enable_nodata = ps_enable_nodata;
ps_ctl.set_delay = ps_set_delay;
if (obj->hw->polling_mode_ps == 0) {
- ps_ctl.is_report_input_direct = true;
- } else {
ps_ctl.is_report_input_direct = false;
+ } else {
+ ps_ctl.is_report_input_direct = true;
}
ps_ctl.is_support_batch = obj->hw->is_batch_supported_ps;