summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHubert Chaumette <hubertx.chaumette@intel.com>2017-07-04 10:25:57 +0200
committerMukendi Kabobo, NicanordX <nicanordx.mukendi.kabobo@intel.com>2017-07-11 02:54:02 -0700
commitf9233ee543b117acf1fad9dcd45903c1065bebd2 (patch)
treefa2683d1704487d23670f0d56f81eecea094e924
parent906f00f0d70f59550494966f303dea43c2fccb82 (diff)
downloadx86-android-x86-shasta-3.10-nougat-dr-wear-release.tar.gz
Restore ALS parameters on resume. Fixes sensor latency after resume. Also move the initialization delay after powering up rather than before enabling to avoid unneeded delays on disabled/enabled transitions. Change-Id: I1fd01bfb5c0841f51730006257a6ea6d51ff588a Tracked-On: https://jira01.devtools.intel.com/browse/AW-6028 Signed-off-by: Hubert Chaumette <hubertx.chaumette@intel.com> Reviewed-on: https://android.intel.com/591152 Reviewed-by: Nassiet, GaelleX <gaellex.nassiet@intel.com> Reviewed-by: Ghaddab, RiadhX <riadhx.ghaddab@intel.com> Reviewed-by: Dubray, SimonX <simonx.dubray@intel.com> Reviewed-by: Korpershoek, MattijsX <mattijsx.korpershoek@intel.com> Reviewed-by: Tasayco Loarte, VictorX <victorx.tasayco.loarte@intel.com>
-rw-r--r--drivers/input/misc/tsl2583.c22
1 files changed, 17 insertions, 5 deletions
diff --git a/drivers/input/misc/tsl2583.c b/drivers/input/misc/tsl2583.c
index 3f44f4afeeac..d4159ee92d3f 100644
--- a/drivers/input/misc/tsl2583.c
+++ b/drivers/input/misc/tsl2583.c
@@ -352,15 +352,17 @@ static int taos_set_power(struct tsl258x_chip *chip, int on)
}
ret = taos_i2c_smbus_write_data(chip->client,
TSL258X_CMD_REG | TSL258X_CNTRL, cntrl);
- if (!ret && on)
+ if (!ret && on) {
/* Transition from powered off to disabled */
chip->als_status = TSL258X_STATUS_SUSPENDED;
- else if (!ret && !on)
+ mdelay(3);
+ } else if (!ret && !on) {
/* Transition from enabled/disabled to powered off */
chip->als_status = TSL258X_STATUS_POWERED_OFF;
- else
+ } else {
dev_err(&chip->client->dev, "failed to power %s the sensor\n",
(on == 1) ? "up" : "down");
+ }
return ret;
}
@@ -374,7 +376,6 @@ static int taos_set_enable(struct tsl258x_chip *chip, int en)
cntrl = TSL258X_CNTL_PWR_ON;
dev_info(&chip->client->dev, "disabling sensor\n");
} else {
- mdelay(3);
cntrl = TSL258X_CNTL_PWR_ON | TSL258X_CNTL_ADC_ENBL;
dev_info(&chip->client->dev, "enabling sensor\n");
@@ -1291,11 +1292,22 @@ static int taos_suspend(struct device *dev)
static int taos_resume(struct device *dev)
{
struct tsl258x_chip *chip = dev_get_drvdata(dev);
+ int gain;
int ret = 0;
mutex_lock(&chip->als_mutex);
- if (chip->als_status == TSL258X_STATUS_POWERED_OFF)
+ if (chip->als_status == TSL258X_STATUS_POWERED_OFF) {
ret = taos_set_power(chip, true);
+ if (ret)
+ goto error;
+ ret = taos_set_als_time(chip, chip->taos_settings.als_time);
+ if (ret)
+ goto error;
+ gain = tsl2584_als_gain_tbl[chip->taos_settings.als_gain_idex].gain_val;
+ ret = taos_set_gain(chip, gain);
+ }
+
+error:
mutex_unlock(&chip->als_mutex);
return ret;
}