From 9966367f7635ed30a850232fa27f5c9d3ec37aef Mon Sep 17 00:00:00 2001 From: Ryan Lattrel Date: Wed, 14 Nov 2018 13:59:18 -0600 Subject: [PATCH] sx933x: only sense enabled channels When a channel for the capsensor is turned on, enable sensing only on that specific channel. Same for disable. Previously, all channels were enabled when a single channel was set to enable, and all channels were turned off after every channel was disabled. Enabling only the channels we need will reduce scan time and increase performance. Change-Id: I77e11b1a66b3cbcfbfdbb9752faecb53dd6a3ea7 Signed-off-by: Ryan Lattrel Reviewed-on: https://gerrit.mot.com/1269356 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Guoyue Liu Reviewed-by: Kenneth Kessler Submit-Approved: Jira Key --- drivers/misc/sx933x/sx933x_sar.c | 22 ++++------------------ include/linux/input/sx933x.h | 6 ++++++ 2 files changed, 10 insertions(+), 18 deletions(-) diff --git a/drivers/misc/sx933x/sx933x_sar.c b/drivers/misc/sx933x/sx933x_sar.c index 4a966d8b415f..02d2ddd8d746 100644 --- a/drivers/misc/sx933x/sx933x_sar.c +++ b/drivers/misc/sx933x/sx933x_sar.c @@ -734,7 +734,6 @@ 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; @@ -743,7 +742,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 | 0x0000001F; + temp = temp | (1 << psmtcButtons[i].offset); 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; @@ -753,6 +752,9 @@ 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); @@ -761,22 +763,6 @@ 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; } diff --git a/include/linux/input/sx933x.h b/include/linux/input/sx933x.h index 4b36d13d7423..a570f569aa4a 100644 --- a/include/linux/input/sx933x.h +++ b/include/linux/input/sx933x.h @@ -287,6 +287,7 @@ struct _buttonInfo bool enabled; //may different project use different buttons bool used; + int offset; }; struct totalButtonInformation @@ -651,6 +652,7 @@ static struct _buttonInfo psmtcButtons[] = .name = "Moto CapSense Ch0", .enabled = false, .used = false, + .offset = 0, }, { .ProxMask = SX933X_STAT0_PROXSTAT_PH1_FLAG, @@ -658,6 +660,7 @@ static struct _buttonInfo psmtcButtons[] = .name = "Moto CapSense Ch1", .enabled = false, .used = false, + .offset = 1, }, { .ProxMask = SX933X_STAT0_PROXSTAT_PH2_FLAG, @@ -665,6 +668,7 @@ static struct _buttonInfo psmtcButtons[] = .name = "Moto CapSense Ch2", .enabled = false, .used = false, + .offset = 2, }, { .ProxMask = SX933X_STAT0_PROXSTAT_PH3_FLAG, @@ -672,6 +676,7 @@ static struct _buttonInfo psmtcButtons[] = .name = "Moto CapSense Ch3", .enabled = false, .used = false, + .offset = 3, }, { .ProxMask = SX933X_STAT0_PROXSTAT_PH4_FLAG, @@ -679,6 +684,7 @@ static struct _buttonInfo psmtcButtons[] = .name = "Moto CapSense Ch4", .enabled = false, .used = false, + .offset = 4, }, };