mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Mark Brown <broonie@kernel.org>
To: Paul Kocialkowski <contact@paulk.fr>
Cc: Liam Girdwood <lgirdwood@gmail.com>,
	linux-kernel@vger.kernel.org, Mark Brown <broonie@kernel.org>
Subject: [PATCH 2/2] regulator: core: Provide per-regulator runtime PM support
Date: Thu, 21 Jan 2016 20:24:11 +0000	[thread overview]
Message-ID: <1453407851-8039-2-git-send-email-broonie@kernel.org> (raw)
In-Reply-To: <1453407851-8039-1-git-send-email-broonie@kernel.org>

Provide a flag auto_runtime_pm in the regulator_desc which causes the
regulator core to take a runtime PM reference to a regulator while it
is enabled. This helps integration with chip wide power management for
auxiliary PMICs, they may be able to implement chip wide power savings
if nothing on the PMIC is in use.

Signed-off-by: Mark Brown <broonie@kernel.org>
---

Not tested at all yet, pushing out for testing by others who have
devices that could benefit from this.

 drivers/regulator/core.c         | 20 ++++++++++++++++++--
 include/linux/regulator/driver.h |  1 +
 2 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
index 3308c6bb83db..968ff3081e6c 100644
--- a/drivers/regulator/core.c
+++ b/drivers/regulator/core.c
@@ -26,6 +26,7 @@
 #include <linux/gpio.h>
 #include <linux/gpio/consumer.h>
 #include <linux/of.h>
+#include <linux/pm_runtime.h>
 #include <linux/regmap.h>
 #include <linux/regulator/of_regulator.h>
 #include <linux/regulator/consumer.h>
@@ -2059,17 +2060,23 @@ static int _regulator_do_enable(struct regulator_dev *rdev)
 		}
 	}
 
+	if (rdev->desc->auto_runtime_pm) {
+		ret = pm_runtime_get_sync(rdev->dev.parent);
+		if (ret < 0)
+			goto err;
+	}
+
 	if (rdev->ena_pin) {
 		if (!rdev->ena_gpio_state) {
 			ret = regulator_ena_gpio_ctrl(rdev, true);
 			if (ret < 0)
-				return ret;
+				goto err_pm;
 			rdev->ena_gpio_state = 1;
 		}
 	} else if (rdev->desc->ops->enable) {
 		ret = rdev->desc->ops->enable(rdev);
 		if (ret < 0)
-			return ret;
+			goto err_pm;
 	} else {
 		return -EINVAL;
 	}
@@ -2084,6 +2091,12 @@ static int _regulator_do_enable(struct regulator_dev *rdev)
 	trace_regulator_enable_complete(rdev_get_name(rdev));
 
 	return 0;
+
+err_pm:
+	if (rdev->desc->auto_runtime_pm)
+		pm_runtime_put_autosuspend(rdev->dev.parent);
+err:
+	return ret;
 }
 
 /* locks held by regulator_enable() */
@@ -2177,6 +2190,9 @@ static int _regulator_do_disable(struct regulator_dev *rdev)
 			return ret;
 	}
 
+	if (rdev->desc->auto_runtime_pm)
+		pm_runtime_put_autosuspend(rdev->dev.parent);
+
 	/* cares about last_off_jiffy only if off_on_delay is required by
 	 * device.
 	 */
diff --git a/include/linux/regulator/driver.h b/include/linux/regulator/driver.h
index 3ac0f306f033..dccea032a143 100644
--- a/include/linux/regulator/driver.h
+++ b/include/linux/regulator/driver.h
@@ -282,6 +282,7 @@ struct regulator_desc {
 			    struct regulator_config *);
 	int id;
 	unsigned int continuous_voltage_range:1;
+	unsigned int auto_runtime_pm:1;
 	unsigned n_voltages;
 	const struct regulator_ops *ops;
 	int irq;
-- 
2.7.0.rc3

  reply	other threads:[~2016-01-21 20:24 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-01-21 20:24 [PATCH 1/2] regulator: core: Use a bitfield for continuous_voltage_range Mark Brown
2016-01-21 20:24 ` Mark Brown [this message]
2016-01-21 21:49   ` [PATCH 2/2] regulator: core: Provide per-regulator runtime PM support kbuild test robot
2016-01-29 12:02   ` Paul Kocialkowski
2016-02-09 20:51   ` Paul Kocialkowski
2016-02-12 19:24     ` Paul Kocialkowski
2016-02-26  2:13       ` Mark Brown
2016-01-22 19:15 ` [PATCH 1/2] regulator: core: Use a bitfield for continuous_voltage_range Joe Perches
2016-01-22 21:31   ` Mark Brown
2016-01-22 21:42     ` Joe Perches
2016-01-23 15:16       ` Mark Brown
2016-04-21 16:11 ` Applied "regulator: core: Use a bitfield for continuous_voltage_range" to the regulator tree Mark Brown

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=1453407851-8039-2-git-send-email-broonie@kernel.org \
    --to=broonie@kernel.org \
    --cc=contact@paulk.fr \
    --cc=lgirdwood@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    /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

Powered by JetHome