diff options
author | Linus Walleij <linus.walleij@linaro.org> | 2014-05-08 17:16:35 -0400 |
---|---|---|
committer | Lee Jones <lee.jones@linaro.org> | 2014-05-09 05:51:12 -0400 |
commit | 9c9e321455fb806108f9dbb1872bacfd42c6002b (patch) | |
tree | 564f5a10a3614781c3f79e17410145af959f85e2 /drivers/mfd/stmpe.c | |
parent | 5a826feedc331a2d5ced2afd832199a70b3af891 (diff) |
mfd: stmpe: add optional regulators
The STMPE has VCC and VIO supply lines, and sometimes (as on
Ux500) this comes from a software-controlled regulator. Make
it possible to supply the STMPE with power from these
regulators.
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Diffstat (limited to 'drivers/mfd/stmpe.c')
-rw-r--r-- | drivers/mfd/stmpe.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/drivers/mfd/stmpe.c b/drivers/mfd/stmpe.c index 9fa2dd6d38bd..294731be1a15 100644 --- a/drivers/mfd/stmpe.c +++ b/drivers/mfd/stmpe.c | |||
@@ -20,6 +20,7 @@ | |||
20 | #include <linux/slab.h> | 20 | #include <linux/slab.h> |
21 | #include <linux/mfd/core.h> | 21 | #include <linux/mfd/core.h> |
22 | #include <linux/delay.h> | 22 | #include <linux/delay.h> |
23 | #include <linux/regulator/consumer.h> | ||
23 | #include "stmpe.h" | 24 | #include "stmpe.h" |
24 | 25 | ||
25 | static int __stmpe_enable(struct stmpe *stmpe, unsigned int blocks) | 26 | static int __stmpe_enable(struct stmpe *stmpe, unsigned int blocks) |
@@ -1186,6 +1187,18 @@ int stmpe_probe(struct stmpe_client_info *ci, int partnum) | |||
1186 | stmpe->variant = stmpe_variant_info[partnum]; | 1187 | stmpe->variant = stmpe_variant_info[partnum]; |
1187 | stmpe->regs = stmpe->variant->regs; | 1188 | stmpe->regs = stmpe->variant->regs; |
1188 | stmpe->num_gpios = stmpe->variant->num_gpios; | 1189 | stmpe->num_gpios = stmpe->variant->num_gpios; |
1190 | stmpe->vcc = devm_regulator_get_optional(ci->dev, "vcc"); | ||
1191 | if (!IS_ERR(stmpe->vcc)) { | ||
1192 | ret = regulator_enable(stmpe->vcc); | ||
1193 | if (ret) | ||
1194 | dev_warn(ci->dev, "failed to enable VCC supply\n"); | ||
1195 | } | ||
1196 | stmpe->vio = devm_regulator_get_optional(ci->dev, "vio"); | ||
1197 | if (!IS_ERR(stmpe->vio)) { | ||
1198 | ret = regulator_enable(stmpe->vio); | ||
1199 | if (ret) | ||
1200 | dev_warn(ci->dev, "failed to enable VIO supply\n"); | ||
1201 | } | ||
1189 | dev_set_drvdata(stmpe->dev, stmpe); | 1202 | dev_set_drvdata(stmpe->dev, stmpe); |
1190 | 1203 | ||
1191 | if (ci->init) | 1204 | if (ci->init) |
@@ -1252,6 +1265,11 @@ int stmpe_probe(struct stmpe_client_info *ci, int partnum) | |||
1252 | 1265 | ||
1253 | int stmpe_remove(struct stmpe *stmpe) | 1266 | int stmpe_remove(struct stmpe *stmpe) |
1254 | { | 1267 | { |
1268 | if (!IS_ERR(stmpe->vio)) | ||
1269 | regulator_disable(stmpe->vio); | ||
1270 | if (!IS_ERR(stmpe->vcc)) | ||
1271 | regulator_disable(stmpe->vcc); | ||
1272 | |||
1255 | mfd_remove_devices(stmpe->dev); | 1273 | mfd_remove_devices(stmpe->dev); |
1256 | 1274 | ||
1257 | return 0; | 1275 | return 0; |