2023-07-14 18:02:45

by Rob Herring

[permalink] [raw]
Subject: [PATCH] pwm: Explicitly include correct DT includes

The DT of_device.h and of_platform.h date back to the separate
of_platform_bus_type before it as merged into the regular platform bus.
As part of that merge prepping Arm DT support 13 years ago, they
"temporarily" include each other. They also include platform_device.h
and of.h. As a result, there's a pretty much random mix of those include
files used throughout the tree. In order to detangle these headers and
replace the implicit includes with struct declarations, users need to
explicitly include the correct includes.

Signed-off-by: Rob Herring <[email protected]>
---
drivers/pwm/core.c | 1 +
drivers/pwm/pwm-apple.c | 1 +
drivers/pwm/pwm-atmel-hlcdc.c | 1 +
drivers/pwm/pwm-atmel-tcb.c | 3 +--
drivers/pwm/pwm-atmel.c | 1 -
drivers/pwm/pwm-berlin.c | 1 +
drivers/pwm/pwm-cros-ec.c | 1 +
drivers/pwm/pwm-fsl-ftm.c | 3 +--
drivers/pwm/pwm-hibvt.c | 2 +-
drivers/pwm/pwm-imx1.c | 1 -
drivers/pwm/pwm-jz4740.c | 2 +-
drivers/pwm/pwm-lp3943.c | 1 +
drivers/pwm/pwm-lpc18xx-sct.c | 1 +
drivers/pwm/pwm-mediatek.c | 1 -
drivers/pwm/pwm-meson.c | 1 -
drivers/pwm/pwm-microchip-core.c | 2 +-
drivers/pwm/pwm-mtk-disp.c | 1 -
drivers/pwm/pwm-pxa.c | 1 +
drivers/pwm/pwm-sifive.c | 1 +
drivers/pwm/pwm-sl28cpld.c | 1 +
drivers/pwm/pwm-sprd.c | 1 +
drivers/pwm/pwm-sun4i.c | 1 -
drivers/pwm/pwm-sunplus.c | 1 +
drivers/pwm/pwm-tegra.c | 1 -
drivers/pwm/pwm-tiecap.c | 2 +-
drivers/pwm/pwm-tiehrpwm.c | 2 +-
drivers/pwm/pwm-visconti.c | 2 +-
drivers/pwm/pwm-vt8500.c | 5 +----
28 files changed, 21 insertions(+), 21 deletions(-)

diff --git a/drivers/pwm/core.c b/drivers/pwm/core.c
index 3dacceaef4a9..d37617c60eae 100644
--- a/drivers/pwm/core.c
+++ b/drivers/pwm/core.c
@@ -8,6 +8,7 @@

#include <linux/acpi.h>
#include <linux/module.h>
+#include <linux/of.h>
#include <linux/pwm.h>
#include <linux/radix-tree.h>
#include <linux/list.h>
diff --git a/drivers/pwm/pwm-apple.c b/drivers/pwm/pwm-apple.c
index a38a62edd713..8e7d67fb5fbe 100644
--- a/drivers/pwm/pwm-apple.c
+++ b/drivers/pwm/pwm-apple.c
@@ -12,6 +12,7 @@
* - When APPLE_PWM_CTRL is set to 0, the output is constant low
*/

