From: Stephen Boyd <swboyd@chromium.org>
To: Jonathan Cameron <jic23@kernel.org>
Cc: linux-kernel@vger.kernel.org, linux-iio@vger.kernel.org,
Gwendal Grignou <gwendal@chromium.org>,
Daniel Campello <campello@chromium.org>,
Hartmut Knaack <knaack.h@gmx.de>,
Lars-Peter Clausen <lars@metafoo.de>,
Peter Meerwald-Stadler <pmeerw@pmeerw.net>,
Douglas Anderson <dianders@chromium.org>
Subject: [PATCH v2 5/5] iio: sx9310: Enable vdd and svdd regulators at probe
Date: Fri, 24 Jul 2020 14:33:29 -0700 [thread overview]
Message-ID: <20200724213329.899216-6-swboyd@chromium.org> (raw)
In-Reply-To: <20200724213329.899216-1-swboyd@chromium.org>
Enable the main power supply (vdd) and digital IO power supply (svdd)
during probe so that the i2c communication and device works properly on
boards that aggressively power gate these supplies.
Cc: Gwendal Grignou <gwendal@chromium.org>
Cc: Daniel Campello <campello@chromium.org>
Cc: Hartmut Knaack <knaack.h@gmx.de>
Cc: Lars-Peter Clausen <lars@metafoo.de>
Cc: Peter Meerwald-Stadler <pmeerw@pmeerw.net>
Cc: Douglas Anderson <dianders@chromium.org>
Signed-off-by: Stephen Boyd <swboyd@chromium.org>
---
drivers/iio/proximity/sx9310.c | 27 +++++++++++++++++++++++++++
1 file changed, 27 insertions(+)
diff --git a/drivers/iio/proximity/sx9310.c b/drivers/iio/proximity/sx9310.c
index 1e1f6bba50f6..ad6ed100c7a6 100644
--- a/drivers/iio/proximity/sx9310.c
+++ b/drivers/iio/proximity/sx9310.c
@@ -19,6 +19,7 @@
#include <linux/of.h>
#include <linux/pm.h>
#include <linux/regmap.h>
+#include <linux/regulator/consumer.h>
#include <linux/slab.h>
#include <linux/iio/buffer.h>
@@ -899,12 +900,21 @@ static int sx9310_set_indio_dev_name(struct device *dev,
return 0;
}
+static void sx9310_regulator_disable(void *supplies)
+{
+ regulator_bulk_disable(2, supplies);
+}
+
static int sx9310_probe(struct i2c_client *client,
const struct i2c_device_id *id)
{
int ret;
struct iio_dev *indio_dev;
struct sx9310_data *data;
+ struct regulator_bulk_data supplies[] = {
+ { .supply = "vdd" },
+ { .supply = "svdd" },
+ };
indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data));
if (indio_dev == NULL)
@@ -919,6 +929,23 @@ static int sx9310_probe(struct i2c_client *client,
if (IS_ERR(data->regmap))
return PTR_ERR(data->regmap);
+ ret = devm_regulator_bulk_get(&client->dev, ARRAY_SIZE(supplies), supplies);
+ if (ret)
+ return ret;
+
+ ret = regulator_bulk_enable(ARRAY_SIZE(supplies), supplies);
+ if (ret)
+ return ret;
+ /* Must wait for Tpor time after initial power up */
+ usleep_range(1000, 1100);
+
+ /* Update sx9310_regulator_disable() size if this bug is hit */
+ BUILD_BUG_ON(ARRAY_SIZE(supplies) != 2);
+ ret = devm_add_action_or_reset(&client->dev, sx9310_regulator_disable,
+ supplies);
+ if (ret)
+ return ret;
+
ret = regmap_read(data->regmap, SX9310_REG_WHOAMI, &data->whoami);
if (ret < 0) {
dev_err(&client->dev, "error in reading WHOAMI register: %d\n",
--
Sent by a computer, using git, on the internet
next prev parent reply other threads:[~2020-07-24 21:33 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-07-24 21:33 [PATCH 0/3] Some sx9310 iio driver updates Stephen Boyd
2020-07-24 21:33 ` [PATCH v2 1/5] dt-bindings: iio: Add bindings for sx9310 sensor Stephen Boyd
2020-07-24 21:36 ` Stephen Boyd
2020-07-24 21:33 ` [PATCH v2 2/5] iio: sx9310: Add newlines to printks Stephen Boyd
2020-07-24 21:33 ` [PATCH v2 3/5] iio: sx9310: whoami is unsigned Stephen Boyd
2020-07-24 21:56 ` Doug Anderson
2020-07-25 0:14 ` Daniel Campello
2020-07-24 21:33 ` [PATCH v2 4/5] iio: sx9310: Drop channel_users[] Stephen Boyd
2020-07-24 21:57 ` Doug Anderson
2020-07-25 0:17 ` Daniel Campello
2020-07-24 21:33 ` Stephen Boyd [this message]
2020-07-24 22:02 ` [PATCH v2 5/5] iio: sx9310: Enable vdd and svdd regulators at probe Doug Anderson
2020-07-25 0:38 ` Stephen Boyd
2020-07-26 11:56 ` [PATCH 0/3] Some sx9310 iio driver updates Jonathan Cameron
2020-07-27 20:02 ` Stephen Boyd
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200724213329.899216-6-swboyd@chromium.org \
--to=swboyd@chromium.org \
--cc=campello@chromium.org \
--cc=dianders@chromium.org \
--cc=gwendal@chromium.org \
--cc=jic23@kernel.org \
--cc=knaack.h@gmx.de \
--cc=lars@metafoo.de \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=pmeerw@pmeerw.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox