Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1236335 > unrolled thread

[PATCH 3/6] regulator: core: create unlocked version of regulator_list_voltage

Started bySascha Hauer <s.hauer@pengutronix.de>
First post2015-09-30 16:10 +0200
Last post2015-10-01 13:30 +0200
Articles 3 — 2 participants

Back to article view | Back to linux.kernel

This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by below is the oldest one visible, not the original post.


Contents

  [PATCH 3/6] regulator: core: create unlocked version of regulator_list_voltage Sascha Hauer <s.hauer@pengutronix.de> - 2015-09-30 16:10 +0200
    Re: [PATCH 3/6] regulator: core: create unlocked version of  regulator_list_voltage Mark Brown <broonie@kernel.org> - 2015-10-01 00:40 +0200
      Re: [PATCH 3/6] regulator: core: create unlocked version of  regulator_list_voltage Mark Brown <broonie@kernel.org> - 2015-10-01 13:30 +0200

#1236335 — [PATCH 3/6] regulator: core: create unlocked version of regulator_list_voltage

FromSascha Hauer <s.hauer@pengutronix.de>
Date2015-09-30 16:10 +0200
Subject[PATCH 3/6] regulator: core: create unlocked version of regulator_list_voltage
Message-ID<qeqf1-7dN-31@gated-at.bofh.it>
The unlocked version will be needed when we start propagating voltage
changes to the supply regulators.

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
---
 drivers/regulator/core.c | 62 +++++++++++++++++++++++++++---------------------
 1 file changed, 35 insertions(+), 27 deletions(-)

diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
index e5de3d9..d148545 100644
--- a/drivers/regulator/core.c
+++ b/drivers/regulator/core.c
@@ -2343,6 +2343,40 @@ static int _regulator_is_enabled(struct regulator_dev *rdev)
 	return rdev->desc->ops->is_enabled(rdev);
 }
 
+static int _regulator_list_voltage(struct regulator *regulator,
+				    unsigned selector, int lock)
+{
+	struct regulator_dev *rdev = regulator->rdev;
+	const struct regulator_ops *ops = rdev->desc->ops;
+	int ret;
+
+	if (rdev->desc->fixed_uV && rdev->desc->n_voltages == 1 && !selector)
+		return rdev->desc->fixed_uV;
+
+	if (ops->list_voltage) {
+		if (selector >= rdev->desc->n_voltages)
+			return -EINVAL;
+		if (lock)
+			mutex_lock(&rdev->mutex);
+		ret = ops->list_voltage(rdev, selector);
+		if (lock)
+			mutex_unlock(&rdev->mutex);
+	} else if (rdev->supply) {
+		ret = _regulator_list_voltage(rdev->supply, selector, lock);
+	} else {
+		return -EINVAL;
+	}
+
+	if (ret > 0) {
+		if (ret < rdev->constraints->min_uV)
+			ret = 0;
+		else if (ret > rdev->constraints->max_uV)
+			ret = 0;
+	}
+
+	return ret;
+}
+
 /**
  * regulator_is_enabled - is the regulator output enabled
  * @regulator: regulator source
@@ -2432,33 +2466,7 @@ EXPORT_SYMBOL_GPL(regulator_count_voltages);
  */
 int regulator_list_voltage(struct regulator *regulator, unsigned selector)
 {
-	struct regulator_dev *rdev = regulator->rdev;
-	const struct regulator_ops *ops = rdev->desc->ops;
-	int ret;
-
-	if (rdev->desc->fixed_uV && rdev->desc->n_voltages == 1 && !selector)
-		return rdev->desc->fixed_uV;
-
-	if (ops->list_voltage) {
-		if (selector >= rdev->desc->n_voltages)
-			return -EINVAL;
-		mutex_lock(&rdev->mutex);
-		ret = ops->list_voltage(rdev, selector);
-		mutex_unlock(&rdev->mutex);
-	} else if (rdev->supply) {
-		ret = regulator_list_voltage(rdev->supply, selector);
-	} else {
-		return -EINVAL;
-	}
-
-	if (ret > 0) {
-		if (ret < rdev->constraints->min_uV)
-			ret = 0;
-		else if (ret > rdev->constraints->max_uV)
-			ret = 0;
-	}
-
-	return ret;
+	return _regulator_list_voltage(regulator, selector, 1);
 }
 EXPORT_SYMBOL_GPL(regulator_list_voltage);
 
-- 
2.5.3

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [next] | [standalone]


#1236835 — Re: [PATCH 3/6] regulator: core: create unlocked version of regulator_list_voltage

FromMark Brown <broonie@kernel.org>
Date2015-10-01 00:40 +0200
SubjectRe: [PATCH 3/6] regulator: core: create unlocked version of regulator_list_voltage
Message-ID<qeycx-1Kc-1@gated-at.bofh.it>
In reply to#1236335

[Multipart message — attachments visible in raw view] — view raw

On Wed, Sep 30, 2015 at 04:05:43PM +0200, Sascha Hauer wrote:
> The unlocked version will be needed when we start propagating voltage
> changes to the supply regulators.

I'm now wondering why we have a locked _list_voltage() in the first
place...  it *should* be a pure function that doesn't need any locking.
I'll check tomorrow if there are any users who care but if there aren't
the change here is probably to remove the locking entirely.

[toc] | [prev] | [next] | [standalone]


#1237286 — Re: [PATCH 3/6] regulator: core: create unlocked version of regulator_list_voltage

FromMark Brown <broonie@kernel.org>
Date2015-10-01 13:30 +0200
SubjectRe: [PATCH 3/6] regulator: core: create unlocked version of regulator_list_voltage
Message-ID<qeKdI-2A1-15@gated-at.bofh.it>
In reply to#1236835

[Multipart message — attachments visible in raw view] — view raw

On Wed, Sep 30, 2015 at 11:36:03PM +0100, Mark Brown wrote:
> On Wed, Sep 30, 2015 at 04:05:43PM +0200, Sascha Hauer wrote:
> > The unlocked version will be needed when we start propagating voltage
> > changes to the supply regulators.
> 
> I'm now wondering why we have a locked _list_voltage() in the first
> place...  it *should* be a pure function that doesn't need any locking.
> I'll check tomorrow if there are any users who care but if there aren't
> the change here is probably to remove the locking entirely.

Hrm, looks like there's one that *might* need it - let's go with this
for now, we can always fix up later.

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web