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, }, };