+#include <linux/mod_devicetable.h>
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/pwm.h>
diff --git a/drivers/pwm/pwm-atmel-hlcdc.c b/drivers/pwm/pwm-atmel-hlcdc.c
index 96a709a9d49a..3c42061e721a 100644
--- a/drivers/pwm/pwm-atmel-hlcdc.c
+++ b/drivers/pwm/pwm-atmel-hlcdc.c
@@ -10,6 +10,7 @@
#include <linux/delay.h>
#include <linux/mfd/atmel-hlcdc.h>
#include <linux/module.h>
+#include <linux/of.h>
#include <linux/platform_device.h>
#include <linux/pwm.h>
#include <linux/regmap.h>
diff --git a/drivers/pwm/pwm-atmel-tcb.c b/drivers/pwm/pwm-atmel-tcb.c
index 4a116dc44f6e..563162d660d8 100644
--- a/drivers/pwm/pwm-atmel-tcb.c
+++ b/drivers/pwm/pwm-atmel-tcb.c
@@ -19,8 +19,7 @@
#include <linux/mfd/syscon.h>
#include <linux/platform_device.h>
#include <linux/pwm.h>
-#include <linux/of_device.h>
-#include <linux/of_irq.h>
+#include <linux/of.h>
#include <linux/regmap.h>
#include <linux/slab.h>
#include <soc/at91/atmel_tcb.h>
diff --git a/drivers/pwm/pwm-atmel.c b/drivers/pwm/pwm-atmel.c
index 5f7d286871cf..4b243c0e8490 100644
--- a/drivers/pwm/pwm-atmel.c
+++ b/drivers/pwm/pwm-atmel.c
@@ -25,7 +25,6 @@
#include <linux/io.h>
#include <linux/module.h>
#include <linux/of.h>
-#include <linux/of_device.h>
#include <linux/platform_device.h>
#include <linux/pwm.h>
#include <linux/slab.h>
diff --git a/drivers/pwm/pwm-berlin.c b/drivers/pwm/pwm-berlin.c
index 0c5992a046b2..0971c666afd1 100644
--- a/drivers/pwm/pwm-berlin.c
+++ b/drivers/pwm/pwm-berlin.c
@@ -13,6 +13,7 @@
#include <linux/clk.h>
#include <linux/io.h>
#include <linux/kernel.h>
+#include <linux/mod_devicetable.h>
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/pwm.h>
diff --git a/drivers/pwm/pwm-cros-ec.c b/drivers/pwm/pwm-cros-ec.c
index 74e863aa1d8d..7f7e4e892930 100644
--- a/drivers/pwm/pwm-cros-ec.c
+++ b/drivers/pwm/pwm-cros-ec.c
@@ -6,6 +6,7 @@
*/

