linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Boris Brezillon <boris.brezillon@free-electrons.com>
To: Thierry Reding <thierry.reding@gmail.com>,
	linux-pwm@vger.kernel.org, Mark Brown <broonie@kernel.org>,
	Liam Girdwood <lgirdwood@gmail.com>,
	Jingoo Han <jingoohan1@gmail.com>,
	Lee Jones <lee.jones@linaro.org>,
	linux-fbdev@vger.kernel.org, Bryan Wu <cooloney@gmail.com>,
	Richard Purdie <rpurdie@rpsys.net>,
	Jacek Anaszewski <j.anaszewski@samsung.com>,
	linux-leds@vger.kernel.org,
	Maxime Ripard <maxime.ripard@free-electrons.com>,
	linux-sunxi@googlegroups.com, Heiko Stuebner <heiko@sntech.de>,
	linux-rockchip@lists.infradead.org,
	Jean-Christophe Plagniol-Villard <plagnioj@jcrosoft.com>,
	Tomi Valkeinen <tomi.valkeinen@ti.com>,
	Daniel Mack <daniel@zonque.org>,
	Haojian Zhuang <haojian.zhuang@gmail.com>,
	Robert Jarzmik <robert.jarzmik@free.fr>
Cc: linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org,
	"Doug Anderson" <dianders@google.com>,
	"Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>,
	"Boris Brezillon" <boris.brezillon@free-electrons.com>
Subject: [PATCH v3 12/12] regulator: pwm: properly initialize the ->state field
Date: Mon, 21 Sep 2015 11:33:29 +0200	[thread overview]
Message-ID: <1442828009-6241-13-git-send-email-boris.brezillon@free-electrons.com> (raw)
In-Reply-To: <1442828009-6241-1-git-send-email-boris.brezillon@free-electrons.com>

The ->state field is currently initialized to 0, thus referencing the
voltage selector at index 0, which might not reflect the current voltage
value.
If possible, retrieve the current voltage selector from the PWM state, else
return -EINVAL.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
---
 drivers/regulator/pwm-regulator.c | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/drivers/regulator/pwm-regulator.c b/drivers/regulator/pwm-regulator.c
