|
@@ -20,6 +20,7 @@
|
|
#include <linux/slab.h>
|
|
#include <linux/slab.h>
|
|
#include <linux/mfd/core.h>
|
|
#include <linux/mfd/core.h>
|
|
#include <linux/delay.h>
|
|
#include <linux/delay.h>
|
|
|
|
+#include <linux/regulator/consumer.h>
|
|
#include "stmpe.h"
|
|
#include "stmpe.h"
|
|
|
|
|
|
static int __stmpe_enable(struct stmpe *stmpe, unsigned int blocks)
|
|
static int __stmpe_enable(struct stmpe *stmpe, unsigned int blocks)
|
|
@@ -1186,6 +1187,18 @@ int stmpe_probe(struct stmpe_client_info *ci, int partnum)
|
|
stmpe->variant = stmpe_variant_info[partnum];
|
|
stmpe->variant = stmpe_variant_info[partnum];
|
|
stmpe->regs = stmpe->variant->regs;
|
|
stmpe->regs = stmpe->variant->regs;
|
|
stmpe->num_gpios = stmpe->variant->num_gpios;
|
|
stmpe->num_gpios = stmpe->variant->num_gpios;
|
|
|
|
+ stmpe->vcc = devm_regulator_get_optional(ci->dev, "vcc");
|
|
|
|
+ if (!IS_ERR(stmpe->vcc)) {
|
|
|
|
+ ret = regulator_enable(stmpe->vcc);
|
|
|
|
+ if (ret)
|
|
|
|
+ dev_warn(ci->dev, "failed to enable VCC supply\n");
|
|
|
|
+ }
|
|
|
|
+ stmpe->vio = devm_regulator_get_optional(ci->dev, "vio");
|
|
|
|
+ if (!IS_ERR(stmpe->vio)) {
|
|
|
|
+ ret = regulator_enable(stmpe->vio);
|
|
|
|
+ if (ret)
|
|
|
|
+ dev_warn(ci->dev, "failed to enable VIO supply\n");
|
|
|
|
+ }
|
|
dev_set_drvdata(stmpe->dev, stmpe);
|
|
dev_set_drvdata(stmpe->dev, stmpe);
|
|
|
|
|
|
if (ci->init)
|
|
if (ci->init)
|
|
@@ -1252,6 +1265,11 @@ int stmpe_probe(struct stmpe_client_info *ci, int partnum)
|
|
|
|
|
|
int stmpe_remove(struct stmpe *stmpe)
|
|
int stmpe_remove(struct stmpe *stmpe)
|
|
{
|
|
{
|
|
|
|
+ if (!IS_ERR(stmpe->vio))
|
|
|
|
+ regulator_disable(stmpe->vio);
|
|
|
|
+ if (!IS_ERR(stmpe->vcc))
|
|
|
|
+ regulator_disable(stmpe->vcc);
|
|
|
|
+
|
|
mfd_remove_devices(stmpe->dev);
|
|
mfd_remove_devices(stmpe->dev);
|
|
|
|
|
|
return 0;
|
|
return 0;
|