Linux-LEDs Archive on lore.kernel.org
 help / color / Atom feed
* [PATCH 00/10] Stop NULLifying match pointer in of_match_device()
@ 2019-10-04 21:43 Stephen Boyd
  2019-10-04 21:43 ` [PATCH 01/10] leds: pca953x: Use of_device_get_match_data() Stephen Boyd
  0 siblings, 1 reply; 10+ messages in thread
From: Stephen Boyd @ 2019-10-04 21:43 UTC (permalink / raw)
  To: linux-kernel
  Cc: Alessandro Zummo, Alexandre Belloni, Alexandre Torgue,
	alsa-devel, Andrew Lunn, Arnd Bergmann, Dan Murphy,
	David S. Miller, Frank Rowand, Geert Uytterhoeven,
	Greg Kroah-Hartman, Gregory Clement, Grygorii Strashko,
	Guenter Roeck, Jacek Anaszewski, Jacopo Mondi, Jaroslav Kysela,
	Jason Cooper, Jean Delvare, Jiri Slaby, Liam Girdwood,
	linux-hwmon, linux-leds, linux-media, linux-omap,
	linux-renesas-soc, linux-rtc, linux-serial, linux-spi, linux-usb,
	Mark Brown, Mauro Carvalho Chehab, Maxime Coquelin,
	Paul Cercueil, Pavel Machek, Richard Leitner, Riku Voipio,
	Rob Herring, Sebastian Hesselbarth, Takashi Iwai

of_match_device() uses of_match_ptr() to make the match table argument
NULL via the pre-processor when CONFIG_OF=n. This makes life harder for
compilers who think that match tables are never used and warn about
unused variables when CONFIG_OF=n. This series changes various callers
to use of_device_get_match_data() instead, which doesn't have this
problem, and removes the of_match_ptr() usage from of_match_device() so
that the compiler can stop complaining about unused variables. It will
do dead code elimination instead and remove the match table if it isn't
actually used.

Huge Cc list!

Cc: Alessandro Zummo <a.zummo@towertech.it>
Cc: Alexandre Belloni <alexandre.belloni@bootlin.com>
Cc: Alexandre Torgue <alexandre.torgue@st.com>
Cc: <alsa-devel@alsa-project.org>
Cc: Andrew Lunn <andrew@lunn.ch>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Dan Murphy <dmurphy@ti.com>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Frank Rowand <frowand.list@gmail.com>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Gregory Clement <gregory.clement@bootlin.com>
Cc: Grygorii Strashko <grygorii.strashko@ti.com>
Cc: Guenter Roeck <linux@roeck-us.net>
Cc: Jacek Anaszewski <jacek.anaszewski@gmail.com>
Cc: Jacopo Mondi <jacopo@jmondi.org>
Cc: Jaroslav Kysela <perex@perex.cz>
Cc: Jason Cooper <jason@lakedaemon.net>
Cc: Jean Delvare <jdelvare@suse.com>
Cc: Jiri Slaby <jslaby@suse.com>
Cc: Liam Girdwood <lgirdwood@gmail.com>
Cc: <linux-hwmon@vger.kernel.org>
Cc: <linux-leds@vger.kernel.org>
Cc: <linux-media@vger.kernel.org>
Cc: <linux-omap@vger.kernel.org>
Cc: <linux-renesas-soc@vger.kernel.org>
Cc: <linux-rtc@vger.kernel.org>
Cc: <linux-serial@vger.kernel.org>
Cc: <linux-spi@vger.kernel.org>
Cc: <linux-usb@vger.kernel.org>
Cc: Mark Brown <broonie@kernel.org>
Cc: Mauro Carvalho Chehab <mchehab@kernel.org>
Cc: Maxime Coquelin <mcoquelin.stm32@gmail.com>
Cc: Paul Cercueil <paul@crapouillou.net>
Cc: Pavel Machek <pavel@ucw.cz>
Cc: Richard Leitner <richard.leitner@skidata.com>
Cc: Riku Voipio <riku.voipio@iki.fi>
Cc: Rob Herring <robh+dt@kernel.org>
Cc: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
Cc: Takashi Iwai <tiwai@suse.com>

Stephen Boyd (10):
  leds: pca953x: Use of_device_get_match_data()
  media: renesas-ceu: Use of_device_get_match_data()
  rtc: armada38x: Use of_device_get_match_data()
  drivers: net: davinci_mdio: Use of_device_get_match_data()
  serial: stm32: Use of_device_get_match_data()
  usb: usb251xb: Use of_device_get_match_data()
  ASoC: jz4740: Use of_device_get_match_data()
  spi: gpio: Look for a device node instead of match
  hwmon: (lm70) Avoid undefined reference to match table
  of/device: Don't NULLify match table in of_match_device() with
    CONFIG_OF=n

 drivers/hwmon/lm70.c                   |  2 +-
 drivers/leds/leds-pca9532.c            | 14 +----
 drivers/media/platform/renesas-ceu.c   |  2 +-
 drivers/net/ethernet/ti/davinci_mdio.c | 12 ++---
 drivers/rtc/rtc-armada38x.c            | 10 ++--
 drivers/spi/spi-gpio.c                 |  5 +-
 drivers/tty/serial/stm32-usart.c       | 71 ++++++++++++--------------
 drivers/tty/serial/stm32-usart.h       |  2 +-
 drivers/usb/misc/usb251xb.c            | 12 ++---
 include/linux/of_device.h              |  4 +-
 sound/soc/jz4740/jz4740-i2s.c          |  5 +-
 11 files changed, 55 insertions(+), 84 deletions(-)


base-commit: 54ecb8f7028c5eb3d740bb82b0f1d90f2df63c5c
-- 
Sent by a computer through tubes

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

* [PATCH 01/10] leds: pca953x: Use of_device_get_match_data()
  2019-10-04 21:43 [PATCH 00/10] Stop NULLifying match pointer in of_match_device() Stephen Boyd
@ 2019-10-04 21:43 ` Stephen Boyd
  2019-10-06 12:15   ` Jacek Anaszewski
                     ` (3 more replies)
  0 siblings, 4 replies; 10+ messages in thread
