diff options
author | Samuel Ortiz | 2013-08-21 12:08:14 +0200 |
---|---|---|
committer | Samuel Ortiz | 2013-08-21 12:08:14 +0200 |
commit | 828fa1e60117535d9b1e1b09444842ae66e8424d (patch) | |
tree | 281f5bff9a12c760ca947a98569df63c8ca85909 /drivers/mfd/palmas.c | |
parent | mfd: rtsx: Copyright modifications (diff) | |
parent | mfd: pcf50633-adc: Use devm_*() functions (diff) | |
download | kernel-qcow2-linux-828fa1e60117535d9b1e1b09444842ae66e8424d.tar.gz kernel-qcow2-linux-828fa1e60117535d9b1e1b09444842ae66e8424d.tar.xz kernel-qcow2-linux-828fa1e60117535d9b1e1b09444842ae66e8424d.zip |
Merge tag 'mfd-lee-3.12-1' of git://git.linaro.org/people/ljones/mfd
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
Diffstat (limited to 'drivers/mfd/palmas.c')
-rw-r--r-- | drivers/mfd/palmas.c | 33 |
1 files changed, 31 insertions, 2 deletions
diff --git a/drivers/mfd/palmas.c b/drivers/mfd/palmas.c index e71fa289eb01..135afabe4ae2 100644 --- a/drivers/mfd/palmas.c +++ b/drivers/mfd/palmas.c @@ -326,6 +326,32 @@ static void palmas_dt_to_pdata(struct i2c_client *i2c, PALMAS_POWER_CTRL_ENABLE2_MASK; if (i2c->irq) palmas_set_pdata_irq_flag(i2c, pdata); + + pdata->pm_off = of_property_read_bool(node, + "ti,system-power-controller"); +} + +static struct palmas *palmas_dev; +static void palmas_power_off(void) +{ + unsigned int addr; + int ret, slave; + + if (!palmas_dev) + return; + + slave = PALMAS_BASE_TO_SLAVE(PALMAS_PMU_CONTROL_BASE); + addr = PALMAS_BASE_TO_REG(PALMAS_PMU_CONTROL_BASE, PALMAS_DEV_CTRL); + + ret = regmap_update_bits( + palmas_dev->regmap[slave], + addr, + PALMAS_DEV_CTRL_DEV_ON, + 0); + + if (ret) + pr_err("%s: Unable to write to DEV_CTRL_DEV_ON: %d\n", + __func__, ret); } static unsigned int palmas_features = PALMAS_PMIC_FEATURE_SMPS10_BOOST; @@ -520,10 +546,13 @@ no_irq: */ if (node) { ret = of_platform_populate(node, NULL, NULL, &i2c->dev); - if (ret < 0) + if (ret < 0) { goto err_irq; - else + } else if (pdata->pm_off && !pm_power_off) { + palmas_dev = palmas; + pm_power_off = palmas_power_off; return ret; + } } return ret; |