mbox series

[v5,0/3] leds: pwm: Make automatic labels work

Message ID 20200919053145.7564-1-post@lespocky.de
Headers show
Series leds: pwm: Make automatic labels work | expand

Message

Alexander Dahl Sept. 19, 2020, 5:31 a.m. UTC
Hei hei,

for leds-gpio you can use the properties 'function' and 'color' in the
devicetree node and omit 'label', the label is constructed
automatically.  This is a common feature supposed to be working for all
LED drivers.  However it did not yet work for the 'leds-pwm' driver.

This series removes platform_data support for the leds-pwm driver and
takes the opportunity to update the leds-pwm dt-bindings accordingly.

v5 was tested on a at91 sama5d2 based platform with LEDs connected to
GPIO and PWM.

Greets
Alex

v5:
- replaced patch 1/3 by a new patch removing platform_data support for
  the leds-pwm driver
- little rewording of commit message in patch 2/3
- updated patch 3/3 based on feedback by Rob Herring
- added Marek Behún to Cc, because he also works on removing
  platform_data support
- rebased series on pavel/for-next

v4:
- added led-class patch handling fwnode passing differently (patch 1/3)
- adapted leds-pwm patch to new led-class (patch 2/3)
- contacted original author of leds-pwm dt binding on license issue
  (patch 3/3)

v3:
- series rebased on v5.9-rc4
- changed license of .yaml file to recommended one (patch 2/2)
- added Acked-by to both patches

v2:
- series rebased on v5.9-rc3
- added the dt-bindings update patch (2/2)

v1:
- based on v5.9-rc2
- backport on v5.4.59 tested and working

Alexander Dahl (3):
  leds: pwm: Remove platform_data support
  leds: pwm: Allow automatic labels for DT based devices
  dt-bindings: leds: Convert pwm to yaml

 .../devicetree/bindings/leds/leds-pwm.txt     | 50 -----------
 .../devicetree/bindings/leds/leds-pwm.yaml    | 82 +++++++++++++++++++
 drivers/leds/leds-pwm.c                       | 33 ++------
 3 files changed, 89 insertions(+), 76 deletions(-)
 delete mode 100644 Documentation/devicetree/bindings/leds/leds-pwm.txt
 create mode 100644 Documentation/devicetree/bindings/leds/leds-pwm.yaml


base-commit: 03eb2ca44a95105d1482d5e7471016cf8b383f97

Comments

Pavel Machek Sept. 19, 2020, 9:44 a.m. UTC | #1
Hi!

> Since commit 141f15c66d94 ("leds: pwm: remove header") that platform
> interface is not usable from outside and there seems to be no in tree
> user anymore.  All in-tree users of the leds-pwm driver seem to use DT
> currently.  Getting rid of the old platform interface will allow the
> leds-pwm driver to switch over from 'devm_led_classdev_register()' to
> 'devm_led_classdev_register_ext()' later.