index 9ffdbd6..449e3b3 100644
--- a/drivers/regulator/pwm-regulator.c
+++ b/drivers/regulator/pwm-regulator.c
@@ -41,10 +41,35 @@ struct pwm_voltages {
 /**
  * Voltage table call-backs
  */
+static void pwm_regulator_init_state(struct regulator_dev *rdev)
+{
+	struct pwm_regulator_data *drvdata = rdev_get_drvdata(rdev);
+	struct pwm_state pwm_state;
+	unsigned int dutycycle;
+	int i;
+
+	pwm_get_state(drvdata->pwm, &pwm_state);
+
+	if (!pwm_state.period)
+		return;
+
+	dutycycle = (pwm_state.duty_cycle * 100) / pwm_state.period;
+
+	for (i = 0; i < rdev->desc->n_voltages; i++) {
+		if (dutycycle == drvdata->duty_cycle_table[i].dutycycle) {
+			drvdata->state = i;
+			return;
+		}
+	}
+}
+
 static int pwm_regulator_get_voltage_sel(struct regulator_dev *rdev)
 {
 	struct pwm_regulator_data *drvdata = rdev_get_drvdata(rdev);
 
+	if (drvdata->state < 0)
+		pwm_regulator_init_state(rdev);
+
 	return drvdata->state;
 }
 
@@ -211,6 +236,7 @@ static int pwm_regulator_init_table(struct platform_device *pdev,
 		return ret;
 	}
 
+	drvdata->state			= -EINVAL;
 	drvdata->duty_cycle_table	= duty_cycle_table;
 	pwm_regulator_desc.ops		= &pwm_regulator_voltage_table_ops;
 	pwm_regulator_desc.n_voltages	= length / sizeof(*duty_cycle_table);
-- 
1.9.1


  parent reply	other threads:[~2015-09-21  9:34 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-21  9:33 [PATCH v3 00/12] pwm: add support for atomic update Boris Brezillon
2015-09-21  9:33 ` [PATCH v3 01/12] pwm: introduce default period and polarity concepts Boris Brezillon
2015-09-21 18:20   ` Robert Jarzmik
2015-09-22  6:36   ` Jacek Anaszewski
2015-09-22 21:49   ` Lee Jones
2015-11-07  2:35   ` Alexandre Belloni
2015-09-21  9:33 ` [PATCH v3 02/12] pwm: define a new pwm_state struct Boris Brezillon
2015-09-21  9:33 ` [PATCH v3 03/12] pwm: move the enabled/disabled info to " Boris Brezillon
2015-09-21  9:33 ` [PATCH v3 04/12] backlight: pwm_bl: remove useless call to pwm_set_period Boris Brezillon
2015-09-22 22:12   ` Lee Jones
2015-09-21  9:33 ` [PATCH v3 05/12] pwm: declare a default PWM state Boris Brezillon
2015-09-21  9:33 ` [PATCH v3 06/12] pwm: add the PWM initial state retrieval infra Boris Brezillon
2015-09-21  9:33 ` [PATCH v3 07/12] pwm: add the core infrastructure to allow atomic update Boris Brezillon
2015-09-21  9:33 ` [PATCH v3 08/12] pwm: add information about polarity, duty cycle and period to debugfs Boris Brezillon
2015-09-21  9:33 ` [PATCH v3 09/12] pwm: rockchip: add initial state retrieval Boris Brezillon
2015-09-21  9:33 ` [PATCH v3 10/12] pwm: rockchip: add support for atomic update Boris Brezillon
2015-09-21  9:33 ` [PATCH v3 11/12] regulator: pwm: implement ->enable(), ->disable() and ->is_enabled methods Boris Brezillon
2015-09-21 21:13   ` Mark Brown
2015-09-21  9:33 ` Boris Brezillon [this message]
2015-09-21 21:10   ` [PATCH v3 12/12] regulator: pwm: properly initialize the ->state field Mark Brown
2015-09-21 22:30 ` [PATCH v3 00/12] pwm: add support for atomic update Heiko Stübner
2015-10-09 21:02 ` Boris Brezillon
2015-10-10 15:11 ` [PATCH v3 pre-03/12] pwm: rcar: make use of pwm_is_enabled() Boris Brezillon
2015-10-19 10:12 ` [PATCH v3 00/12] pwm: add support for atomic update Heiko Stübner
2015-11-10 17:34   ` Thierry Reding
2015-11-10 18:26     ` Boris Brezillon
2016-01-25 16:28     ` Doug Anderson
2016-01-25 17:08       ` Thierry Reding
2016-01-25 17:55         ` Boris Brezillon
2016-01-25 18:51         ` Doug Anderson
2016-02-03 14:53           ` Thierry Reding
2016-02-03 19:04             ` Doug Anderson
2016-02-04 11:02               ` Mark Brown
2016-02-04 14:01                 ` Boris Brezillon
2016-02-23 14:57                   ` Thierry Reding
2016-02-22 16:27               ` Doug Anderson
2016-02-22 17:59               ` Thierry Reding
2016-02-22 19:15                 ` Doug Anderson
2016-02-22 21:24                   ` Mark Brown
2016-02-23  3:03                     ` Doug Anderson
2016-02-23 14:38                   ` Thierry Reding
2016-02-23 17:35                     ` Doug Anderson
2016-02-23 18:14                       ` Thierry Reding
2016-02-23 18:42                         ` Doug Anderson
2016-02-25 23:14                           ` Doug Anderson
2016-03-07 16:34                             ` Doug Anderson
2016-03-10 17:54                               ` Thierry Reding
2016-03-11  9:51                                 ` Boris Brezillon

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=1442828009-6241-13-git-send-email-boris.brezillon@free-electrons.com \
    --to=boris.brezillon@free-electrons.com \
    --cc=broonie@kernel.org \
    --cc=cooloney@gmail.com \
    --cc=daniel@zonque.org \
    --cc=dianders@google.com \
    --cc=haojian.zhuang@gmail.com \
    --cc=heiko@sntech.de \
    --cc=j.anaszewski@samsung.com \
    --cc=jingoohan1@gmail.com \
    --cc=lee.jones@linaro.org \
    --cc=lgirdwood@gmail.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-fbdev@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-leds@vger.kernel.org \
    --cc=linux-pwm@vger.kernel.org \
    --cc=linux-rockchip@lists.infradead.org \
    --cc=linux-sunxi@googlegroups.com \
    --cc=maxime.ripard@free-electrons.com \
    --cc=plagnioj@jcrosoft.com \
    --cc=robert.jarzmik@free.fr \
    --cc=rpurdie@rpsys.net \
    --cc=thierry.reding@gmail.com \
    --cc=tomi.valkeinen@ti.com \
    --cc=u.kleine-koenig@pengutronix.de \
    /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;
as well as URLs for NNTP newsgroup(s).