mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 19:30:30 +09:00
mfd: tps65910: Set PWR_OFF bit during driver probe
commit 7620ad0bdf upstream.
The PWR_OFF bit needs to be set in order to power off properly, without
hanging PMIC. This bit needs to be set early in order to allow thermal
protection of NVIDIA Terga SoCs to power off hardware properly, otherwise
a battery re-plug may be needed on some devices to recover after the hang.
Cc: <stable@vger.kernel.org>
Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
Tested-by: Svyatoslav Ryhel <clamor95@gmail.com> # ASUS TF201
Signed-off-by: Lee Jones <lee.jones@linaro.org>
Link: https://lore.kernel.org/r/20211124190104.23554-1-digetx@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
e6b11d8fc5
commit
e53802534c
@@ -436,15 +436,6 @@ static void tps65910_power_off(void)
|
||||
|
||||
tps65910 = dev_get_drvdata(&tps65910_i2c_client->dev);
|
||||
|
||||
/*
|
||||
* The PWR_OFF bit needs to be set separately, before transitioning
|
||||
* to the OFF state. It enables the "sequential" power-off mode on
|
||||
* TPS65911, it's a NO-OP on TPS65910.
|
||||
*/
|
||||
if (regmap_set_bits(tps65910->regmap, TPS65910_DEVCTRL,
|
||||
DEVCTRL_PWR_OFF_MASK) < 0)
|
||||
return;
|
||||
|
||||
regmap_update_bits(tps65910->regmap, TPS65910_DEVCTRL,
|
||||
DEVCTRL_DEV_OFF_MASK | DEVCTRL_DEV_ON_MASK,
|
||||
DEVCTRL_DEV_OFF_MASK);
|
||||
@@ -504,6 +495,19 @@ static int tps65910_i2c_probe(struct i2c_client *i2c,
|
||||
tps65910_sleepinit(tps65910, pmic_plat_data);
|
||||
|
||||
if (pmic_plat_data->pm_off && !pm_power_off) {
|
||||
/*
|
||||
* The PWR_OFF bit needs to be set separately, before
|
||||
* transitioning to the OFF state. It enables the "sequential"
|
||||
* power-off mode on TPS65911, it's a NO-OP on TPS65910.
|
||||
*/
|
||||
ret = regmap_set_bits(tps65910->regmap, TPS65910_DEVCTRL,
|
||||
DEVCTRL_PWR_OFF_MASK);
|
||||
if (ret) {
|
||||
dev_err(&i2c->dev, "failed to set power-off mode: %d\n",
|
||||
ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
tps65910_i2c_client = i2c;
|
||||
pm_power_off = tps65910_power_off;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user