Some of include directives in include/linux/gpio/driver.h are
unneeded because the header does not need to know the content of
struct device, irq_chip, etc. Just declare they are structures.
On the other hand, <linux/irqhandler.h> and <linux/spinlock_types.h>
turned out to be necessary for irq_flow_handler_t and spinlock_t,
respectively.
Each driver should include what it needs without relying on what is
implicitly included from <linux/gpio/driver.h>. This will cut down
unnecessary header parsing.
Signed-off-by: Masahiro Yamada <[email protected]>
---
drivers/gpio/gpio-104-dio-48e.c | 1 +
drivers/gpio/gpio-104-idi-48.c | 1 +
drivers/gpio/gpio-104-idio-16.c | 1 +
drivers/gpio/gpio-altera-a10sr.c | 2 ++
drivers/gpio/gpio-altera.c | 3 +++
drivers/gpio/gpio-aspeed.c | 5 +++++
drivers/gpio/gpio-ath79.c | 2 ++
drivers/gpio/gpio-bcm-kona.c | 1 +
drivers/gpio/gpio-clps711x.c | 1 +
drivers/gpio/gpio-crystalcove.c | 2 ++
drivers/gpio/gpio-dln2.c | 1 +
drivers/gpio/gpio-dwapb.c | 1 +
drivers/gpio/gpio-etraxfs.c | 1 +
drivers/gpio/gpio-f7188x.c | 1 +
drivers/gpio/gpio-ftgpio010.c | 3 +++
drivers/gpio/gpio-ingenic.c | 1 +
drivers/gpio/gpio-intel-mid.c | 2 ++
drivers/gpio/gpio-lp873x.c | 1 +
drivers/gpio/gpio-lynxpoint.c | 2 ++
drivers/gpio/gpio-max732x.c | 1 +
drivers/gpio/gpio-max77620.c | 1 +
drivers/gpio/gpio-menz127.c | 1 +
drivers/gpio/gpio-merrifield.c | 4 ++++
drivers/gpio/gpio-omap.c | 3 +++
drivers/gpio/gpio-pca953x.c | 1 +
drivers/gpio/gpio-pci-idio-16.c | 2 ++
drivers/gpio/gpio-pisosr.c | 1 +
drivers/gpio/gpio-pl061.c | 1 +
drivers/gpio/gpio-rcar.c | 1 +
drivers/gpio/gpio-stmpe.c | 2 ++
drivers/gpio/gpio-tc3589x.c | 3 +++
drivers/gpio/gpio-tegra.c | 1 +
drivers/gpio/gpio-tps65218.c | 1 +
drivers/gpio/gpio-vf610.c | 3 +++
drivers/gpio/gpio-vx855.c | 1 +
drivers/gpio/gpio-wcove.c | 2 ++
drivers/gpio/gpio-wm831x.c | 1 +
drivers/gpio/gpio-wm8994.c | 1 +
drivers/gpio/gpio-ws16c48.c | 1 +
drivers/gpio/gpio-xgene-sb.c | 2 ++
drivers/gpio/gpio-xlp.c | 1 +
drivers/gpio/gpio-zx.c | 1 +
drivers/gpio/gpio-zynq.c | 3 +++
drivers/gpio/gpiolib-acpi.c | 1 +
drivers/gpio/gpiolib.c | 2 ++
include/linux/gpio/driver.h | 11 ++++++-----
46 files changed, 80 insertions(+), 5 deletions(-)
diff --git a/drivers/gpio/gpio-104-dio-48e.c b/drivers/gpio/gpio-104-dio-48e.c
index 598e209efa2d..bdc52be7902a 100644
--- a/drivers/gpio/gpio-104-dio-48e.c
+++ b/drivers/gpio/gpio-104-dio-48e.c
@@ -22,6 +22,7 @@
#include <linux/ioport.h>
#include <linux/interrupt.h>
#include <linux/irqdesc.h>
+#include <linux/irqdomain.h>
#include <linux/isa.h>
#include <linux/kernel.h>
#include <linux/module.h>
diff --git a/drivers/gpio/gpio-104-idi-48.c b/drivers/gpio/gpio-104-idi-48.c
index 51f046e29ff7..7bbb0e8573d1 100644
--- a/drivers/gpio/gpio-104-idi-48.c
+++ b/drivers/gpio/gpio-104-idi-48.c
@@ -22,6 +22,7 @@
#include <linux/ioport.h>
#include <linux/interrupt.h>
#include <linux/irqdesc.h>
+#include <linux/irqdomain.h>
#include <linux/isa.h>
#include <linux/kernel.h>
#include <linux/module.h>
diff --git a/drivers/gpio/gpio-104-idio-16.c b/drivers/gpio/gpio-104-idio-16.c
index ec2ce34ff473..7e3fc0bf3398 100644
--- a/drivers/gpio/gpio-104-idio-16.c
+++ b/drivers/gpio/gpio-104-idio-16.c
@@ -22,6 +22,7 @@
#include <linux/ioport.h>
#include <linux/interrupt.h>
#include <linux/irqdesc.h>
+#include <linux/irqdomain.h>
#include <linux/isa.h>
#include <linux/kernel.h>
#include <linux/module.h>
diff --git a/drivers/gpio/gpio-altera-a10sr.c b/drivers/gpio/gpio-altera-a10sr.c
index 16a8951b2bed..4cdca9332043 100644
--- a/drivers/gpio/gpio-altera-a10sr.c
+++ b/drivers/gpio/gpio-altera-a10sr.c
@@ -21,6 +21,8 @@
#include <linux/gpio/driver.h>
#include <linux/mfd/altera-a10sr.h>
#include <linux/module.h>
+#include <linux/of.h>
+#include <linux/platform_device.h>
/**
* struct altr_a10sr_gpio - Altera Max5 GPIO device private data structure
diff --git a/drivers/gpio/gpio-altera.c b/drivers/gpio/gpio-altera.c
index 17485dc20384..40b26274acaf 100644
--- a/drivers/gpio/gpio-altera.c
+++ b/drivers/gpio/gpio-altera.c
@@ -17,6 +17,9 @@
*/
#include <linux/io.h>
+#include <linux/irq.h>
+#include <linux/irqchip/chained_irq.h>
+#include <linux/irqdomain.h>
#include <linux/module.h>
#include <linux/of_gpio.h>
#include <linux/platform_device.h>
diff --git a/drivers/gpio/gpio-aspeed.c b/drivers/gpio/gpio-aspeed.c
index 4ca436e66bdb..a9d575e215da 100644
--- a/drivers/gpio/gpio-aspeed.c
+++ b/drivers/gpio/gpio-aspeed.c
@@ -15,9 +15,14 @@
#include <linux/hashtable.h>
#include <linux/init.h>
#include <linux/io.h>
+#include <linux/irq.h>
+#include <linux/irqchip/chained_irq.h>
+#include <linux/irqdomain.h>
#include <linux/kernel.h>
#include <linux/module.h>
+#include <linux/of.h>
#include <linux/pinctrl/consumer.h>
+#include <linux/pinctrl/pinconf-generic.h>
#include <linux/platform_device.h>
#include <linux/spinlock.h>
#include <linux/string.h>
diff --git a/drivers/gpio/gpio-ath79.c b/drivers/gpio/gpio-ath79.c
index f33d4a5fe671..1249ab0f8f4f 100644
--- a/drivers/gpio/gpio-ath79.c
+++ b/drivers/gpio/gpio-ath79.c
@@ -17,6 +17,8 @@
#include <linux/interrupt.h>
#include <linux/module.h>
#include <linux/irq.h>
+#include <linux/irqchip/chained_irq.h>
+#include <linux/irqdomain.h>
#define AR71XX_GPIO_REG_OE 0x00
#define AR71XX_GPIO_REG_IN 0x04
diff --git a/drivers/gpio/gpio-bcm-kona.c b/drivers/gpio/gpio-bcm-kona.c
index dfcf56ee3c61..937d646d184b 100644
--- a/drivers/gpio/gpio-bcm-kona.c
+++ b/drivers/gpio/gpio-bcm-kona.c
@@ -23,6 +23,7 @@
#include <linux/init.h>
#include <linux/irqdomain.h>
#include <linux/irqchip/chained_irq.h>
+#include <linux/pinctrl/pinconf-generic.h>
#define BCM_GPIO_PASSWD 0x00a5a501
#define GPIO_PER_BANK 32
diff --git a/drivers/gpio/gpio-clps711x.c b/drivers/gpio/gpio-clps711x.c
index 52fd63f02134..1f499b5e7f91 100644
--- a/drivers/gpio/gpio-clps711x.c
+++ b/drivers/gpio/gpio-clps711x.c
@@ -12,6 +12,7 @@
#include <linux/err.h>
#include <linux/module.h>
#include <linux/gpio/driver.h>
+#include <linux/of.h>
#include <linux/platform_device.h>
static int clps711x_gpio_probe(struct platform_device *pdev)
diff --git a/drivers/gpio/gpio-crystalcove.c b/drivers/gpio/gpio-crystalcove.c
index e60156ec0c18..0f66ae796d4a 100644
--- a/drivers/gpio/gpio-crystalcove.c
+++ b/drivers/gpio/gpio-crystalcove.c
@@ -16,6 +16,8 @@
*/
#include <linux/interrupt.h>
+#include <linux/irq.h>
+#include <linux/irqdomain.h>
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/gpio.h>
diff --git a/drivers/gpio/gpio-dln2.c b/drivers/gpio/gpio-dln2.c
index aecb847166f5..d524f3390196 100644
--- a/drivers/gpio/gpio-dln2.c
+++ b/drivers/gpio/gpio-dln2.c
@@ -17,6 +17,7 @@
#include <linux/irqchip/chained_irq.h>
#include <linux/gpio.h>
#include <linux/gpio/driver.h>
+#include <linux/pinctrl/pinconf-generic.h>
#include <linux/platform_device.h>
#include <linux/mfd/dln2.h>
diff --git a/drivers/gpio/gpio-dwapb.c b/drivers/gpio/gpio-dwapb.c
index c07ada9c7af6..350454b9359e 100644
--- a/drivers/gpio/gpio-dwapb.c
+++ b/drivers/gpio/gpio-dwapb.c
@@ -23,6 +23,7 @@
#include <linux/of_address.h>
#include <linux/of_device.h>
#include <linux/of_irq.h>
+#include <linux/pinctrl/pinconf-generic.h>
#include <linux/platform_device.h>
#include <linux/property.h>
#include <linux/spinlock.h>
diff --git a/drivers/gpio/gpio-etraxfs.c b/drivers/gpio/gpio-etraxfs.c
index 14c6aac26780..ef518aacbeac 100644
--- a/drivers/gpio/gpio-etraxfs.c
+++ b/drivers/gpio/gpio-etraxfs.c
@@ -4,6 +4,7 @@
#include <linux/of_gpio.h>
#include <linux/io.h>
#include <linux/interrupt.h>
+#include <linux/irq.h>
#include <linux/platform_device.h>
#define ETRAX_FS_rw_pa_dout 0
diff --git a/drivers/gpio/gpio-f7188x.c b/drivers/gpio/gpio-f7188x.c
index 13350c9d7f5e..08604a76d543 100644
--- a/drivers/gpio/gpio-f7188x.c
+++ b/drivers/gpio/gpio-f7188x.c
@@ -17,6 +17,7 @@
#include <linux/io.h>
#include <linux/gpio/driver.h>
#include <linux/bitops.h>
+#include <linux/pinctrl/pinconf-generic.h>
#define DRVNAME "gpio-f7188x"
diff --git a/drivers/gpio/gpio-ftgpio010.c b/drivers/gpio/gpio-ftgpio010.c
index e9386f8b67f5..699a3709e357 100644
--- a/drivers/gpio/gpio-ftgpio010.c
+++ b/drivers/gpio/gpio-ftgpio010.c
@@ -12,6 +12,9 @@
#include <linux/gpio/driver.h>
#include <linux/io.h>
#include <linux/interrupt.h>
+#include <linux/irq.h>
+#include <linux/irqchip/chained_irq.h>
+#include <linux/irqdomain.h>
#include <linux/platform_device.h>
#include <linux/of_gpio.h>
#include <linux/bitops.h>
diff --git a/drivers/gpio/gpio-ingenic.c b/drivers/gpio/gpio-ingenic.c
index 254780730b95..7ec8de5ee926 100644
--- a/drivers/gpio/gpio-ingenic.c
+++ b/drivers/gpio/gpio-ingenic.c
@@ -9,6 +9,7 @@
#include <linux/gpio/driver.h>
#include <linux/interrupt.h>
#include <linux/io.h>
+#include <linux/irqchip/chained_irq.h>
#include <linux/module.h>
#include <linux/of_address.h>
#include <linux/of_device.h>
diff --git a/drivers/gpio/gpio-intel-mid.c b/drivers/gpio/gpio-intel-mid.c
index b76ecee82c3f..af6b7d27ee41 100644
--- a/drivers/gpio/gpio-intel-mid.c
+++ b/drivers/gpio/gpio-intel-mid.c
@@ -23,6 +23,8 @@
#include <linux/init.h>
#include <linux/interrupt.h>
#include <linux/io.h>
+#include <linux/irq.h>
+#include <linux/irqdomain.h>
#include <linux/gpio/driver.h>
#include <linux/kernel.h>
#include <linux/module.h>
diff --git a/drivers/gpio/gpio-lp873x.c b/drivers/gpio/gpio-lp873x.c
index df0ad2cef0d2..1cd5e7e08ad9 100644
--- a/drivers/gpio/gpio-lp873x.c
+++ b/drivers/gpio/gpio-lp873x.c
@@ -16,6 +16,7 @@
#include <linux/gpio.h>
#include <linux/module.h>
+#include <linux/pinctrl/pinconf-generic.h>
#include <linux/platform_device.h>
#include <linux/regmap.h>
diff --git a/drivers/gpio/gpio-lynxpoint.c b/drivers/gpio/gpio-lynxpoint.c
index fbd393b46ce0..9adbbac2ba5b 100644
--- a/drivers/gpio/gpio-lynxpoint.c
+++ b/drivers/gpio/gpio-lynxpoint.c
@@ -25,6 +25,8 @@
#include <linux/types.h>
#include <linux/bitops.h>
#include <linux/interrupt.h>
+#include <linux/irq.h>
+#include <linux/irqdomain.h>
#include <linux/gpio.h>
#include <linux/slab.h>
#include <linux/acpi.h>
diff --git a/drivers/gpio/gpio-max732x.c b/drivers/gpio/gpio-max732x.c
index 7f4d26ce5f23..c277278af532 100644
--- a/drivers/gpio/gpio-max732x.c
+++ b/drivers/gpio/gpio-max732x.c
@@ -20,6 +20,7 @@
#include <linux/gpio/driver.h>
#include <linux/interrupt.h>
#include <linux/i2c.h>
+#include <linux/irq.h>
#include <linux/platform_data/max732x.h>
#include <linux/of.h>
diff --git a/drivers/gpio/gpio-max77620.c b/drivers/gpio/gpio-max77620.c
index 743459d9477d..35dd0f133028 100644
--- a/drivers/gpio/gpio-max77620.c
+++ b/drivers/gpio/gpio-max77620.c
@@ -12,6 +12,7 @@
#include <linux/interrupt.h>
#include <linux/mfd/max77620.h>
#include <linux/module.h>
+#include <linux/pinctrl/pinconf-generic.h>
#include <linux/platform_device.h>
#include <linux/regmap.h>
diff --git a/drivers/gpio/gpio-menz127.c b/drivers/gpio/gpio-menz127.c
index e1037582e34d..f265a841f787 100644
--- a/drivers/gpio/gpio-menz127.c
+++ b/drivers/gpio/gpio-menz127.c
@@ -15,6 +15,7 @@
#include <linux/mcb.h>
#include <linux/bitops.h>
#include <linux/gpio/driver.h>
+#include <linux/pinctrl/pinconf-generic.h>
#define MEN_Z127_CTRL 0x00
#define MEN_Z127_PSR 0x04
diff --git a/drivers/gpio/gpio-merrifield.c b/drivers/gpio/gpio-merrifield.c
index ec8560298805..2d84fcbe060f 100644
--- a/drivers/gpio/gpio-merrifield.c
+++ b/drivers/gpio/gpio-merrifield.c
@@ -14,8 +14,12 @@
#include <linux/init.h>
#include <linux/interrupt.h>
#include <linux/io.h>
+#include <linux/irq.h>
+#include <linux/irqchip/chained_irq.h>
+#include <linux/irqdomain.h>
#include <linux/module.h>
#include <linux/pci.h>
+#include <linux/pinctrl/pinconf-generic.h>
#include <linux/pinctrl/consumer.h>
#define GCCR 0x000 /* controller configuration */
diff --git a/drivers/gpio/gpio-omap.c b/drivers/gpio/gpio-omap.c
index f8c550de6c72..7ef062e14777 100644
--- a/drivers/gpio/gpio-omap.c
+++ b/drivers/gpio/gpio-omap.c
@@ -19,6 +19,8 @@
#include <linux/err.h>
#include <linux/clk.h>
#include <linux/io.h>
+#include <linux/irq.h>
+#include <linux/irqdomain.h>
#include <linux/device.h>
#include <linux/pm_runtime.h>
#include <linux/pm.h>
@@ -26,6 +28,7 @@
#include <linux/of_device.h>
#include <linux/gpio.h>
#include <linux/bitops.h>
+#include <linux/pinctrl/pinconf-generic.h>
#include <linux/platform_data/gpio-omap.h>
#define OFF_MODE 1
diff --git a/drivers/gpio/gpio-pca953x.c b/drivers/gpio/gpio-pca953x.c
index 4c9e21300a26..58a68ba8311f 100644
--- a/drivers/gpio/gpio-pca953x.c
+++ b/drivers/gpio/gpio-pca953x.c
@@ -17,6 +17,7 @@
#include <linux/i2c.h>
#include <linux/init.h>
#include <linux/interrupt.h>
+#include <linux/irq.h>
#include <linux/module.h>
#include <linux/of_platform.h>
#include <linux/platform_data/pca953x.h>
diff --git a/drivers/gpio/gpio-pci-idio-16.c b/drivers/gpio/gpio-pci-idio-16.c
index 7de4f6a2cb49..313da56389f4 100644
--- a/drivers/gpio/gpio-pci-idio-16.c
+++ b/drivers/gpio/gpio-pci-idio-16.c
@@ -16,7 +16,9 @@
#include <linux/errno.h>
#include <linux/gpio/driver.h>
#include <linux/interrupt.h>
+#include <linux/irq.h>
#include <linux/irqdesc.h>
+#include <linux/irqdomain.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/pci.h>
diff --git a/drivers/gpio/gpio-pisosr.c b/drivers/gpio/gpio-pisosr.c
index f5545049c187..4cca0c4dd85a 100644
--- a/drivers/gpio/gpio-pisosr.c
+++ b/drivers/gpio/gpio-pisosr.c
@@ -17,6 +17,7 @@
#include <linux/gpio/driver.h>
#include <linux/module.h>
#include <linux/mutex.h>
+#include <linux/of.h>
#include <linux/spi/spi.h>
#define DEFAULT_NGPIO 8
diff --git a/drivers/gpio/gpio-pl061.c b/drivers/gpio/gpio-pl061.c
index 3d3d6b6645a7..8d502a83babc 100644
--- a/drivers/gpio/gpio-pl061.c
+++ b/drivers/gpio/gpio-pl061.c
@@ -19,6 +19,7 @@
#include <linux/interrupt.h>
#include <linux/irq.h>
#include <linux/irqchip/chained_irq.h>
+#include <linux/irqdomain.h>
#include <linux/bitops.h>
#include <linux/gpio.h>
#include <linux/device.h>
diff --git a/drivers/gpio/gpio-rcar.c b/drivers/gpio/gpio-rcar.c
index 4a1536a050bc..9b2b00974163 100644
--- a/drivers/gpio/gpio-rcar.c
+++ b/drivers/gpio/gpio-rcar.c
@@ -22,6 +22,7 @@
#include <linux/io.h>
#include <linux/ioport.h>
#include <linux/irq.h>
+#include <linux/irqdomain.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/pinctrl/consumer.h>
diff --git a/drivers/gpio/gpio-stmpe.c b/drivers/gpio/gpio-stmpe.c
index 16cbc5702865..0e6fae84c759 100644
--- a/drivers/gpio/gpio-stmpe.c
+++ b/drivers/gpio/gpio-stmpe.c
@@ -10,6 +10,8 @@
#include <linux/slab.h>
#include <linux/gpio.h>
#include <linux/interrupt.h>
+#include <linux/irq.h>
+#include <linux/irqdomain.h>
#include <linux/of.h>
#include <linux/mfd/stmpe.h>
#include <linux/seq_file.h>
diff --git a/drivers/gpio/gpio-tc3589x.c b/drivers/gpio/gpio-tc3589x.c
index 433b45ef332e..d0ec9902d9c1 100644
--- a/drivers/gpio/gpio-tc3589x.c
+++ b/drivers/gpio/gpio-tc3589x.c
@@ -12,8 +12,11 @@
#include <linux/gpio/driver.h>
#include <linux/of.h>
#include <linux/interrupt.h>
+#include <linux/irq.h>
+#include <linux/irqdomain.h>
#include <linux/mfd/tc3589x.h>
#include <linux/bitops.h>
+#include <linux/pinctrl/pinconf-generic.h>
/*
* These registers are modified under the irq bus lock and cached to avoid
diff --git a/drivers/gpio/gpio-tegra.c b/drivers/gpio/gpio-tegra.c
index 88529d3c06c9..5e012377be1e 100644
--- a/drivers/gpio/gpio-tegra.c
+++ b/drivers/gpio/gpio-tegra.c
@@ -29,6 +29,7 @@
#include <linux/irqdomain.h>
#include <linux/irqchip/chained_irq.h>
#include <linux/pinctrl/consumer.h>
+#include <linux/pinctrl/pinconf-generic.h>
#include <linux/pm.h>
#define GPIO_BANK(x) ((x) >> 5)
diff --git a/drivers/gpio/gpio-tps65218.c b/drivers/gpio/gpio-tps65218.c
index a379bba57d31..97dca93b0529 100644
--- a/drivers/gpio/gpio-tps65218.c
+++ b/drivers/gpio/gpio-tps65218.c
@@ -15,6 +15,7 @@
#include <linux/module.h>
#include <linux/errno.h>
#include <linux/gpio/driver.h>
+#include <linux/pinctrl/pinconf-generic.h>
#include <linux/platform_device.h>
#include <linux/regmap.h>
#include <linux/mfd/tps65218.h>
diff --git a/drivers/gpio/gpio-vf610.c b/drivers/gpio/gpio-vf610.c
index 521fbe338589..844bf591268b 100644
--- a/drivers/gpio/gpio-vf610.c
+++ b/drivers/gpio/gpio-vf610.c
@@ -23,6 +23,9 @@
#include <linux/io.h>
#include <linux/ioport.h>
#include <linux/irq.h>
+#include <linux/irqchip/chained_irq.h>
+#include <linux/pinctrl/consumer.h>
+#include <linux/pinctrl/pinconf-generic.h>
#include <linux/platform_device.h>
#include <linux/of.h>
#include <linux/of_device.h>
diff --git a/drivers/gpio/gpio-vx855.c b/drivers/gpio/gpio-vx855.c
index 98a6f1fcc561..96331a43c2c1 100644
--- a/drivers/gpio/gpio-vx855.c
+++ b/drivers/gpio/gpio-vx855.c
@@ -28,6 +28,7 @@
#include <linux/gpio.h>
#include <linux/slab.h>
#include <linux/device.h>
+#include <linux/pinctrl/pinconf-generic.h>
#include <linux/platform_device.h>
#include <linux/pci.h>
#include <linux/io.h>
diff --git a/drivers/gpio/gpio-wcove.c b/drivers/gpio/gpio-wcove.c
index 37c103e50ebf..78161e22a859 100644
--- a/drivers/gpio/gpio-wcove.c
+++ b/drivers/gpio/gpio-wcove.c
@@ -18,8 +18,10 @@
#include <linux/bitops.h>
#include <linux/module.h>
#include <linux/interrupt.h>
+#include <linux/irqdomain.h>
#include <linux/gpio/driver.h>
#include <linux/mfd/intel_soc_pmic.h>
+#include <linux/pinctrl/pinconf-generic.h>
#include <linux/platform_device.h>
#include <linux/regmap.h>
#include <linux/seq_file.h>
diff --git a/drivers/gpio/gpio-wm831x.c b/drivers/gpio/gpio-wm831x.c
index 938bbe3f831c..b9f2f95a1309 100644
--- a/drivers/gpio/gpio-wm831x.c
+++ b/drivers/gpio/gpio-wm831x.c
@@ -17,6 +17,7 @@
#include <linux/module.h>
#include <linux/gpio.h>
#include <linux/mfd/core.h>
+#include <linux/pinctrl/pinconf-generic.h>
#include <linux/platform_device.h>
#include <linux/seq_file.h>
diff --git a/drivers/gpio/gpio-wm8994.c b/drivers/gpio/gpio-wm8994.c
index 1e35756ac55b..f2708fa3eefb 100644
--- a/drivers/gpio/gpio-wm8994.c
+++ b/drivers/gpio/gpio-wm8994.c
@@ -17,6 +17,7 @@
#include <linux/module.h>
#include <linux/gpio.h>
#include <linux/mfd/core.h>
+#include <linux/pinctrl/pinconf-generic.h>
#include <linux/platform_device.h>
#include <linux/seq_file.h>
#include <linux/regmap.h>
diff --git a/drivers/gpio/gpio-ws16c48.c b/drivers/gpio/gpio-ws16c48.c
index 5037974ac063..9eb42b983c75 100644
--- a/drivers/gpio/gpio-ws16c48.c
+++ b/drivers/gpio/gpio-ws16c48.c
@@ -19,6 +19,7 @@
#include <linux/ioport.h>
#include <linux/interrupt.h>
#include <linux/irqdesc.h>
+#include <linux/irqdomain.h>
#include <linux/isa.h>
#include <linux/kernel.h>
#include <linux/module.h>
diff --git a/drivers/gpio/gpio-xgene-sb.c b/drivers/gpio/gpio-xgene-sb.c
index 033258634b8c..f0929da6c385 100644
--- a/drivers/gpio/gpio-xgene-sb.c
+++ b/drivers/gpio/gpio-xgene-sb.c
@@ -22,6 +22,8 @@
#include <linux/module.h>
#include <linux/io.h>
+#include <linux/irq.h>
+#include <linux/irqdomain.h>
#include <linux/platform_device.h>
#include <linux/of_gpio.h>
#include <linux/gpio/driver.h>
diff --git a/drivers/gpio/gpio-xlp.c b/drivers/gpio/gpio-xlp.c
index d857e1d8e731..646856127aa6 100644
--- a/drivers/gpio/gpio-xlp.c
+++ b/drivers/gpio/gpio-xlp.c
@@ -17,6 +17,7 @@
#include <linux/of_device.h>
#include <linux/module.h>
#include <linux/irq.h>
+#include <linux/irqdomain.h>
#include <linux/interrupt.h>
#include <linux/irqchip/chained_irq.h>
#include <linux/acpi.h>
diff --git a/drivers/gpio/gpio-zx.c b/drivers/gpio/gpio-zx.c
index be3a87da8438..4259ae6ff44c 100644
--- a/drivers/gpio/gpio-zx.c
+++ b/drivers/gpio/gpio-zx.c
@@ -14,6 +14,7 @@
#include <linux/errno.h>
#include <linux/gpio/driver.h>
#include <linux/irqchip/chained_irq.h>
+#include <linux/irqdomain.h>
#include <linux/init.h>
#include <linux/of.h>
#include <linux/pinctrl/consumer.h>
diff --git a/drivers/gpio/gpio-zynq.c b/drivers/gpio/gpio-zynq.c
index df0851464006..e0a83e32caef 100644
--- a/drivers/gpio/gpio-zynq.c
+++ b/drivers/gpio/gpio-zynq.c
@@ -15,6 +15,9 @@
#include <linux/init.h>
#include <linux/interrupt.h>
#include <linux/io.h>
+#include <linux/irq.h>
+#include <linux/irqchip/chained_irq.h>
+#include <linux/irqdomain.h>
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/pm_runtime.h>
diff --git a/drivers/gpio/gpiolib-acpi.c b/drivers/gpio/gpiolib-acpi.c
index c9b42dd12dfa..2695a8cc3b71 100644
--- a/drivers/gpio/gpiolib-acpi.c
+++ b/drivers/gpio/gpiolib-acpi.c
@@ -18,6 +18,7 @@
#include <linux/export.h>
#include <linux/acpi.h>
#include <linux/interrupt.h>
+#include <linux/irq.h>
#include <linux/mutex.h>
#include <linux/pinctrl/pinctrl.h>
diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
index 9568708a550b..b81269c00381 100644
--- a/drivers/gpio/gpiolib.c
+++ b/drivers/gpio/gpiolib.c
@@ -3,6 +3,7 @@
#include <linux/module.h>
#include <linux/interrupt.h>
#include <linux/irq.h>
+#include <linux/irqdomain.h>
#include <linux/spinlock.h>
#include <linux/list.h>
#include <linux/device.h>
@@ -17,6 +18,7 @@
#include <linux/gpio/driver.h>
#include <linux/gpio/machine.h>
#include <linux/pinctrl/consumer.h>
+#include <linux/pinctrl/pinconf-generic.h>
#include <linux/cdev.h>
#include <linux/fs.h>
#include <linux/uaccess.h>
diff --git a/include/linux/gpio/driver.h b/include/linux/gpio/driver.h
index af20369ec8e7..07b595e24695 100644
--- a/include/linux/gpio/driver.h
+++ b/include/linux/gpio/driver.h
@@ -1,21 +1,22 @@
#ifndef __LINUX_GPIO_DRIVER_H
#define __LINUX_GPIO_DRIVER_H
-#include <linux/device.h>
#include <linux/types.h>
-#include <linux/irq.h>
-#include <linux/irqchip/chained_irq.h>
-#include <linux/irqdomain.h>
+#include <linux/irqhandler.h>
#include <linux/lockdep.h>
#include <linux/pinctrl/pinctrl.h>
-#include <linux/pinctrl/pinconf-generic.h>
+#include <linux/spinlock_types.h>
struct gpio_desc;
struct of_phandle_args;
+struct device;
struct device_node;
+struct irq_chip;
+struct irq_domain;
struct seq_file;
struct gpio_device;
struct module;
+struct pinctrl_dev;
#ifdef CONFIG_GPIOLIB
--
2.7.4
On Tue, Jul 04, 2017 at 12:53:34PM +0900, Masahiro Yamada wrote:
> Some of include directives in include/linux/gpio/driver.h are
> unneeded because the header does not need to know the content of
> struct device, irq_chip, etc. Just declare they are structures.
>
> On the other hand, <linux/irqhandler.h> and <linux/spinlock_types.h>
> turned out to be necessary for irq_flow_handler_t and spinlock_t,
> respectively.
>
> Each driver should include what it needs without relying on what is
> implicitly included from <linux/gpio/driver.h>. This will cut down
> unnecessary header parsing.
>
> Signed-off-by: Masahiro Yamada <[email protected]>
> ---
>
> drivers/gpio/gpio-wm831x.c | 1 +
> drivers/gpio/gpio-wm8994.c | 1 +
For the Wolfson Micro bits:
Acked-by: Charles Keepax <[email protected]>
Thanks,
Charles
On Tue, 2017-07-04 at 12:53 +0900, Masahiro Yamada wrote:
> Some of include directives in include/linux/gpio/driver.h are
> unneeded because the header does not need to know the content of
> struct device, irq_chip, etc. Just declare they are structures.
>
> On the other hand, <linux/irqhandler.h> and <linux/spinlock_types.h>
> turned out to be necessary for irq_flow_handler_t and spinlock_t,
> respectively.
>
> Each driver should include what it needs without relying on what is
> implicitly included from <linux/gpio/driver.h>. This will cut down
> unnecessary header parsing.
If Linus is okay with the following proposal I would rather go with it,
i.e. logical split the series to
1. Fix IRQ related headers inclusion
2. Fix pinconf-generic.h inclusion
3. Fix OF headers inclusion (btw, of_gpio.h is not enough there?)
In any case take my tag
Reviewed-by: Andy Shevchenko <[email protected]>
for the drivers I have been involved into development of:
drivers/gpio/gpio-dwapb.c | 1 +
drivers/gpio/gpio-intel-mid.c | 2 ++
drivers/gpio/gpio-lynxpoint.c | 2 ++
drivers/gpio/gpio-merrifield.c | 4 ++++
drivers/gpio/gpio-pca953x.c | 1 +
drivers/gpio/gpio-wcove.c | 2 ++
And
Acked-by: Andy Shevchenko <[email protected]>
for
drivers/gpio/gpiolib-acpi.c | 1 +
>
> Signed-off-by: Masahiro Yamada <[email protected]>
> ---
>
> drivers/gpio/gpio-104-dio-48e.c | 1 +
> drivers/gpio/gpio-104-idi-48.c | 1 +
> drivers/gpio/gpio-104-idio-16.c | 1 +
> drivers/gpio/gpio-altera-a10sr.c | 2 ++
> drivers/gpio/gpio-altera.c | 3 +++
> drivers/gpio/gpio-aspeed.c | 5 +++++
> drivers/gpio/gpio-ath79.c | 2 ++
> drivers/gpio/gpio-bcm-kona.c | 1 +
> drivers/gpio/gpio-clps711x.c | 1 +
> drivers/gpio/gpio-crystalcove.c | 2 ++
> drivers/gpio/gpio-dln2.c | 1 +
> drivers/gpio/gpio-dwapb.c | 1 +
> drivers/gpio/gpio-etraxfs.c | 1 +
> drivers/gpio/gpio-f7188x.c | 1 +
> drivers/gpio/gpio-ftgpio010.c | 3 +++
> drivers/gpio/gpio-ingenic.c | 1 +
> drivers/gpio/gpio-intel-mid.c | 2 ++
> drivers/gpio/gpio-lp873x.c | 1 +
> drivers/gpio/gpio-lynxpoint.c | 2 ++
> drivers/gpio/gpio-max732x.c | 1 +
> drivers/gpio/gpio-max77620.c | 1 +
> drivers/gpio/gpio-menz127.c | 1 +
> drivers/gpio/gpio-merrifield.c | 4 ++++
> drivers/gpio/gpio-omap.c | 3 +++
> drivers/gpio/gpio-pca953x.c | 1 +
> drivers/gpio/gpio-pci-idio-16.c | 2 ++
> drivers/gpio/gpio-pisosr.c | 1 +
> drivers/gpio/gpio-pl061.c | 1 +
> drivers/gpio/gpio-rcar.c | 1 +
> drivers/gpio/gpio-stmpe.c | 2 ++
> drivers/gpio/gpio-tc3589x.c | 3 +++
> drivers/gpio/gpio-tegra.c | 1 +
> drivers/gpio/gpio-tps65218.c | 1 +
> drivers/gpio/gpio-vf610.c | 3 +++
> drivers/gpio/gpio-vx855.c | 1 +
> drivers/gpio/gpio-wcove.c | 2 ++
> drivers/gpio/gpio-wm831x.c | 1 +
> drivers/gpio/gpio-wm8994.c | 1 +
> drivers/gpio/gpio-ws16c48.c | 1 +
> drivers/gpio/gpio-xgene-sb.c | 2 ++
> drivers/gpio/gpio-xlp.c | 1 +
> drivers/gpio/gpio-zx.c | 1 +
> drivers/gpio/gpio-zynq.c | 3 +++
> drivers/gpio/gpiolib-acpi.c | 1 +
> drivers/gpio/gpiolib.c | 2 ++
> include/linux/gpio/driver.h | 11 ++++++-----
> 46 files changed, 80 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/gpio/gpio-104-dio-48e.c b/drivers/gpio/gpio-104-
> dio-48e.c
> index 598e209efa2d..bdc52be7902a 100644
> --- a/drivers/gpio/gpio-104-dio-48e.c
> +++ b/drivers/gpio/gpio-104-dio-48e.c
> @@ -22,6 +22,7 @@
> #include <linux/ioport.h>
> #include <linux/interrupt.h>
> #include <linux/irqdesc.h>
> +#include <linux/irqdomain.h>
> #include <linux/isa.h>
> #include <linux/kernel.h>
> #include <linux/module.h>
> diff --git a/drivers/gpio/gpio-104-idi-48.c b/drivers/gpio/gpio-104-
> idi-48.c
> index 51f046e29ff7..7bbb0e8573d1 100644
> --- a/drivers/gpio/gpio-104-idi-48.c
> +++ b/drivers/gpio/gpio-104-idi-48.c
> @@ -22,6 +22,7 @@
> #include <linux/ioport.h>
> #include <linux/interrupt.h>
> #include <linux/irqdesc.h>
> +#include <linux/irqdomain.h>
> #include <linux/isa.h>
> #include <linux/kernel.h>
> #include <linux/module.h>
> diff --git a/drivers/gpio/gpio-104-idio-16.c b/drivers/gpio/gpio-104-
> idio-16.c
> index ec2ce34ff473..7e3fc0bf3398 100644
> --- a/drivers/gpio/gpio-104-idio-16.c
> +++ b/drivers/gpio/gpio-104-idio-16.c
> @@ -22,6 +22,7 @@
> #include <linux/ioport.h>
> #include <linux/interrupt.h>
> #include <linux/irqdesc.h>
> +#include <linux/irqdomain.h>
> #include <linux/isa.h>
> #include <linux/kernel.h>
> #include <linux/module.h>
> diff --git a/drivers/gpio/gpio-altera-a10sr.c b/drivers/gpio/gpio-
> altera-a10sr.c
> index 16a8951b2bed..4cdca9332043 100644
> --- a/drivers/gpio/gpio-altera-a10sr.c
> +++ b/drivers/gpio/gpio-altera-a10sr.c
> @@ -21,6 +21,8 @@
> #include <linux/gpio/driver.h>
> #include <linux/mfd/altera-a10sr.h>
> #include <linux/module.h>
> +#include <linux/of.h>
> +#include <linux/platform_device.h>
>
> /**
> * struct altr_a10sr_gpio - Altera Max5 GPIO device private data
> structure
> diff --git a/drivers/gpio/gpio-altera.c b/drivers/gpio/gpio-altera.c
> index 17485dc20384..40b26274acaf 100644
> --- a/drivers/gpio/gpio-altera.c
> +++ b/drivers/gpio/gpio-altera.c
> @@ -17,6 +17,9 @@
> */
>
> #include <linux/io.h>
> +#include <linux/irq.h>
> +#include <linux/irqchip/chained_irq.h>
> +#include <linux/irqdomain.h>
> #include <linux/module.h>
> #include <linux/of_gpio.h>
> #include <linux/platform_device.h>
> diff --git a/drivers/gpio/gpio-aspeed.c b/drivers/gpio/gpio-aspeed.c
> index 4ca436e66bdb..a9d575e215da 100644
> --- a/drivers/gpio/gpio-aspeed.c
> +++ b/drivers/gpio/gpio-aspeed.c
> @@ -15,9 +15,14 @@
> #include <linux/hashtable.h>
> #include <linux/init.h>
> #include <linux/io.h>
> +#include <linux/irq.h>
> +#include <linux/irqchip/chained_irq.h>
> +#include <linux/irqdomain.h>
> #include <linux/kernel.h>
> #include <linux/module.h>
> +#include <linux/of.h>
> #include <linux/pinctrl/consumer.h>
> +#include <linux/pinctrl/pinconf-generic.h>
> #include <linux/platform_device.h>
> #include <linux/spinlock.h>
> #include <linux/string.h>
> diff --git a/drivers/gpio/gpio-ath79.c b/drivers/gpio/gpio-ath79.c
> index f33d4a5fe671..1249ab0f8f4f 100644
> --- a/drivers/gpio/gpio-ath79.c
> +++ b/drivers/gpio/gpio-ath79.c
> @@ -17,6 +17,8 @@
> #include <linux/interrupt.h>
> #include <linux/module.h>
> #include <linux/irq.h>
> +#include <linux/irqchip/chained_irq.h>
> +#include <linux/irqdomain.h>
>
> #define AR71XX_GPIO_REG_OE 0x00
> #define AR71XX_GPIO_REG_IN 0x04
> diff --git a/drivers/gpio/gpio-bcm-kona.c b/drivers/gpio/gpio-bcm-
> kona.c
> index dfcf56ee3c61..937d646d184b 100644
> --- a/drivers/gpio/gpio-bcm-kona.c
> +++ b/drivers/gpio/gpio-bcm-kona.c
> @@ -23,6 +23,7 @@
> #include <linux/init.h>
> #include <linux/irqdomain.h>
> #include <linux/irqchip/chained_irq.h>
> +#include <linux/pinctrl/pinconf-generic.h>
>
> #define BCM_GPIO_PASSWD 0x00a5a501
> #define GPIO_PER_BANK 32
> diff --git a/drivers/gpio/gpio-clps711x.c b/drivers/gpio/gpio-
> clps711x.c
> index 52fd63f02134..1f499b5e7f91 100644
> --- a/drivers/gpio/gpio-clps711x.c
> +++ b/drivers/gpio/gpio-clps711x.c
> @@ -12,6 +12,7 @@
> #include <linux/err.h>
> #include <linux/module.h>
> #include <linux/gpio/driver.h>
> +#include <linux/of.h>
> #include <linux/platform_device.h>
>
> static int clps711x_gpio_probe(struct platform_device *pdev)
> diff --git a/drivers/gpio/gpio-crystalcove.c b/drivers/gpio/gpio-
> crystalcove.c
> index e60156ec0c18..0f66ae796d4a 100644
> --- a/drivers/gpio/gpio-crystalcove.c
> +++ b/drivers/gpio/gpio-crystalcove.c
> @@ -16,6 +16,8 @@
> */
>
> #include <linux/interrupt.h>
> +#include <linux/irq.h>
> +#include <linux/irqdomain.h>
> #include <linux/module.h>
> #include <linux/platform_device.h>
> #include <linux/gpio.h>
> diff --git a/drivers/gpio/gpio-dln2.c b/drivers/gpio/gpio-dln2.c
> index aecb847166f5..d524f3390196 100644
> --- a/drivers/gpio/gpio-dln2.c
> +++ b/drivers/gpio/gpio-dln2.c
> @@ -17,6 +17,7 @@
> #include <linux/irqchip/chained_irq.h>
> #include <linux/gpio.h>
> #include <linux/gpio/driver.h>
> +#include <linux/pinctrl/pinconf-generic.h>
> #include <linux/platform_device.h>
> #include <linux/mfd/dln2.h>
>
> diff --git a/drivers/gpio/gpio-dwapb.c b/drivers/gpio/gpio-dwapb.c
> index c07ada9c7af6..350454b9359e 100644
> --- a/drivers/gpio/gpio-dwapb.c
> +++ b/drivers/gpio/gpio-dwapb.c
> @@ -23,6 +23,7 @@
> #include <linux/of_address.h>
> #include <linux/of_device.h>
> #include <linux/of_irq.h>
> +#include <linux/pinctrl/pinconf-generic.h>
> #include <linux/platform_device.h>
> #include <linux/property.h>
> #include <linux/spinlock.h>
> diff --git a/drivers/gpio/gpio-etraxfs.c b/drivers/gpio/gpio-etraxfs.c
> index 14c6aac26780..ef518aacbeac 100644
> --- a/drivers/gpio/gpio-etraxfs.c
> +++ b/drivers/gpio/gpio-etraxfs.c
> @@ -4,6 +4,7 @@
> #include <linux/of_gpio.h>
> #include <linux/io.h>
> #include <linux/interrupt.h>
> +#include <linux/irq.h>
> #include <linux/platform_device.h>
>
> #define ETRAX_FS_rw_pa_dout 0
> diff --git a/drivers/gpio/gpio-f7188x.c b/drivers/gpio/gpio-f7188x.c
> index 13350c9d7f5e..08604a76d543 100644
> --- a/drivers/gpio/gpio-f7188x.c
> +++ b/drivers/gpio/gpio-f7188x.c
> @@ -17,6 +17,7 @@
> #include <linux/io.h>
> #include <linux/gpio/driver.h>
> #include <linux/bitops.h>
> +#include <linux/pinctrl/pinconf-generic.h>
>
> #define DRVNAME "gpio-f7188x"
>
> diff --git a/drivers/gpio/gpio-ftgpio010.c b/drivers/gpio/gpio-
> ftgpio010.c
> index e9386f8b67f5..699a3709e357 100644
> --- a/drivers/gpio/gpio-ftgpio010.c
> +++ b/drivers/gpio/gpio-ftgpio010.c
> @@ -12,6 +12,9 @@
> #include <linux/gpio/driver.h>
> #include <linux/io.h>
> #include <linux/interrupt.h>
> +#include <linux/irq.h>
> +#include <linux/irqchip/chained_irq.h>
> +#include <linux/irqdomain.h>
> #include <linux/platform_device.h>
> #include <linux/of_gpio.h>
> #include <linux/bitops.h>
> diff --git a/drivers/gpio/gpio-ingenic.c b/drivers/gpio/gpio-ingenic.c
> index 254780730b95..7ec8de5ee926 100644
> --- a/drivers/gpio/gpio-ingenic.c
> +++ b/drivers/gpio/gpio-ingenic.c
> @@ -9,6 +9,7 @@
> #include <linux/gpio/driver.h>
> #include <linux/interrupt.h>
> #include <linux/io.h>
> +#include <linux/irqchip/chained_irq.h>
> #include <linux/module.h>
> #include <linux/of_address.h>
> #include <linux/of_device.h>
> diff --git a/drivers/gpio/gpio-intel-mid.c b/drivers/gpio/gpio-intel-
> mid.c
> index b76ecee82c3f..af6b7d27ee41 100644
> --- a/drivers/gpio/gpio-intel-mid.c
> +++ b/drivers/gpio/gpio-intel-mid.c
> @@ -23,6 +23,8 @@
> #include <linux/init.h>
> #include <linux/interrupt.h>
> #include <linux/io.h>
> +#include <linux/irq.h>
> +#include <linux/irqdomain.h>
> #include <linux/gpio/driver.h>
> #include <linux/kernel.h>
> #include <linux/module.h>
> diff --git a/drivers/gpio/gpio-lp873x.c b/drivers/gpio/gpio-lp873x.c
> index df0ad2cef0d2..1cd5e7e08ad9 100644
> --- a/drivers/gpio/gpio-lp873x.c
> +++ b/drivers/gpio/gpio-lp873x.c
> @@ -16,6 +16,7 @@
>
> #include <linux/gpio.h>
> #include <linux/module.h>
> +#include <linux/pinctrl/pinconf-generic.h>
> #include <linux/platform_device.h>
> #include <linux/regmap.h>
>
> diff --git a/drivers/gpio/gpio-lynxpoint.c b/drivers/gpio/gpio-
> lynxpoint.c
> index fbd393b46ce0..9adbbac2ba5b 100644
> --- a/drivers/gpio/gpio-lynxpoint.c
> +++ b/drivers/gpio/gpio-lynxpoint.c
> @@ -25,6 +25,8 @@
> #include <linux/types.h>
> #include <linux/bitops.h>
> #include <linux/interrupt.h>
> +#include <linux/irq.h>
> +#include <linux/irqdomain.h>
> #include <linux/gpio.h>
> #include <linux/slab.h>
> #include <linux/acpi.h>
> diff --git a/drivers/gpio/gpio-max732x.c b/drivers/gpio/gpio-max732x.c
> index 7f4d26ce5f23..c277278af532 100644
> --- a/drivers/gpio/gpio-max732x.c
> +++ b/drivers/gpio/gpio-max732x.c
> @@ -20,6 +20,7 @@
> #include <linux/gpio/driver.h>
> #include <linux/interrupt.h>
> #include <linux/i2c.h>
> +#include <linux/irq.h>
> #include <linux/platform_data/max732x.h>
> #include <linux/of.h>
>
> diff --git a/drivers/gpio/gpio-max77620.c b/drivers/gpio/gpio-
> max77620.c
> index 743459d9477d..35dd0f133028 100644
> --- a/drivers/gpio/gpio-max77620.c
> +++ b/drivers/gpio/gpio-max77620.c
> @@ -12,6 +12,7 @@
> #include <linux/interrupt.h>
> #include <linux/mfd/max77620.h>
> #include <linux/module.h>
> +#include <linux/pinctrl/pinconf-generic.h>
> #include <linux/platform_device.h>
> #include <linux/regmap.h>
>
> diff --git a/drivers/gpio/gpio-menz127.c b/drivers/gpio/gpio-menz127.c
> index e1037582e34d..f265a841f787 100644
> --- a/drivers/gpio/gpio-menz127.c
> +++ b/drivers/gpio/gpio-menz127.c
> @@ -15,6 +15,7 @@
> #include <linux/mcb.h>
> #include <linux/bitops.h>
> #include <linux/gpio/driver.h>
> +#include <linux/pinctrl/pinconf-generic.h>
>
> #define MEN_Z127_CTRL 0x00
> #define MEN_Z127_PSR 0x04
> diff --git a/drivers/gpio/gpio-merrifield.c b/drivers/gpio/gpio-
> merrifield.c
> index ec8560298805..2d84fcbe060f 100644
> --- a/drivers/gpio/gpio-merrifield.c
> +++ b/drivers/gpio/gpio-merrifield.c
> @@ -14,8 +14,12 @@
> #include <linux/init.h>
> #include <linux/interrupt.h>
> #include <linux/io.h>
> +#include <linux/irq.h>
> +#include <linux/irqchip/chained_irq.h>
> +#include <linux/irqdomain.h>
> #include <linux/module.h>
> #include <linux/pci.h>
> +#include <linux/pinctrl/pinconf-generic.h>
> #include <linux/pinctrl/consumer.h>
>
> #define GCCR 0x000 /* controller configuration
> */
> diff --git a/drivers/gpio/gpio-omap.c b/drivers/gpio/gpio-omap.c
> index f8c550de6c72..7ef062e14777 100644
> --- a/drivers/gpio/gpio-omap.c
> +++ b/drivers/gpio/gpio-omap.c
> @@ -19,6 +19,8 @@
> #include <linux/err.h>
> #include <linux/clk.h>
> #include <linux/io.h>
> +#include <linux/irq.h>
> +#include <linux/irqdomain.h>
> #include <linux/device.h>
> #include <linux/pm_runtime.h>
> #include <linux/pm.h>
> @@ -26,6 +28,7 @@
> #include <linux/of_device.h>
> #include <linux/gpio.h>
> #include <linux/bitops.h>
> +#include <linux/pinctrl/pinconf-generic.h>
> #include <linux/platform_data/gpio-omap.h>
>
> #define OFF_MODE 1
> diff --git a/drivers/gpio/gpio-pca953x.c b/drivers/gpio/gpio-pca953x.c
> index 4c9e21300a26..58a68ba8311f 100644
> --- a/drivers/gpio/gpio-pca953x.c
> +++ b/drivers/gpio/gpio-pca953x.c
> @@ -17,6 +17,7 @@
> #include <linux/i2c.h>
> #include <linux/init.h>
> #include <linux/interrupt.h>
> +#include <linux/irq.h>
> #include <linux/module.h>
> #include <linux/of_platform.h>
> #include <linux/platform_data/pca953x.h>
> diff --git a/drivers/gpio/gpio-pci-idio-16.c b/drivers/gpio/gpio-pci-
> idio-16.c
> index 7de4f6a2cb49..313da56389f4 100644
> --- a/drivers/gpio/gpio-pci-idio-16.c
> +++ b/drivers/gpio/gpio-pci-idio-16.c
> @@ -16,7 +16,9 @@
> #include <linux/errno.h>
> #include <linux/gpio/driver.h>
> #include <linux/interrupt.h>
> +#include <linux/irq.h>
> #include <linux/irqdesc.h>
> +#include <linux/irqdomain.h>
> #include <linux/kernel.h>
> #include <linux/module.h>
> #include <linux/pci.h>
> diff --git a/drivers/gpio/gpio-pisosr.c b/drivers/gpio/gpio-pisosr.c
> index f5545049c187..4cca0c4dd85a 100644
> --- a/drivers/gpio/gpio-pisosr.c
> +++ b/drivers/gpio/gpio-pisosr.c
> @@ -17,6 +17,7 @@
> #include <linux/gpio/driver.h>
> #include <linux/module.h>
> #include <linux/mutex.h>
> +#include <linux/of.h>
> #include <linux/spi/spi.h>
>
> #define DEFAULT_NGPIO 8
> diff --git a/drivers/gpio/gpio-pl061.c b/drivers/gpio/gpio-pl061.c
> index 3d3d6b6645a7..8d502a83babc 100644
> --- a/drivers/gpio/gpio-pl061.c
> +++ b/drivers/gpio/gpio-pl061.c
> @@ -19,6 +19,7 @@
> #include <linux/interrupt.h>
> #include <linux/irq.h>
> #include <linux/irqchip/chained_irq.h>
> +#include <linux/irqdomain.h>
> #include <linux/bitops.h>
> #include <linux/gpio.h>
> #include <linux/device.h>
> diff --git a/drivers/gpio/gpio-rcar.c b/drivers/gpio/gpio-rcar.c
> index 4a1536a050bc..9b2b00974163 100644
> --- a/drivers/gpio/gpio-rcar.c
> +++ b/drivers/gpio/gpio-rcar.c
> @@ -22,6 +22,7 @@
> #include <linux/io.h>
> #include <linux/ioport.h>
> #include <linux/irq.h>
> +#include <linux/irqdomain.h>
> #include <linux/module.h>
> #include <linux/of.h>
> #include <linux/pinctrl/consumer.h>
> diff --git a/drivers/gpio/gpio-stmpe.c b/drivers/gpio/gpio-stmpe.c
> index 16cbc5702865..0e6fae84c759 100644
> --- a/drivers/gpio/gpio-stmpe.c
> +++ b/drivers/gpio/gpio-stmpe.c
> @@ -10,6 +10,8 @@
> #include <linux/slab.h>
> #include <linux/gpio.h>
> #include <linux/interrupt.h>
> +#include <linux/irq.h>
> +#include <linux/irqdomain.h>
> #include <linux/of.h>
> #include <linux/mfd/stmpe.h>
> #include <linux/seq_file.h>
> diff --git a/drivers/gpio/gpio-tc3589x.c b/drivers/gpio/gpio-tc3589x.c
> index 433b45ef332e..d0ec9902d9c1 100644
> --- a/drivers/gpio/gpio-tc3589x.c
> +++ b/drivers/gpio/gpio-tc3589x.c
> @@ -12,8 +12,11 @@
> #include <linux/gpio/driver.h>
> #include <linux/of.h>
> #include <linux/interrupt.h>
> +#include <linux/irq.h>
> +#include <linux/irqdomain.h>
> #include <linux/mfd/tc3589x.h>
> #include <linux/bitops.h>
> +#include <linux/pinctrl/pinconf-generic.h>
>
> /*
> * These registers are modified under the irq bus lock and cached to
> avoid
> diff --git a/drivers/gpio/gpio-tegra.c b/drivers/gpio/gpio-tegra.c
> index 88529d3c06c9..5e012377be1e 100644
> --- a/drivers/gpio/gpio-tegra.c
> +++ b/drivers/gpio/gpio-tegra.c
> @@ -29,6 +29,7 @@
> #include <linux/irqdomain.h>
> #include <linux/irqchip/chained_irq.h>
> #include <linux/pinctrl/consumer.h>
> +#include <linux/pinctrl/pinconf-generic.h>
> #include <linux/pm.h>
>
> #define GPIO_BANK(x) ((x) >> 5)
> diff --git a/drivers/gpio/gpio-tps65218.c b/drivers/gpio/gpio-
> tps65218.c
> index a379bba57d31..97dca93b0529 100644
> --- a/drivers/gpio/gpio-tps65218.c
> +++ b/drivers/gpio/gpio-tps65218.c
> @@ -15,6 +15,7 @@
> #include <linux/module.h>
> #include <linux/errno.h>
> #include <linux/gpio/driver.h>
> +#include <linux/pinctrl/pinconf-generic.h>
> #include <linux/platform_device.h>
> #include <linux/regmap.h>
> #include <linux/mfd/tps65218.h>
> diff --git a/drivers/gpio/gpio-vf610.c b/drivers/gpio/gpio-vf610.c
> index 521fbe338589..844bf591268b 100644
> --- a/drivers/gpio/gpio-vf610.c
> +++ b/drivers/gpio/gpio-vf610.c
> @@ -23,6 +23,9 @@
> #include <linux/io.h>
> #include <linux/ioport.h>
> #include <linux/irq.h>
> +#include <linux/irqchip/chained_irq.h>
> +#include <linux/pinctrl/consumer.h>
> +#include <linux/pinctrl/pinconf-generic.h>
> #include <linux/platform_device.h>
> #include <linux/of.h>
> #include <linux/of_device.h>
> diff --git a/drivers/gpio/gpio-vx855.c b/drivers/gpio/gpio-vx855.c
> index 98a6f1fcc561..96331a43c2c1 100644
> --- a/drivers/gpio/gpio-vx855.c
> +++ b/drivers/gpio/gpio-vx855.c
> @@ -28,6 +28,7 @@
> #include <linux/gpio.h>
> #include <linux/slab.h>
> #include <linux/device.h>
> +#include <linux/pinctrl/pinconf-generic.h>
> #include <linux/platform_device.h>
> #include <linux/pci.h>
> #include <linux/io.h>
> diff --git a/drivers/gpio/gpio-wcove.c b/drivers/gpio/gpio-wcove.c
> index 37c103e50ebf..78161e22a859 100644
> --- a/drivers/gpio/gpio-wcove.c
> +++ b/drivers/gpio/gpio-wcove.c
> @@ -18,8 +18,10 @@
> #include <linux/bitops.h>
> #include <linux/module.h>
> #include <linux/interrupt.h>
> +#include <linux/irqdomain.h>
> #include <linux/gpio/driver.h>
> #include <linux/mfd/intel_soc_pmic.h>
> +#include <linux/pinctrl/pinconf-generic.h>
> #include <linux/platform_device.h>
> #include <linux/regmap.h>
> #include <linux/seq_file.h>
> diff --git a/drivers/gpio/gpio-wm831x.c b/drivers/gpio/gpio-wm831x.c
> index 938bbe3f831c..b9f2f95a1309 100644
> --- a/drivers/gpio/gpio-wm831x.c
> +++ b/drivers/gpio/gpio-wm831x.c
> @@ -17,6 +17,7 @@
> #include <linux/module.h>
> #include <linux/gpio.h>
> #include <linux/mfd/core.h>
> +#include <linux/pinctrl/pinconf-generic.h>
> #include <linux/platform_device.h>
> #include <linux/seq_file.h>
>
> diff --git a/drivers/gpio/gpio-wm8994.c b/drivers/gpio/gpio-wm8994.c
> index 1e35756ac55b..f2708fa3eefb 100644
> --- a/drivers/gpio/gpio-wm8994.c
> +++ b/drivers/gpio/gpio-wm8994.c
> @@ -17,6 +17,7 @@
> #include <linux/module.h>
> #include <linux/gpio.h>
> #include <linux/mfd/core.h>
> +#include <linux/pinctrl/pinconf-generic.h>
> #include <linux/platform_device.h>
> #include <linux/seq_file.h>
> #include <linux/regmap.h>
> diff --git a/drivers/gpio/gpio-ws16c48.c b/drivers/gpio/gpio-ws16c48.c
> index 5037974ac063..9eb42b983c75 100644
> --- a/drivers/gpio/gpio-ws16c48.c
> +++ b/drivers/gpio/gpio-ws16c48.c
> @@ -19,6 +19,7 @@
> #include <linux/ioport.h>
> #include <linux/interrupt.h>
> #include <linux/irqdesc.h>
> +#include <linux/irqdomain.h>
> #include <linux/isa.h>
> #include <linux/kernel.h>
> #include <linux/module.h>
> diff --git a/drivers/gpio/gpio-xgene-sb.c b/drivers/gpio/gpio-xgene-
> sb.c
> index 033258634b8c..f0929da6c385 100644
> --- a/drivers/gpio/gpio-xgene-sb.c
> +++ b/drivers/gpio/gpio-xgene-sb.c
> @@ -22,6 +22,8 @@
>
> #include <linux/module.h>
> #include <linux/io.h>
> +#include <linux/irq.h>
> +#include <linux/irqdomain.h>
> #include <linux/platform_device.h>
> #include <linux/of_gpio.h>
> #include <linux/gpio/driver.h>
> diff --git a/drivers/gpio/gpio-xlp.c b/drivers/gpio/gpio-xlp.c
> index d857e1d8e731..646856127aa6 100644
> --- a/drivers/gpio/gpio-xlp.c
> +++ b/drivers/gpio/gpio-xlp.c
> @@ -17,6 +17,7 @@
> #include <linux/of_device.h>
> #include <linux/module.h>
> #include <linux/irq.h>
> +#include <linux/irqdomain.h>
> #include <linux/interrupt.h>
> #include <linux/irqchip/chained_irq.h>
> #include <linux/acpi.h>
> diff --git a/drivers/gpio/gpio-zx.c b/drivers/gpio/gpio-zx.c
> index be3a87da8438..4259ae6ff44c 100644
> --- a/drivers/gpio/gpio-zx.c
> +++ b/drivers/gpio/gpio-zx.c
> @@ -14,6 +14,7 @@
> #include <linux/errno.h>
> #include <linux/gpio/driver.h>
> #include <linux/irqchip/chained_irq.h>
> +#include <linux/irqdomain.h>
> #include <linux/init.h>
> #include <linux/of.h>
> #include <linux/pinctrl/consumer.h>
> diff --git a/drivers/gpio/gpio-zynq.c b/drivers/gpio/gpio-zynq.c
> index df0851464006..e0a83e32caef 100644
> --- a/drivers/gpio/gpio-zynq.c
> +++ b/drivers/gpio/gpio-zynq.c
> @@ -15,6 +15,9 @@
> #include <linux/init.h>
> #include <linux/interrupt.h>
> #include <linux/io.h>
> +#include <linux/irq.h>
> +#include <linux/irqchip/chained_irq.h>
> +#include <linux/irqdomain.h>
> #include <linux/module.h>
> #include <linux/platform_device.h>
> #include <linux/pm_runtime.h>
> diff --git a/drivers/gpio/gpiolib-acpi.c b/drivers/gpio/gpiolib-acpi.c
> index c9b42dd12dfa..2695a8cc3b71 100644
> --- a/drivers/gpio/gpiolib-acpi.c
> +++ b/drivers/gpio/gpiolib-acpi.c
> @@ -18,6 +18,7 @@
> #include <linux/export.h>
> #include <linux/acpi.h>
> #include <linux/interrupt.h>
> +#include <linux/irq.h>
> #include <linux/mutex.h>
> #include <linux/pinctrl/pinctrl.h>
>
> diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
> index 9568708a550b..b81269c00381 100644
> --- a/drivers/gpio/gpiolib.c
> +++ b/drivers/gpio/gpiolib.c
> @@ -3,6 +3,7 @@
> #include <linux/module.h>
> #include <linux/interrupt.h>
> #include <linux/irq.h>
> +#include <linux/irqdomain.h>
> #include <linux/spinlock.h>
> #include <linux/list.h>
> #include <linux/device.h>
> @@ -17,6 +18,7 @@
> #include <linux/gpio/driver.h>
> #include <linux/gpio/machine.h>
> #include <linux/pinctrl/consumer.h>
> +#include <linux/pinctrl/pinconf-generic.h>
> #include <linux/cdev.h>
> #include <linux/fs.h>
> #include <linux/uaccess.h>
> diff --git a/include/linux/gpio/driver.h b/include/linux/gpio/driver.h
> index af20369ec8e7..07b595e24695 100644
> --- a/include/linux/gpio/driver.h
> +++ b/include/linux/gpio/driver.h
> @@ -1,21 +1,22 @@
> #ifndef __LINUX_GPIO_DRIVER_H
> #define __LINUX_GPIO_DRIVER_H
>
> -#include <linux/device.h>
> #include <linux/types.h>
> -#include <linux/irq.h>
> -#include <linux/irqchip/chained_irq.h>
> -#include <linux/irqdomain.h>
> +#include <linux/irqhandler.h>
> #include <linux/lockdep.h>
> #include <linux/pinctrl/pinctrl.h>
> -#include <linux/pinctrl/pinconf-generic.h>
> +#include <linux/spinlock_types.h>
>
> struct gpio_desc;
> struct of_phandle_args;
> +struct device;
> struct device_node;
> +struct irq_chip;
> +struct irq_domain;
> struct seq_file;
> struct gpio_device;
> struct module;
> +struct pinctrl_dev;
>
> #ifdef CONFIG_GPIOLIB
>
--
Andy Shevchenko <[email protected]>
Intel Finland Oy
2017-07-04 19:06 GMT+09:00 Andy Shevchenko <[email protected]>:
> On Tue, 2017-07-04 at 12:53 +0900, Masahiro Yamada wrote:
>> Some of include directives in include/linux/gpio/driver.h are
>> unneeded because the header does not need to know the content of
>> struct device, irq_chip, etc. Just declare they are structures.
>>
>> On the other hand, <linux/irqhandler.h> and <linux/spinlock_types.h>
>> turned out to be necessary for irq_flow_handler_t and spinlock_t,
>> respectively.
>>
>> Each driver should include what it needs without relying on what is
>> implicitly included from <linux/gpio/driver.h>. This will cut down
>> unnecessary header parsing.
>
> If Linus is okay with the following proposal I would rather go with it,
> i.e. logical split the series to
>
> 1. Fix IRQ related headers inclusion
> 2. Fix pinconf-generic.h inclusion
> 3. Fix OF headers inclusion (btw, of_gpio.h is not enough there?)
Maybe
4. Fix (platform_)device inclusion
But, I do not see much sense to touch headers multiple times.
--
Best Regards
Masahiro Yamada
On Tue, Jul 04, 2017 at 12:53:34PM +0900, Masahiro Yamada wrote:
>Some of include directives in include/linux/gpio/driver.h are
>unneeded because the header does not need to know the content of
>struct device, irq_chip, etc. Just declare they are structures.
>
>On the other hand, <linux/irqhandler.h> and <linux/spinlock_types.h>
>turned out to be necessary for irq_flow_handler_t and spinlock_t,
>respectively.
>
>Each driver should include what it needs without relying on what is
>implicitly included from <linux/gpio/driver.h>. This will cut down
>unnecessary header parsing.
>
>Signed-off-by: Masahiro Yamada <[email protected]>
>---
>
> drivers/gpio/gpio-104-dio-48e.c | 1 +
> drivers/gpio/gpio-104-idi-48.c | 1 +
> drivers/gpio/gpio-104-idio-16.c | 1 +
> drivers/gpio/gpio-pci-idio-16.c | 2 ++
> drivers/gpio/gpio-ws16c48.c | 1 +
The changes to the above drivers look fine to me:
Acked-by: William Breathitt Gray <[email protected]>
However, this patch as a whole does too many things; I'd like to see it
split-up logically similar to how Andy Shevchenko suggested in his
reply. That should allow ACKs by respective driver maintainers to be
accounted more properly.
William Breathitt Gray
2017-07-04 21:58 GMT+09:00 William Breathitt Gray <[email protected]>:
> On Tue, Jul 04, 2017 at 12:53:34PM +0900, Masahiro Yamada wrote:
>>Some of include directives in include/linux/gpio/driver.h are
>>unneeded because the header does not need to know the content of
>>struct device, irq_chip, etc. Just declare they are structures.
>>
>>On the other hand, <linux/irqhandler.h> and <linux/spinlock_types.h>
>>turned out to be necessary for irq_flow_handler_t and spinlock_t,
>>respectively.
>>
>>Each driver should include what it needs without relying on what is
>>implicitly included from <linux/gpio/driver.h>. This will cut down
>>unnecessary header parsing.
>>
>>Signed-off-by: Masahiro Yamada <[email protected]>
>>---
>>
>> drivers/gpio/gpio-104-dio-48e.c | 1 +
>> drivers/gpio/gpio-104-idi-48.c | 1 +
>> drivers/gpio/gpio-104-idio-16.c | 1 +
>> drivers/gpio/gpio-pci-idio-16.c | 2 ++
>> drivers/gpio/gpio-ws16c48.c | 1 +
>
> The changes to the above drivers look fine to me:
>
> Acked-by: William Breathitt Gray <[email protected]>
>
> However, this patch as a whole does too many things; I'd like to see it
> split-up logically similar to how Andy Shevchenko suggested in his
> reply. That should allow ACKs by respective driver maintainers to be
> accounted more properly.
>
> William Breathitt Gray
I was missing a very important thing.
<linux/gpio/driver.h> is used in various subsystems.
I tested only under drivers/gpio/, but
drivers/pinctrl/ is one of the biggest source of compile errors.
(Probably I will get reports from kbuild test robot.)
So, I need to think about how to merge this (if the basic idea of this is OK).
Maybe,
[1] Send patches to subsystems (gpio, pinctrl, etc.) for v4.14
[2] Drop unneeded includes from linux/gpio/driver.h for v4.15
--
Best Regards
Masahiro Yamada
On Tue, Jul 4, 2017 at 6:43 PM, Masahiro Yamada
<[email protected]> wrote:
> 2017-07-04 21:58 GMT+09:00 William Breathitt Gray <[email protected]>:
> So, I need to think about how to merge this (if the basic idea of this is OK).
>
> Maybe,
>
> [1] Send patches to subsystems (gpio, pinctrl, etc.) for v4.14
> [2] Drop unneeded includes from linux/gpio/driver.h for v4.15
Perhaps, fixing users (drivers!) first. then frameworks / libraries,
at last header itself (in each case perhaps follow the split I
proposed earlier).
My wish is to get gpiolib-acpi patch completely separate from the bunch.
--
With Best Regards,
Andy Shevchenko
Hi Masahiro,
[auto build test ERROR on next-20170705]
[cannot apply to gpio/for-next tegra/for-next xlnx/master v4.12 v4.12-rc7 v4.12-rc6 v4.12]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
url: https://github.com/0day-ci/linux/commits/Masahiro-Yamada/gpio-drop-unnecessary-includes-from-include-linux-gpio-driver-h/20170706-123711
config: blackfin-allyesconfig (attached as .config)
compiler: bfin-uclinux-gcc (GCC) 6.2.0
reproduce:
wget https://raw.githubusercontent.com/01org/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
make.cross ARCH=blackfin
All error/warnings (new ones prefixed by >>):
drivers//i2c/muxes/i2c-mux-ltc4306.c: In function 'ltc4306_gpio_set_config':
>> drivers//i2c/muxes/i2c-mux-ltc4306.c:138:10: error: implicit declaration of function 'pinconf_to_config_param' [-Werror=implicit-function-declaration]
switch (pinconf_to_config_param(config)) {
^~~~~~~~~~~~~~~~~~~~~~~
>> drivers//i2c/muxes/i2c-mux-ltc4306.c:139:7: error: 'PIN_CONFIG_DRIVE_OPEN_DRAIN' undeclared (first use in this function)
case PIN_CONFIG_DRIVE_OPEN_DRAIN:
^~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers//i2c/muxes/i2c-mux-ltc4306.c:139:7: note: each undeclared identifier is reported only once for each function it appears in
>> drivers//i2c/muxes/i2c-mux-ltc4306.c:142:7: error: 'PIN_CONFIG_DRIVE_PUSH_PULL' undeclared (first use in this function)
case PIN_CONFIG_DRIVE_PUSH_PULL:
^~~~~~~~~~~~~~~~~~~~~~~~~~
cc1: some warnings being treated as errors
--
drivers//staging/greybus/gpio.c: In function 'gb_gpio_set_config':
>> drivers//staging/greybus/gpio.c:483:6: error: implicit declaration of function 'pinconf_to_config_param' [-Werror=implicit-function-declaration]
if (pinconf_to_config_param(config) != PIN_CONFIG_INPUT_DEBOUNCE)
^~~~~~~~~~~~~~~~~~~~~~~
>> drivers//staging/greybus/gpio.c:483:41: error: 'PIN_CONFIG_INPUT_DEBOUNCE' undeclared (first use in this function)
if (pinconf_to_config_param(config) != PIN_CONFIG_INPUT_DEBOUNCE)
^~~~~~~~~~~~~~~~~~~~~~~~~
drivers//staging/greybus/gpio.c:483:41: note: each undeclared identifier is reported only once for each function it appears in
>> drivers//staging/greybus/gpio.c:486:13: error: implicit declaration of function 'pinconf_to_config_argument' [-Werror=implicit-function-declaration]
debounce = pinconf_to_config_argument(config);
^~~~~~~~~~~~~~~~~~~~~~~~~~
cc1: some warnings being treated as errors
--
drivers/usb/serial/cp210x.c: In function 'cp210x_gpio_set_config':
>> drivers/usb/serial/cp210x.c:1340:7: error: variable 'param' has initializer but incomplete type
enum pin_config_param param = pinconf_to_config_param(config);
^~~~~~~~~~~~~~~~
>> drivers/usb/serial/cp210x.c:1340:32: error: implicit declaration of function 'pinconf_to_config_param' [-Werror=implicit-function-declaration]
enum pin_config_param param = pinconf_to_config_param(config);
^~~~~~~~~~~~~~~~~~~~~~~
>> drivers/usb/serial/cp210x.c:1340:24: error: storage size of 'param' isn't known
enum pin_config_param param = pinconf_to_config_param(config);
^~~~~
>> drivers/usb/serial/cp210x.c:1343:16: error: 'PIN_CONFIG_DRIVE_PUSH_PULL' undeclared (first use in this function)
if ((param == PIN_CONFIG_DRIVE_PUSH_PULL) &&
^~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/usb/serial/cp210x.c:1343:16: note: each undeclared identifier is reported only once for each function it appears in
>> drivers/usb/serial/cp210x.c:1347:16: error: 'PIN_CONFIG_DRIVE_OPEN_DRAIN' undeclared (first use in this function)
if ((param == PIN_CONFIG_DRIVE_OPEN_DRAIN) &&
^~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/usb/serial/cp210x.c:1340:24: warning: unused variable 'param' [-Wunused-variable]
enum pin_config_param param = pinconf_to_config_param(config);
^~~~~
cc1: some warnings being treated as errors
--
drivers/hid/hid-cp2112.c: In function 'cp2112_gpio_irq_mask':
>> drivers/hid/hid-cp2112.c:1065:25: error: implicit declaration of function 'irq_data_get_irq_chip_data' [-Werror=implicit-function-declaration]
struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
^~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/hid/hid-cp2112.c:1065:25: warning: initialization makes pointer from integer without a cast [-Wint-conversion]
>> drivers/hid/hid-cp2112.c:1068:15: error: dereferencing pointer to incomplete type 'struct irq_data'
__clear_bit(d->hwirq, &dev->irq_mask);
^~
drivers/hid/hid-cp2112.c: In function 'cp2112_gpio_irq_unmask':
drivers/hid/hid-cp2112.c:1073:25: warning: initialization makes pointer from integer without a cast [-Wint-conversion]
struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
^~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/hid/hid-cp2112.c: In function 'cp2112_gpio_poll_callback':
>> drivers/hid/hid-cp2112.c:1106:7: error: implicit declaration of function 'irq_get_irq_data' [-Werror=implicit-function-declaration]
d = irq_get_irq_data(irq);
^~~~~~~~~~~~~~~~
>> drivers/hid/hid-cp2112.c:1106:5: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
d = irq_get_irq_data(irq);
^
>> drivers/hid/hid-cp2112.c:1110:14: error: implicit declaration of function 'irqd_get_trigger_type' [-Werror=implicit-function-declaration]
irq_type = irqd_get_trigger_type(d);
^~~~~~~~~~~~~~~~~~~~~
>> drivers/hid/hid-cp2112.c:1115:19: error: 'IRQ_TYPE_LEVEL_HIGH' undeclared (first use in this function)
if (irq_type & IRQ_TYPE_LEVEL_HIGH)
^~~~~~~~~~~~~~~~~~~
drivers/hid/hid-cp2112.c:1115:19: note: each undeclared identifier is reported only once for each function it appears in
>> drivers/hid/hid-cp2112.c:1116:5: error: implicit declaration of function 'handle_nested_irq' [-Werror=implicit-function-declaration]
handle_nested_irq(irq);
^~~~~~~~~~~~~~~~~
>> drivers/hid/hid-cp2112.c:1118:20: error: 'IRQ_TYPE_EDGE_RISING' undeclared (first use in this function)
if ((irq_type & IRQ_TYPE_EDGE_RISING) &&
^~~~~~~~~~~~~~~~~~~~
>> drivers/hid/hid-cp2112.c:1124:19: error: 'IRQ_TYPE_LEVEL_LOW' undeclared (first use in this function)
if (irq_type & IRQ_TYPE_LEVEL_LOW)
^~~~~~~~~~~~~~~~~~
>> drivers/hid/hid-cp2112.c:1127:20: error: 'IRQ_TYPE_EDGE_FALLING' undeclared (first use in this function)
if ((irq_type & IRQ_TYPE_EDGE_FALLING) &&
^~~~~~~~~~~~~~~~~~~~~
drivers/hid/hid-cp2112.c: In function 'cp2112_gpio_irq_startup':
drivers/hid/hid-cp2112.c:1143:25: warning: initialization makes pointer from integer without a cast [-Wint-conversion]
struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
^~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/hid/hid-cp2112.c: In function 'cp2112_gpio_irq_shutdown':
drivers/hid/hid-cp2112.c:1161:25: warning: initialization makes pointer from integer without a cast [-Wint-conversion]
struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
^~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/hid/hid-cp2112.c: At top level:
>> drivers/hid/hid-cp2112.c:1172:15: error: variable 'cp2112_gpio_irqchip' has initializer but incomplete type
static struct irq_chip cp2112_gpio_irqchip = {
^~~~~~~~
>> drivers/hid/hid-cp2112.c:1173:2: error: unknown field 'name' specified in initializer
.name = "cp2112-gpio",
^
>> drivers/hid/hid-cp2112.c:1173:10: warning: excess elements in struct initializer
.name = "cp2112-gpio",
^~~~~~~~~~~~~
drivers/hid/hid-cp2112.c:1173:10: note: (near initialization for 'cp2112_gpio_irqchip')
>> drivers/hid/hid-cp2112.c:1174:2: error: unknown field 'irq_startup' specified in initializer
.irq_startup = cp2112_gpio_irq_startup,
^
drivers/hid/hid-cp2112.c:1174:17: warning: excess elements in struct initializer
.irq_startup = cp2112_gpio_irq_startup,
^~~~~~~~~~~~~~~~~~~~~~~
drivers/hid/hid-cp2112.c:1174:17: note: (near initialization for 'cp2112_gpio_irqchip')
>> drivers/hid/hid-cp2112.c:1175:2: error: unknown field 'irq_shutdown' specified in initializer
.irq_shutdown = cp2112_gpio_irq_shutdown,
^
drivers/hid/hid-cp2112.c:1175:18: warning: excess elements in struct initializer
.irq_shutdown = cp2112_gpio_irq_shutdown,
^~~~~~~~~~~~~~~~~~~~~~~~
drivers/hid/hid-cp2112.c:1175:18: note: (near initialization for 'cp2112_gpio_irqchip')
>> drivers/hid/hid-cp2112.c:1176:2: error: unknown field 'irq_ack' specified in initializer
.irq_ack = cp2112_gpio_irq_ack,
^
drivers/hid/hid-cp2112.c:1176:13: warning: excess elements in struct initializer
.irq_ack = cp2112_gpio_irq_ack,
^~~~~~~~~~~~~~~~~~~
drivers/hid/hid-cp2112.c:1176:13: note: (near initialization for 'cp2112_gpio_irqchip')
>> drivers/hid/hid-cp2112.c:1177:2: error: unknown field 'irq_mask' specified in initializer
.irq_mask = cp2112_gpio_irq_mask,
^
drivers/hid/hid-cp2112.c:1177:14: warning: excess elements in struct initializer
.irq_mask = cp2112_gpio_irq_mask,
^~~~~~~~~~~~~~~~~~~~
drivers/hid/hid-cp2112.c:1177:14: note: (near initialization for 'cp2112_gpio_irqchip')
>> drivers/hid/hid-cp2112.c:1178:2: error: unknown field 'irq_unmask' specified in initializer
.irq_unmask = cp2112_gpio_irq_unmask,
^
drivers/hid/hid-cp2112.c:1178:16: warning: excess elements in struct initializer
.irq_unmask = cp2112_gpio_irq_unmask,
^~~~~~~~~~~~~~~~~~~~~~
drivers/hid/hid-cp2112.c:1178:16: note: (near initialization for 'cp2112_gpio_irqchip')
>> drivers/hid/hid-cp2112.c:1179:2: error: unknown field 'irq_set_type' specified in initializer
.irq_set_type = cp2112_gpio_irq_type,
^
drivers/hid/hid-cp2112.c:1179:18: warning: excess elements in struct initializer
.irq_set_type = cp2112_gpio_irq_type,
^~~~~~~~~~~~~~~~~~~~
drivers/hid/hid-cp2112.c:1179:18: note: (near initialization for 'cp2112_gpio_irqchip')
drivers/hid/hid-cp2112.c: In function 'cp2112_probe':
vim +/pinconf_to_config_param +138 drivers//i2c/muxes/i2c-mux-ltc4306.c
dbed8a80 Michael Hennerich 2017-04-11 132 static int ltc4306_gpio_set_config(struct gpio_chip *chip,
dbed8a80 Michael Hennerich 2017-04-11 133 unsigned int offset, unsigned long config)
dbed8a80 Michael Hennerich 2017-04-11 134 {
dbed8a80 Michael Hennerich 2017-04-11 135 struct ltc4306 *data = gpiochip_get_data(chip);
dbed8a80 Michael Hennerich 2017-04-11 136 unsigned int val;
dbed8a80 Michael Hennerich 2017-04-11 137
dbed8a80 Michael Hennerich 2017-04-11 @138 switch (pinconf_to_config_param(config)) {
dbed8a80 Michael Hennerich 2017-04-11 @139 case PIN_CONFIG_DRIVE_OPEN_DRAIN:
dbed8a80 Michael Hennerich 2017-04-11 140 val = 0;
dbed8a80 Michael Hennerich 2017-04-11 141 break;
dbed8a80 Michael Hennerich 2017-04-11 @142 case PIN_CONFIG_DRIVE_PUSH_PULL:
dbed8a80 Michael Hennerich 2017-04-11 143 val = BIT(4 - offset);
dbed8a80 Michael Hennerich 2017-04-11 144 break;
dbed8a80 Michael Hennerich 2017-04-11 145 default:
:::::: The code at line 138 was first introduced by commit
:::::: dbed8a803bd3fb64339a6180adaff2cec46242ce i2c: mux: ltc4306: LTC4306 and LTC4305 I2C multiplexer/switch
:::::: TO: Michael Hennerich <[email protected]>
:::::: CC: Peter Rosin <[email protected]>
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
Hi Masahiro,
[auto build test ERROR on next-20170705]
[cannot apply to gpio/for-next tegra/for-next xlnx/master v4.12 v4.12-rc7 v4.12-rc6 v4.12]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
url: https://github.com/0day-ci/linux/commits/Masahiro-Yamada/gpio-drop-unnecessary-includes-from-include-linux-gpio-driver-h/20170706-123711
config: xtensa-allyesconfig (attached as .config)
compiler: xtensa-linux-gcc (GCC) 4.9.0
reproduce:
wget https://raw.githubusercontent.com/01org/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
make.cross ARCH=xtensa
All errors (new ones prefixed by >>):
drivers//gpio/gpio-exar.c: In function 'gpio_exar_probe':
>> drivers//gpio/gpio-exar.c:135:2: error: implicit declaration of function 'device_property_read_u32' [-Werror=implicit-function-declaration]
ret = device_property_read_u32(&pdev->dev, "linux,first-pin",
^
cc1: some warnings being treated as errors
--
drivers//gpio/gpio-lp87565.c: In function 'lp87565_gpio_set_config':
>> drivers//gpio/gpio-lp87565.c:116:2: error: implicit declaration of function 'pinconf_to_config_param' [-Werror=implicit-function-declaration]
switch (pinconf_to_config_param(config)) {
^
>> drivers//gpio/gpio-lp87565.c:117:7: error: 'PIN_CONFIG_DRIVE_OPEN_DRAIN' undeclared (first use in this function)
case PIN_CONFIG_DRIVE_OPEN_DRAIN:
^
drivers//gpio/gpio-lp87565.c:117:7: note: each undeclared identifier is reported only once for each function it appears in
>> drivers//gpio/gpio-lp87565.c:124:7: error: 'PIN_CONFIG_DRIVE_PUSH_PULL' undeclared (first use in this function)
case PIN_CONFIG_DRIVE_PUSH_PULL:
^
cc1: some warnings being treated as errors
vim +/device_property_read_u32 +135 drivers//gpio/gpio-exar.c
6596e59e Sudip Mukherjee 2017-01-19 119 static int gpio_exar_probe(struct platform_device *pdev)
6596e59e Sudip Mukherjee 2017-01-19 120 {
d3936d74 Jan Kiszka 2017-06-09 121 struct pci_dev *pcidev = to_pci_dev(pdev->dev.parent);
6596e59e Sudip Mukherjee 2017-01-19 122 struct exar_gpio_chip *exar_gpio;
380b1e2f Jan Kiszka 2017-05-22 123 u32 first_pin, ngpios;
6596e59e Sudip Mukherjee 2017-01-19 124 void __iomem *p;
6596e59e Sudip Mukherjee 2017-01-19 125 int index, ret;
6596e59e Sudip Mukherjee 2017-01-19 126
6596e59e Sudip Mukherjee 2017-01-19 127 /*
8847f5f9 Jan Kiszka 2017-05-02 128 * The UART driver must have mapped region 0 prior to registering this
8847f5f9 Jan Kiszka 2017-05-02 129 * device - use it.
6596e59e Sudip Mukherjee 2017-01-19 130 */
8847f5f9 Jan Kiszka 2017-05-02 131 p = pcim_iomap_table(pcidev)[0];
6596e59e Sudip Mukherjee 2017-01-19 132 if (!p)
6596e59e Sudip Mukherjee 2017-01-19 133 return -ENOMEM;
6596e59e Sudip Mukherjee 2017-01-19 134
380b1e2f Jan Kiszka 2017-05-22 @135 ret = device_property_read_u32(&pdev->dev, "linux,first-pin",
380b1e2f Jan Kiszka 2017-05-22 136 &first_pin);
380b1e2f Jan Kiszka 2017-05-22 137 if (ret)
380b1e2f Jan Kiszka 2017-05-22 138 return ret;
380b1e2f Jan Kiszka 2017-05-22 139
380b1e2f Jan Kiszka 2017-05-22 140 ret = device_property_read_u32(&pdev->dev, "ngpios", &ngpios);
380b1e2f Jan Kiszka 2017-05-22 141 if (ret)
380b1e2f Jan Kiszka 2017-05-22 142 return ret;
380b1e2f Jan Kiszka 2017-05-22 143
:::::: The code at line 135 was first introduced by commit
:::::: 380b1e2f3a2f32bfe9c0aa85a68629eb99b043c0 gpio-exar/8250-exar: Make set of exported GPIOs configurable
:::::: TO: Jan Kiszka <[email protected]>
:::::: CC: Jan Kiszka <[email protected]>
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
On Tue, Jul 4, 2017 at 12:06 PM, Andy Shevchenko
<[email protected]> wrote:
> On Tue, 2017-07-04 at 12:53 +0900, Masahiro Yamada wrote:
>> Some of include directives in include/linux/gpio/driver.h are
>> unneeded because the header does not need to know the content of
>> struct device, irq_chip, etc. Just declare they are structures.
>>
>> On the other hand, <linux/irqhandler.h> and <linux/spinlock_types.h>
>> turned out to be necessary for irq_flow_handler_t and spinlock_t,
>> respectively.
>>
>> Each driver should include what it needs without relying on what is
>> implicitly included from <linux/gpio/driver.h>. This will cut down
>> unnecessary header parsing.
>
> If Linus is okay with the following proposal I would rather go with it,
> i.e. logical split the series to
>
> 1. Fix IRQ related headers inclusion
> 2. Fix pinconf-generic.h inclusion
> 3. Fix OF headers inclusion (btw, of_gpio.h is not enough there?)
That works fine with me, but also one big patch actually, I do not
want to make it too much work to refactor obviously incorrect things.
As soon as we have rough consensus on this and the build robot
are happy I will apply it to GPIO and also pull it into the pinctrl
subsystem.
Yours,
Linus Walleij
On Mon, 2017-07-31 at 15:48 +0200, Linus Walleij wrote:
> On Tue, Jul 4, 2017 at 12:06 PM, Andy Shevchenko
> <[email protected]> wrote:
> > On Tue, 2017-07-04 at 12:53 +0900, Masahiro Yamada wrote:
> > > Some of include directives in include/linux/gpio/driver.h are
> > > unneeded because the header does not need to know the content of
> > > struct device, irq_chip, etc. Just declare they are structures.
> > >
> > > On the other hand, <linux/irqhandler.h> and
> > > <linux/spinlock_types.h>
> > > turned out to be necessary for irq_flow_handler_t and spinlock_t,
> > > respectively.
> > >
> > > Each driver should include what it needs without relying on what
> > > is
> > > implicitly included from <linux/gpio/driver.h>. This will cut
> > > down
> > > unnecessary header parsing.
> >
> > If Linus is okay with the following proposal I would rather go with
> > it,
> > i.e. logical split the series to
> >
> > 1. Fix IRQ related headers inclusion
> > 2. Fix pinconf-generic.h inclusion
> > 3. Fix OF headers inclusion (btw, of_gpio.h is not enough there?)
>
> That works fine with me, but also one big patch actually, I do not
> want to make it too much work to refactor obviously incorrect things.
>
> As soon as we have rough consensus on this and the build robot
> are happy I will apply it to GPIO and also pull it into the pinctrl
> subsystem.
For me priorities like this:
1) it works after the patch being applied (no regressions);
2) it makes code cleaner at the end;
3) it is presented in logically split parts.
So, as long as 1) and 2) are satisfied I can neglect on 3).
--
Andy Shevchenko <[email protected]>
Intel Finland Oy
On Mon, Jul 31, 2017 at 4:04 PM, Andy Shevchenko
<[email protected]> wrote:
> On Mon, 2017-07-31 at 15:48 +0200, Linus Walleij wrote:
>> On Tue, Jul 4, 2017 at 12:06 PM, Andy Shevchenko
>> <[email protected]> wrote:
>> > On Tue, 2017-07-04 at 12:53 +0900, Masahiro Yamada wrote:
>> > > Some of include directives in include/linux/gpio/driver.h are
>> > > unneeded because the header does not need to know the content of
>> > > struct device, irq_chip, etc. Just declare they are structures.
>> > >
>> > > On the other hand, <linux/irqhandler.h> and
>> > > <linux/spinlock_types.h>
>> > > turned out to be necessary for irq_flow_handler_t and spinlock_t,
>> > > respectively.
>> > >
>> > > Each driver should include what it needs without relying on what
>> > > is
>> > > implicitly included from <linux/gpio/driver.h>. This will cut
>> > > down
>> > > unnecessary header parsing.
>> >
>> > If Linus is okay with the following proposal I would rather go with
>> > it,
>> > i.e. logical split the series to
>> >
>> > 1. Fix IRQ related headers inclusion
>> > 2. Fix pinconf-generic.h inclusion
>> > 3. Fix OF headers inclusion (btw, of_gpio.h is not enough there?)
>>
>> That works fine with me, but also one big patch actually, I do not
>> want to make it too much work to refactor obviously incorrect things.
>>
>> As soon as we have rough consensus on this and the build robot
>> are happy I will apply it to GPIO and also pull it into the pinctrl
>> subsystem.
>
> For me priorities like this:
> 1) it works after the patch being applied (no regressions);
> 2) it makes code cleaner at the end;
> 3) it is presented in logically split parts.
>
> So, as long as 1) and 2) are satisfied I can neglect on 3).
We are in violent agreement :D
Yours,
Linus Walleij
On Tue, Aug 1, 2017 at 10:53 AM, Linus Walleij <[email protected]> wrote:
> On Mon, Jul 31, 2017 at 4:04 PM, Andy Shevchenko
> <[email protected]> wrote:
>> On Mon, 2017-07-31 at 15:48 +0200, Linus Walleij wrote:
>>> On Tue, Jul 4, 2017 at 12:06 PM, Andy Shevchenko
>>> <[email protected]> wrote:
>>> > If Linus is okay with the following proposal I would rather go with
>>> > it,
>>> > i.e. logical split the series to
>>> >
>>> > 1. Fix IRQ related headers inclusion
>>> > 2. Fix pinconf-generic.h inclusion
>>> > 3. Fix OF headers inclusion (btw, of_gpio.h is not enough there?)
>>>
>>> That works fine with me, but also one big patch actually, I do not
>>> want to make it too much work to refactor obviously incorrect things.
>>>
>>> As soon as we have rough consensus on this and the build robot
>>> are happy I will apply it to GPIO and also pull it into the pinctrl
>>> subsystem.
>>
>> For me priorities like this:
>> 1) it works after the patch being applied (no regressions);
>> 2) it makes code cleaner at the end;
>> 3) it is presented in logically split parts.
>>
>> So, as long as 1) and 2) are satisfied I can neglect on 3).
>
> We are in violent agreement :D
What I would like to say is that is up to you after all :-)
For me looks better to split.
--
With Best Regards,
Andy Shevchenko
On 07/03/2017 10:53 PM, Masahiro Yamada wrote:
> Some of include directives in include/linux/gpio/driver.h are
> unneeded because the header does not need to know the content of
> struct device, irq_chip, etc. Just declare they are structures.
>
> On the other hand, <linux/irqhandler.h> and <linux/spinlock_types.h>
> turned out to be necessary for irq_flow_handler_t and spinlock_t,
> respectively.
>
> Each driver should include what it needs without relying on what is
> implicitly included from <linux/gpio/driver.h>. This will cut down
> unnecessary header parsing.
>
> Signed-off-by: Masahiro Yamada <[email protected]>
> ---
>
> drivers/gpio/gpio-altera-a10sr.c | 2 ++
> drivers/gpio/gpio-altera.c | 3 +++
For the Altera GPIO files:
Acked-by: Thor Thayer <[email protected]>
Hi.
2017-08-01 20:04 GMT+09:00 Andy Shevchenko <[email protected]>:
> On Tue, Aug 1, 2017 at 10:53 AM, Linus Walleij <[email protected]> wrote:
>> On Mon, Jul 31, 2017 at 4:04 PM, Andy Shevchenko
>> <[email protected]> wrote:
>>> On Mon, 2017-07-31 at 15:48 +0200, Linus Walleij wrote:
>>>> On Tue, Jul 4, 2017 at 12:06 PM, Andy Shevchenko
>>>> <[email protected]> wrote:
>
>>>> > If Linus is okay with the following proposal I would rather go with
>>>> > it,
>>>> > i.e. logical split the series to
>>>> >
>>>> > 1. Fix IRQ related headers inclusion
>>>> > 2. Fix pinconf-generic.h inclusion
>>>> > 3. Fix OF headers inclusion (btw, of_gpio.h is not enough there?)
>>>>
>>>> That works fine with me, but also one big patch actually, I do not
>>>> want to make it too much work to refactor obviously incorrect things.
>>>>
>>>> As soon as we have rough consensus on this and the build robot
>>>> are happy I will apply it to GPIO and also pull it into the pinctrl
>>>> subsystem.
>>>
>>> For me priorities like this:
>>> 1) it works after the patch being applied (no regressions);
>>> 2) it makes code cleaner at the end;
>>> 3) it is presented in logically split parts.
>>>
>>> So, as long as 1) and 2) are satisfied I can neglect on 3).
>>
>> We are in violent agreement :D
>
> What I would like to say is that is up to you after all :-)
> For me looks better to split.
I will split this into sensible chunks.
As I mentioned before, linux/gpio/driver.h is included from several sub-systems,
so I need at least two development cycles to finish this task.
Maybe,
[1] Send patches to subsystems (gpio, pinctrl, etc.) for v4.14
(splitting into sensible chunks, like per-driver)
[2] Drop unneeded includes from linux/gpio/driver.h for v4.15
--
Best Regards
Masahiro Yamada