All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/3] regulator: gpio-regulator: Fixes for problems that turned up with 3.5-rc1
@ 2012-06-03 19:29 Heiko Stübner
  2012-06-03 19:30 ` [PATCH 1/3] regulator: gpio-regulator: do not pass drvdata pointer as reference Heiko Stübner
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Heiko Stübner @ 2012-06-03 19:29 UTC (permalink / raw)
  To: Mark Brown; +Cc: Liam Girdwood, LKML, Axel Lin, Heiko Stübner

During the porting of my machine to 3.5-rc1 some glitches in the
gpio-regulator from different changes popped up.

This series fixes these.

While doing this, I noticed a possible uninitialized use of "selector" in
_regulator_do_set_voltage, where I'm not sure what the correct fix would be.

To summarize, before
	if (rdev->desc->ops->list_voltage)
		best_val = rdev->desc->ops->list_voltage(rdev, selector);
	else
		best_val = -1;

selector is set in the set_voltage callback or if the new map_voltage returns
a non-error value. If it returns an error value or the else clause is reached
selector is used uninitialized in the list_voltage and set_voltage_time_sel
call.

As written above, I'm not sure what the correct fix would be here.


Heiko Stuebner (3):
  regulator: gpio-regulator: do not pass drvdata pointer as reference
  regulator: gpio-regulator: Fix finding of smallest value
  regulator: gpio-regulator: populate selector from set_voltage

 drivers/regulator/gpio-regulator.c |   16 ++++++++++------
 1 files changed, 10 insertions(+), 6 deletions(-)

-- 
1.7.2.3


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH 1/3] regulator: gpio-regulator: do not pass drvdata pointer as reference
  2012-06-03 19:29 [PATCH 0/3] regulator: gpio-regulator: Fixes for problems that turned up with 3.5-rc1 Heiko Stübner
@ 2012-06-03 19:30 ` Heiko Stübner
  2012-06-04  0:13   ` Axel Lin
  2012-06-04  9:46   ` Mark Brown
  2012-06-03 19:31 ` [PATCH 2/3] regulator: gpio-regulator: Fix finding of smallest value Heiko Stübner
  2012-06-03 19:32 ` [PATCH 3/3] regulator: gpio-regulator: populate selector from set_voltage Heiko Stübner
  2 siblings, 2 replies; 8+ messages in thread
From: Heiko Stübner @ 2012-06-03 19:30 UTC (permalink / raw)
  To: Mark Brown; +Cc: Liam Girdwood, LKML, Axel Lin

Commit c172708d38a4 (regulator: core: Use a struct to pass in
regulator runtime configuration) added the drvdata pointer
only per reference to the new config array in the gpio-regulator.

Signed-off-by: Heiko Stuebner <heiko@sntech.de>
---
 drivers/regulator/gpio-regulator.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/regulator/gpio-regulator.c b/drivers/regulator/gpio-regulator.c
index 9997d7a..ebe2b5c 100644
--- a/drivers/regulator/gpio-regulator.c
+++ b/drivers/regulator/gpio-regulator.c
@@ -286,7 +286,7 @@ static int __devinit gpio_regulator_probe(struct platform_device *pdev)
 
 	cfg.dev = &pdev->dev;
 	cfg.init_data = config->init_data;
-	cfg.driver_data = &drvdata;
+	cfg.driver_data = drvdata;
 
 	drvdata->dev = regulator_register(&drvdata->desc, &cfg);
 	if (IS_ERR(drvdata->dev)) {
-- 
1.7.2.3


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 2/3] regulator: gpio-regulator: Fix finding of smallest value
  2012-06-03 19:29 [PATCH 0/3] regulator: gpio-regulator: Fixes for problems that turned up with 3.5-rc1 Heiko Stübner
  2012-06-03 19:30 ` [PATCH 1/3] regulator: gpio-regulator: do not pass drvdata pointer as reference Heiko Stübner
@ 2012-06-03 19:31 ` Heiko Stübner
  2012-06-04  0:14   ` Axel Lin
  2012-06-03 19:32 ` [PATCH 3/3] regulator: gpio-regulator: populate selector from set_voltage Heiko Stübner
  2 siblings, 1 reply; 8+ messages in thread
From: Heiko Stübner @ 2012-06-03 19:31 UTC (permalink / raw)
  To: Mark Brown; +Cc: Liam Girdwood, LKML, Axel Lin

Commit 4dbd8f63f07a (regulator: gpio-regulator: Set the smallest
voltage/current in the specified range) forgot to set the newly
introduced best_val.

