Commit 36e9615b authored by Dudley Du's avatar Dudley Du Committed by Dmitry Torokhov

Input: cyapa - add regulator vcc support

We need to power up the chip before we can initialize it.

On systems that delegate task of powering up regulators to firmware we
assume that we'll be simply given a dummy regulator.
Signed-off-by: default avatarDudley Du <dudl@cypress.com>
Signed-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
parent 02d9bd05
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/mutex.h> #include <linux/mutex.h>
#include <linux/regulator/consumer.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/uaccess.h> #include <linux/uaccess.h>
#include <linux/pm_runtime.h> #include <linux/pm_runtime.h>
...@@ -1241,6 +1242,13 @@ static void cyapa_remove_sysfs_group(void *data) ...@@ -1241,6 +1242,13 @@ static void cyapa_remove_sysfs_group(void *data)
sysfs_remove_group(&cyapa->client->dev.kobj, &cyapa_sysfs_group); sysfs_remove_group(&cyapa->client->dev.kobj, &cyapa_sysfs_group);
} }
static void cyapa_disable_regulator(void *data)
{
struct cyapa *cyapa = data;
regulator_disable(cyapa->vcc);
}
static int cyapa_probe(struct i2c_client *client, static int cyapa_probe(struct i2c_client *client,
const struct i2c_device_id *dev_id) const struct i2c_device_id *dev_id)
{ {
...@@ -1274,6 +1282,27 @@ static int cyapa_probe(struct i2c_client *client, ...@@ -1274,6 +1282,27 @@ static int cyapa_probe(struct i2c_client *client,
sprintf(cyapa->phys, "i2c-%d-%04x/input0", client->adapter->nr, sprintf(cyapa->phys, "i2c-%d-%04x/input0", client->adapter->nr,
client->addr); client->addr);
cyapa->vcc = devm_regulator_get(dev, "vcc");
if (IS_ERR(cyapa->vcc)) {
error = PTR_ERR(cyapa->vcc);
dev_err(dev, "failed to get vcc regulator: %d\n", error);
return error;
}
error = regulator_enable(cyapa->vcc);
if (error) {
dev_err(dev, "failed to enable regulator: %d\n", error);
return error;
}
error = devm_add_action(dev, cyapa_disable_regulator, cyapa);
if (error) {
cyapa_disable_regulator(cyapa);
dev_err(dev, "failed to add disable regulator action: %d\n",
error);
return error;
}
error = cyapa_initialize(cyapa); error = cyapa_initialize(cyapa);
if (error) { if (error) {
dev_err(dev, "failed to detect and initialize tp device.\n"); dev_err(dev, "failed to detect and initialize tp device.\n");
......
...@@ -321,6 +321,7 @@ struct cyapa { ...@@ -321,6 +321,7 @@ struct cyapa {
u8 status[BL_STATUS_SIZE]; u8 status[BL_STATUS_SIZE];
bool operational; /* true: ready for data reporting; false: not. */ bool operational; /* true: ready for data reporting; false: not. */
struct regulator *vcc;
struct i2c_client *client; struct i2c_client *client;
struct input_dev *input; struct input_dev *input;
char phys[32]; /* Device physical location */ char phys[32]; /* Device physical location */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment