All of lore.kernel.org
 help / color / mirror / Atom feed
From: Rui Miguel Silva <rui.silva@linaro.org>
To: mchehab@kernel.org, sakari.ailus@linux.intel.com,
	hverkuil@xs4all.nl, Rob Herring <robh+dt@kernel.org>
Cc: linux-media@vger.kernel.org,
	Fabio Estevam <fabio.estevam@nxp.com>,
	devicetree@vger.kernel.org, Ryan Harkin <ryan.harkin@linaro.org>,
	Rui Miguel Silva <rui.silva@linaro.org>
Subject: [PATCH 4/4] media: ov2680: add regulators to supply control
Date: Mon,  7 May 2018 16:56:55 +0100	[thread overview]
Message-ID: <20180507155655.1555-5-rui.silva@linaro.org> (raw)
In-Reply-To: <20180507155655.1555-1-rui.silva@linaro.org>

Add the code to control the regulators for the analogue and digital power
supplies.

Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
---
 drivers/media/i2c/ov2680.c | 35 +++++++++++++++++++++++++++++++++++
 1 file changed, 35 insertions(+)

diff --git a/drivers/media/i2c/ov2680.c b/drivers/media/i2c/ov2680.c
index 8962b397211a..07bb475c970c 100644
--- a/drivers/media/i2c/ov2680.c
+++ b/drivers/media/i2c/ov2680.c
@@ -19,6 +19,7 @@
 #include <linux/module.h>
 #include <linux/of_device.h>
 #include <linux/gpio/consumer.h>
+#include <linux/regulator/consumer.h>
 
 #include <media/v4l2-common.h>
 #include <media/v4l2-ctrls.h>
@@ -65,6 +66,14 @@ struct reg_value {
 	u8 val;
 };
 
+static const char * const ov2680_supply_name[] = {
+	"DOVDD",
+	"DVDD",
+	"AVDD",
+};
+
+#define OV2680_NUM_SUPPLIES ARRAY_SIZE(ov2680_supply_name)
+
 struct ov2680_mode_info {
 	const char *name;
 	enum ov2680_mode_id id;
@@ -97,6 +106,7 @@ struct ov2680_dev {
 	struct media_pad		pad;
 	struct clk			*xvclk;
 	u32				xvclk_freq;
+	struct regulator_bulk_data	supplies[OV2680_NUM_SUPPLIES];
 
 	struct gpio_desc		*reset_gpio;
 	struct mutex			lock; /* protect members */
@@ -522,6 +532,7 @@ static int ov2680_power_off(struct ov2680_dev *sensor)
 
 	clk_disable_unprepare(sensor->xvclk);
 	ov2680_power_down(sensor);
+	regulator_bulk_disable(OV2680_NUM_SUPPLIES, sensor->supplies);
 	sensor->is_enabled = false;
 
 	return 0;
@@ -535,6 +546,12 @@ static int ov2680_power_on(struct ov2680_dev *sensor)
 	if (sensor->is_enabled)
 		return 0;
 
+	ret = regulator_bulk_enable(OV2680_NUM_SUPPLIES, sensor->supplies);
+	if (ret < 0) {
+		dev_err(dev, "failed to enable regulators: %d\n", ret);
+		return ret;
+	}
+
 	if (!sensor->reset_gpio) {
 		ret = ov2680_write_reg(sensor, OV2680_REG_SOFT_RESET, 0x01);
 		if (ret != 0) {
@@ -962,6 +979,18 @@ static int ov2680_v4l2_init(struct ov2680_dev *sensor)
 	return ret;
 }
 
+static int ov2680_get_regulators(struct ov2680_dev *sensor)
+{
+	int i;
+
+	for (i = 0; i < OV2680_NUM_SUPPLIES; i++)
+		sensor->supplies[i].supply = ov2680_supply_name[i];
+
+	return devm_regulator_bulk_get(&sensor->i2c_client->dev,
+				       OV2680_NUM_SUPPLIES,
+				       sensor->supplies);
+}
+
 static int ov2680_check_id(struct ov2680_dev *sensor)
 {
 	struct device *dev = ov2680_to_dev(sensor);
@@ -1034,6 +1063,12 @@ static int ov2680_probe(struct i2c_client *client)
 	if (ret < 0)
 		return ret;
 
+	ret = ov2680_get_regulators(sensor);
+	if (ret < 0) {
+		dev_err(dev, "failed to get regulators\n");
+		return ret;
+	}
+
 	mutex_init(&sensor->lock);
 
 	ret = ov2680_v4l2_init(sensor);
-- 
2.17.0

  parent reply	other threads:[~2018-05-07 15:56 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-05-07 15:56 [PATCH 0/4] media: ov2680: follow up from initial version Rui Miguel Silva
2018-05-07 15:56 ` [PATCH 1/4] media: ov2680: dt: add voltage supplies as required Rui Miguel Silva
2018-05-07 15:56 ` [PATCH 2/4] media: ov2680: dt: rename gpio to reset and fix polarity Rui Miguel Silva
2018-05-07 15:56 ` [PATCH 3/4] media: ov2680: rename powerdown gpio " Rui Miguel Silva
2018-05-07 15:56 ` Rui Miguel Silva [this message]
2018-05-08 13:29 ` [PATCH 0/4] media: ov2680: follow up from initial version Fabio Estevam
2018-05-08 13:52   ` Rui Miguel Silva
2018-05-08 13:52     ` Rui Miguel Silva
2018-05-08 13:55     ` Fabio Estevam
2018-05-08 20:03 ` Sakari Ailus
2018-05-09 11:03   ` Rui Miguel Silva

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=20180507155655.1555-5-rui.silva@linaro.org \
    --to=rui.silva@linaro.org \
    --cc=devicetree@vger.kernel.org \
    --cc=fabio.estevam@nxp.com \
    --cc=hverkuil@xs4all.nl \
    --cc=linux-media@vger.kernel.org \
    --cc=mchehab@kernel.org \
    --cc=robh+dt@kernel.org \
    --cc=ryan.harkin@linaro.org \
    --cc=sakari.ailus@linux.intel.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.