#include <linux/module.h>
+#include <linux/of.h>
#include <linux/platform_data/cros_ec_commands.h>
#include <linux/platform_data/cros_ec_proto.h>
#include <linux/platform_device.h>
diff --git a/drivers/pwm/pwm-fsl-ftm.c b/drivers/pwm/pwm-fsl-ftm.c
index 5caadbd6194e..b7c6045c5d08 100644
--- a/drivers/pwm/pwm-fsl-ftm.c
+++ b/drivers/pwm/pwm-fsl-ftm.c
@@ -11,8 +11,7 @@
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/mutex.h>
-#include <linux/of_address.h>
-#include <linux/of_device.h>
+#include <linux/of.h>
#include <linux/platform_device.h>
#include <linux/pm.h>
#include <linux/pwm.h>
diff --git a/drivers/pwm/pwm-hibvt.c b/drivers/pwm/pwm-hibvt.c
index b95df1a96127..f7ba6fe9a349 100644
--- a/drivers/pwm/pwm-hibvt.c
+++ b/drivers/pwm/pwm-hibvt.c
@@ -10,7 +10,7 @@
#include <linux/delay.h>
#include <linux/io.h>
#include <linux/module.h>
-#include <linux/of_device.h>
+#include <linux/of.h>
#include <linux/platform_device.h>
#include <linux/pwm.h>
#include <linux/reset.h>
diff --git a/drivers/pwm/pwm-imx1.c b/drivers/pwm/pwm-imx1.c
index 1f2eb1c8ff6c..0651983bed19 100644
--- a/drivers/pwm/pwm-imx1.c
+++ b/drivers/pwm/pwm-imx1.c
@@ -14,7 +14,6 @@
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/of.h>
-#include <linux/of_device.h>
#include <linux/platform_device.h>
#include <linux/pwm.h>
#include <linux/slab.h>
diff --git a/drivers/pwm/pwm-jz4740.c b/drivers/pwm/pwm-jz4740.c
index 3b7067f6cd0d..ef1293f2a897 100644
--- a/drivers/pwm/pwm-jz4740.c
+++ b/drivers/pwm/pwm-jz4740.c
@@ -15,7 +15,7 @@
#include <linux/mfd/ingenic-tcu.h>
#include <linux/mfd/syscon.h>
#include <linux/module.h>
-#include <linux/of_device.h>
+#include <linux/of.h>
#include <linux/platform_device.h>
#include <linux/pwm.h>
#include <linux/regmap.h>
diff --git a/drivers/pwm/pwm-lp3943.c b/drivers/pwm/pwm-lp3943.c
index 35675e4058c6..a931d3f7a3fc 100644
--- a/drivers/pwm/pwm-lp3943.c
+++ b/drivers/pwm/pwm-lp3943.c
@@ -10,6 +10,7 @@
#include <linux/err.h>
#include <linux/mfd/lp3943.h>
#include <linux/module.h>
+#include <linux/of.h>
#include <linux/platform_device.h>
#include <linux/pwm.h>
#include <linux/slab.h>
diff --git a/drivers/pwm/pwm-lpc18xx-sct.c b/drivers/pwm/pwm-lpc18xx-sct.c
index b9bf5b366f4b..9ff6311bd472 100644
--- a/drivers/pwm/pwm-lpc18xx-sct.c
+++ b/drivers/pwm/pwm-lpc18xx-sct.c
@@ -22,6 +22,7 @@
#include <linux/clk.h>
#include <linux/err.h>
#include <linux/io.h>
+#include <linux/mod_devicetable.h>
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/pwm.h>
diff --git a/drivers/pwm/pwm-mediatek.c b/drivers/pwm/pwm-mediatek.c
index 7a51d210a877..6adb0ed01906 100644
--- a/drivers/pwm/pwm-mediatek.c
+++ b/drivers/pwm/pwm-mediatek.c
@@ -14,7 +14,6 @@
#include <linux/module.h>
#include <linux/clk.h>
#include <linux/of.h>
-#include <linux/of_device.h>
#include <linux/platform_device.h>
#include <linux/pwm.h>
#include <linux/slab.h>
diff --git a/drivers/pwm/pwm-meson.c b/drivers/pwm/pwm-meson.c
index 22f54db3ae8e..25519cddc2a9 100644
--- a/drivers/pwm/pwm-meson.c
+++ b/drivers/pwm/pwm-meson.c
@@ -37,7 +37,6 @@
#include <linux/math64.h>
#include <linux/module.h>
#include <linux/of.h>
-#include <linux/of_device.h>
#include <linux/platform_device.h>
#include <linux/pwm.h>
#include <linux/slab.h>
diff --git a/drivers/pwm/pwm-microchip-core.c b/drivers/pwm/pwm-microchip-core.c
index 8750b57684a9..e7525c98105e 100644
--- a/drivers/pwm/pwm-microchip-core.c
+++ b/drivers/pwm/pwm-microchip-core.c
@@ -37,7 +37,7 @@
#include <linux/math.h>
#include <linux/module.h>
#include <linux/mutex.h>
-#include <linux/of_device.h>
+#include <linux/of.h>
#include <linux/platform_device.h>
#include <linux/pwm.h>

diff --git a/drivers/pwm/pwm-mtk-disp.c b/drivers/pwm/pwm-mtk-disp.c
index 2401b6733241..a83bd6e18b07 100644
--- a/drivers/pwm/pwm-mtk-disp.c
+++ b/drivers/pwm/pwm-mtk-disp.c
@@ -11,7 +11,6 @@
#include <linux/io.h>
#include <linux/module.h>
#include <linux/of.h>
-#include <linux/of_device.h>
#include <linux/platform_device.h>
#include <linux/pwm.h>
#include <linux/slab.h>
diff --git a/drivers/pwm/pwm-pxa.c b/drivers/pwm/pwm-pxa.c
index 762429d5647f..c8314053bcb0 100644
--- a/drivers/pwm/pwm-pxa.c
+++ b/drivers/pwm/pwm-pxa.c
@@ -15,6 +15,7 @@
* input clock (PWMCR_SD is set) and the output is driven to inactive.
*/