Therefore it stayed always at INT_MAX thus breaking the setting
of the voltage.

Included is also an init value for target, as warnings about
a possibly uninitialised target started appearing with this fix.

Signed-off-by: Heiko Stuebner <heiko@sntech.de>
---
 drivers/regulator/gpio-regulator.c |    6 ++++--
 1 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/regulator/gpio-regulator.c b/drivers/regulator/gpio-regulator.c
index ebe2b5c..2c38bea 100644
--- a/drivers/regulator/gpio-regulator.c
+++ b/drivers/regulator/gpio-regulator.c
@@ -104,13 +104,15 @@ static int gpio_regulator_set_value(struct regulator_dev *dev,
 					int min, int max)
 {
 	struct gpio_regulator_data *data = rdev_get_drvdata(dev);
-	int ptr, target, state, best_val = INT_MAX;
+	int ptr, target = 0, state, best_val = INT_MAX;
 
 	for (ptr = 0; ptr < data->nr_states; ptr++)
 		if (data->states[ptr].value < best_val &&
 		    data->states[ptr].value >= min &&
-		    data->states[ptr].value <= max)
+		    data->states[ptr].value <= max) {
 			target = data->states[ptr].gpios;
+			best_val = data->states[ptr].value;
+		}
 
 	if (best_val == INT_MAX)
 		return -EINVAL;
-- 
1.7.2.3


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 3/3] regulator: gpio-regulator: populate selector from set_voltage
  2012-06-03 19:29 [PATCH 0/3] regulator: gpio-regulator: Fixes for problems that turned up with 3.5-rc1 Heiko Stübner
  2012-06-03 19:30 ` [PATCH 1/3] regulator: gpio-regulator: do not pass drvdata pointer as reference Heiko Stübner
  2012-06-03 19:31 ` [PATCH 2/3] regulator: gpio-regulator: Fix finding of smallest value Heiko Stübner
@ 2012-06-03 19:32 ` Heiko Stübner
  2012-06-04  0:15   ` Axel Lin
  2 siblings, 1 reply; 8+ messages in thread
From: Heiko Stübner @ 2012-06-03 19:32 UTC (permalink / raw)
  To: Mark Brown; +Cc: Liam Girdwood, LKML, Axel Lin

This was missing until now and the underlying
_regulator_do_set_voltage is using this value when calling list_voltage.

Signed-off-by: Heiko Stuebner <heiko@sntech.de>
---
 drivers/regulator/gpio-regulator.c |    8 +++++---
 1 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/drivers/regulator/gpio-regulator.c b/drivers/regulator/gpio-regulator.c
