Stop NULLifying match pointer in of_match_device()
Subsystems (17)
cover Stop NULLifying match pointer in of_match_device()
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!
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
Signature · 1 line
Sent by a computer through tubes
PATCH 1/10 leds: pca953x: Use of_device_get_match_data()
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.
---
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(-)
drivers/leds/leds-pca9532.c +2 -12
@@ -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; }
Signature · 1 line
Sent by a computer through tubes
Re: [PATCH 01/10] leds: pca953x: Use of_device_get_match_data()
Quoted 57 lines · Stephen Boyd
This driver can use the
of_device_get_match_data()API to simplify the code. Replace calls toof_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 whereCONFIG_OF=n.Cc Arnd Bergmann <[email protected]>Cc Geert Uytterhoeven <[email protected]>Cc Riku Voipio <[email protected]>Cc Rob Herring <[email protected]>Cc Frank Rowand <[email protected]>Cc Jacek Anaszewski <[email protected]>Cc Pavel Machek <[email protected]>Cc Dan Murphy <[email protected]>Cc <[email protected]>Signed-off-by Stephen Boyd <[email protected]>---
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(-)drivers/leds/leds-pca9532.c +1
-7@@ -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 ;
drivers/leds/leds-pca9532.c static int pca9532_probe(struct i2c_client *client, · line 525
Quoted 10 lines
drivers/leds/leds-pca9532.c +1
-5} - 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; }
Signature · 2 lines
Best regards, Jacek Anaszewski
Re: [PATCH 01/10] leds: pca953x: Use of_device_get_match_data()
In reply to Stephen BoydQuoted 6 lines · Stephen Boyd
This driver can use the
of_device_get_match_data()API to simplify the code. Replace calls toof_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 whereCONFIG_OF=n.
Quoted 10 lines
Cc Arnd Bergmann <[email protected]>Cc Geert Uytterhoeven <[email protected]>Cc Riku Voipio <[email protected]>Cc Rob Herring <[email protected]>Cc Frank Rowand <[email protected]>Cc Jacek Anaszewski <[email protected]>Cc Pavel Machek <[email protected]>Cc Dan Murphy <[email protected]>Cc <[email protected]>Signed-off-by Stephen Boyd <[email protected]>
Gr{oetje,eeting}s,
Geert
Signature · 5 lines
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected] 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
Pavel Machek
AppliedRe: [PATCH 01/10] leds: pca953x: Use of_device_get_match_data()
In reply to Stephen BoydQuoted 5 lines · Stephen Boyd
This driver can use the
of_device_get_match_data()API to simplify the code. Replace calls toof_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 whereCONFIG_OF=n.
Thanks, applied.
Pavel
Quoted 60 lines
Cc Arnd Bergmann <[email protected]>Cc Geert Uytterhoeven <[email protected]>Cc Riku Voipio <[email protected]>Cc Rob Herring <[email protected]>Cc Frank Rowand <[email protected]>Cc Jacek Anaszewski <[email protected]>Cc Pavel Machek <[email protected]>Cc Dan Murphy <[email protected]>Cc <[email protected]>Signed-off-by Stephen Boyd <[email protected]>---
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(-)drivers/leds/leds-pca9532.c +2
-12@@ -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; }
Signature · 2 lines
(english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
Re: [PATCH 01/10] leds: pca953x: Use of_device_get_match_data()
In reply to Stephen Boyddrivers/leds/leds-pca9532.c pca9532_of_populate_pdata(struct device *dev, struct device_node *np)
Quoted 10 lines · Stephen Boyd
This driver can use the
of_device_get_match_data()API to simplify the code. Replace calls toof_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 whereCONFIG_OF=n.drivers/leds/leds-pca9532.c +2
-0+ 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);
}
Signature · 2 lines
With Best Regards, Andy Shevchenko
Re: [PATCH 01/10] leds: pca953x: Use of_device_get_match_data()
Quoting Andy Shevchenko (2019-10-14 10:50:06)
Quoted 18 lines · Stephen Boyd
drivers/leds/leds-pca9532.c pca9532_of_populate_pdata(struct device *dev, struct device_node *np)
Quoted 10 lines
This driver can use the
of_device_get_match_data()API to simplify the code. Replace calls toof_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 whereCONFIG_OF=n.drivers/leds/leds-pca9532.c +2
-0+ 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 usedevice_get_match_data().Also, I'm thinking that following may help to clean a lot of the i2c client drivers
Quoted 9 lines
static inline // perhaps no
const void *i2c_device_get_match_data(structi2c_client*client, const structi2c_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.
Re: [PATCH 01/10] leds: pca953x: Use of_device_get_match_data()
Quoted 29 lines · Stephen Boyd
Quoting Andy Shevchenko (2019-10-14 10:50:06)
Quoted 18 lines · Stephen Boyd
drivers/leds/leds-pca9532.c pca9532_of_populate_pdata(struct device *dev, struct device_node *np)
Quoted 10 lines
This driver can use the
of_device_get_match_data()API to simplify the code. Replace calls toof_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 whereCONFIG_OF=n.drivers/leds/leds-pca9532.c +2
-0+ 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 usedevice_get_match_data().Also, I'm thinking that following may help to clean a lot of the i2c client drivers
Quoted 9 lines
static inline // perhaps no
const void *i2c_device_get_match_data(structi2c_client*client, const structi2c_device_id*id)
{
if (id)return (const void *)id->driver_data;return
device_get_match_data(&client->dev);
}
Quoted 5 lines
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 withdevice_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.
Signature · 2 lines
With Best Regards, Andy Shevchenko
Re: [PATCH 01/10] leds: pca953x: Use of_device_get_match_data()
Quoting Andy Shevchenko (2019-10-15 02:02:01)
Quoted 45 lines · Stephen Boyd
Quoted 29 lines
Quoting Andy Shevchenko (2019-10-14 10:50:06)
Quoted 18 lines · Stephen Boyd
drivers/leds/leds-pca9532.c pca9532_of_populate_pdata(struct device *dev, struct device_node *np)
Quoted 10 lines
This driver can use the
of_device_get_match_data()API to simplify the code. Replace calls toof_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 whereCONFIG_OF=n.drivers/leds/leds-pca9532.c +2
-0+ 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 usedevice_get_match_data().Also, I'm thinking that following may help to clean a lot of the i2c client drivers
Quoted 9 lines
static inline // perhaps no
const void *i2c_device_get_match_data(structi2c_client*client, const structi2c_device_id*id)
{
if (id)return (const void *)id->driver_data;return
device_get_match_data(&client->dev);
}Quoted 5 lines
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 withdevice_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
...
}
Quoted 3 lines
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.
Re: [PATCH 01/10] leds: pca953x: Use of_device_get_match_data()
Quoted 35 lines · Stephen Boyd
Quoting Andy Shevchenko (2019-10-15 02:02:01)
Quoted 34 lines · Stephen Boyd
Quoted 16 lines
Quoting Andy Shevchenko (2019-10-14 10:50:06)
Quoted 5 lines · Stephen Boyd
Also, I'm thinking that following may help to clean a lot of the i2c client drivers
Quoted 9 lines
static inline // perhaps no
const void *i2c_device_get_match_data(structi2c_client*client, const structi2c_device_id*id)
{
if (id)return (const void *)id->driver_data;return
device_get_match_data(&client->dev);
}Quoted 5 lines
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 withdevice_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.
Quoted 8 lines
Quoted 1 line
See generic_match_buses[] for example.
Why is it like generic_match_buses[]? I thought it would look at struct
device::of_nodeor structdevice::fw_nodeand try to extract device data out that and if that fails it would fallback to some new function like structbus_type::get_match_data()that does the right thing for the bus. In the case of i2c it would extract the i2c_client'si2c_device_idpointer and return it onwards.
Can you send a patch for review?
Signature · 2 lines
With Best Regards, Andy Shevchenko
Re: [PATCH 01/10] leds: pca953x: Use of_device_get_match_data()
In reply to Stephen BoydHi!
Quoted 8 lines
This driver can use the
of_device_get_match_data()API to simplify the code. Replace calls toof_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 whereCONFIG_OF=n.Please ack or pick for immediate merge so the last patch can be
merged.
I see nothing obviously wrong, so...
... but it did not apply on top of leds-next tree.
Best regards,
Pavel
Signature · 2 lines
(english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
PATCH 2/10 media: renesas-ceu: Use of_device_get_match_data()
In reply to Stephen BoydThis driver can use the replacement API instead of calling of_match_device() and then dereferencing the pointer that is returned. This nicely avoids referencing the match table when it is undefined with configurations where CONFIG_OF=n.
---
Please ack or pick for immediate merge so the last patch can be merged.
drivers/media/platform/renesas-ceu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/media/platform/renesas-ceu.c +1 -1
@@ -1679,7 +1679,7 @@ static int ceu_probe(struct platform_device *pdev)v4l2_async_notifier_init (&ceudev->notifier);if (IS_ENABLED (CONFIG_OF ) && dev->of_node) { - ceu_data =of_match_device (ceu_of_match, dev)->data; + ceu_data =of_device_get_match_data (dev); num_subdevs =ceu_parse_dt (ceudev); }else if (dev->platform_data) {/* Assume SH4 if booting with platform data. */
Signature · 1 line
Sent by a computer through tubes
Re: [PATCH 02/10] media: renesas-ceu: Use of_device_get_match_data()
Em Fri, 4 Oct 2019 14:43:26 -0700
Stephen Boyd <[email protected]> escreveu:
Quoted 14 lines
This driver can use the replacement API instead of calling
of_match_device()and then dereferencing the pointer that is returned. This nicely avoids referencing the match table when it is undefined with configurations whereCONFIG_OF=n.Cc Arnd Bergmann <[email protected]>Cc Geert Uytterhoeven <[email protected]>Cc Jacopo Mondi <[email protected]>Cc Mauro Carvalho Chehab <[email protected]>Cc Rob Herring <[email protected]>Cc Frank Rowand <[email protected]>Cc <[email protected]>Cc <[email protected]>Signed-off-by Stephen Boyd <[email protected]>
Quoted 3 lines
---
Please ack or pick for immediate merge so the last patch can be merged.
Feel free to merge it via your tree:
Quoted 9 lines
drivers/media/platform/renesas-ceu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)drivers/media/platform/renesas-ceu.c +0
-0
drivers/media/platform/renesas-ceu.c static int ceu_probe(struct platform_device *pdev) · line 1685
Quoted 8 lines
drivers/media/platform/renesas-ceu.c +1
-1@@ -1679,7 +1679,7 @@ static int ceu_probe(struct platform_device *pdev)v4l2_async_notifier_init (&ceudev->notifier);if (IS_ENABLED (CONFIG_OF ) && dev->of_node) { - ceu_data =of_match_device (ceu_of_match, dev)->data; + ceu_data =of_device_get_match_data (dev); num_subdevs =ceu_parse_dt (ceudev); }else if (dev->platform_data) {/* Assume SH4 if booting with platform data. */
Thanks,
Mauro
Jacopo Mondi
Acked-byRe: [PATCH 02/10] media: renesas-ceu: Use of_device_get_match_data()
Sorry,
totally missed it
Quoted 19 lines · Mauro Carvalho Chehab
Em Fri, 4 Oct 2019 14:43:26 -0700
Stephen Boyd <[email protected]> escreveu:Quoted 16 lines
This driver can use the replacement API instead of calling
of_match_device()and then dereferencing the pointer that is returned. This nicely avoids referencing the match table when it is undefined with configurations whereCONFIG_OF=n.Cc Arnd Bergmann <[email protected]>Cc Geert Uytterhoeven <[email protected]>Cc Jacopo Mondi <[email protected]>Cc Mauro Carvalho Chehab <[email protected]>Cc Rob Herring <[email protected]>Cc Frank Rowand <[email protected]>Cc <[email protected]>Cc <[email protected]>Signed-off-by Stephen Boyd <[email protected]>---
Quoted 6 lines
Quoted 1 line
Please ack or pick for immediate merge so the last patch can be merged.
Feel free to merge it via your tree:
The CEU driver does probably not need this as the dereferencing of the pointer returned by of_match_device() is guarded by IS_ENABLED(CONFIG_OF), but surely this does not hurt and it's nicer to read.
With Mauro's ack mine is probably not needed, but:
Thanks
j
Quoted 23 lines
Quoted 10 lines
drivers/media/platform/renesas-ceu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)drivers/media/platform/renesas-ceu.c +0
-0drivers/media/platform/renesas-ceu.c static int ceu_probe(struct platform_device *pdev) · line 1685
Quoted 8 lines
drivers/media/platform/renesas-ceu.c +1
-1@@ -1679,7 +1679,7 @@ static int ceu_probe(struct platform_device *pdev)v4l2_async_notifier_init (&ceudev->notifier);if (IS_ENABLED (CONFIG_OF ) && dev->of_node) { - ceu_data =of_match_device (ceu_of_match, dev)->data; + ceu_data =of_device_get_match_data (dev); num_subdevs =ceu_parse_dt (ceudev); }else if (dev->platform_data) {/* Assume SH4 if booting with platform data. */ Thanks,
Mauro
PATCH 3/10 rtc: armada38x: Use of_device_get_match_data()
In reply to Stephen BoydUse the more modern API to get the match data out of the of match table. This saves some code, lines, and nicely avoids referencing the match table when it is undefined with configurations where CONFIG_OF=n.
---
Please ack or pick for immediate merge so the last patch can be merged.
drivers/rtc/rtc-armada38x.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-)
drivers/rtc/rtc-armada38x.c +3 -7
@@ -74,7 +74,7 @@ struct armada38x_rtc {int irq;bool initialized;struct value_to_freq *val_to_freq; -struct armada38x_rtc_data *data; +const struct armada38x_rtc_data *data; };#define ALARM1 0
@@ -501,17 +501,14 @@ static __init int armada38x_rtc_probe(struct platform_device *pdev) {struct resource *res;struct armada38x_rtc *rtc; -const struct of_device_id *match; - - match =of_match_device (armada38x_rtc_of_match_table, &pdev->dev); -if (!match) -return -ENODEV ; rtc =devm_kzalloc (&pdev->dev,sizeof (struct armada38x_rtc ),GFP_KERNEL );if (!rtc)return -ENOMEM ; + rtc->data =of_device_get_match_data (&pdev->dev); + rtc->val_to_freq =devm_kcalloc (&pdev->dev,SAMPLE_NR ,sizeof (struct value_to_freq ),GFP_KERNEL );if (!rtc->val_to_freq)
@@ -553,7 +550,6 @@ static __init int armada38x_rtc_probe(struct platform_device *pdev)*/ rtc->rtc_dev->ops = &armada38x_rtc_ops_noirq; } - rtc->data = (struct armada38x_rtc_data *)match->data;/* Update RTC-MBUS bridge timing parameters */ rtc->data->update_mbus_timing (rtc);
Signature · 1 line
Sent by a computer through tubes
Re: [PATCH 03/10] rtc: armada38x: Use of_device_get_match_data()
Quoted 4 lines · Stephen Boyd
Use the more modern API to get the match data out of the of match table. This saves some code, lines, and nicely avoids referencing the match table when it is undefined with configurations where
CONFIG_OF=n.
Quoted 12 lines
Cc Arnd Bergmann <[email protected]>Cc Geert Uytterhoeven <[email protected]>Cc Jason Cooper <[email protected]>Cc Andrew Lunn <[email protected]>Cc Gregory Clement <[email protected]>Cc Sebastian Hesselbarth <[email protected]>Cc Alessandro Zummo <[email protected]>Cc Alexandre Belloni <[email protected]>Cc Rob Herring <[email protected]>Cc Frank Rowand <[email protected]>Cc <[email protected]>Signed-off-by Stephen Boyd <[email protected]>
Quoted 51 lines
---
Please ack or pick for immediate merge so the last patch can be merged.
drivers/rtc/rtc-armada38x.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-)drivers/rtc/rtc-armada38x.c +3
-7@@ -74,7 +74,7 @@ struct armada38x_rtc {int irq;bool initialized;struct value_to_freq *val_to_freq; -struct armada38x_rtc_data *data; +const struct armada38x_rtc_data *data; };#define ALARM1 0@@ -501,17 +501,14 @@ static __init int armada38x_rtc_probe(struct platform_device *pdev) {struct resource *res;struct armada38x_rtc *rtc; -const struct of_device_id *match; - - match =of_match_device (armada38x_rtc_of_match_table, &pdev->dev); -if (!match) -return -ENODEV ; rtc =devm_kzalloc (&pdev->dev,sizeof (struct armada38x_rtc ),GFP_KERNEL );if (!rtc)return -ENOMEM ; + rtc->data =of_device_get_match_data (&pdev->dev); + rtc->val_to_freq =devm_kcalloc (&pdev->dev,SAMPLE_NR ,sizeof (struct value_to_freq ),GFP_KERNEL );if (!rtc->val_to_freq)@@ -553,7 +550,6 @@ static __init int armada38x_rtc_probe(struct platform_device *pdev)*/ rtc->rtc_dev->ops = &armada38x_rtc_ops_noirq; } - rtc->data = (struct armada38x_rtc_data *)match->data;/* Update RTC-MBUS bridge timing parameters */ rtc->data->update_mbus_timing (rtc);Signature · 1 line
Sent by a computer through tubes
Signature · 3 lines
Alexandre Belloni, Bootlin Embedded Linux and Kernel engineering https://bootlin.com
PATCH 4/10 drivers: net: davinci_mdio: Use of_device_get_match_data()
In reply to Stephen BoydUse the more modern API to get the match data out of the of match table. This saves some code, lines, and nicely avoids referencing the match table when it is undefined with configurations where CONFIG_OF=n.
---
Please ack or pick for immediate merge so the last patch can be merged.
drivers/net/ethernet/ti/davinci_mdio.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-)
drivers/net/ethernet/ti/davinci_mdio.c +4 -8
@@ -358,20 +358,16 @@ static int davinci_mdio_probe(struct platform_device *pdev) }if (IS_ENABLED (CONFIG_OF ) && dev->of_node) { -const struct of_device_id *of_id; +const struct davinci_mdio_of_param *of_mdio_data; ret =davinci_mdio_probe_dt (&data->pdata, pdev);if (ret)return ret;snprintf (data->bus->id,MII_BUS_ID_SIZE ,"%s" , pdev->name); - of_id =of_match_device (davinci_mdio_of_mtable, &pdev->dev); -if (of_id) { -const struct davinci_mdio_of_param *of_mdio_data; - - of_mdio_data = of_id->data; -if (of_mdio_data) - autosuspend_delay_ms = + of_mdio_data =of_device_get_match_data (&pdev->dev); +if (of_mdio_data) { + autosuspend_delay_ms = of_mdio_data->autosuspend_delay_ms; } }else {
Signature · 1 line
Sent by a computer through tubes
PATCH 5/10 serial: stm32: Use of_device_get_match_data()
In reply to Stephen BoydThis driver casts away the constness of struct stm32_usart_info that is pointed to by the of match table. Use of_device_get_match_data() instead of of_match_device() here and push the const throughout the code so that we don't cast away const. This nicely avoids referencing the match table when it is undefined with configurations where CONFIG_OF=n and fixes the const issues.
---
Please ack or pick for immediate merge so the last patch can be merged.
drivers/tty/serial/stm32-usart.c | 71 +++++++++++++++----------------- drivers/tty/serial/stm32-usart.h | 2 +- 2 files changed, 35 insertions(+), 38 deletions(-)
drivers/tty/serial/stm32-usart.c +34 -37
@@ -102,8 +102,8 @@ static int stm32_config_rs485(struct uart_port *port, struct serial_rs485 *rs485conf) {struct stm32_port *stm32_port =to_stm32_port (port); -struct stm32_usart_offsets *ofs = &stm32_port->info->ofs; -struct stm32_usart_config *cfg = &stm32_port->info->cfg; +const struct stm32_usart_offsets *ofs = &stm32_port->info->ofs; +const struct stm32_usart_config *cfg = &stm32_port->info->cfg;u32 usartdiv, baud, cr1, cr3;bool over8;
@@ -171,7 +171,7 @@ static int stm32_pending_rx(struct uart_port *port, u32 *sr, int *last_res, bool threaded) {struct stm32_port *stm32_port =to_stm32_port (port); -struct stm32_usart_offsets *ofs = &stm32_port->info->ofs; +const struct stm32_usart_offsets *ofs = &stm32_port->info->ofs;enum dma_status status;struct dma_tx_state state;
@@ -196,7 +196,7 @@ static unsigned long stm32_get_char(struct uart_port *port, u32 *sr, int *last_res) {struct stm32_port *stm32_port =to_stm32_port (port); -struct stm32_usart_offsets *ofs = &stm32_port->info->ofs; +const struct stm32_usart_offsets *ofs = &stm32_port->info->ofs;unsigned long c;if (stm32_port->rx_ch) {
@@ -216,7 +216,7 @@ static void stm32_receive_chars(struct uart_port *port, bool threaded) {struct tty_port *tport = &port->state->port;struct stm32_port *stm32_port =to_stm32_port (port); -struct stm32_usart_offsets *ofs = &stm32_port->info->ofs; +const struct stm32_usart_offsets *ofs = &stm32_port->info->ofs;unsigned long c;u32 sr;char flag;
@@ -287,7 +287,7 @@ static void stm32_tx_dma_complete(void *arg) {struct uart_port *port = arg;struct stm32_port *stm32port =to_stm32_port (port); -struct stm32_usart_offsets *ofs = &stm32port->info->ofs; +const struct stm32_usart_offsets *ofs = &stm32port->info->ofs;stm32_clr_bits (port, ofs->cr3,USART_CR3_DMAT ); stm32port->tx_dma_busy = false;
@@ -299,7 +299,7 @@ static void stm32_tx_dma_complete(void *arg)static void stm32_tx_interrupt_enable (struct uart_port *port) {struct stm32_port *stm32_port =to_stm32_port (port); -struct stm32_usart_offsets *ofs = &stm32_port->info->ofs; +const struct stm32_usart_offsets *ofs = &stm32_port->info->ofs;/* * Enables TX FIFO threashold irq when FIFO is enabled,
@@ -314,7 +314,7 @@ static void stm32_tx_interrupt_enable(struct uart_port *port)static void stm32_tx_interrupt_disable (struct uart_port *port) {struct stm32_port *stm32_port =to_stm32_port (port); -struct stm32_usart_offsets *ofs = &stm32_port->info->ofs; +const struct stm32_usart_offsets *ofs = &stm32_port->info->ofs;if (stm32_port->fifoen)stm32_clr_bits (port, ofs->cr3,USART_CR3_TXFTIE );
@@ -325,7 +325,7 @@ static void stm32_tx_interrupt_disable(struct uart_port *port)static void stm32_transmit_chars_pio (struct uart_port *port) {struct stm32_port *stm32_port =to_stm32_port (port); -struct stm32_usart_offsets *ofs = &stm32_port->info->ofs; +const struct stm32_usart_offsets *ofs = &stm32_port->info->ofs;struct circ_buf *xmit = &port->state->xmit;if (stm32_port->tx_dma_busy) {
@@ -352,7 +352,7 @@ static void stm32_transmit_chars_pio(struct uart_port *port)static void stm32_transmit_chars_dma (struct uart_port *port) {struct stm32_port *stm32port =to_stm32_port (port); -struct stm32_usart_offsets *ofs = &stm32port->info->ofs; +const struct stm32_usart_offsets *ofs = &stm32port->info->ofs;struct circ_buf *xmit = &port->state->xmit;struct dma_async_tx_descriptor *desc =NULL ;dma_cookie_t cookie;
@@ -413,7 +413,7 @@ static void stm32_transmit_chars_dma(struct uart_port *port)static void stm32_transmit_chars (struct uart_port *port) {struct stm32_port *stm32_port =to_stm32_port (port); -struct stm32_usart_offsets *ofs = &stm32_port->info->ofs; +const struct stm32_usart_offsets *ofs = &stm32_port->info->ofs;struct circ_buf *xmit = &port->state->xmit;if (port->x_char) {
@@ -453,7 +453,7 @@ static irqreturn_t stm32_interrupt(int irq, void *ptr) {struct uart_port *port = ptr;struct stm32_port *stm32_port =to_stm32_port (port); -struct stm32_usart_offsets *ofs = &stm32_port->info->ofs; +const struct stm32_usart_offsets *ofs = &stm32_port->info->ofs;u32 sr;spin_lock (&port->lock);
@@ -500,7 +500,7 @@ static irqreturn_t stm32_threaded_interrupt(int irq, void *ptr)static unsigned int stm32_tx_empty (struct uart_port *port) {struct stm32_port *stm32_port =to_stm32_port (port); -struct stm32_usart_offsets *ofs = &stm32_port->info->ofs; +const struct stm32_usart_offsets *ofs = &stm32_port->info->ofs;return readl_relaxed (port->membase + ofs->isr) &USART_SR_TXE ; }
@@ -508,7 +508,7 @@ static unsigned int stm32_tx_empty(struct uart_port *port)static void stm32_set_mctrl (struct uart_port *port,unsigned int mctrl) {struct stm32_port *stm32_port =to_stm32_port (port); -struct stm32_usart_offsets *ofs = &stm32_port->info->ofs; +const struct stm32_usart_offsets *ofs = &stm32_port->info->ofs;if ((mctrl &TIOCM_RTS ) && (port->status &UPSTAT_AUTORTS ))stm32_set_bits (port, ofs->cr3,USART_CR3_RTSE );
@@ -543,7 +543,7 @@ static void stm32_start_tx(struct uart_port *port)static void stm32_throttle (struct uart_port *port) {struct stm32_port *stm32_port =to_stm32_port (port); -struct stm32_usart_offsets *ofs = &stm32_port->info->ofs; +const struct stm32_usart_offsets *ofs = &stm32_port->info->ofs;unsigned long flags;spin_lock_irqsave (&port->lock, flags);
@@ -558,7 +558,7 @@ static void stm32_throttle(struct uart_port *port)static void stm32_unthrottle (struct uart_port *port) {struct stm32_port *stm32_port =to_stm32_port (port); -struct stm32_usart_offsets *ofs = &stm32_port->info->ofs; +const struct stm32_usart_offsets *ofs = &stm32_port->info->ofs;unsigned long flags;spin_lock_irqsave (&port->lock, flags);
@@ -573,7 +573,7 @@ static void stm32_unthrottle(struct uart_port *port)static void stm32_stop_rx (struct uart_port *port) {struct stm32_port *stm32_port =to_stm32_port (port); -struct stm32_usart_offsets *ofs = &stm32_port->info->ofs; +const struct stm32_usart_offsets *ofs = &stm32_port->info->ofs;stm32_clr_bits (port, ofs->cr1, stm32_port->cr1_irq);if (stm32_port->cr3_irq)
@@ -589,7 +589,7 @@ static void stm32_break_ctl(struct uart_port *port, int break_state)static int stm32_startup (struct uart_port *port) {struct stm32_port *stm32_port =to_stm32_port (port); -struct stm32_usart_offsets *ofs = &stm32_port->info->ofs; +const struct stm32_usart_offsets *ofs = &stm32_port->info->ofs;const char *name =to_platform_device (port->dev)->name;u32 val;int ret;
@@ -625,8 +625,8 @@ static int stm32_startup(struct uart_port *port)static void stm32_shutdown (struct uart_port *port) {struct stm32_port *stm32_port =to_stm32_port (port); -struct stm32_usart_offsets *ofs = &stm32_port->info->ofs; -struct stm32_usart_config *cfg = &stm32_port->info->cfg; +const struct stm32_usart_offsets *ofs = &stm32_port->info->ofs; +const struct stm32_usart_config *cfg = &stm32_port->info->cfg;u32 val, isr;int ret;
@@ -682,8 +682,8 @@ static void stm32_set_termios(struct uart_port *port, struct ktermios *termios, struct ktermios *old) {struct stm32_port *stm32_port =to_stm32_port (port); -struct stm32_usart_offsets *ofs = &stm32_port->info->ofs; -struct stm32_usart_config *cfg = &stm32_port->info->cfg; +const struct stm32_usart_offsets *ofs = &stm32_port->info->ofs; +const struct stm32_usart_config *cfg = &stm32_port->info->cfg;struct serial_rs485 *rs485conf = &port->rs485;unsigned int baud, bits;u32 usartdiv, mantissa, fraction, oversampling;
@@ -876,8 +876,8 @@ static void stm32_pm(struct uart_port *port, unsigned int state, {struct stm32_port *stm32port =container_of (port, struct stm32_port, port); -struct stm32_usart_offsets *ofs = &stm32port->info->ofs; -struct stm32_usart_config *cfg = &stm32port->info->cfg; +const struct stm32_usart_offsets *ofs = &stm32port->info->ofs; +const struct stm32_usart_config *cfg = &stm32port->info->cfg;unsigned long flags =0 ;switch (state) {
@@ -1010,7 +1010,7 @@ MODULE_DEVICE_TABLE(of, stm32_match);static int stm32_of_dma_rx_probe (struct stm32_port *stm32port,struct platform_device *pdev) { -struct stm32_usart_offsets *ofs = &stm32port->info->ofs; +const struct stm32_usart_offsets *ofs = &stm32port->info->ofs;struct uart_port *port = &stm32port->port;struct device *dev = &pdev->dev;struct dma_slave_config config;
@@ -1082,7 +1082,7 @@ static int stm32_of_dma_rx_probe(struct stm32_port *stm32port,static int stm32_of_dma_tx_probe (struct stm32_port *stm32port,struct platform_device *pdev) { -struct stm32_usart_offsets *ofs = &stm32port->info->ofs; +const struct stm32_usart_offsets *ofs = &stm32port->info->ofs;struct uart_port *port = &stm32port->port;struct device *dev = &pdev->dev;struct dma_slave_config config;
@@ -1132,7 +1132,6 @@ static int stm32_of_dma_tx_probe(struct stm32_port *stm32port,static int stm32_serial_probe (struct platform_device *pdev) { -const struct of_device_id *match;struct stm32_port *stm32port;int ret;
@@ -1140,10 +1139,8 @@ static int stm32_serial_probe(struct platform_device *pdev)if (!stm32port)return -ENODEV ; - match =of_match_device (stm32_match, &pdev->dev); -if (match && match->data) - stm32port->info = (struct stm32_usart_info *)match->data; -else + stm32port->info =of_device_get_match_data (&pdev->dev); +if (!stm32port->info)return -EINVAL ; ret =stm32_init_port (stm32port, pdev);
@@ -1202,7 +1199,7 @@ static int stm32_serial_remove(struct platform_device *pdev) {struct uart_port *port =platform_get_drvdata (pdev);struct stm32_port *stm32_port =to_stm32_port (port); -struct stm32_usart_offsets *ofs = &stm32_port->info->ofs; +const struct stm32_usart_offsets *ofs = &stm32_port->info->ofs;int err;pm_runtime_get_sync (&pdev->dev);
@@ -1247,7 +1244,7 @@ static int stm32_serial_remove(struct platform_device *pdev)static void stm32_console_putchar (struct uart_port *port,int ch) {struct stm32_port *stm32_port =to_stm32_port (port); -struct stm32_usart_offsets *ofs = &stm32_port->info->ofs; +const struct stm32_usart_offsets *ofs = &stm32_port->info->ofs;while (!(readl_relaxed (port->membase + ofs->isr) &USART_SR_TXE ))cpu_relax ();
@@ -1259,8 +1256,8 @@ static void stm32_console_write(struct console *co, const char *s, unsigned cnt) {struct uart_port *port = &stm32_ports[co->index].port;struct stm32_port *stm32_port =to_stm32_port (port); -struct stm32_usart_offsets *ofs = &stm32_port->info->ofs; -struct stm32_usart_config *cfg = &stm32_port->info->cfg; +const struct stm32_usart_offsets *ofs = &stm32_port->info->ofs; +const struct stm32_usart_config *cfg = &stm32_port->info->cfg;unsigned long flags;u32 old_cr1, new_cr1;int locked =1 ;
@@ -1346,8 +1343,8 @@ static void __maybe_unused stm32_serial_enable_wakeup(struct uart_port *port, bool enable) {struct stm32_port *stm32_port =to_stm32_port (port); -struct stm32_usart_offsets *ofs = &stm32_port->info->ofs; -struct stm32_usart_config *cfg = &stm32_port->info->cfg; +const struct stm32_usart_offsets *ofs = &stm32_port->info->ofs; +const struct stm32_usart_config *cfg = &stm32_port->info->cfg;u32 val;if (stm32_port->wakeirq <=0 )
drivers/tty/serial/stm32-usart.h +1 -1
@@ -259,7 +259,7 @@ struct stm32_usart_info stm32h7_info = {struct stm32_port {struct uart_port port;struct clk *clk; -struct stm32_usart_info *info; +const struct stm32_usart_info *info;struct dma_chan *rx_ch;/* dma rx channel */ dma_addr_t rx_dma_buf;/* dma rx buffer bus address */ unsigned char *rx_buf;/* dma rx buffer cpu address */
Signature · 1 line
Sent by a computer through tubes
Re: [PATCH 05/10] serial: stm32: Use of_device_get_match_data()
Quoted 17 lines · Stephen Boyd
This driver casts away the constness of struct
stm32_usart_infothat is pointed to by the of match table. Useof_device_get_match_data()instead ofof_match_device()here and push the const throughout the code so that we don't cast away const. This nicely avoids referencing the match table when it is undefined with configurations whereCONFIG_OF=nand fixes the const issues.Cc Arnd Bergmann <[email protected]>Cc Geert Uytterhoeven <[email protected]>Cc Greg Kroah-Hartman <[email protected]>Cc Jiri Slaby <[email protected]>Cc Maxime Coquelin <[email protected]>Cc Alexandre Torgue <[email protected]>Cc Rob Herring <[email protected]>Cc Frank Rowand <[email protected]>Cc <[email protected]>Signed-off-by Stephen Boyd <[email protected]>
Quoted 3 lines
---
Please ack or pick for immediate merge so the last patch can be merged.
PATCH 6/10 usb: usb251xb: Use of_device_get_match_data()
In reply to Stephen BoydUse the more modern API here instead of using of_match_device() and avoid casting away const from the returned pointer by pushing the const type through to the users. This nicely avoids referencing the match table when it is undefined with configurations where CONFIG_OF=n and avoids const issues.
---
Please ack or pick for immediate merge so the last patch can be merged.
drivers/usb/misc/usb251xb.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-)
drivers/usb/misc/usb251xb.c +5 -7
@@ -392,7 +392,7 @@ static void usb251xb_get_ports_field(struct usb251xb *hub, }static int usb251xb_get_ofdata (struct usb251xb *hub, -struct usb251xb_data *data) +const struct usb251xb_data *data) {struct device *dev = hub->dev;struct device_node *np = dev->of_node;
@@ -623,7 +623,7 @@ static const struct of_device_id usb251xb_of_match[] = {MODULE_DEVICE_TABLE (of, usb251xb_of_match);#else /* CONFIG_OF */ static int usb251xb_get_ofdata (struct usb251xb *hub, -struct usb251xb_data *data) +const struct usb251xb_data *data) {return 0 ; }
@@ -633,13 +633,11 @@ static int usb251xb_probe(struct usb251xb *hub) {struct device *dev = hub->dev;struct device_node *np = dev->of_node; -const struct of_device_id *of_id =of_match_device (usb251xb_of_match, - dev); +const struct usb251xb_data *usb_data =of_device_get_match_data (dev);int err; -if (np && of_id) { - err =usb251xb_get_ofdata (hub, - (struct usb251xb_data *)of_id->data); +if (np && usb_data) { + err =usb251xb_get_ofdata (hub, usb_data);if (err) {dev_err (dev,"failed to get ofdata: %d\n" , err);return err;
Signature · 1 line
Sent by a computer through tubes
Re: [PATCH 06/10] usb: usb251xb: Use of_device_get_match_data()
Quoted 14 lines · Stephen Boyd
Use the more modern API here instead of using
of_match_device()and avoid casting away const from the returned pointer by pushing the const type through to the users. This nicely avoids referencing the match table when it is undefined with configurations whereCONFIG_OF=nand avoids const issues.Cc Arnd Bergmann <[email protected]>Cc Geert Uytterhoeven <[email protected]>Cc Richard Leitner <[email protected]>Cc Greg Kroah-Hartman <[email protected]>Cc Rob Herring <[email protected]>Cc Frank Rowand <[email protected]>Cc <[email protected]>Signed-off-by Stephen Boyd <[email protected]>
Quoted 3 lines
---
Please ack or pick for immediate merge so the last patch can be merged.
PATCH 7/10 ASoC: jz4740: Use of_device_get_match_data()
In reply to Stephen BoydThis probe function is only called if the device is backed by a DT node, so switch this call to of_device_get_match_data() to reduce code size and simplify a bit. This also avoids needing to reference a potentially undefined variable because of_device_get_match_data() doesn't need to know anything beyond the struct device to find the match table.
---
Please ack or pick for immediate merge so the last patch can be merged.
sound/soc/jz4740/jz4740-i2s.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-)
sound/soc/jz4740/jz4740-i2s.c +2 -3
@@ -503,9 +503,8 @@ static int jz4740_i2s_dev_probe(struct platform_device *pdev)if (!i2s)return -ENOMEM ; - match =of_match_device (jz4740_of_matches, &pdev->dev); -if (match) - i2s->version = (enum jz47xx_i2s_version )match->data; + i2s->version = + (enum jz47xx_i2s_version )of_device_get_match_data (&pdev->dev); mem =platform_get_resource (pdev,IORESOURCE_MEM ,0 ); i2s->base =devm_ioremap_resource (&pdev->dev, mem);
Signature · 1 line
Sent by a computer through tubes
Mark Brown
maintainerApplied "ASoC: jz4740: Use of_device_get_match_data()" to the asoc tree
The patch
ASoC: jz4740: Use of_device_get_match_data()
has been applied to the asoc tree at
https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-5.5
All being well this means that it will be integrated into the linux-next tree (usually sometime in the next 24 hours) and sent to Linus during the next merge window (or sooner if it is a bug fix), however if problems are discovered then the patch may be dropped or reverted.
You may get further e-mails resulting from automated or manual testing and review of the tree, please engage with people reporting problems and send followup patches addressing any issues that are reported if needed.
If any updates are required or you are submitting further changes they should be sent as incremental updates against current git, existing patches will not be replaced.
Please add any relevant lists and maintainers to the CCs when replying to this mail.
Thanks,
Mark
From 67ad656bdd703157154d0db5bf1b35a5a86073b9 Mon Sep 17 00:00:00 2001
From: Stephen Boyd <[email protected]>
Date: Fri, 4 Oct 2019 14:43:31 -0700
Subject: [PATCH] ASoC: jz4740: Use of_device_get_match_data()
This probe function is only called if the device is backed by a DT node, so switch this call to of_device_get_match_data() to reduce code size and simplify a bit. This also avoids needing to reference a potentially undefined variable because of_device_get_match_data() doesn't need to know anything beyond the struct device to find the match table.
--- sound/soc/jz4740/jz4740-i2s.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-)
sound/soc/jz4740/jz4740-i2s.c +2 -3
@@ -503,9 +503,8 @@ static int jz4740_i2s_dev_probe(struct platform_device *pdev)if (!i2s)return -ENOMEM ; - match =of_match_device (jz4740_of_matches, &pdev->dev); -if (match) - i2s->version = (enum jz47xx_i2s_version )match->data; + i2s->version = + (enum jz47xx_i2s_version )of_device_get_match_data (&pdev->dev); mem =platform_get_resource (pdev,IORESOURCE_MEM ,0 ); i2s->base =devm_ioremap_resource (&pdev->dev, mem);
Signature · 1 line
2.20.1
PATCH 8/10 spi: gpio: Look for a device node instead of match
In reply to Stephen BoydThis driver doesn't do anything with the match for the device node. The logic is the same as looking to see if a device node exists or not because this driver wouldn't probe unless there is a device node match when the device is created from DT. Just test for the presence of the device node to simplify and avoid referencing a potentially undefined match table when CONFIG_OF=n.
---
Please ack or pick for immediate merge so the last patch can be merged.
drivers/spi/spi-gpio.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-)
drivers/spi/spi-gpio.c +1 -4
@@ -362,9 +362,6 @@ static int spi_gpio_probe(struct platform_device *pdev)struct spi_gpio *spi_gpio;struct device *dev = &pdev->dev;struct spi_bitbang *bb; -const struct of_device_id *of_id; - - of_id =of_match_device (spi_gpio_dt_ids, &pdev->dev); master =spi_alloc_master (dev,sizeof (*spi_gpio));if (!master)
@@ -374,7 +371,7 @@ static int spi_gpio_probe(struct platform_device *pdev)if (status)return status; -if (of_id) +if (pdev->dev.of_node) status =spi_gpio_probe_dt (pdev, master);else status =spi_gpio_probe_pdata (pdev, master);
Signature · 1 line
Sent by a computer through tubes
Mark Brown
maintainerApplied "spi: gpio: Look for a device node instead of match" to the spi tree
The patch
spi: gpio: Look for a device node instead of match
has been applied to the spi tree at
https://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi.git for-5.5
All being well this means that it will be integrated into the linux-next tree (usually sometime in the next 24 hours) and sent to Linus during the next merge window (or sooner if it is a bug fix), however if problems are discovered then the patch may be dropped or reverted.
You may get further e-mails resulting from automated or manual testing and review of the tree, please engage with people reporting problems and send followup patches addressing any issues that are reported if needed.
If any updates are required or you are submitting further changes they should be sent as incremental updates against current git, existing patches will not be replaced.
Please add any relevant lists and maintainers to the CCs when replying to this mail.
Thanks,
Mark
Quoted 1 line
From
62217f8b084a05dd2d84781a8ca065098df21ec7Mon Sep 17 00:00:00 2001
From: Stephen Boyd <[email protected]>
Date: Fri, 4 Oct 2019 14:43:32 -0700
Subject: [PATCH] spi: gpio: Look for a device node instead of match
This driver doesn't do anything with the match for the device node. The logic is the same as looking to see if a device node exists or not because this driver wouldn't probe unless there is a device node match when the device is created from DT. Just test for the presence of the device node to simplify and avoid referencing a potentially undefined match table when CONFIG_OF=n.
--- drivers/spi/spi-gpio.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-)
drivers/spi/spi-gpio.c +1 -4
@@ -362,9 +362,6 @@ static int spi_gpio_probe(struct platform_device *pdev)struct spi_gpio *spi_gpio;struct device *dev = &pdev->dev;struct spi_bitbang *bb; -const struct of_device_id *of_id; - - of_id =of_match_device (spi_gpio_dt_ids, &pdev->dev); master =spi_alloc_master (dev,sizeof (*spi_gpio));if (!master)
@@ -374,7 +371,7 @@ static int spi_gpio_probe(struct platform_device *pdev)if (status)return status; -if (of_id) +if (pdev->dev.of_node) status =spi_gpio_probe_dt (pdev, master);else status =spi_gpio_probe_pdata (pdev, master);
Signature · 1 line
2.20.1
PATCH 9/10 hwmon: (lm70) Avoid undefined reference to match table
In reply to Stephen BoydWe're going to remove of_match_ptr() from the definition of of_match_device() when CONFIG_OF=n. This way we can always be certain that of_match_device() acts the same when CONFIG_OF is set and when it isn't. Add of_match_ptr() here so that this doesn't break when that change is made to the of_match_device() API.
---
Please ack or pick for immediate merge so the last patch can be merged.
drivers/hwmon/lm70.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/hwmon/lm70.c +1 -1
@@ -155,7 +155,7 @@ static int lm70_probe(struct spi_device *spi)struct lm70 *p_lm70;int chip; - match =of_match_device (lm70_of_ids, &spi->dev); + match =of_match_device (of_match_ptr (lm70_of_ids), &spi->dev);if (match) chip = (int )(uintptr_t )match->data;else
Signature · 1 line
Sent by a computer through tubes
Re: [PATCH 09/10] hwmon: (lm70) Avoid undefined reference to match table
Quoted 6 lines · Stephen Boyd
We're going to remove
of_match_ptr()from the definition ofof_match_device()whenCONFIG_OF=n. This way we can always be certain thatof_match_device()acts the same whenCONFIG_OFis set and when it isn't. Addof_match_ptr()here so that this doesn't break when that change is made to theof_match_device()API.
Quoted 8 lines
Cc Arnd Bergmann <[email protected]>Cc Geert Uytterhoeven <[email protected]>Cc Jean Delvare <[email protected]>Cc Guenter Roeck <[email protected]>Cc Rob Herring <[email protected]>Cc Frank Rowand <[email protected]>Cc <[email protected]>Signed-off-by Stephen Boyd <[email protected]>
Quoted 23 lines
---
Please ack or pick for immediate merge so the last patch can be merged.
drivers/hwmon/lm70.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)drivers/hwmon/lm70.c +1
-1@@ -155,7 +155,7 @@ static int lm70_probe(struct spi_device *spi)struct lm70 *p_lm70;int chip; - match =of_match_device (lm70_of_ids, &spi->dev); + match =of_match_device (of_match_ptr (lm70_of_ids), &spi->dev);if (match) chip = (int )(uintptr_t )match->data;else Signature · 1 line
Sent by a computer through tubes
PATCH 10/10 of/device: Don't NULLify match table in of_match_device() with CONFIG_OF=n
In reply to Stephen BoydThis effectively reverts 1db73ae39a97 ("of/device: Nullify match table in of_match_device() for CONFIG_OF=n") because that commit makes it more surprising to users of this API that the arguments may never be referenced by any code. This is because the pre-processor will replace the argument with NULL and then the match table will be left unreferenced by any code but the compiler optimizer doesn't know to drop it. This can lead to compilers warning that match tables are unused, when we really want to pass the match table to the API but have the compiler see that it's all inlined and not used and then drop the match table while silencing the warning. We're being too smart here and not giving the compiler the chance to do dead code elimination.
---
Please ack or pick for immediate merge so the last patch can be merged.
include/linux/of_device.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)
include/linux/of_device.h +1 -3
@@ -93,13 +93,11 @@ static inline int of_device_uevent_modalias(struct device *dev,static inline void of_device_node_put (struct device *dev) { } -static inline const struct of_device_id *__of_match_device ( +static inline const struct of_device_id *of_match_device (const struct of_device_id *matches,const struct device *dev) {return NULL ; } -#define of_match_device (matches, dev) \ - __of_match_device(of_match_ptr(matches), (dev))static inline struct device_node *of_cpu_device_node_get (int cpu) {
Signature · 1 line
Sent by a computer through tubes
Re: [PATCH 10/10] of/device: Don't NULLify match table in of_match_device() with CONFIG_OF=n
Quoted 34 lines · Stephen Boyd
This effectively reverts
1db73ae39a97("of/device: Nullify match table inof_match_device()forCONFIG_OF=n") because that commit makes it more surprising to users of this API that the arguments may never be referenced by any code. This is because the pre-processor will replace the argument with NULL and then the match table will be left unreferenced by any code but the compiler optimizer doesn't know to drop it. This can lead to compilers warning that match tables are unused, when we really want to pass the match table to the API but have the compiler see that it's all inlined and not used and then drop the match table while silencing the warning. We're being too smart here and not giving the compiler the chance to do dead code elimination.Cc Arnd Bergmann <[email protected]>Cc Geert Uytterhoeven <[email protected]>Cc Rob Herring <[email protected]>Cc Frank Rowand <[email protected]>Signed-off-by Stephen Boyd <[email protected]>---
Please ack or pick for immediate merge so the last patch can be merged.
include/linux/of_device.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)include/linux/of_device.h +0
-1@@ -93,13 +93,11 @@ static inline int of_device_uevent_modalias(struct device *dev,static inline void of_device_node_put (struct device *dev) { } -static inline const struct of_device_id *__of_match_device(
include/linux/of_device.h static inline int of_device_uevent_modalias(struct device *dev, · line 103
Quoted 10 lines
include/linux/of_device.h +1
-2+static inline const struct of_device_id *of_match_device (const struct of_device_id *matches,const struct device *dev) {return NULL ; } -#define of_match_device (matches, dev) \ - __of_match_device(of_match_ptr(matches), (dev))static inline struct device_node *of_cpu_device_node_get (int cpu) {
Re: [PATCH 10/10] of/device: Don't NULLify match table in of_match_device() with CONFIG_OF=n
Quoted 14 lines · Frank Rowand
Quoted 12 lines · Stephen Boyd
This effectively reverts
1db73ae39a97("of/device: Nullify match table inof_match_device()forCONFIG_OF=n") because that commit makes it more surprising to users of this API that the arguments may never be referenced by any code. This is because the pre-processor will replace the argument with NULL and then the match table will be left unreferenced by any code but the compiler optimizer doesn't know to drop it. This can lead to compilers warning that match tables are unused, when we really want to pass the match table to the API but have the compiler see that it's all inlined and not used and then drop the match table while silencing the warning. We're being too smart here and not giving the compiler the chance to do dead code elimination.
Quoted 8 lines
Quoted 8 lines
Cc Arnd Bergmann <[email protected]>Cc Geert Uytterhoeven <[email protected]>Cc Rob Herring <[email protected]>Cc Frank Rowand <[email protected]>Signed-off-by Stephen Boyd <[email protected]>---
Please ack or pick for immediate merge so the last patch can be merged.
As this one is the last patch, I guess you don't want it picked up by itself.
It seems everyone has acked rather than applying. Do you want me to take the series?
Rob
Quoted 27 lines
Quoted 14 lines
include/linux/of_device.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)include/linux/of_device.h +0
-1@@ -93,13 +93,11 @@ static inline int of_device_uevent_modalias(struct device *dev,static inline void of_device_node_put (struct device *dev) { } -static inline const struct of_device_id *__of_match_device(include/linux/of_device.h static inline int of_device_uevent_modalias(struct device *dev, · line 103
Quoted 10 lines
include/linux/of_device.h +1
-2+static inline const struct of_device_id *of_match_device (const struct of_device_id *matches,const struct device *dev) {return NULL ; } -#define of_match_device (matches, dev) \ - __of_match_device(of_match_ptr(matches), (dev))static inline struct device_node *of_cpu_device_node_get (int cpu) {Acked-by Frank Rowand <[email protected]>
Re: [PATCH 10/10] of/device: Don't NULLify match table in of_match_device() with CONFIG_OF=n
Quoting Rob Herring (2019-10-17 13:24:23)
Quoted 22 lines · Frank Rowand
Quoted 21 lines · Stephen Boyd
Quoted 19 lines
This effectively reverts
1db73ae39a97("of/device: Nullify match table inof_match_device()forCONFIG_OF=n") because that commit makes it more surprising to users of this API that the arguments may never be referenced by any code. This is because the pre-processor will replace the argument with NULL and then the match table will be left unreferenced by any code but the compiler optimizer doesn't know to drop it. This can lead to compilers warning that match tables are unused, when we really want to pass the match table to the API but have the compiler see that it's all inlined and not used and then drop the match table while silencing the warning. We're being too smart here and not giving the compiler the chance to do dead code elimination.Cc Arnd Bergmann <[email protected]>Cc Geert Uytterhoeven <[email protected]>Cc Rob Herring <[email protected]>Cc Frank Rowand <[email protected]>Signed-off-by Stephen Boyd <[email protected]>---
Quoted 7 lines
Quoted 1 line
Quoted 1 line
Please ack or pick for immediate merge so the last patch can be merged.
As this one is the last patch, I guess you don't want it picked up by itself.
It seems everyone has acked rather than applying. Do you want me to take the series?
It would be great if you could take the series.
Mark applied the ASoC and spi patches. I guess you can try to see if those merged into mainline and then base on top, or just apply the same patches on your tree and let the duplicates drop out in the merge path.