+#include <linux/mod_devicetable.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/platform_device.h>
diff --git a/drivers/pwm/pwm-sifive.c b/drivers/pwm/pwm-sifive.c
index ae49d67ab2b1..3743b2de4597 100644
--- a/drivers/pwm/pwm-sifive.c
+++ b/drivers/pwm/pwm-sifive.c
@@ -13,6 +13,7 @@
*/
#include <linux/clk.h>
#include <linux/io.h>
+#include <linux/mod_devicetable.h>
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/pwm.h>
diff --git a/drivers/pwm/pwm-sl28cpld.c b/drivers/pwm/pwm-sl28cpld.c
index e64900ad4ba1..d497e87f5e03 100644
--- a/drivers/pwm/pwm-sl28cpld.c
+++ b/drivers/pwm/pwm-sl28cpld.c
@@ -38,6 +38,7 @@
#include <linux/mod_devicetable.h>
#include <linux/module.h>
#include <linux/platform_device.h>
+#include <linux/property.h>
#include <linux/pwm.h>
#include <linux/regmap.h>

diff --git a/drivers/pwm/pwm-sprd.c b/drivers/pwm/pwm-sprd.c
index d43a6fa3f4e0..1499c8c1fe37 100644
--- a/drivers/pwm/pwm-sprd.c
+++ b/drivers/pwm/pwm-sprd.c
@@ -7,6 +7,7 @@
#include <linux/err.h>
#include <linux/io.h>
#include <linux/math64.h>
+#include <linux/mod_devicetable.h>
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/pwm.h>
diff --git a/drivers/pwm/pwm-sun4i.c b/drivers/pwm/pwm-sun4i.c
index a8790a8fc53e..c84fcf1a13dc 100644
--- a/drivers/pwm/pwm-sun4i.c
+++ b/drivers/pwm/pwm-sun4i.c
@@ -17,7 +17,6 @@
#include <linux/jiffies.h>
#include <linux/module.h>
#include <linux/of.h>
-#include <linux/of_device.h>
#include <linux/platform_device.h>
#include <linux/pwm.h>
#include <linux/reset.h>
diff --git a/drivers/pwm/pwm-sunplus.c b/drivers/pwm/pwm-sunplus.c
index d6ebe9f03b35..7705c7b86c3a 100644
--- a/drivers/pwm/pwm-sunplus.c
+++ b/drivers/pwm/pwm-sunplus.c
@@ -23,6 +23,7 @@
#include <linux/clk.h>
#include <linux/io.h>
#include <linux/kernel.h>
+#include <linux/mod_devicetable.h>
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/pwm.h>
diff --git a/drivers/pwm/pwm-tegra.c b/drivers/pwm/pwm-tegra.c
index 5810abf66e2a..a169a34e0778 100644
--- a/drivers/pwm/pwm-tegra.c
+++ b/drivers/pwm/pwm-tegra.c
@@ -41,7 +41,6 @@
#include <linux/io.h>
#include <linux/module.h>
#include <linux/of.h>
-#include <linux/of_device.h>
#include <linux/pm_opp.h>
#include <linux/pwm.h>
#include <linux/platform_device.h>
diff --git a/drivers/pwm/pwm-tiecap.c b/drivers/pwm/pwm-tiecap.c
index 109449956307..8c94b266c1b2 100644
--- a/drivers/pwm/pwm-tiecap.c
+++ b/drivers/pwm/pwm-tiecap.c
@@ -12,7 +12,7 @@
#include <linux/clk.h>
#include <linux/pm_runtime.h>
#include <linux/pwm.h>
-#include <linux/of_device.h>
+#include <linux/of.h>

/* ECAP registers and bits definitions */
#define CAP1 0x08
diff --git a/drivers/pwm/pwm-tiehrpwm.c b/drivers/pwm/pwm-tiehrpwm.c
index bb3959ace6b4..ecbfd7e954ec 100644
--- a/drivers/pwm/pwm-tiehrpwm.c
+++ b/drivers/pwm/pwm-tiehrpwm.c
@@ -12,7 +12,7 @@
#include <linux/err.h>
#include <linux/clk.h>
#include <linux/pm_runtime.h>
-#include <linux/of_device.h>
+#include <linux/of.h>

/* EHRPWM registers and bits definitions */

diff --git a/drivers/pwm/pwm-visconti.c b/drivers/pwm/pwm-visconti.c
index e3fb79b3e2a7..7f7591a2384c 100644
--- a/drivers/pwm/pwm-visconti.c
+++ b/drivers/pwm/pwm-visconti.c
@@ -21,7 +21,7 @@
#include <linux/err.h>
#include <linux/io.h>
#include <linux/module.h>
-#include <linux/of_device.h>
+#include <linux/of.h>
#include <linux/platform_device.h>
#include <linux/pwm.h>

