Commit 1db96143 authored by Jonathan Cameron's avatar Jonathan Cameron

iio: proximity: sx_common: Use devm_regulator_bulk_get_enable()

This driver only turns the power for some regulators on at probe and off
via a custom devm_add_action_or_reset() callback. The new
devm_regulator_bulk_get_enable() replaces all this boilerplate code.
Signed-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
Cc: Gwendal Grignou <gwendal@chromium.org>
Reviewed-by: default avatarStephen Boyd <swboyd@chromium.org>
Reviewed-by: default avatarMatti Vaittinen <mazziesaccount@gmail.com>
Reviewed-by: default avatarNuno Sá <nuno.sa@analog.com>
Link: https://lore.kernel.org/r/20221016163409.320197-13-jic23@kernel.org
parent b620be5f
...@@ -424,13 +424,6 @@ static const struct iio_buffer_setup_ops sx_common_buffer_setup_ops = { ...@@ -424,13 +424,6 @@ static const struct iio_buffer_setup_ops sx_common_buffer_setup_ops = {
.postdisable = sx_common_buffer_postdisable, .postdisable = sx_common_buffer_postdisable,
}; };
static void sx_common_regulator_disable(void *_data)
{
struct sx_common_data *data = _data;
regulator_bulk_disable(ARRAY_SIZE(data->supplies), data->supplies);
}
#define SX_COMMON_SOFT_RESET 0xde #define SX_COMMON_SOFT_RESET 0xde
static int sx_common_init_device(struct device *dev, struct iio_dev *indio_dev) static int sx_common_init_device(struct device *dev, struct iio_dev *indio_dev)
...@@ -474,6 +467,7 @@ int sx_common_probe(struct i2c_client *client, ...@@ -474,6 +467,7 @@ int sx_common_probe(struct i2c_client *client,
const struct sx_common_chip_info *chip_info, const struct sx_common_chip_info *chip_info,
const struct regmap_config *regmap_config) const struct regmap_config *regmap_config)
{ {
static const char * const regulator_names[] = { "vdd", "svdd" };
struct device *dev = &client->dev; struct device *dev = &client->dev;
struct iio_dev *indio_dev; struct iio_dev *indio_dev;
struct sx_common_data *data; struct sx_common_data *data;
...@@ -487,8 +481,6 @@ int sx_common_probe(struct i2c_client *client, ...@@ -487,8 +481,6 @@ int sx_common_probe(struct i2c_client *client,
data->chip_info = chip_info; data->chip_info = chip_info;
data->client = client; data->client = client;
data->supplies[0].supply = "vdd";
data->supplies[1].supply = "svdd";
mutex_init(&data->mutex); mutex_init(&data->mutex);
init_completion(&data->completion); init_completion(&data->completion);
...@@ -497,23 +489,14 @@ int sx_common_probe(struct i2c_client *client, ...@@ -497,23 +489,14 @@ int sx_common_probe(struct i2c_client *client,
return dev_err_probe(dev, PTR_ERR(data->regmap), return dev_err_probe(dev, PTR_ERR(data->regmap),
"Could init register map\n"); "Could init register map\n");
ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(data->supplies), ret = devm_regulator_bulk_get_enable(dev, ARRAY_SIZE(regulator_names),
data->supplies); regulator_names);
if (ret) if (ret)
return dev_err_probe(dev, ret, "Unable to get regulators\n"); return dev_err_probe(dev, ret, "Unable to get regulators\n");
ret = regulator_bulk_enable(ARRAY_SIZE(data->supplies), data->supplies);
if (ret)
return dev_err_probe(dev, ret, "Unable to enable regulators\n");
/* Must wait for Tpor time after initial power up */ /* Must wait for Tpor time after initial power up */
usleep_range(1000, 1100); usleep_range(1000, 1100);
ret = devm_add_action_or_reset(dev, sx_common_regulator_disable, data);
if (ret)
return dev_err_probe(dev, ret,
"Unable to register regulators deleter\n");
ret = data->chip_info->ops.check_whoami(dev, indio_dev); ret = data->chip_info->ops.check_whoami(dev, indio_dev);
if (ret) if (ret)
return dev_err_probe(dev, ret, "error reading WHOAMI\n"); return dev_err_probe(dev, ret, "error reading WHOAMI\n");
......
...@@ -102,7 +102,6 @@ struct sx_common_chip_info { ...@@ -102,7 +102,6 @@ struct sx_common_chip_info {
* @trig: IIO trigger object. * @trig: IIO trigger object.
* @regmap: Register map. * @regmap: Register map.
* @num_default_regs: Number of default registers to set at init. * @num_default_regs: Number of default registers to set at init.
* @supplies: Power supplies object.
* @chan_prox_stat: Last reading of the proximity status for each channel. * @chan_prox_stat: Last reading of the proximity status for each channel.
* We only send an event to user space when this changes. * We only send an event to user space when this changes.
* @trigger_enabled: True when the device trigger is enabled. * @trigger_enabled: True when the device trigger is enabled.
...@@ -120,7 +119,6 @@ struct sx_common_data { ...@@ -120,7 +119,6 @@ struct sx_common_data {
struct iio_trigger *trig; struct iio_trigger *trig;
struct regmap *regmap; struct regmap *regmap;
struct regulator_bulk_data supplies[2];
unsigned long chan_prox_stat; unsigned long chan_prox_stat;
bool trigger_enabled; bool trigger_enabled;
......
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