> @@ -61,6 +56,7 @@ static int led_pwm_set(struct led_classdev *led_cdev,
>  	return pwm_apply_state(led_dat->pwm, &led_dat->pwmstate);
>  }
>  
> +__attribute__((nonnull))
>  static int led_pwm_add(struct device *dev, struct led_pwm_priv *priv,
>  		       struct led_pwm *led, struct fwnode_handle *fwnode)
>  {

This normally goes elsewhere -- right? I'd expect:


  static int led_pwm_add(struct device *dev, struct led_pwm_priv *priv,
  		       struct led_pwm *led, struct fwnode_handle *fwnode)
	  __attribute__((nonnull))

Best regards,
									Pavel
Pavel Machek Sept. 19, 2020, 9:44 a.m. UTC | #2
On Sat 2020-09-19 07:31:44, Alexander Dahl wrote:
> If LEDs are configured through device tree and the property 'label' is
> omitted, the label is supposed to be generated from the properties
> 'function' and 'color' if present.  While this works fine for e.g. the
> 'leds-gpio' driver, it did not for 'leds-pwm'.
> 
> The reason is, you get this label naming magic only if you add a LED
> device through 'devm_led_classdev_register_ext()' and pass a pointer to
> the current device tree node.
> 
> For the following node from dts the LED appeared as 'led-5' in sysfs
> before and as 'red:debug' after this change.

Thanks, applied.
								Pavel
Marek Behún Sept. 19, 2020, 6:05 p.m. UTC | #3
Besides Pavel's note about the __attribute__((nonnull)) position

Reviewed-by: Marek Behún <marek.behun@nic.cz>
Alexander Dahl Sept. 28, 2020, 11:04 a.m. UTC | #4
Hello Pavel,

Am Samstag, 19. September 2020, 11:44:18 CEST schrieb Pavel Machek:
> > Since commit 141f15c66d94 ("leds: pwm: remove header") that platform
> > interface is not usable from outside and there seems to be no in tree
> > user anymore.  All in-tree users of the leds-pwm driver seem to use DT
> > currently.  Getting rid of the old platform interface will allow the
> > leds-pwm driver to switch over from 'devm_led_classdev_register()' to
> > 'devm_led_classdev_register_ext()' later.
> > 
> > @@ -61,6 +56,7 @@ static int led_pwm_set(struct led_classdev *led_cdev,
> > 
> >  	return pwm_apply_state(led_dat->pwm, &led_dat->pwmstate);
> >  
> >  }
> > 
> > +__attribute__((nonnull))
> > 
> >  static int led_pwm_add(struct device *dev, struct led_pwm_priv *priv,
> >  
> >  		       struct led_pwm *led, struct fwnode_handle *fwnode)
> >  
> >  {
> 
> This normally goes elsewhere -- right? I'd expect:
> 
> 
>   static int led_pwm_add(struct device *dev, struct led_pwm_priv *priv,
>   		       struct led_pwm *led, struct fwnode_handle *fwnode)
> 	  __attribute__((nonnull))

I found both variants in kernel code.  I can live with both variants and have 
no strong preference.

My initial intention to add it was to get a compiler warning in case someone 
does not pass a fwnode here, e.g. when using that old platform_data approach 
(which is supposed to be removed with this patch).  You might call it a self 
check on my own changes.  I can also drop that attribute if you don't want 
that kind of stuff in linux-leds.

Greets
Alex
Pavel Machek Sept. 30, 2020, 5:24 p.m. UTC | #5
Hi!

> > > +__attribute__((nonnull))
> > > 
> > >  static int led_pwm_add(struct device *dev, struct led_pwm_priv *priv,
> > >  
> > >  		       struct led_pwm *led, struct fwnode_handle *fwnode)
> > >  
> > >  {
> > 
> > This normally goes elsewhere -- right? I'd expect:
> > 
> > 
> >   static int led_pwm_add(struct device *dev, struct led_pwm_priv *priv,
> >   		       struct led_pwm *led, struct fwnode_handle *fwnode)
> > 	  __attribute__((nonnull))
> 
> I found both variants in kernel code.  I can live with both variants and have 
> no strong preference.
> 
> My initial intention to add it was to get a compiler warning in case someone 
> does not pass a fwnode here, e.g. when using that old platform_data approach 
> (which is supposed to be removed with this patch).  You might call it a self 
> check on my own changes.  I can also drop that attribute if you don't want 
> that kind of stuff in linux-leds.

I'm okay with it at the second place :-).

Thanks,
									Pavel
Alexander Dahl Sept. 30, 2020, 10:57 p.m. UTC | #6
Hello Pavel,

On Wed, Sep 30, 2020 at 07:24:41PM +0200, Pavel Machek wrote:
> Hi!
> 
> > > > +__attribute__((nonnull))
> > > > 
> > > >  static int led_pwm_add(struct device *dev, struct led_pwm_priv *priv,
> > > >  
> > > >  		       struct led_pwm *led, struct fwnode_handle *fwnode)
> > > >  
> > > >  {
> > > 
> > > This normally goes elsewhere -- right? I'd expect:
> > > 
> > > 
> > >   static int led_pwm_add(struct device *dev, struct led_pwm_priv *priv,
> > >   		       struct led_pwm *led, struct fwnode_handle *fwnode)
> > > 	  __attribute__((nonnull))
> > 
> > I found both variants in kernel code.  I can live with both variants and have 
> > no strong preference.
> > 
> > My initial intention to add it was to get a compiler warning in case someone 
> > does not pass a fwnode here, e.g. when using that old platform_data approach 
> > (which is supposed to be removed with this patch).  You might call it a self 
> > check on my own changes.  I can also drop that attribute if you don't want 
> > that kind of stuff in linux-leds.
> 
> I'm okay with it at the second place :-).

Should have tried this before, but I actually did now. O:-)

If I move the attribute behind, I get this on a W=1 build:

    CC      drivers/leds/leds-pwm.o
  /home/alex/src/linux/leds/drivers/leds/leds-pwm.c:58:1: error: attributes should be specified before the declarator in a function definition
   static int led_pwm_add(struct device *dev, struct led_pwm_priv *priv,
   ^~~~~~

Because it won't build then, I'll keep it where it is.  Meanwhile I
worked on all the DT remarks by Rob and I will send v6 soon.

Greets
Alex