diff options
author | yang-cy.chen <yang-cy.chen@mediatek.com> | 2015-08-13 09:50:29 +0800 |
---|---|---|
committer | Iliyan Malchev <malchev@google.com> | 2015-08-14 20:15:30 +0000 |
commit | bc4fecd7d8666ebcf2604c181b0d6282e68d4300 (patch) | |
tree | d58dd714b2b0ff0e6c174cbbe7ff2171bdd30f67 | |
parent | 0fd12f28b29579aad64382a515a4265c5ff8eaba (diff) | |
download | mediatek-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.c | 14 | ||||
-rw-r--r-- | drivers/misc/mediatek/alsps/cm36283/cm36283.c | 6 |
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; |