summaryrefslogtreecommitdiff
path: root/drivers/mfd/tps65910.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/mfd/tps65910.c')
-rw-r--r--drivers/mfd/tps65910.c34
1 files changed, 19 insertions, 15 deletions
diff --git a/drivers/mfd/tps65910.c b/drivers/mfd/tps65910.c
index dbf85fc07d2..1e7ef2a2e35 100644
--- a/drivers/mfd/tps65910.c
+++ b/drivers/mfd/tps65910.c
@@ -363,7 +363,13 @@ static int tps65910_sleepinit(struct tps65910 *tps65910,
dev = tps65910->dev;
- /* set polarity of SLLEEPSIG requst ot enter OFF mode */
+ if (!pmic_pdata->en_dev_slp)
+ return 0;
+
+ /*
+ * set polarity of SLLEEPSIG requst to enter OFF mode
+ * before enabling sleep
+ */
ret = tps65910_reg_set_bits(tps65910, TPS65910_DEVCTRL2,
DEVCTRL2_SLEEPSIG_POL_MASK);
if (ret < 0) {
@@ -379,18 +385,7 @@ static int tps65910_sleepinit(struct tps65910 *tps65910,
goto err_sleep_init;
}
- ret = tps65910_reg_set_bits(tps65910, TPS65910_SLEEP_KEEP_RES_ON,
- SLEEP_KEEP_RES_ON_CLKOUT32K_KEEPON_MASK);
- if (ret < 0) {
- dev_err(dev, "set sleep_keep_res_on failed: %d\n", ret);
- goto err_sleep_init;
- }
-
- /* Return if there is no sleep keepon data. */
- if (!pmic_pdata->slp_keepon)
- return 0;
-
- if (pmic_pdata->slp_keepon->therm_keepon) {
+ if (pmic_pdata->slp_keepon.therm_keepon) {
ret = tps65910_reg_set_bits(tps65910,
TPS65910_SLEEP_KEEP_RES_ON,
SLEEP_KEEP_RES_ON_THERM_KEEPON_MASK);
@@ -400,7 +395,7 @@ static int tps65910_sleepinit(struct tps65910 *tps65910,
}
}
- if (pmic_pdata->slp_keepon->clkout32k_keepon) {
+ if (pmic_pdata->slp_keepon.clkout32k_keepon) {
ret = tps65910_reg_set_bits(tps65910,
TPS65910_SLEEP_KEEP_RES_ON,
SLEEP_KEEP_RES_ON_CLKOUT32K_KEEPON_MASK);
@@ -410,7 +405,7 @@ static int tps65910_sleepinit(struct tps65910 *tps65910,
}
}
- if (pmic_pdata->slp_keepon->i2chs_keepon) {
+ if (pmic_pdata->slp_keepon.i2chs_keepon) {
ret = tps65910_reg_set_bits(tps65910,
TPS65910_SLEEP_KEEP_RES_ON,
SLEEP_KEEP_RES_ON_I2CHS_KEEPON_MASK);
@@ -477,6 +472,15 @@ static struct tps65910_board *tps65910_parse_dt(struct i2c_client *client,
prop = of_property_read_bool(np, "ti,en-ck32k-xtal");
board_info->en_ck32k_xtal = prop;
+ prop = of_property_read_bool(np, "ti,en-dev-slp");
+ board_info->en_dev_slp = prop;
+
+ prop = of_property_read_bool(np, "ti,sleepsig-pol");
+ board_info->sleepsig_pol = prop;
+
+ prop = of_property_read_bool(np, "ti,clkout32k-keepon");
+ board_info->slp_keepon.clkout32k_keepon = prop;
+
board_info->irq = client->irq;
board_info->irq_base = -1;
board_info->pm_off = of_property_read_bool(np,