index 2c38bea..242851a 100644
--- a/drivers/regulator/gpio-regulator.c
+++ b/drivers/regulator/gpio-regulator.c
@@ -101,7 +101,7 @@ static int gpio_regulator_get_value(struct regulator_dev *dev)
 }
 
 static int gpio_regulator_set_value(struct regulator_dev *dev,
-					int min, int max)
+					int min, int max, unsigned *selector)
 {
 	struct gpio_regulator_data *data = rdev_get_drvdata(dev);
 	int ptr, target = 0, state, best_val = INT_MAX;
@@ -112,6 +112,8 @@ static int gpio_regulator_set_value(struct regulator_dev *dev,
 		    data->states[ptr].value <= max) {
 			target = data->states[ptr].gpios;
 			best_val = data->states[ptr].value;
+			if (selector)
+				*selector = ptr;
 		}
 
 	if (best_val == INT_MAX)
@@ -130,7 +132,7 @@ static int gpio_regulator_set_voltage(struct regulator_dev *dev,
 					int min_uV, int max_uV,
 					unsigned *selector)
 {
-	return gpio_regulator_set_value(dev, min_uV, max_uV);
+	return gpio_regulator_set_value(dev, min_uV, max_uV, selector);
 }
 
 static int gpio_regulator_list_voltage(struct regulator_dev *dev,
@@ -147,7 +149,7 @@ static int gpio_regulator_list_voltage(struct regulator_dev *dev,
 static int gpio_regulator_set_current_limit(struct regulator_dev *dev,
 					int min_uA, int max_uA)
 {
-	return gpio_regulator_set_value(dev, min_uA, max_uA);
+	return gpio_regulator_set_value(dev, min_uA, max_uA, NULL);
 }
 
 static struct regulator_ops gpio_regulator_voltage_ops = {
-- 
1.7.2.3


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/3] regulator: gpio-regulator: do not pass drvdata pointer as reference
  2012-06-03 19:30 ` [PATCH 1/3] regulator: gpio-regulator: do not pass drvdata pointer as reference Heiko Stübner
@ 2012-06-04  0:13   ` Axel Lin
  2012-06-04  9:46   ` Mark Brown
  1 sibling, 0 replies; 8+ messages in thread
From: Axel Lin @ 2012-06-04  0:13 UTC (permalink / raw)
  To: Heiko Stübner; +Cc: Mark Brown, Liam Girdwood, LKML

2012/6/4 Heiko Stübner <heiko@sntech.de>:
> Commit c172708d38a4 (regulator: core: Use a struct to pass in
> regulator runtime configuration) added the drvdata pointer
> only per reference to the new config array in the gpio-regulator.
>
> Signed-off-by: Heiko Stuebner <heiko@sntech.de>
Acked-by: Axel Lin <axel.lin@gmail.com>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 2/3] regulator: gpio-regulator: Fix finding of smallest value
  2012-06-03 19:31 ` [PATCH 2/3] regulator: gpio-regulator: Fix finding of smallest value Heiko Stübner
@ 2012-06-04  0:14   ` Axel Lin
  0 siblings, 0 replies; 8+ messages in thread
From: Axel Lin @ 2012-06-04  0:14 UTC (permalink / raw)
  To: Heiko Stübner; +Cc: Mark Brown, Liam Girdwood, LKML

2012/6/4 Heiko Stübner <heiko@sntech.de>:
> Commit 4dbd8f63f07a (regulator: gpio-regulator: Set the smallest
> voltage/current in the specified range) forgot to set the newly
> introduced best_val.
>
> Therefore it stayed always at INT_MAX thus breaking the setting
> of the voltage.
>
> Included is also an init value for target, as warnings about
> a possibly uninitialised target started appearing with this fix.
>
> Signed-off-by: Heiko Stuebner <heiko@sntech.de>

Acked-by: Axel Lin <axel.lin@gmail.com>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 3/3] regulator: gpio-regulator: populate selector from set_voltage
  2012-06-03 19:32 ` [PATCH 3/3] regulator: gpio-regulator: populate selector from set_voltage Heiko Stübner
@ 2012-06-04  0:15   ` Axel Lin
  0 siblings, 0 replies; 8+ messages in thread
From: Axel Lin @ 2012-06-04  0:15 UTC (permalink / raw)
  To: Heiko Stübner; +Cc: Mark Brown, Liam Girdwood, LKML

2012/6/4 Heiko Stübner <heiko@sntech.de>:
> This was missing until now and the underlying
> _regulator_do_set_voltage is using this value when calling list_voltage.
>
> Signed-off-by: Heiko Stuebner <heiko@sntech.de>

Acked-by: Axel Lin <axel.lin@gmail.com>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/3] regulator: gpio-regulator: do not pass drvdata pointer as reference
  2012-06-03 19:30 ` [PATCH 1/3] regulator: gpio-regulator: do not pass drvdata pointer as reference Heiko Stübner
  2012-06-04  0:13   ` Axel Lin
@ 2012-06-04  9:46   ` Mark Brown
  1 sibling, 0 replies; 8+ messages in thread
From: Mark Brown @ 2012-06-04  9:46 UTC (permalink / raw)
  To: Heiko Stübner; +Cc: Liam Girdwood, LKML, Axel Lin

[-- Attachment #1: Type: text/plain, Size: 284 bytes --]

On Sun, Jun 03, 2012 at 09:30:33PM +0200, Heiko Stübner wrote:
> Commit c172708d38a4 (regulator: core: Use a struct to pass in
> regulator runtime configuration) added the drvdata pointer
> only per reference to the new config array in the gpio-regulator.

Applied all, thanks.

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2012-06-04  9:46 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-06-03 19:29 [PATCH 0/3] regulator: gpio-regulator: Fixes for problems that turned up with 3.5-rc1 Heiko Stübner
2012-06-03 19:30 ` [PATCH 1/3] regulator: gpio-regulator: do not pass drvdata pointer as reference Heiko Stübner
2012-06-04  0:13   ` Axel Lin
2012-06-04  9:46   ` Mark Brown
2012-06-03 19:31 ` [PATCH 2/3] regulator: gpio-regulator: Fix finding of smallest value Heiko Stübner
2012-06-04  0:14   ` Axel Lin
2012-06-03 19:32 ` [PATCH 3/3] regulator: gpio-regulator: populate selector from set_voltage Heiko Stübner
2012-06-04  0:15   ` Axel Lin

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.