diff mbox

backlight: pwm_bl: Do not make the regulator mandatory

Message ID 1385055795-24002-1-git-send-email-fabio.estevam@freescale.com (mailing list archive)
State New, archived
Headers show

Commit Message

Fabio Estevam Nov. 21, 2013, 5:43 p.m. UTC
Commit 22ceeee1 (pwm-backlight: Add power supply support) caused breakage on 
boards that do not define the backlight regulator on their dts files.

Instead of making the backlight regulator mandatory, treat it as optional 
instead, so that we do not have breakage.

This avoids the need for adding a dummy regulator on every dts file that uses 
the pwm-backlight.

Tested on a mx6qsabresd.

Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
---
 .../devicetree/bindings/video/backlight/pwm-backlight.txt |  2 +-
 drivers/video/backlight/pwm_bl.c                          | 15 +++++++--------
 2 files changed, 8 insertions(+), 9 deletions(-)

Comments

Marek Vasut Nov. 22, 2013, 12:42 a.m. UTC | #1
Dear Fabio Estevam,

> Commit 22ceeee1 (pwm-backlight: Add power supply support) caused breakage
> on boards that do not define the backlight regulator on their dts files.
> 
> Instead of making the backlight regulator mandatory, treat it as optional
> instead, so that we do not have breakage.
> 
> This avoids the need for adding a dummy regulator on every dts file that
> uses the pwm-backlight.
> 
> Tested on a mx6qsabresd.

This patch certainly makes sense, there are plenty of simple boards that have no 
actual supply for the PWM.

Acked-by: Marek Vasut <marex@denx.de>

Best regards,
Marek Vasut
Thierry Reding Nov. 22, 2013, 2:22 p.m. UTC | #2
On Thu, Nov 21, 2013 at 03:43:15PM -0200, Fabio Estevam wrote:
> Commit 22ceeee1 (pwm-backlight: Add power supply support) caused breakage on 
> boards that do not define the backlight regulator on their dts files.
> 
> Instead of making the backlight regulator mandatory, treat it as optional 
> instead, so that we do not have breakage.
> 
> This avoids the need for adding a dummy regulator on every dts file that uses 
> the pwm-backlight.