From: Stephen Boyd @ 2019-10-04 21:43 UTC (permalink / raw)
  To: linux-kernel
  Cc: Arnd Bergmann, Geert Uytterhoeven, Riku Voipio, Rob Herring,
	Frank Rowand, Jacek Anaszewski, Pavel Machek, Dan Murphy,
	linux-leds

This driver can use the of_device_get_match_data() API to simplify the
code. Replace calls to of_match_device() with this newer API under the
assumption that where it is called will be when we know the device is
backed by a DT node. This nicely avoids referencing the match table when
it is undefined with configurations where CONFIG_OF=n.

Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Riku Voipio <riku.voipio@iki.fi>
Cc: Rob Herring <robh+dt@kernel.org>
Cc: Frank Rowand <frowand.list@gmail.com>
Cc: Jacek Anaszewski <jacek.anaszewski@gmail.com>
Cc: Pavel Machek <pavel@ucw.cz>
Cc: Dan Murphy <dmurphy@ti.com>
Cc: <linux-leds@vger.kernel.org>
Signed-off-by: Stephen Boyd <swboyd@chromium.org>
---

Please ack or pick for immediate merge so the last patch can be merged.

 drivers/leds/leds-pca9532.c | 14 ++------------
 1 file changed, 2 insertions(+), 12 deletions(-)