diff --git a/drivers/pwm/pwm-vt8500.c b/drivers/pwm/pwm-vt8500.c
index d2c48fd98706..6d46db51daac 100644
--- a/drivers/pwm/pwm-vt8500.c
+++ b/drivers/pwm/pwm-vt8500.c
@@ -6,6 +6,7 @@
* Copyright (C) 2010 Alexey Charkov <[email protected]>
*/

+#include <linux/mod_devicetable.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/platform_device.h>
@@ -18,10 +19,6 @@

#include <asm/div64.h>

-#include <linux/of.h>
-#include <linux/of_device.h>
-#include <linux/of_address.h>
-
/*
* SoC architecture allocates register space for 4 PWMs but only
* 2 are currently implemented.
--
2.40.1



2023-07-17 04:08:17

by Tzung-Bi Shih

[permalink] [raw]
Subject: Re: [PATCH] pwm: Explicitly include correct DT includes

On Fri, Jul 14, 2023 at 11:48:50AM -0600, Rob Herring wrote:
> The DT of_device.h and of_platform.h date back to the separate
> of_platform_bus_type before it as merged into the regular platform bus.
> As part of that merge prepping Arm DT support 13 years ago, they
> "temporarily" include each other. They also include platform_device.h
> and of.h. As a result, there's a pretty much random mix of those include
> files used throughout the tree. In order to detangle these headers and
> replace the implicit includes with struct declarations, users need to
> explicitly include the correct includes.
>
> Signed-off-by: Rob Herring <[email protected]>

For pwm-cros-ec.c:
Reviewed-by: Tzung-Bi Shih <[email protected]>

2023-07-17 08:08:39

by Uwe Kleine-König

[permalink] [raw]
Subject: Re: [PATCH] pwm: Explicitly include correct DT includes

On Fri, Jul 14, 2023 at 11:48:50AM -0600, Rob Herring wrote:
> The DT of_device.h and of_platform.h date back to the separate
> of_platform_bus_type before it as merged into the regular platform bus.
> As part of that merge prepping Arm DT support 13 years ago, they
> "temporarily" include each other. They also include platform_device.h
> and of.h. As a result, there's a pretty much random mix of those include
> files used throughout the tree. In order to detangle these headers and
> replace the implicit includes with struct declarations, users need to
> explicitly include the correct includes.

so the eventual goal here is to prepare for:

- drop #include <linux/of_device.h> from include/linux/of_platform.h
- drop #include <linux/of.h> from include/linux/of_device.h
- drop #include <linux/of_platform.h> from include/linux/of_device.h
- drop #include <linux/platform_device.h> from include/linux/of_device.h
- drop #include <linux/platform_device.h> from include/linux/of_platform.h

> Signed-off-by: Rob Herring <[email protected]>
> ---
> drivers/pwm/core.c | 1 +
> drivers/pwm/pwm-apple.c | 1 +
> drivers/pwm/pwm-atmel-hlcdc.c | 1 +
> drivers/pwm/pwm-atmel-tcb.c | 3 +--
> drivers/pwm/pwm-atmel.c | 1 -
> drivers/pwm/pwm-berlin.c | 1 +
> drivers/pwm/pwm-cros-ec.c | 1 +
> drivers/pwm/pwm-fsl-ftm.c | 3 +--
> drivers/pwm/pwm-hibvt.c | 2 +-
> drivers/pwm/pwm-imx1.c | 1 -
> drivers/pwm/pwm-jz4740.c | 2 +-
> drivers/pwm/pwm-lp3943.c | 1 +
> drivers/pwm/pwm-lpc18xx-sct.c | 1 +
> drivers/pwm/pwm-mediatek.c | 1 -
> drivers/pwm/pwm-meson.c | 1 -
> drivers/pwm/pwm-microchip-core.c | 2 +-
> drivers/pwm/pwm-mtk-disp.c | 1 -
> drivers/pwm/pwm-pxa.c | 1 +
> drivers/pwm/pwm-sifive.c | 1 +
> drivers/pwm/pwm-sl28cpld.c | 1 +
> drivers/pwm/pwm-sprd.c | 1 +
> drivers/pwm/pwm-sun4i.c | 1 -
> drivers/pwm/pwm-sunplus.c | 1 +
> drivers/pwm/pwm-tegra.c | 1 -
> drivers/pwm/pwm-tiecap.c | 2 +-
> drivers/pwm/pwm-tiehrpwm.c | 2 +-
> drivers/pwm/pwm-visconti.c | 2 +-
> drivers/pwm/pwm-vt8500.c | 5 +----
> 28 files changed, 21 insertions(+), 21 deletions(-)
>
> diff --git a/drivers/pwm/core.c b/drivers/pwm/core.c
> index 3dacceaef4a9..d37617c60eae 100644
> --- a/drivers/pwm/core.c
> +++ b/drivers/pwm/core.c
> @@ -8,6 +8,7 @@
>
> #include <linux/acpi.h>
> #include <linux/module.h>
> +#include <linux/of.h>
> #include <linux/pwm.h>
> #include <linux/radix-tree.h>
> #include <linux/list.h>

This file includes neither of_device.h nor of_platform.h and up to now
gets of.h via <linux/pwm.h>.

What is your plan for <linux/pwm.h>'s include? I think it would only need

struct of_phandle_args;

to replace that. (But that would need another patch like this one, as
then e.g. drivers/pwm/pwm-sl28cpld.c fails to compile because
device_property_read_u32() is undeclared. It would need to #include
<linux/property.h> which now it gets transitively via <linux/of.h>.)

If <linux/pwm.h> is planed to continue #including <linux/of.h>, the
explicit include here isn't necessary (and probably elsewhere).

I don't care much either way, but maybe your quest would be a bit
simpler if you only touch files that include the two files you want to
modify?

*shrug*, this patch is still an improvement so:

Acked-by: Uwe Kleine-K?ng <[email protected]>

Another thing I wonder is: How did you identify the files that need
these includes. I guess you have a list of types for each header and
search for files that use any of the types but doesn't include the
respecitve header? I wonder if tracking this type -> header mapping in
machine readable form somewhere would be nice, to e.g. make checkpatch
warn if a file uses struct of_node but only gets it by chance?

Best regards
Uwe

--
Pengutronix e.K. | Uwe Kleine-K?nig |
Industrial Linux Solutions | https://www.pengutronix.de/ |


Attachments:
(No filename) (4.09 kB)
signature.asc (499.00 B)
Download all attachments

2023-07-17 16:30:04

by Rob Herring

[permalink] [raw]
Subject: Re: [PATCH] pwm: Explicitly include correct DT includes

On Mon, Jul 17, 2023 at 1:44 AM Uwe Kleine-König
<[email protected]> wrote:
>
> On Fri, Jul 14, 2023 at 11:48:50AM -0600, Rob Herring wrote:
> > The DT of_device.h and of_platform.h date back to the separate
> > of_platform_bus_type before it as merged into the regular platform bus.
> > As part of that merge prepping Arm DT support 13 years ago, they
> > "temporarily" include each other. They also include platform_device.h
> > and of.h. As a result, there's a pretty much random mix of those include
> > files used throughout the tree. In order to detangle these headers and
> > replace the implicit includes with struct declarations, users need to
> > explicitly include the correct includes.
>
> so the eventual goal here is to prepare for:
>
> - drop #include <linux/of_device.h> from include/linux/of_platform.h
> - drop #include <linux/of.h> from include/linux/of_device.h
> - drop #include <linux/of_platform.h> from include/linux/of_device.h
> - drop #include <linux/platform_device.h> from include/linux/of_device.h
> - drop #include <linux/platform_device.h> from include/linux/of_platform.h

Yes.

> > Signed-off-by: Rob Herring <[email protected]>
> > ---
> > drivers/pwm/core.c | 1 +
> > drivers/pwm/pwm-apple.c | 1 +
> > drivers/pwm/pwm-atmel-hlcdc.c | 1 +
> > drivers/pwm/pwm-atmel-tcb.c | 3 +--
> > drivers/pwm/pwm-atmel.c | 1 -
> > drivers/pwm/pwm-berlin.c | 1 +
> > drivers/pwm/pwm-cros-ec.c | 1 +
> > drivers/pwm/pwm-fsl-ftm.c | 3 +--
> > drivers/pwm/pwm-hibvt.c | 2 +-
> > drivers/pwm/pwm-imx1.c | 1 -
> > drivers/pwm/pwm-jz4740.c | 2 +-
> > drivers/pwm/pwm-lp3943.c | 1 +
> > drivers/pwm/pwm-lpc18xx-sct.c | 1 +
> > drivers/pwm/pwm-mediatek.c | 1 -
> > drivers/pwm/pwm-meson.c | 1 -
> > drivers/pwm/pwm-microchip-core.c | 2 +-
> > drivers/pwm/pwm-mtk-disp.c | 1 -
> > drivers/pwm/pwm-pxa.c | 1 +
> > drivers/pwm/pwm-sifive.c | 1 +
> > drivers/pwm/pwm-sl28cpld.c | 1 +
> > drivers/pwm/pwm-sprd.c | 1 +
> > drivers/pwm/pwm-sun4i.c | 1 -
> > drivers/pwm/pwm-sunplus.c | 1 +
> > drivers/pwm/pwm-tegra.c | 1 -
> > drivers/pwm/pwm-tiecap.c | 2 +-
> > drivers/pwm/pwm-tiehrpwm.c | 2 +-
> > drivers/pwm/pwm-visconti.c | 2 +-
> > drivers/pwm/pwm-vt8500.c | 5 +----
> > 28 files changed, 21 insertions(+), 21 deletions(-)
> >
> > diff --git a/drivers/pwm/core.c b/drivers/pwm/core.c
> > index 3dacceaef4a9..d37617c60eae 100644
> > --- a/drivers/pwm/core.c
> > +++ b/drivers/pwm/core.c
> > @@ -8,6 +8,7 @@
> >
> > #include <linux/acpi.h>
> > #include <linux/module.h>
> > +#include <linux/of.h>
> > #include <linux/pwm.h>
> > #include <linux/radix-tree.h>
> > #include <linux/list.h>
>
> This file includes neither of_device.h nor of_platform.h and up to now
> gets of.h via <linux/pwm.h>.

Indeed.

> What is your plan for <linux/pwm.h>'s include? I think it would only need
>
> struct of_phandle_args;

Here's what I'm testing with:

diff --git a/include/linux/pwm.h b/include/linux/pwm.h
index 04ae1d9073a7..5a59a7d53be8 100644
--- a/include/linux/pwm.h
+++ b/include/linux/pwm.h
@@ -4,8 +4,10 @@

#include <linux/err.h>
#include <linux/mutex.h>
-#include <linux/of.h>

+struct device;
+struct fwnode_handle;
+struct of_phandle_args;
struct pwm_chip;

/**

>
> to replace that. (But that would need another patch like this one, as
> then e.g. drivers/pwm/pwm-sl28cpld.c fails to compile because
> device_property_read_u32() is undeclared. It would need to #include
> <linux/property.h> which now it gets transitively via <linux/of.h>.)

property.h is added in this patch, so it should be okay?

> If <linux/pwm.h> is planed to continue #including <linux/of.h>, the
> explicit include here isn't necessary (and probably elsewhere).

I would like to drop including of.h, but probably not this cycle.
Either way, I thought kernel best practice was to not rely on implicit
includes.

BTW, linux/i2c.h is another source of lots of implicit of.h includes.
That one looks like we can't get rid of.

> I don't care much either way, but maybe your quest would be a bit
> simpler if you only touch files that include the two files you want to
> modify?

Yes, that's how it started. I kind of decided it wasn't worth trying
to split things up by every separate reason explicit includes were not
correct.

>
> *shrug*, this patch is still an improvement so:
>
> Acked-by: Uwe Kleine-Köng <[email protected]>
>
> Another thing I wonder is: How did you identify the files that need
> these includes. I guess you have a list of types for each header and
> search for files that use any of the types but doesn't include the
> respecitve header? I wonder if tracking this type -> header mapping in
> machine readable form somewhere would be nice, to e.g. make checkpatch
> warn if a file uses struct of_node but only gets it by chance?

It's been less automated than I'd like. It's been a lot of grepping
with a list of symbols the headers provide. For example, I get all the
files including of_device.h and then get the ones with no symbols from
of_device.h. And then do a manual review of what are the correct
headers for the file. And then run thru builds and fix all the issues.

Rob

2023-07-17 23:01:03

by Nobuhiro Iwamatsu

[permalink] [raw]
Subject: RE: [PATCH] pwm: Explicitly include correct DT includes

Hi,

> -----Original Message-----
> From: Rob Herring <[email protected]>
> Sent: Saturday, July 15, 2023 2:49 AM
> To: Thierry Reding <[email protected]>; Uwe Kleine-König
> <[email protected]>; Hector Martin <[email protected]>;
> Sven Peter <[email protected]>; Alyssa Rosenzweig
> <[email protected]>; Nicolas Ferre <[email protected]>;
> Alexandre Belloni <[email protected]>; Claudiu Beznea
> <[email protected]>; Benson Leung <[email protected]>;
> Guenter Roeck <[email protected]>; Shawn Guo
> <[email protected]>; Sascha Hauer <[email protected]>;
> Pengutronix Kernel Team <[email protected]>; Fabio Estevam
> <[email protected]>; NXP Linux Team <[email protected]>; Paul
> Cercueil <[email protected]>; Vladimir Zapolskiy <[email protected]>; Neil
> Armstrong <[email protected]>; Kevin Hilman
> <[email protected]>; Jerome Brunet <[email protected]>; Martin
> Blumenstingl <[email protected]>; Conor Dooley
> <[email protected]>; Daire McNamara
> <[email protected]>; Matthias Brugger
> <[email protected]>; AngeloGioacchino Del Regno
> <[email protected]>; Palmer Dabbelt
> <[email protected]>; Paul Walmsley <[email protected]>;
> Michael Walle <[email protected]>; Orson Zhai <[email protected]>;
> Baolin Wang <[email protected]>; Chunyan Zhang
> <[email protected]>; Chen-Yu Tsai <[email protected]>; Jernej Skrabec
> <[email protected]>; Samuel Holland <[email protected]>;
> Hammer Hsieh <[email protected]>; Jonathan Hunter
> <[email protected]>; iwamatsu nobuhiro(岩松 信洋 ○DITC□DIT
> ○OST) <[email protected]>
> Cc: [email protected]; [email protected];
> [email protected]; [email protected];
> [email protected]; [email protected];
> [email protected]; [email protected];
> [email protected]; [email protected];
> [email protected]; [email protected]
> Subject: [PATCH] pwm: Explicitly include correct DT includes
>
> The DT of_device.h and of_platform.h date back to the separate
> of_platform_bus_type before it as merged into the regular platform bus.
> As part of that merge prepping Arm DT support 13 years ago, they "temporarily"
> include each other. They also include platform_device.h and of.h. As a result,
> there's a pretty much random mix of those include files used throughout the
> tree. In order to detangle these headers and replace the implicit includes with
> struct declarations, users need to explicitly include the correct includes.
>
> Signed-off-by: Rob Herring <[email protected]>

For drivers/pwm/pwm-visconti.c:
Reviewed-by: Nobuhiro Iwamatsu <[email protected]>

Best regards,
Nobuhiro

2023-07-20 15:15:53

by Thierry Reding

[permalink] [raw]
Subject: Re: [PATCH] pwm: Explicitly include correct DT includes


On Fri, 14 Jul 2023 11:48:50 -0600, Rob Herring wrote:
> The DT of_device.h and of_platform.h date back to the separate
> of_platform_bus_type before it as merged into the regular platform bus.
> As part of that merge prepping Arm DT support 13 years ago, they
> "temporarily" include each other. They also include platform_device.h
> and of.h. As a result, there's a pretty much random mix of those include
> files used throughout the tree. In order to detangle these headers and
> replace the implicit includes with struct declarations, users need to
> explicitly include the correct includes.
>
> [...]

Applied, thanks!

[1/1] pwm: Explicitly include correct DT includes
commit: 8d171282110fcde89bb4289c4010a15aca5cec95

Best regards,
--
Thierry Reding <[email protected]>