From 5ddcba53a102f679ed9629edf20e64fda371dd8e Mon Sep 17 00:00:00 2001 From: cuijy2 Date: Fri, 20 Sep 2019 17:20:51 +0800 Subject: [PATCH] sensor:change sx9331 enable logic when enable channel need enable all 5 channels Change-Id: I64f5dd8d1eb172673185f4a0ee8233295bc67d41 Signed-off-by: cuijy2 Reviewed-on: https://gerrit.mot.com/1425450 SLTApproved: Slta Waiver SME-Granted: SME Approvals Granted Tested-by: Jira Key Reviewed-by: Jianqiu Huang Reviewed-by: Wen Xie Reviewed-by: Guoyue Liu Reviewed-by: Tao Sun Submit-Approved: Jira Key --- drivers/misc/sx933x/sx933x_sar.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/drivers/misc/sx933x/sx933x_sar.c b/drivers/misc/sx933x/sx933x_sar.c index 19fefa0bdc11..2f097da045aa 100644 --- a/drivers/misc/sx933x/sx933x_sar.c +++ b/drivers/misc/sx933x/sx933x_sar.c @@ -759,6 +759,7 @@ static void sx933x_exit_platform_hw(struct i2c_client *client) static int capsensor_set_enable(struct sensors_classdev *sensors_cdev, unsigned int enable) { + bool disableFlag = true; int i = 0; u32 temp = 0x0; @@ -767,7 +768,7 @@ static int capsensor_set_enable(struct sensors_classdev *sensors_cdev, if (enable == 1) { LOG_DBG("enable cap sensor : %s\n", sensors_cdev->name); sx933x_i2c_read_16bit(global_sx933x, SX933X_GNRLCTRL2_REG, &temp); - temp = temp | (1 << psmtcButtons[i].offset); + temp = temp | 0x0000001F; LOG_INFO("set reg 0x%x val 0x%x\n", SX933X_GNRLCTRL2_REG, temp); sx933x_i2c_write_16bit(global_sx933x, SX933X_GNRLCTRL2_REG, temp); psmtcButtons[i].enabled = true; @@ -777,9 +778,6 @@ static int capsensor_set_enable(struct sensors_classdev *sensors_cdev, manual_offset_calibration(global_sx933x); } else if (enable == 0) { LOG_DBG("disable cap sensor : %s\n", sensors_cdev->name); - sx933x_i2c_read_16bit(global_sx933x, SX933X_GNRLCTRL2_REG, &temp); - temp = temp & ~(1 << psmtcButtons[i].offset); - sx933x_i2c_write_16bit(global_sx933x, SX933X_GNRLCTRL2_REG, temp); psmtcButtons[i].enabled = false; input_report_abs(psmtcButtons[i].input_dev, ABS_DISTANCE, -1); input_sync(psmtcButtons[i].input_dev); @@ -788,6 +786,22 @@ static int capsensor_set_enable(struct sensors_classdev *sensors_cdev, } } } + + //if all chs disabled, then disable all + for (i = 0; i < ARRAY_SIZE(psmtcButtons); i++) { + if (psmtcButtons[i].enabled) { + disableFlag = false; + break; + } + } + if (disableFlag) { + LOG_DBG("disable all chs\n"); + sx933x_i2c_read_16bit(global_sx933x, SX933X_GNRLCTRL2_REG, &temp); + LOG_INFO("read reg 0x%x val 0x%x\n", SX933X_GNRLCTRL2_REG, temp); + temp = temp & 0xFFFFFFE0; + LOG_INFO("set reg 0x%x val 0x%x\n", SX933X_GNRLCTRL2_REG, temp); + sx933x_i2c_write_16bit(global_sx933x, SX933X_GNRLCTRL2_REG, temp); + } return 0; }