diff mbox series

[v5,1/3] leds: pwm: Remove platform_data support

Message ID 20200919053145.7564-2-post@lespocky.de
State Superseded
Headers show
Series [v5,1/3] leds: pwm: Remove platform_data support | expand

Commit Message

Alexander Dahl Sept. 19, 2020, 5:31 a.m. UTC
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.

Signed-off-by: Alexander Dahl <post@lespocky.de>
Cc: Denis Osterland-Heim <denis.osterland@diehl.com>
Cc: Marek Behún <marek.behun@nic.cz>
---

Notes:
    v5:
     * added this patch to series (replacing another patch with a not
       working, different approach)

 drivers/leds/leds-pwm.c | 30 +++++-------------------------
 1 file changed, 5 insertions(+), 25 deletions(-)

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
-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
Marek Behún Sept. 19, 2020, 6:05 p.m. UTC | #2
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 | #3
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 | #4
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 | #5
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
diff mbox series

Patch

diff --git a/drivers/leds/leds-pwm.c b/drivers/leds/leds-pwm.c
index e35a97c1d828..4e9954f8f7eb 100644
--- a/drivers/leds/leds-pwm.c
+++ b/drivers/leds/leds-pwm.c
@@ -25,11 +25,6 @@  struct led_pwm {
 	unsigned int	max_brightness;
 };
 
-struct led_pwm_platform_data {
-	int		num_leds;
-	struct led_pwm	*leds;
-};
-
 struct led_pwm_data {
 	struct led_classdev	cdev;
 	struct pwm_device	*pwm;
@@ -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)
 {
@@ -74,10 +70,7 @@  static int led_pwm_add(struct device *dev, struct led_pwm_priv *priv,
 	led_data->cdev.max_brightness = led->max_brightness;
 	led_data->cdev.flags = LED_CORE_SUSPENDRESUME;
 
-	if (fwnode)
-		led_data->pwm = devm_fwnode_pwm_get(dev, fwnode, NULL);
-	else
-		led_data->pwm = devm_pwm_get(dev, led->name);
+	led_data->pwm = devm_fwnode_pwm_get(dev, fwnode, NULL);
 	if (IS_ERR(led_data->pwm))
 		return dev_err_probe(dev, PTR_ERR(led_data->pwm),
 				     "unable to request PWM for %s\n",
@@ -143,15 +136,11 @@  static int led_pwm_create_fwnode(struct device *dev, struct led_pwm_priv *priv)
 
 static int led_pwm_probe(struct platform_device *pdev)
 {
-	struct led_pwm_platform_data *pdata = dev_get_platdata(&pdev->dev);
 	struct led_pwm_priv *priv;
-	int count, i;
 	int ret = 0;
+	int count;
 
-	if (pdata)
-		count = pdata->num_leds;
-	else
-		count = device_get_child_node_count(&pdev->dev);
+	count = device_get_child_node_count(&pdev->dev);
 
 	if (!count)
 		return -EINVAL;
@@ -161,16 +150,7 @@  static int led_pwm_probe(struct platform_device *pdev)
 	if (!priv)
 		return -ENOMEM;
 
-	if (pdata) {
-		for (i = 0; i < count; i++) {
-			ret = led_pwm_add(&pdev->dev, priv, &pdata->leds[i],
-					  NULL);
-			if (ret)
-				break;
-		}
-	} else {
-		ret = led_pwm_create_fwnode(&pdev->dev, priv);
-	}
+	ret = led_pwm_create_fwnode(&pdev->dev, priv);
 
 	if (ret)
 		return ret;