summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzlzhang <zlzhang@mobvoi.com>2017-10-06 17:50:23 +0800
committerZonglong Zhang <zlzhang@mobvoi.com>2017-10-06 09:56:47 +0000
commita22c7f99e9e0b797141062660b6f54ffa3293260 (patch)
tree92edf57de8001148ce63fa89de6aee2cc87afe36
parent2b66a449c6ae72487aa006e80d72f390c8f0c700 (diff)
downloadmediatek-a22c7f99e9e0b797141062660b6f54ffa3293260.tar.gz
sensorhub : fix the bug that AP can not responding to sensorhub INT sometimes
BUG: 65556925 BUG: 64813514 Change-Id: Ic16f827cee8a8373bc1d22ef4f54575fbcaedc16
-rw-r--r--arch/arm/mach-mt2601/include/mach/eint.h1
-rw-r--r--drivers/misc/mediatek/sensorhub/CwMcuSensor/CwMcuBus.c4
-rw-r--r--drivers/misc/mediatek/sensorhub/CwMcuSensor/CwMcuSensor.c10
-rw-r--r--drivers/misc/mediatek/sensorhub/CwMcuSensor/CwMcuSensor.h2
4 files changed, 11 insertions, 6 deletions
diff --git a/arch/arm/mach-mt2601/include/mach/eint.h b/arch/arm/mach-mt2601/include/mach/eint.h
index f1d093a8a68d..03e48a28acaa 100644
--- a/arch/arm/mach-mt2601/include/mach/eint.h
+++ b/arch/arm/mach-mt2601/include/mach/eint.h
@@ -118,6 +118,7 @@
*/
extern void mt_eint_mask(unsigned int eint_num);
extern void mt_eint_unmask(unsigned int eint_num);
+extern unsigned int mt_eint_get_mask(unsigned int eint_num);
extern void mt_eint_set_hw_debounce(unsigned int eint_num, unsigned int ms);
extern void mt_eint_set_polarity(unsigned int eint_num, unsigned int pol);
extern unsigned int mt_eint_set_sens(unsigned int eint_num, unsigned int sens);
diff --git a/drivers/misc/mediatek/sensorhub/CwMcuSensor/CwMcuBus.c b/drivers/misc/mediatek/sensorhub/CwMcuSensor/CwMcuBus.c
index 384539240700..3e410cdf5973 100644
--- a/drivers/misc/mediatek/sensorhub/CwMcuSensor/CwMcuBus.c
+++ b/drivers/misc/mediatek/sensorhub/CwMcuSensor/CwMcuBus.c
@@ -338,9 +338,7 @@ static int CWMCU_i2c_remove(struct i2c_client *client)
static int CWMCU_i2c_suspend(struct device *dev)
{
- CWMCU_system_suspend();
- return 0;
-
+ return CWMCU_system_suspend();
}
static int CWMCU_i2c_resume(struct device *dev)
diff --git a/drivers/misc/mediatek/sensorhub/CwMcuSensor/CwMcuSensor.c b/drivers/misc/mediatek/sensorhub/CwMcuSensor/CwMcuSensor.c
index a85d091a7f9a..da0f3367a9e8 100644
--- a/drivers/misc/mediatek/sensorhub/CwMcuSensor/CwMcuSensor.c
+++ b/drivers/misc/mediatek/sensorhub/CwMcuSensor/CwMcuSensor.c
@@ -2995,11 +2995,16 @@ void CWMCU_resume(struct CWMCU_T *sensor)
}
-void CWMCU_system_suspend(void)
+int CWMCU_system_suspend(void)
{
if (sensor->mcu_suspend_flag == 0) {
if (sensor->mcu_mode == CW_BOOT) {
- return;
+ return 0;
+ }
+ if(mt_eint_get_mask(CUST_EINT_SENSORHUB_NUM))
+ {
+ SH_LOG("EINT gpio masked,return -EBUSY\n");
+ return -EBUSY;
}
if (cw_tilt_wakeup_flag) {
CW_INFO("suspend => enable tilt");
@@ -3010,6 +3015,7 @@ void CWMCU_system_suspend(void)
CW_INFO("%s: power_on_list=0x%x", __FUNCTION__,
sensor->power_on_list);
}
+ return 0;
}
void CWMCU_system_resume(void)
diff --git a/drivers/misc/mediatek/sensorhub/CwMcuSensor/CwMcuSensor.h b/drivers/misc/mediatek/sensorhub/CwMcuSensor/CwMcuSensor.h
index 37137406300e..fb8601f3a439 100644
--- a/drivers/misc/mediatek/sensorhub/CwMcuSensor/CwMcuSensor.h
+++ b/drivers/misc/mediatek/sensorhub/CwMcuSensor/CwMcuSensor.h
@@ -627,7 +627,7 @@ extern void factory_get_calibrator_data(int sensor_id,
extern void factory_set_mcu_calibration_data(int sensor_id);
extern void init_factory_node(void);
extern int spi_rw_bytes_serial(u8 * wbuf, u8 * rbuf, u8 len);
-extern void CWMCU_system_suspend(void);
+extern int CWMCU_system_suspend(void);
extern void CWMCU_system_resume(void);