diff --git a/drivers/leds/leds-pca9532.c b/drivers/leds/leds-pca9532.c
index c7c7199e8ebd..7d515d5e57bd 100644
--- a/drivers/leds/leds-pca9532.c
+++ b/drivers/leds/leds-pca9532.c
@@ -467,16 +467,11 @@ pca9532_of_populate_pdata(struct device *dev, struct device_node *np)
 {
 	struct pca9532_platform_data *pdata;
 	struct device_node *child;
-	const struct of_device_id *match;
 	int devid, maxleds;
 	int i = 0;
 	const char *state;
 
-	match = of_match_device(of_pca9532_leds_match, dev);
-	if (!match)
-		return ERR_PTR(-ENODEV);
-
-	devid = (int)(uintptr_t)match->data;
+	devid = (int)(uintptr_t)of_device_get_match_data(dev);
 	maxleds = pca9532_chip_info_tbl[devid].num_leds;
 
 	pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
@@ -509,7 +504,6 @@ static int pca9532_probe(struct i2c_client *client,
 	const struct i2c_device_id *id)
 {
 	int devid;
-	const struct of_device_id *of_id;
 	struct pca9532_data *data = i2c_get_clientdata(client);
 	struct pca9532_platform_data *pca9532_pdata =
 			dev_get_platdata(&client->dev);
@@ -525,11 +519,7 @@ static int pca9532_probe(struct i2c_client *client,
 			dev_err(&client->dev, "no platform data\n");
 			return -EINVAL;
 		}
-		of_id = of_match_device(of_pca9532_leds_match,
-				&client->dev);
-		if (unlikely(!of_id))
-			return -EINVAL;
-		devid = (int)(uintptr_t) of_id->data;
+		devid = (int)(uintptr_t)of_device_get_match_data(&client->dev);
 	} else {
 		devid = id->driver_data;
 	}
-- 
Sent by a computer through tubes


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

* Re: [PATCH 01/10] leds: pca953x: Use of_device_get_match_data()
  2019-10-04 21:43 ` [PATCH 01/10] leds: pca953x: Use of_device_get_match_data() Stephen Boyd
@ 2019-10-06 12:15   ` Jacek Anaszewski
  2019-10-07  8:01   ` Geert Uytterhoeven
                     ` (2 subsequent siblings)
  3 siblings, 0 replies; 10+ messages in thread
From: Jacek Anaszewski @ 2019-10-06 12:15 UTC (permalink / raw)
  To: Stephen Boyd, linux-kernel
  Cc: Arnd Bergmann, Geert Uytterhoeven, Riku Voipio, Rob Herring,
	Frank Rowand, Pavel Machek, Dan Murphy, linux-leds

On 10/4/19 11:43 PM, Stephen Boyd wrote:
> This driver can use the of_device_get_match_data() API to simplify the
> code. Replace calls to of_match_device() with this newer API under the
> assumption that where it is called will be when we know the device is
> backed by a DT node. This nicely avoids referencing the match table when
> it is undefined with configurations where CONFIG_OF=n.
> 
> Cc: Arnd Bergmann <arnd@arndb.de>
> Cc: Geert Uytterhoeven <geert@linux-m68k.org>
> Cc: Riku Voipio <riku.voipio@iki.fi>
> Cc: Rob Herring <robh+dt@kernel.org>
> Cc: Frank Rowand <frowand.list@gmail.com>
> Cc: Jacek Anaszewski <jacek.anaszewski@gmail.com>
> Cc: Pavel Machek <pavel@ucw.cz>
> Cc: Dan Murphy <dmurphy@ti.com>
> Cc: <linux-leds@vger.kernel.org>
> Signed-off-by: Stephen Boyd <swboyd@chromium.org>
> ---
> 
> Please ack or pick for immediate merge so the last patch can be merged.
> 
>  drivers/leds/leds-pca9532.c | 14 ++------------
>  1 file changed, 2 insertions(+), 12 deletions(-)
> 
> diff --git a/drivers/leds/leds-pca9532.c b/drivers/leds/leds-pca9532.c
> index c7c7199e8ebd..7d515d5e57bd 100644
> --- a/drivers/leds/leds-pca9532.c
> +++ b/drivers/leds/leds-pca9532.c
> @@ -467,16 +467,11 @@ pca9532_of_populate_pdata(struct device *dev, struct device_node *np)
>  {
>  	struct pca9532_platform_data *pdata;
>  	struct device_node *child;
> -	const struct of_device_id *match;
>  	int devid, maxleds;
>  	int i = 0;
>  	const char *state;
>  
> -	match = of_match_device(of_pca9532_leds_match, dev);
> -	if (!match)
> -		return ERR_PTR(-ENODEV);
> -
> -	devid = (int)(uintptr_t)match->data;
> +	devid = (int)(uintptr_t)of_device_get_match_data(dev);
>  	maxleds = pca9532_chip_info_tbl[devid].num_leds;
>  
>  	pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
> @@ -509,7 +504,6 @@ static int pca9532_probe(struct i2c_client *client,
>  	const struct i2c_device_id *id)
>  {
>  	int devid;
> -	const struct of_device_id *of_id;
>  	struct pca9532_data *data = i2c_get_clientdata(client);
>  	struct pca9532_platform_data *pca9532_pdata =
>  			dev_get_platdata(&client->dev);
> @@ -525,11 +519,7 @@ static int pca9532_probe(struct i2c_client *client,
>  			dev_err(&client->dev, "no platform data\n");
>  			return -EINVAL;
>  		}
> -		of_id = of_match_device(of_pca9532_leds_match,
> -				&client->dev);
> -		if (unlikely(!of_id))
> -			return -EINVAL;
> -		devid = (int)(uintptr_t) of_id->data;
> +		devid = (int)(uintptr_t)of_device_get_match_data(&client->dev);
>  	} else {
>  		devid = id->driver_data;
>  	}
> 

Acked-by: Jacek Anaszewski <jacek.anaszewski@gmail.com>

-- 
Best regards,
Jacek Anaszewski

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

* Re: [PATCH 01/10] leds: pca953x: Use of_device_get_match_data()
  2019-10-04 21:43 ` [PATCH 01/10] leds: pca953x: Use of_device_get_match_data() Stephen Boyd
  2019-10-06 12:15   ` Jacek Anaszewski
@ 2019-10-07  8:01   ` Geert Uytterhoeven
  2019-10-13 12:10   ` Pavel Machek
  2019-10-14 17:50   ` Andy Shevchenko
  3 siblings, 0 replies; 10+ messages in thread
From: Geert Uytterhoeven @ 2019-10-07  8:01 UTC (permalink / raw)
  To: Stephen Boyd
  Cc: Linux Kernel Mailing List, Arnd Bergmann, Riku Voipio,
	Rob Herring, Frank Rowand, Jacek Anaszewski, Pavel Machek,
	Dan Murphy, linux-leds

On Fri, Oct 4, 2019 at 11:43 PM Stephen Boyd <swboyd@chromium.org> wrote:
> This driver can use the of_device_get_match_data() API to simplify the
> code. Replace calls to of_match_device() with this newer API under the
> assumption that where it is called will be when we know the device is
> backed by a DT node. This nicely avoids referencing the match table when
> it is undefined with configurations where CONFIG_OF=n.
>
> Cc: Arnd Bergmann <arnd@arndb.de>
> Cc: Geert Uytterhoeven <geert@linux-m68k.org>
> Cc: Riku Voipio <riku.voipio@iki.fi>
> Cc: Rob Herring <robh+dt@kernel.org>
> Cc: Frank Rowand <frowand.list@gmail.com>
> Cc: Jacek Anaszewski <jacek.anaszewski@gmail.com>
> Cc: Pavel Machek <pavel@ucw.cz>
> Cc: Dan Murphy <dmurphy@ti.com>
> Cc: <linux-leds@vger.kernel.org>
> Signed-off-by: Stephen Boyd <swboyd@chromium.org>

Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>

Gr{oetje,eeting}s,

                        Geert

-- 
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds

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

* Re: [PATCH 01/10] leds: pca953x: Use of_device_get_match_data()
  2019-10-04 21:43 ` [PATCH 01/10] leds: pca953x: Use of_device_get_match_data() Stephen Boyd
  2019-10-06 12:15   ` Jacek Anaszewski
  2019-10-07  8:01   ` Geert Uytterhoeven
@ 2019-10-13 12:10   ` Pavel Machek
  2019-10-14 17:50   ` Andy Shevchenko
  3 siblings, 0 replies; 10+ messages in thread
From: Pavel Machek @ 2019-10-13 12:10 UTC (permalink / raw)
  To: Stephen Boyd
  Cc: linux-kernel, Arnd Bergmann, Geert Uytterhoeven, Riku Voipio,
	Rob Herring, Frank Rowand, Jacek Anaszewski, Dan Murphy,
	linux-leds

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

On Fri 2019-10-04 14:43:25, Stephen Boyd wrote:
> This driver can use the of_device_get_match_data() API to simplify the
> code. Replace calls to of_match_device() with this newer API under the
> assumption that where it is called will be when we know the device is
> backed by a DT node. This nicely avoids referencing the match table when
> it is undefined with configurations where CONFIG_OF=n.

Thanks, applied.

								Pavel

> Cc: Arnd Bergmann <arnd@arndb.de>
> Cc: Geert Uytterhoeven <geert@linux-m68k.org>
> Cc: Riku Voipio <riku.voipio@iki.fi>
> Cc: Rob Herring <robh+dt@kernel.org>
> Cc: Frank Rowand <frowand.list@gmail.com>
> Cc: Jacek Anaszewski <jacek.anaszewski@gmail.com>
> Cc: Pavel Machek <pavel@ucw.cz>
> Cc: Dan Murphy <dmurphy@ti.com>
> Cc: <linux-leds@vger.kernel.org>
> Signed-off-by: Stephen Boyd <swboyd@chromium.org>
> ---
> 
> Please ack or pick for immediate merge so the last patch can be merged.
> 
>  drivers/leds/leds-pca9532.c | 14 ++------------
>  1 file changed, 2 insertions(+), 12 deletions(-)
> 
> diff --git a/drivers/leds/leds-pca9532.c b/drivers/leds/leds-pca9532.c
> index c7c7199e8ebd..7d515d5e57bd 100644
> --- a/drivers/leds/leds-pca9532.c
> +++ b/drivers/leds/leds-pca9532.c
> @@ -467,16 +467,11 @@ pca9532_of_populate_pdata(struct device *dev, struct device_node *np)
>  {
>  	struct pca9532_platform_data *pdata;
>  	struct device_node *child;
> -	const struct of_device_id *match;
>  	int devid, maxleds;
>  	int i = 0;
>  	const char *state;
>  
> -	match = of_match_device(of_pca9532_leds_match, dev);
> -	if (!match)
> -		return ERR_PTR(-ENODEV);
> -
> -	devid = (int)(uintptr_t)match->data;
> +	devid = (int)(uintptr_t)of_device_get_match_data(dev);
>  	maxleds = pca9532_chip_info_tbl[devid].num_leds;
>  
>  	pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
> @@ -509,7 +504,6 @@ static int pca9532_probe(struct i2c_client *client,
>  	const struct i2c_device_id *id)
>  {
>  	int devid;
> -	const struct of_device_id *of_id;
>  	struct pca9532_data *data = i2c_get_clientdata(client);
>  	struct pca9532_platform_data *pca9532_pdata =
>  			dev_get_platdata(&client->dev);
> @@ -525,11 +519,7 @@ static int pca9532_probe(struct i2c_client *client,
>  			dev_err(&client->dev, "no platform data\n");
>  			return -EINVAL;
>  		}
> -		of_id = of_match_device(of_pca9532_leds_match,
> -				&client->dev);
> -		if (unlikely(!of_id))
> -			return -EINVAL;
> -		devid = (int)(uintptr_t) of_id->data;
> +		devid = (int)(uintptr_t)of_device_get_match_data(&client->dev);
>  	} else {
>  		devid = id->driver_data;
>  	}

-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html

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

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

* Re: [PATCH 01/10] leds: pca953x: Use of_device_get_match_data()
  2019-10-04 21:43 ` [PATCH 01/10] leds: pca953x: Use of_device_get_match_data() Stephen Boyd
                     ` (2 preceding siblings ...)
  2019-10-13 12:10   ` Pavel Machek
@ 2019-10-14 17:50   ` Andy Shevchenko
  2019-10-14 20:54     ` Stephen Boyd
  3 siblings, 1 reply; 10+ messages in thread
From: Andy Shevchenko @ 2019-10-14 17:50 UTC (permalink / raw)
  To: Stephen Boyd, Wolfram Sang
  Cc: Linux Kernel Mailing List, Arnd Bergmann, Geert Uytterhoeven,
	Riku Voipio, Rob Herring, Frank Rowand, Jacek Anaszewski,
	Pavel Machek, Dan Murphy, Linux LED Subsystem

On Sat, Oct 5, 2019 at 12:47 AM Stephen Boyd <swboyd@chromium.org> wrote:
>
> This driver can use the of_device_get_match_data() API to simplify the
> code. Replace calls to of_match_device() with this newer API under the
> assumption that where it is called will be when we know the device is
> backed by a DT node. This nicely avoids referencing the match table when
> it is undefined with configurations where CONFIG_OF=n.

> +       devid = (int)(uintptr_t)of_device_get_match_data(dev);

> +               devid = (int)(uintptr_t)of_device_get_match_data(&client->dev);

This still leaves it OF-centric.
Better to use device_get_match_data().

Also, I'm thinking that following may help to clean a lot of the i2c
client drivers

static inline // perhaps no
const void *i2c_device_get_match_data(struct i2c_client *client, const
struct i2c_device_id *id)
{
  if (id)
    return (const void *)id->driver_data;
  return device_get_match_data(&client->dev);
}

-- 
With Best Regards,
Andy Shevchenko

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

* Re: [PATCH 01/10] leds: pca953x: Use of_device_get_match_data()
  2019-10-14 17:50   ` Andy Shevchenko
@ 2019-10-14 20:54     ` Stephen Boyd
  2019-10-15  9:02       ` Andy Shevchenko
  0 siblings, 1 reply; 10+ messages in thread
From: Stephen Boyd @ 2019-10-14 20:54 UTC (permalink / raw)
  To: Andy Shevchenko, Wolfram Sang
  Cc: Linux Kernel Mailing List, Arnd Bergmann, Geert Uytterhoeven,
	Riku Voipio, Rob Herring, Frank Rowand, Jacek Anaszewski,
	Pavel Machek, Dan Murphy, Linux LED Subsystem

Quoting Andy Shevchenko (2019-10-14 10:50:06)
> On Sat, Oct 5, 2019 at 12:47 AM Stephen Boyd <swboyd@chromium.org> wrote:
> >
> > This driver can use the of_device_get_match_data() API to simplify the
> > code. Replace calls to of_match_device() with this newer API under the
> > assumption that where it is called will be when we know the device is
> > backed by a DT node. This nicely avoids referencing the match table when
> > it is undefined with configurations where CONFIG_OF=n.
> 
> > +       devid = (int)(uintptr_t)of_device_get_match_data(dev);
> 
> > +               devid = (int)(uintptr_t)of_device_get_match_data(&client->dev);
> 
> This still leaves it OF-centric.
> Better to use device_get_match_data().
> 
> Also, I'm thinking that following may help to clean a lot of the i2c
> client drivers
> 
> static inline // perhaps no
> const void *i2c_device_get_match_data(struct i2c_client *client, const
> struct i2c_device_id *id)
> {
>   if (id)
>     return (const void *)id->driver_data;
>   return device_get_match_data(&client->dev);
> }
> 

Looks alright to me. Maybe device_get_match_data() can look at the bus
and call some bus op if the firmware match isn't present? Then we can
replace a bunch of these calls with device_get_match_data() and it will
"do the right thing" regardless of what bus or firmware the device is
running on.


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

* Re: [PATCH 01/10] leds: pca953x: Use of_device_get_match_data()
  2019-10-14 20:54     ` Stephen Boyd
@ 2019-10-15  9:02       ` Andy Shevchenko
  2019-10-15 22:41         ` Stephen Boyd
  0 siblings, 1 reply; 10+ messages in thread
From: Andy Shevchenko @ 2019-10-15  9:02 UTC (permalink / raw)
  To: Stephen Boyd
  Cc: Wolfram Sang, Linux Kernel Mailing List, Arnd Bergmann,
	Geert Uytterhoeven, Riku Voipio, Rob Herring, Frank Rowand,
	Jacek Anaszewski, Pavel Machek, Dan Murphy, Linux LED Subsystem

On Mon, Oct 14, 2019 at 11:54 PM Stephen Boyd <swboyd@chromium.org> wrote:
> Quoting Andy Shevchenko (2019-10-14 10:50:06)
> > On Sat, Oct 5, 2019 at 12:47 AM Stephen Boyd <swboyd@chromium.org> wrote:
> > >
> > > This driver can use the of_device_get_match_data() API to simplify the
> > > code. Replace calls to of_match_device() with this newer API under the
> > > assumption that where it is called will be when we know the device is
> > > backed by a DT node. This nicely avoids referencing the match table when
> > > it is undefined with configurations where CONFIG_OF=n.
> >
> > > +       devid = (int)(uintptr_t)of_device_get_match_data(dev);
> >
> > > +               devid = (int)(uintptr_t)of_device_get_match_data(&client->dev);
> >
> > This still leaves it OF-centric.
> > Better to use device_get_match_data().
> >
> > Also, I'm thinking that following may help to clean a lot of the i2c
> > client drivers
> >
> > static inline // perhaps no
> > const void *i2c_device_get_match_data(struct i2c_client *client, const
> > struct i2c_device_id *id)
> > {
> >   if (id)
> >     return (const void *)id->driver_data;
> >   return device_get_match_data(&client->dev);
> > }
> >
>
> Looks alright to me. Maybe device_get_match_data() can look at the bus
> and call some bus op if the firmware match isn't present? Then we can
> replace a bunch of these calls with device_get_match_data() and it will
> "do the right thing" regardless of what bus or firmware the device is
> running on.

It will be something ugly like

buses {
#ifdef I2C
&i2c_bus_type,
#endif
...
}

in the code. I won't do this.

See generic_match_buses[] for example.

-- 
With Best Regards,
Andy Shevchenko

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

* Re: [PATCH 01/10] leds: pca953x: Use of_device_get_match_data()
  2019-10-15  9:02       ` Andy Shevchenko
@ 2019-10-15 22:41         ` Stephen Boyd
  2019-10-16 13:46           ` Andy Shevchenko
  0 siblings, 1 reply; 10+ messages in thread
From: Stephen Boyd @ 2019-10-15 22:41 UTC (permalink / raw)
  To: Andy Shevchenko
  Cc: Wolfram Sang, Linux Kernel Mailing List, Arnd Bergmann,
	Geert Uytterhoeven, Riku Voipio, Rob Herring, Frank Rowand,
	Jacek Anaszewski, Pavel Machek, Dan Murphy, Linux LED Subsystem

Quoting Andy Shevchenko (2019-10-15 02:02:01)
> On Mon, Oct 14, 2019 at 11:54 PM Stephen Boyd <swboyd@chromium.org> wrote:
> > Quoting Andy Shevchenko (2019-10-14 10:50:06)
> > > On Sat, Oct 5, 2019 at 12:47 AM Stephen Boyd <swboyd@chromium.org> wrote:
> > > >
> > > > This driver can use the of_device_get_match_data() API to simplify the
> > > > code. Replace calls to of_match_device() with this newer API under the
> > > > assumption that where it is called will be when we know the device is
> > > > backed by a DT node. This nicely avoids referencing the match table when
> > > > it is undefined with configurations where CONFIG_OF=n.
> > >
> > > > +       devid = (int)(uintptr_t)of_device_get_match_data(dev);
> > >
> > > > +               devid = (int)(uintptr_t)of_device_get_match_data(&client->dev);
> > >
> > > This still leaves it OF-centric.
> > > Better to use device_get_match_data().
> > >
> > > Also, I'm thinking that following may help to clean a lot of the i2c
> > > client drivers
> > >
> > > static inline // perhaps no
> > > const void *i2c_device_get_match_data(struct i2c_client *client, const
> > > struct i2c_device_id *id)
> > > {
> > >   if (id)
> > >     return (const void *)id->driver_data;
> > >   return device_get_match_data(&client->dev);
> > > }
> > >
> >
> > Looks alright to me. Maybe device_get_match_data() can look at the bus
> > and call some bus op if the firmware match isn't present? Then we can
> > replace a bunch of these calls with device_get_match_data() and it will
> > "do the right thing" regardless of what bus or firmware the device is
> > running on.
> 
> It will be something ugly like
> 
> buses {
> #ifdef I2C
> &i2c_bus_type,
> #endif
> ...
> }
> 
> in the code. I won't do this.
> 
> See generic_match_buses[] for example.

Why is it like generic_match_buses[]? I thought it would look at
struct device::of_node or struct device::fw_node and try to extract
device data out that and if that fails it would fallback to some new
function like struct bus_type::get_match_data() that does the right
thing for the bus. In the case of i2c it would extract the i2c_client's
i2c_device_id pointer and return it onwards.


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

* Re: [PATCH 01/10] leds: pca953x: Use of_device_get_match_data()
  2019-10-15 22:41         ` Stephen Boyd
@ 2019-10-16 13:46           ` Andy Shevchenko
  0 siblings, 0 replies; 10+ messages in thread
From: Andy Shevchenko @ 2019-10-16 13:46 UTC (permalink / raw)
  To: Stephen Boyd
  Cc: Wolfram Sang, Linux Kernel Mailing List, Arnd Bergmann,
	Geert Uytterhoeven, Riku Voipio, Rob Herring, Frank Rowand,
	Jacek Anaszewski, Pavel Machek, Dan Murphy, Linux LED Subsystem

On Wed, Oct 16, 2019 at 1:42 AM Stephen Boyd <swboyd@chromium.org> wrote:
> Quoting Andy Shevchenko (2019-10-15 02:02:01)
> > On Mon, Oct 14, 2019 at 11:54 PM Stephen Boyd <swboyd@chromium.org> wrote:
> > > Quoting Andy Shevchenko (2019-10-14 10:50:06)
> > > > On Sat, Oct 5, 2019 at 12:47 AM Stephen Boyd <swboyd@chromium.org> wrote:

> > > > Also, I'm thinking that following may help to clean a lot of the i2c
> > > > client drivers
> > > >
> > > > static inline // perhaps no
> > > > const void *i2c_device_get_match_data(struct i2c_client *client, const
> > > > struct i2c_device_id *id)
> > > > {
> > > >   if (id)
> > > >     return (const void *)id->driver_data;
> > > >   return device_get_match_data(&client->dev);
> > > > }
> > > >
> > >
> > > Looks alright to me. Maybe device_get_match_data() can look at the bus
> > > and call some bus op if the firmware match isn't present? Then we can
> > > replace a bunch of these calls with device_get_match_data() and it will
> > > "do the right thing" regardless of what bus or firmware the device is
> > > running on.
> >
> > It will be something ugly like
> >
> > buses {
> > #ifdef I2C
> > &i2c_bus_type,
> > #endif
> > ...
> > }
> >
> > in the code. I won't do this.
> >
> > See generic_match_buses[] for example.
>
> Why is it like generic_match_buses[]? I thought it would look at
> struct device::of_node or struct device::fw_node and try to extract
> device data out that and if that fails it would fallback to some new
> function like struct bus_type::get_match_data() that does the right
> thing for the bus. In the case of i2c it would extract the i2c_client's
> i2c_device_id pointer and return it onwards.

Can you send a patch for review?

-- 
With Best Regards,
Andy Shevchenko

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

end of thread, back to index

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-10-04 21:43 [PATCH 00/10] Stop NULLifying match pointer in of_match_device() Stephen Boyd
2019-10-04 21:43 ` [PATCH 01/10] leds: pca953x: Use of_device_get_match_data() Stephen Boyd
2019-10-06 12:15   ` Jacek Anaszewski
2019-10-07  8:01   ` Geert Uytterhoeven
2019-10-13 12:10   ` Pavel Machek
2019-10-14 17:50   ` Andy Shevchenko
2019-10-14 20:54     ` Stephen Boyd
2019-10-15  9:02       ` Andy Shevchenko
2019-10-15 22:41         ` Stephen Boyd
2019-10-16 13:46           ` Andy Shevchenko

Linux-LEDs Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-leds/0 linux-leds/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-leds linux-leds/ https://lore.kernel.org/linux-leds \
		linux-leds@vger.kernel.org linux-leds@archiver.kernel.org
	public-inbox-index linux-leds

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.linux-leds


AGPL code for this site: git clone https://public-inbox.org/ public-inbox