That was actually part of an earlier version of this patch. It was
rejected on the grounds that regulators really aren't optional. They are
there, but in most cases just not described in DT (most likely because
they aren't controllable and always on).

But even so, the regulator core now has functionality to return a dummy
regulator if none is specified in DT, specifically so that users don't
have to special case the handling of "optional" regulators. That should
be enough to keep all boards working even if no power-supply property
was given in the DTS. As a matter of fact it's a constellation that I
explicitly tested and found to work well.

Cc'ing Mark Brown, perhaps he can help figure out what's causing this.

Thierry

> 
> Tested on a mx6qsabresd.
> 
> Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
> ---
>  .../devicetree/bindings/video/backlight/pwm-backlight.txt |  2 +-
>  drivers/video/backlight/pwm_bl.c                          | 15 +++++++--------
>  2 files changed, 8 insertions(+), 9 deletions(-)
> 
> diff --git a/Documentation/devicetree/bindings/video/backlight/pwm-backlight.txt b/Documentation/devicetree/bindings/video/backlight/pwm-backlight.txt
> index 764db86..ed3dc3c 100644
> --- a/Documentation/devicetree/bindings/video/backlight/pwm-backlight.txt
> +++ b/Documentation/devicetree/bindings/video/backlight/pwm-backlight.txt
> @@ -10,13 +10,13 @@ Required properties:
>        last value in the array represents a 100% duty cycle (brightest).
>    - default-brightness-level: the default brightness level (index into the
>        array defined by the "brightness-levels" property)
> -  - power-supply: regulator for supply voltage
>  
>  Optional properties:
>    - pwm-names: a list of names for the PWM devices specified in the
>                 "pwms" property (see PWM binding[0])
>    - enable-gpios: contains a single GPIO specifier for the GPIO which enables
>                    and disables the backlight (see GPIO binding[1])
> +  - power-supply: regulator for supply voltage
>  
>  [0]: Documentation/devicetree/bindings/pwm/pwm.txt
>  [1]: Documentation/devicetree/bindings/gpio/gpio.txt
> diff --git a/drivers/video/backlight/pwm_bl.c b/drivers/video/backlight/pwm_bl.c
> index fb80d68..fb3008c 100644
> --- a/drivers/video/backlight/pwm_bl.c
> +++ b/drivers/video/backlight/pwm_bl.c
> @@ -50,9 +50,11 @@ static void pwm_backlight_power_on(struct pwm_bl_data *pb, int brightness)
>  	if (pb->enabled)
>  		return;
>  
> -	err = regulator_enable(pb->power_supply);
> -	if (err < 0)
> -		dev_err(pb->dev, "failed to enable power supply\n");
> +	if (!IS_ERR(pb->power_supply)) {
> +		err = regulator_enable(pb->power_supply);
> +		if (err < 0)
> +			dev_err(pb->dev, "failed to enable power supply\n");
> +	}
>  
>  	if (gpio_is_valid(pb->enable_gpio)) {
>  		if (pb->enable_gpio_flags & PWM_BACKLIGHT_GPIO_ACTIVE_LOW)
> @@ -80,7 +82,8 @@ static void pwm_backlight_power_off(struct pwm_bl_data *pb)
>  			gpio_set_value(pb->enable_gpio, 0);
>  	}
>  
> -	regulator_disable(pb->power_supply);
> +	if (!IS_ERR(pb->power_supply))
> +		regulator_disable(pb->power_supply);
>  	pb->enabled = false;
>  }
>  
> @@ -283,10 +286,6 @@ static int pwm_backlight_probe(struct platform_device *pdev)
>  	}
>  
>  	pb->power_supply = devm_regulator_get(&pdev->dev, "power");
> -	if (IS_ERR(pb->power_supply)) {
> -		ret = PTR_ERR(pb->power_supply);
> -		goto err_gpio;
> -	}
>  
>  	pb->pwm = devm_pwm_get(&pdev->dev, NULL);
>  	if (IS_ERR(pb->pwm)) {
> -- 
> 1.8.1.2
> 
>
Mark Brown Nov. 22, 2013, 2:52 p.m. UTC | #3
On Fri, Nov 22, 2013 at 03:22:32PM +0100, Thierry Reding wrote:

> Cc'ing Mark Brown, perhaps he can help figure out what's causing this.

The obvious question is what kernel this is being tested on...
Fabio Estevam Nov. 22, 2013, 4:06 p.m. UTC | #4
On Fri, Nov 22, 2013 at 12:52 PM, Mark Brown <broonie@kernel.org> wrote:
> On Fri, Nov 22, 2013 at 03:22:32PM +0100, Thierry Reding wrote:
>
>> Cc'ing Mark Brown, perhaps he can help figure out what's causing this.
>
> The obvious question is what kernel this is being tested on...

Tested linux-next 20131120 originally and display was blank.

Now on 20131122 the display works fine.

Regards,

Fabio Estevam
Shawn Guo Nov. 25, 2013, 3:10 a.m. UTC | #5
On Fri, Nov 22, 2013 at 02:52:24PM +0000, Mark Brown wrote:
> On Fri, Nov 22, 2013 at 03:22:32PM +0100, Thierry Reding wrote:
> 
> > Cc'ing Mark Brown, perhaps he can help figure out what's causing this.
> 
> The obvious question is what kernel this is being tested on...

Hmm, I'm seeing this breakage on v3.13-rc1 now with the following line
in the kernel log.

  pwm-backlight backlight.18: dummy supplies not allowed

What's missing here?

Shawn
Fabio Estevam Nov. 25, 2013, 1:26 p.m. UTC | #6
Hi Shawn,

On Mon, Nov 25, 2013 at 1:10 AM, Shawn Guo <shawn.guo@linaro.org> wrote:

> Hmm, I'm seeing this breakage on v3.13-rc1 now with the following line
> in the kernel log.
>
>   pwm-backlight backlight.18: dummy supplies not allowed
>
> What's missing here?

Yes, this is weird.

linux-next 20131120: backlight fails
linux-next 20131122: backlight works
linux-next 20131125: backlight fails

Looks like we need to apply this one to make sure backlight works:
http://permalink.gmane.org/gmane.linux.ports.arm.kernel/281826

Regards,

Fabio Estevam
Shawn Guo Nov. 25, 2013, 1:37 p.m. UTC | #7
On Mon, Nov 25, 2013 at 11:26:53AM -0200, Fabio Estevam wrote:
> Looks like we need to apply this one to make sure backlight works:
> http://permalink.gmane.org/gmane.linux.ports.arm.kernel/281826

But per Thierry's comment below, this is the exactly the case that we
should avoid - patch individual board DTS file to add a dummy/fake
regulator to get it through.

| But even so, the regulator core now has functionality to return a dummy
| regulator if none is specified in DT, specifically so that users don't
| have to special case the handling of "optional" regulators. That should
| be enough to keep all boards working even if no power-supply property
| was given in the DTS. As a matter of fact it's a constellation that I
| explicitly tested and found to work well.

Shawn
Fabio Estevam Nov. 25, 2013, 2:43 p.m. UTC | #8
Mark/Thierry,

On Mon, Nov 25, 2013 at 11:37 AM, Shawn Guo <shawn.guo@linaro.org> wrote:
> On Mon, Nov 25, 2013 at 11:26:53AM -0200, Fabio Estevam wrote:
>> Looks like we need to apply this one to make sure backlight works:
>> http://permalink.gmane.org/gmane.linux.ports.arm.kernel/281826
>
> But per Thierry's comment below, this is the exactly the case that we
> should avoid - patch individual board DTS file to add a dummy/fake
> regulator to get it through.
>
> | But even so, the regulator core now has functionality to return a dummy
> | regulator if none is specified in DT, specifically so that users don't

What commit provides this regulator core functionality?

Looks like it has not reached 3.13-rc1.

Regards,

Fabio Estevam
Mark Brown Nov. 25, 2013, 3:37 p.m. UTC | #9
On Mon, Nov 25, 2013 at 11:26:53AM -0200, Fabio Estevam wrote:

> linux-next 20131120: backlight fails
> linux-next 20131122: backlight works
> linux-next 20131125: backlight fails

What are the differences between those kernels?  I'm not aware of any
regulator core changes at all there and diff isn't showing me any - are
you sure you used a consistent kernel configuration?  Have you tried to
look at what happens when we should provide the dummy regulator, and do
the logs say anything?

> Looks like we need to apply this one to make sure backlight works:
> http://permalink.gmane.org/gmane.linux.ports.arm.kernel/281826

Please always provide plain text versions of links and SHA1s...  that
link is to a patch adding a fixed regulator which you should do but
ought not to need to do.
Mark Brown Nov. 25, 2013, 3:48 p.m. UTC | #10
On Mon, Nov 25, 2013 at 11:10:32AM +0800, Shawn Guo wrote:

> Hmm, I'm seeing this breakage on v3.13-rc1 now with the following line
> in the kernel log.

>   pwm-backlight backlight.18: dummy supplies not allowed

> What's missing here?

Are you racing with the late initcall to flag that DT is present?  Wei
Ni was looking at hooking this into DT so that when we pass the DT over
we flag that we have full constraints (or provide a notifier to let
subsystems do that) but that ground to a halt.
Mark Brown Nov. 25, 2013, 5:29 p.m. UTC | #11
On Mon, Nov 25, 2013 at 12:43:58PM -0200, Fabio Estevam wrote:

> What commit provides this regulator core functionality?

regulator: core: Provide a dummy regulator with full constraints

> Looks like it has not reached 3.13-rc1.

Yes, it did.
diff mbox

Patch

diff --git a/Documentation/devicetree/bindings/video/backlight/pwm-backlight.txt b/Documentation/devicetree/bindings/video/backlight/pwm-backlight.txt
index 764db86..ed3dc3c 100644
--- a/Documentation/devicetree/bindings/video/backlight/pwm-backlight.txt
+++ b/Documentation/devicetree/bindings/video/backlight/pwm-backlight.txt
@@ -10,13 +10,13 @@  Required properties:
       last value in the array represents a 100% duty cycle (brightest).
   - default-brightness-level: the default brightness level (index into the
       array defined by the "brightness-levels" property)
-  - power-supply: regulator for supply voltage
 
 Optional properties:
   - pwm-names: a list of names for the PWM devices specified in the
                "pwms" property (see PWM binding[0])
   - enable-gpios: contains a single GPIO specifier for the GPIO which enables
                   and disables the backlight (see GPIO binding[1])
+  - power-supply: regulator for supply voltage
 
 [0]: Documentation/devicetree/bindings/pwm/pwm.txt
 [1]: Documentation/devicetree/bindings/gpio/gpio.txt
diff --git a/drivers/video/backlight/pwm_bl.c b/drivers/video/backlight/pwm_bl.c
index fb80d68..fb3008c 100644
--- a/drivers/video/backlight/pwm_bl.c
+++ b/drivers/video/backlight/pwm_bl.c
@@ -50,9 +50,11 @@  static void pwm_backlight_power_on(struct pwm_bl_data *pb, int brightness)
 	if (pb->enabled)
 		return;
 
-	err = regulator_enable(pb->power_supply);
-	if (err < 0)
-		dev_err(pb->dev, "failed to enable power supply\n");
+	if (!IS_ERR(pb->power_supply)) {
+		err = regulator_enable(pb->power_supply);
+		if (err < 0)
+			dev_err(pb->dev, "failed to enable power supply\n");
+	}
 
 	if (gpio_is_valid(pb->enable_gpio)) {
 		if (pb->enable_gpio_flags & PWM_BACKLIGHT_GPIO_ACTIVE_LOW)
@@ -80,7 +82,8 @@  static void pwm_backlight_power_off(struct pwm_bl_data *pb)
 			gpio_set_value(pb->enable_gpio, 0);
 	}
 
-	regulator_disable(pb->power_supply);
+	if (!IS_ERR(pb->power_supply))
+		regulator_disable(pb->power_supply);
 	pb->enabled = false;
 }
 
@@ -283,10 +286,6 @@  static int pwm_backlight_probe(struct platform_device *pdev)
 	}
 
 	pb->power_supply = devm_regulator_get(&pdev->dev, "power");
-	if (IS_ERR(pb->power_supply)) {
-		ret = PTR_ERR(pb->power_supply);
-		goto err_gpio;
-	}
 
 	pb->pwm = devm_pwm_get(&pdev->dev, NULL);
 	if (IS_ERR(pb->pwm)) {