summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorBartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>2026-07-27 09:56:49 +0200
committerBartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>2026-07-27 09:56:49 +0200
commit8bdba6f6cfc1eb68df883e6541ca443bdf300dd0 (patch)
treedff404e1b68384b067ef668bfe0e6aa0869ca70f /drivers
parent9672edf75bc7ba3fb5b7d529936548de38b5908e (diff)
parent57f64d52ab5e836a5f3f4ea6fd868941b2d7dcdf (diff)
Merge tag 'config-gpio-legacy-for-7.3' of https://git.kernel.org/pub/scm/linux/kernel/git/arnd/playground into gpio/for-next
gpio: legacy interface cleanups for 7.3 These are the remaining patches for legacy gpio interface cleanup, ensuring that files referencing them are sure to have CONFIG_GPIOLIB_LEGACY set, and use linux/gpio/legacy.h instead of the old linux/gpio.h header. There are a few more patches already merged in other branches for 7.3, including soc, led, net and media. Once everything is in, we can apply the final patches to turn off CONFIG_GPIOLIB_LEGACY by default and remove the obsolete header file. This branch is based on the immutable ib-mfd-legacy-gpio-7.3 branch from mfd.git to avoid a conflict in the rohm drivers.
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gpib/gpio/gpib_bitbang.c1
-rw-r--r--drivers/input/keyboard/gpio_keys.c7
-rw-r--r--drivers/input/keyboard/gpio_keys_polled.c4
-rw-r--r--drivers/input/keyboard/matrix_keypad.c1
-rw-r--r--drivers/input/misc/Kconfig3
-rw-r--r--drivers/input/misc/soc_button_array.c1
-rw-r--r--drivers/mfd/aat2870-core.c2
-rw-r--r--drivers/mfd/arizona-irq.c2
-rw-r--r--drivers/mfd/lp3943.c2
-rw-r--r--drivers/mfd/rohm-bd71828.c125
-rw-r--r--drivers/mfd/rohm-bd718x7.c123
-rw-r--r--drivers/mfd/sm501.c2
-rw-r--r--drivers/mfd/tps6105x.c2
-rw-r--r--drivers/mfd/tps65911-comparator.c2
-rw-r--r--drivers/mfd/wm8994-irq.c2
-rw-r--r--drivers/pcmcia/bcm63xx_pcmcia.c2
-rw-r--r--drivers/pcmcia/db1xxx_ss.c2
-rw-r--r--drivers/pcmcia/sa1100_h3600.c2
-rw-r--r--drivers/pcmcia/soc_common.c2
-rw-r--r--drivers/pcmcia/xxs1500_ss.c2
-rw-r--r--drivers/phy/broadcom/phy-bcm-ns2-usbdrd.c1
-rw-r--r--drivers/phy/rockchip/phy-rockchip-usbdp.c2
-rw-r--r--drivers/phy/ti/phy-j721e-wiz.c1
23 files changed, 206 insertions, 87 deletions
diff --git a/drivers/gpib/gpio/gpib_bitbang.c b/drivers/gpib/gpio/gpib_bitbang.c
index 0e227980b493..34d14b94a0b8 100644
--- a/drivers/gpib/gpio/gpib_bitbang.c
+++ b/drivers/gpib/gpio/gpib_bitbang.c
@@ -64,7 +64,6 @@
#include <linux/gpio/consumer.h>
#include <linux/gpio/driver.h>
#include <linux/gpio/machine.h>
-#include <linux/gpio.h>
#include <linux/irq.h>
static int sn7516x_used = 1, sn7516x;
diff --git a/drivers/input/keyboard/gpio_keys.c b/drivers/input/keyboard/gpio_keys.c
index e19617485679..129fc4212a5e 100644
--- a/drivers/input/keyboard/gpio_keys.c
+++ b/drivers/input/keyboard/gpio_keys.c
@@ -23,8 +23,8 @@
#include <linux/input.h>
#include <linux/gpio_keys.h>
#include <linux/workqueue.h>
-#include <linux/gpio.h>
#include <linux/gpio/consumer.h>
+#include <linux/gpio/legacy.h>
#include <linux/of.h>
#include <linux/of_irq.h>
#include <linux/spinlock.h>
@@ -528,6 +528,7 @@ static int gpio_keys_setup_key(struct platform_device *pdev,
*/
bdata->gpiod = NULL;
}
+#ifdef CONFIG_GPIOLIB_LEGACY
} else if (gpio_is_valid(button->gpio)) {
/*
* Legacy GPIO number, so request the GPIO here and
@@ -546,6 +547,7 @@ static int gpio_keys_setup_key(struct platform_device *pdev,
if (button->active_low ^ gpiod_is_active_low(bdata->gpiod))
gpiod_toggle_active_low(bdata->gpiod);
+#endif
}
if (bdata->gpiod) {
@@ -583,8 +585,7 @@ static int gpio_keys_setup_key(struct platform_device *pdev,
if (irq < 0) {
error = irq;
dev_err_probe(dev, error,
- "Unable to get irq number for GPIO %d\n",
- button->gpio);
+ "Unable to get irq number for GPIO\n");
return error;
}
bdata->irq = irq;
diff --git a/drivers/input/keyboard/gpio_keys_polled.c b/drivers/input/keyboard/gpio_keys_polled.c
index e6707d72210e..4e7a366ff05b 100644
--- a/drivers/input/keyboard/gpio_keys_polled.c
+++ b/drivers/input/keyboard/gpio_keys_polled.c
@@ -18,8 +18,8 @@
#include <linux/input.h>
#include <linux/ioport.h>
#include <linux/platform_device.h>
-#include <linux/gpio.h>
#include <linux/gpio/consumer.h>
+#include <linux/gpio/legacy.h>
#include <linux/gpio_keys.h>
#include <linux/property.h>
@@ -301,6 +301,7 @@ static int gpio_keys_polled_probe(struct platform_device *pdev)
return dev_err_probe(dev, PTR_ERR(bdata->gpiod),
"failed to get gpio\n");
}
+#ifdef CONFIG_GPIOLIB_LEGACY
} else if (gpio_is_valid(button->gpio)) {
/*
* Legacy GPIO number so request the GPIO here and
@@ -323,6 +324,7 @@ static int gpio_keys_polled_probe(struct platform_device *pdev)
if (button->active_low ^ gpiod_is_active_low(bdata->gpiod))
gpiod_toggle_active_low(bdata->gpiod);
+#endif
}
bdata->last_state = -1;
diff --git a/drivers/input/keyboard/matrix_keypad.c b/drivers/input/keyboard/matrix_keypad.c
index e50a6fea9a60..8863b741d1a3 100644
--- a/drivers/input/keyboard/matrix_keypad.c
+++ b/drivers/input/keyboard/matrix_keypad.c
@@ -16,7 +16,6 @@
#include <linux/interrupt.h>
#include <linux/jiffies.h>
#include <linux/module.h>
-#include <linux/gpio.h>
#include <linux/input/matrix_keypad.h>
#include <linux/slab.h>
#include <linux/of.h>
diff --git a/drivers/input/misc/Kconfig b/drivers/input/misc/Kconfig
index 1f6c57dba030..9c66e3a67127 100644
--- a/drivers/input/misc/Kconfig
+++ b/drivers/input/misc/Kconfig
@@ -892,6 +892,9 @@ config INPUT_IDEAPAD_SLIDEBAR
config INPUT_SOC_BUTTON_ARRAY
tristate "Windows-compatible SoC Button Array"
depends on KEYBOARD_GPIO && ACPI
+ depends on X86
+ depends on GPIOLIB
+ select GPIOLIB_LEGACY
help
Say Y here if you have a SoC-based tablet that originally runs
Windows 8 or a Microsoft Surface Book 2, Pro 5, Laptop 1 or later.
diff --git a/drivers/input/misc/soc_button_array.c b/drivers/input/misc/soc_button_array.c
index b8cad415c62c..a6c984205123 100644
--- a/drivers/input/misc/soc_button_array.c
+++ b/drivers/input/misc/soc_button_array.c
@@ -15,7 +15,6 @@
#include <linux/dmi.h>
#include <linux/gpio/consumer.h>
#include <linux/gpio_keys.h>
-#include <linux/gpio.h>
#include <linux/platform_device.h>
static bool use_low_level_irq;
diff --git a/drivers/mfd/aat2870-core.c b/drivers/mfd/aat2870-core.c
index 34d66ba9646a..0d56cd6fbc6a 100644
--- a/drivers/mfd/aat2870-core.c
+++ b/drivers/mfd/aat2870-core.c
@@ -13,7 +13,7 @@
#include <linux/uaccess.h>
#include <linux/i2c.h>
#include <linux/delay.h>
-#include <linux/gpio.h>
+#include <linux/gpio/legacy.h>
#include <linux/mfd/core.h>
#include <linux/mfd/aat2870.h>
#include <linux/regulator/machine.h>
diff --git a/drivers/mfd/arizona-irq.c b/drivers/mfd/arizona-irq.c
index 544016d420fe..14f9cb2c4b67 100644
--- a/drivers/mfd/arizona-irq.c
+++ b/drivers/mfd/arizona-irq.c
@@ -8,7 +8,7 @@
*/
#include <linux/delay.h>
-#include <linux/gpio.h>
+#include <linux/gpio/legacy.h>
#include <linux/interrupt.h>
#include <linux/irq.h>
#include <linux/irqdomain.h>
diff --git a/drivers/mfd/lp3943.c b/drivers/mfd/lp3943.c
index 6764553147e4..1918b5c7a5e7 100644
--- a/drivers/mfd/lp3943.c
+++ b/drivers/mfd/lp3943.c
@@ -28,7 +28,7 @@
*/
#include <linux/err.h>
-#include <linux/gpio.h>
+#include <linux/gpio/consumer.h>
#include <linux/i2c.h>
#include <linux/mfd/core.h>
#include <linux/mfd/lp3943.h>
diff --git a/drivers/mfd/rohm-bd71828.c b/drivers/mfd/rohm-bd71828.c
index a79f354bf5cb..5fb6142cf087 100644
--- a/drivers/mfd/rohm-bd71828.c
+++ b/drivers/mfd/rohm-bd71828.c
@@ -5,7 +5,8 @@
* ROHM BD718[15/28/79] and BD72720 PMIC driver
*/
-#include <linux/gpio_keys.h>
+#include <linux/device/devres.h>
+#include <linux/gfp_types.h>
#include <linux/i2c.h>
#include <linux/input.h>
#include <linux/interrupt.h>
@@ -18,6 +19,7 @@
#include <linux/mfd/rohm-generic.h>
#include <linux/module.h>
#include <linux/of.h>
+#include <linux/property.h>
#include <linux/regmap.h>
#include <linux/types.h>
@@ -37,19 +39,6 @@
}, \
}
-static struct gpio_keys_button button = {
- .code = KEY_POWER,
- .gpio = -1,
- .type = EV_KEY,
- .wakeup = 1,
-};
-
-static const struct gpio_keys_platform_data bd71828_powerkey_data = {
- .buttons = &button,
- .nbuttons = 1,
- .name = "bd71828-pwrkey",
-};
-
static const struct resource bd71815_rtc_irqs[] = {
DEFINE_RES_IRQ_NAMED(BD71815_INT_RTC0, "bd70528-rtc-alm-0"),
DEFINE_RES_IRQ_NAMED(BD71815_INT_RTC1, "bd70528-rtc-alm-1"),
@@ -174,10 +163,6 @@ static struct mfd_cell bd71828_mfd_cells[] = {
.name = "bd71828-rtc",
.resources = bd71828_rtc_irqs,
.num_resources = ARRAY_SIZE(bd71828_rtc_irqs),
- }, {
- .name = "gpio-keys",
- .platform_data = &bd71828_powerkey_data,
- .pdata_size = sizeof(bd71828_powerkey_data),
},
};
@@ -242,11 +227,8 @@ static const struct mfd_cell bd72720_mfd_cells[] = {
.name = "bd72720-rtc",
.resources = bd72720_rtc_irqs,
.num_resources = ARRAY_SIZE(bd72720_rtc_irqs),
- }, {
- .name = "gpio-keys",
- .platform_data = &bd71828_powerkey_data,
- .pdata_size = sizeof(bd71828_powerkey_data),
},
+ /* Power button is registered separately */
};
static const struct regmap_range bd71815_volatile_ranges[] = {
@@ -877,6 +859,84 @@ static int set_clk_mode(struct device *dev, struct regmap *regmap,
OUT32K_MODE_CMOS);
}
+static const struct property_entry bd71828_powerkey_parent_props[] = {
+ PROPERTY_ENTRY_STRING("label", "bd71828-pwrkey"),
+ { }
+};
+
+static const struct property_entry bd71828_powerkey_props[] = {
+ PROPERTY_ENTRY_U32("linux,code", KEY_POWER),
+ PROPERTY_ENTRY_BOOL("wakeup-source"),
+ { }
+};
+
+#define GPIO_KEYS 0 /* Node corresponding to gpio-keys device itself */
+#define PWRON_KEY 1 /* Node describing power button in gpio-keys */
+
+static int bd71828_i2c_register_swnodes(const struct software_node *nodes)
+{
+ const struct software_node * const node_group[] = {
+ &nodes[GPIO_KEYS], &nodes[PWRON_KEY], NULL
+ };
+
+ return software_node_register_node_group(node_group);
+}
+
+static void bd71828_i2c_unregister_swnodes(void *data)
+{
+ const struct software_node *nodes = data;
+ const struct software_node * const node_group[] = {
+ &nodes[GPIO_KEYS], &nodes[PWRON_KEY], NULL
+ };
+
+ software_node_unregister_node_group(node_group);
+}
+
+static int bd71828_i2c_register_pwrbutton(struct device *dev, int button_irq,
+ struct irq_domain *irq_domain)
+{
+ const struct resource res[] = {
+ DEFINE_RES_IRQ_NAMED(button_irq, "bd71828-pwrkey"),
+ };
+ struct mfd_cell gpio_keys_cell = {
+ .name = "gpio-keys",
+ .resources = res,
+ .num_resources = ARRAY_SIZE(res),
+ };
+ struct software_node *nodes;
+ int ret;
+
+ nodes = devm_kcalloc(dev, 2, sizeof(*nodes), GFP_KERNEL);
+ if (!nodes)
+ return -ENOMEM;
+
+ nodes[GPIO_KEYS].name = devm_kasprintf(dev, GFP_KERNEL, "%s-power-key", dev_name(dev));
+ if (!nodes[GPIO_KEYS].name)
+ return -ENOMEM;
+
+ nodes[GPIO_KEYS].properties = bd71828_powerkey_parent_props;
+
+ nodes[PWRON_KEY].parent = &nodes[GPIO_KEYS];
+ nodes[PWRON_KEY].properties = bd71828_powerkey_props;
+
+ ret = bd71828_i2c_register_swnodes(nodes);
+ if (ret)
+ return ret;
+
+ ret = devm_add_action_or_reset(dev, bd71828_i2c_unregister_swnodes, nodes);
+ if (ret)
+ return ret;
+
+ gpio_keys_cell.swnode = &nodes[GPIO_KEYS];
+
+ ret = devm_mfd_add_devices(dev, PLATFORM_DEVID_AUTO, &gpio_keys_cell, 1,
+ NULL, 0, irq_domain);
+ if (ret)
+ return dev_err_probe(dev, ret, "Failed to register power-button");
+
+ return 0;
+}
+
static struct i2c_client *bd71828_dev;
static void bd71828_power_off(void)
{
@@ -929,6 +989,7 @@ static struct regmap *bd72720_do_regmaps(struct i2c_client *i2c)
static int bd71828_i2c_probe(struct i2c_client *i2c)
{
struct regmap_irq_chip_data *irq_data;
+ struct irq_domain *irq_domain;
int ret;
struct regmap *regmap = NULL;
const struct regmap_config *regmap_config;
@@ -1022,23 +1083,23 @@ static int bd71828_i2c_probe(struct i2c_client *i2c)
"Failed to enable main level IRQs\n");
}
}
- if (button_irq) {
- ret = regmap_irq_get_virq(irq_data, button_irq);
- if (ret < 0)
- return dev_err_probe(&i2c->dev, ret,
- "Failed to get the power-key IRQ\n");
-
- button.irq = ret;
- }
ret = set_clk_mode(&i2c->dev, regmap, clkmode_reg);
if (ret)
return ret;
+ irq_domain = regmap_irq_get_domain(irq_data);
+
ret = devm_mfd_add_devices(&i2c->dev, PLATFORM_DEVID_AUTO, mfd, cells,
- NULL, 0, regmap_irq_get_domain(irq_data));
+ NULL, 0, irq_domain);
if (ret)
- return dev_err_probe(&i2c->dev, ret, "Failed to create subdevices\n");
+ return dev_err_probe(&i2c->dev, ret, "Failed to create subdevices\n");
+
+ if (button_irq) {
+ ret = bd71828_i2c_register_pwrbutton(&i2c->dev, button_irq, irq_domain);
+ if (ret)
+ return ret;
+ }
if (of_device_is_system_power_controller(i2c->dev.of_node) &&
chip_type == ROHM_CHIP_TYPE_BD71828) {
diff --git a/drivers/mfd/rohm-bd718x7.c b/drivers/mfd/rohm-bd718x7.c
index ff714fd4f54d..be2acc429fe3 100644
--- a/drivers/mfd/rohm-bd718x7.c
+++ b/drivers/mfd/rohm-bd718x7.c
@@ -7,7 +7,8 @@
// Datasheet for BD71837MWV available from
// https://www.rohm.com/datasheet/BD71837MWV/bd71837mwv-e
-#include <linux/gpio_keys.h>
+#include <linux/device/devres.h>
+#include <linux/gfp_types.h>
#include <linux/i2c.h>
#include <linux/input.h>
#include <linux/interrupt.h>
@@ -15,37 +16,16 @@
#include <linux/mfd/core.h>
#include <linux/module.h>
#include <linux/of.h>
+#include <linux/property.h>
#include <linux/regmap.h>
#include <linux/types.h>
-static struct gpio_keys_button button = {
- .code = KEY_POWER,
- .gpio = -1,
- .type = EV_KEY,
-};
-
-static struct gpio_keys_platform_data bd718xx_powerkey_data = {
- .buttons = &button,
- .nbuttons = 1,
- .name = "bd718xx-pwrkey",
-};
-
static struct mfd_cell bd71837_mfd_cells[] = {
- {
- .name = "gpio-keys",
- .platform_data = &bd718xx_powerkey_data,
- .pdata_size = sizeof(bd718xx_powerkey_data),
- },
{ .name = "bd71837-clk", },
{ .name = "bd71837-pmic", },
};
static struct mfd_cell bd71847_mfd_cells[] = {
- {
- .name = "gpio-keys",
- .platform_data = &bd718xx_powerkey_data,
- .pdata_size = sizeof(bd718xx_powerkey_data),
- },
{ .name = "bd71847-clk", },
{ .name = "bd71847-pmic", },
};
@@ -125,10 +105,89 @@ static int bd718xx_init_press_duration(struct regmap *regmap,
return 0;
}
+static const struct property_entry bd718xx_powerkey_parent_props[] = {
+ PROPERTY_ENTRY_STRING("label", "bd718xx-pwrkey"),
+ { }
+};
+
+static const struct property_entry bd718xx_powerkey_props[] = {
+ PROPERTY_ENTRY_U32("linux,code", KEY_POWER),
+ { }
+};
+
+static const struct resource bd718xx_powerkey_resources[] = {
+ DEFINE_RES_IRQ_NAMED(BD718XX_INT_PWRBTN_S, "bd718xx-pwrkey"),
+};
+
+#define GPIO_KEYS 0 /* Node corresponding to gpio-keys device itself */
+#define PWRON_KEY 1 /* Node describing power button in gpio-keys */
+
+static int bd718xx_i2c_register_swnodes(const struct software_node *nodes)
+{
+ const struct software_node * const node_group[] = {
+ &nodes[GPIO_KEYS], &nodes[PWRON_KEY], NULL
+ };
+
+ return software_node_register_node_group(node_group);
+}
+
+static void bd718xx_i2c_unregister_swnodes(void *data)
+{
+ const struct software_node *nodes = data;
+ const struct software_node * const node_group[] = {
+ &nodes[GPIO_KEYS], &nodes[PWRON_KEY], NULL
+ };
+
+ software_node_unregister_node_group(node_group);
+}
+
+static int bd718xx_i2c_register_pwrbutton(struct device *dev,
+ struct irq_domain *irq_domain)
+{
+ struct mfd_cell gpio_keys_cell = {
+ .name = "gpio-keys",
+ .resources = bd718xx_powerkey_resources,
+ .num_resources = ARRAY_SIZE(bd718xx_powerkey_resources),
+ };
+ struct software_node *nodes;
+ int ret;
+
+ nodes = devm_kcalloc(dev, 2, sizeof(*nodes), GFP_KERNEL);
+ if (!nodes)
+ return -ENOMEM;
+
+ nodes[GPIO_KEYS].name = devm_kasprintf(dev, GFP_KERNEL, "%s-power-key", dev_name(dev));
+ if (!nodes[GPIO_KEYS].name)
+ return -ENOMEM;
+
+ nodes[GPIO_KEYS].properties = bd718xx_powerkey_parent_props;
+
+ nodes[PWRON_KEY].parent = &nodes[GPIO_KEYS];
+ nodes[PWRON_KEY].properties = bd718xx_powerkey_props;
+
+ ret = bd718xx_i2c_register_swnodes(nodes);
+ if (ret)
+ return ret;
+
+ ret = devm_add_action_or_reset(dev, bd718xx_i2c_unregister_swnodes, nodes);
+ if (ret)
+ return ret;
+
+ gpio_keys_cell.swnode = &nodes[GPIO_KEYS];
+
+ ret = devm_mfd_add_devices(dev, PLATFORM_DEVID_AUTO, &gpio_keys_cell, 1,
+ NULL, 0, irq_domain);
+ if (ret)
+ return dev_err_probe(dev, ret, "Failed to register power-button");
+
+ return 0;
+}
+
static int bd718xx_i2c_probe(struct i2c_client *i2c)
{
struct regmap *regmap;
struct regmap_irq_chip_data *irq_data;
+ struct irq_domain *irq_domain;
int ret;
unsigned int chip_type;
struct mfd_cell *mfd;
@@ -169,20 +228,18 @@ static int bd718xx_i2c_probe(struct i2c_client *i2c)
if (ret)
return ret;
- ret = regmap_irq_get_virq(irq_data, BD718XX_INT_PWRBTN_S);
-
- if (ret < 0)
- return dev_err_probe(&i2c->dev, ret, "Failed to get the IRQ\n");
-
- button.irq = ret;
+ irq_domain = regmap_irq_get_domain(irq_data);
ret = devm_mfd_add_devices(&i2c->dev, PLATFORM_DEVID_AUTO,
- mfd, cells, NULL, 0,
- regmap_irq_get_domain(irq_data));
+ mfd, cells, NULL, 0, irq_domain);
+ if (ret)
+ return dev_err_probe(&i2c->dev, ret, "Failed to create subdevices\n");
+
+ ret = bd718xx_i2c_register_pwrbutton(&i2c->dev, irq_domain);
if (ret)
- dev_err_probe(&i2c->dev, ret, "Failed to create subdevices\n");
+ return ret;
- return ret;
+ return 0;
}
static const struct of_device_id bd718xx_of_match[] = {
diff --git a/drivers/mfd/sm501.c b/drivers/mfd/sm501.c
index b5bda477ebfc..9d5bb67e8084 100644
--- a/drivers/mfd/sm501.c
+++ b/drivers/mfd/sm501.c
@@ -35,7 +35,7 @@ struct sm501_device {
struct sm501_gpio;
#ifdef CONFIG_MFD_SM501_GPIO
-#include <linux/gpio.h>
+#include <linux/gpio/consumer.h>
struct sm501_gpio_chip {
struct gpio_chip gpio;
diff --git a/drivers/mfd/tps6105x.c b/drivers/mfd/tps6105x.c
index e2f6858d101e..b11cd2c03311 100644
--- a/drivers/mfd/tps6105x.c
+++ b/drivers/mfd/tps6105x.c
@@ -16,7 +16,7 @@
#include <linux/init.h>
#include <linux/i2c.h>
#include <linux/regmap.h>
-#include <linux/gpio.h>
+#include <linux/gpio/consumer.h>
#include <linux/spinlock.h>
#include <linux/slab.h>
#include <linux/err.h>
diff --git a/drivers/mfd/tps65911-comparator.c b/drivers/mfd/tps65911-comparator.c
index 7098712ea008..cc8545a972bc 100644
--- a/drivers/mfd/tps65911-comparator.c
+++ b/drivers/mfd/tps65911-comparator.c
@@ -14,7 +14,7 @@
#include <linux/err.h>
#include <linux/platform_device.h>
#include <linux/debugfs.h>
-#include <linux/gpio.h>
+#include <linux/gpio/consumer.h>
#include <linux/mfd/tps65910.h>
#define COMP1 0
diff --git a/drivers/mfd/wm8994-irq.c b/drivers/mfd/wm8994-irq.c
index a46cea948763..a15483489b9d 100644
--- a/drivers/mfd/wm8994-irq.c
+++ b/drivers/mfd/wm8994-irq.c
@@ -9,7 +9,7 @@
#include <linux/kernel.h>
#include <linux/module.h>
-#include <linux/gpio.h>
+#include <linux/gpio/consumer.h>
#include <linux/i2c.h>
#include <linux/irq.h>
#include <linux/mfd/core.h>
diff --git a/drivers/pcmcia/bcm63xx_pcmcia.c b/drivers/pcmcia/bcm63xx_pcmcia.c
index 724fd6ee0fd0..1612b5d76975 100644
--- a/drivers/pcmcia/bcm63xx_pcmcia.c
+++ b/drivers/pcmcia/bcm63xx_pcmcia.c
@@ -14,7 +14,7 @@
#include <linux/slab.h>
#include <linux/delay.h>
#include <linux/pci.h>
-#include <linux/gpio.h>
+#include <linux/gpio/legacy.h>
#include <bcm63xx_regs.h>
#include <bcm63xx_io.h>
diff --git a/drivers/pcmcia/db1xxx_ss.c b/drivers/pcmcia/db1xxx_ss.c
index 7b896d7dbc9f..410d24762f13 100644
--- a/drivers/pcmcia/db1xxx_ss.c
+++ b/drivers/pcmcia/db1xxx_ss.c
@@ -23,7 +23,7 @@
*/
#include <linux/delay.h>
-#include <linux/gpio.h>
+#include <linux/gpio/legacy.h>
#include <linux/interrupt.h>
#include <linux/pm.h>
#include <linux/module.h>
diff --git a/drivers/pcmcia/sa1100_h3600.c b/drivers/pcmcia/sa1100_h3600.c
index 10cb99c20a7f..6c52d90795eb 100644
--- a/drivers/pcmcia/sa1100_h3600.c
+++ b/drivers/pcmcia/sa1100_h3600.c
@@ -11,7 +11,7 @@
#include <linux/interrupt.h>
#include <linux/init.h>
#include <linux/delay.h>
-#include <linux/gpio.h>
+#include <linux/gpio/legacy.h>
#include <mach/hardware.h>
#include <asm/irq.h>
diff --git a/drivers/pcmcia/soc_common.c b/drivers/pcmcia/soc_common.c
index 87aa3f667117..23585e3968e9 100644
--- a/drivers/pcmcia/soc_common.c
+++ b/drivers/pcmcia/soc_common.c
@@ -32,8 +32,8 @@
#include <linux/cpufreq.h>
-#include <linux/gpio.h>
#include <linux/gpio/consumer.h>
+#include <linux/gpio/legacy.h>
#include <linux/init.h>
#include <linux/interrupt.h>
#include <linux/io.h>
diff --git a/drivers/pcmcia/xxs1500_ss.c b/drivers/pcmcia/xxs1500_ss.c
index 8a8aae1843b5..ba1bd0f9d9f8 100644
--- a/drivers/pcmcia/xxs1500_ss.c
+++ b/drivers/pcmcia/xxs1500_ss.c
@@ -7,7 +7,7 @@
*/
#include <linux/delay.h>
-#include <linux/gpio.h>
+#include <linux/gpio/legacy.h>
#include <linux/interrupt.h>
#include <linux/io.h>
#include <linux/ioport.h>
diff --git a/drivers/phy/broadcom/phy-bcm-ns2-usbdrd.c b/drivers/phy/broadcom/phy-bcm-ns2-usbdrd.c
index 8473fa574529..171bf097a8b8 100644
--- a/drivers/phy/broadcom/phy-bcm-ns2-usbdrd.c
+++ b/drivers/phy/broadcom/phy-bcm-ns2-usbdrd.c
@@ -3,7 +3,6 @@
#include <linux/delay.h>
#include <linux/extcon-provider.h>
-#include <linux/gpio.h>
#include <linux/gpio/consumer.h>
#include <linux/init.h>
#include <linux/interrupt.h>
diff --git a/drivers/phy/rockchip/phy-rockchip-usbdp.c b/drivers/phy/rockchip/phy-rockchip-usbdp.c
index f68de14366db..07a839e41db7 100644
--- a/drivers/phy/rockchip/phy-rockchip-usbdp.c
+++ b/drivers/phy/rockchip/phy-rockchip-usbdp.c
@@ -11,7 +11,7 @@
#include <linux/bits.h>
#include <linux/clk.h>
#include <linux/delay.h>
-#include <linux/gpio.h>
+#include <linux/gpio/consumer.h>
#include <linux/mfd/syscon.h>
#include <linux/module.h>
#include <linux/mutex.h>
diff --git a/drivers/phy/ti/phy-j721e-wiz.c b/drivers/phy/ti/phy-j721e-wiz.c
index 7531a8a04912..1f5dba49ace4 100644
--- a/drivers/phy/ti/phy-j721e-wiz.c
+++ b/drivers/phy/ti/phy-j721e-wiz.c
@@ -11,7 +11,6 @@
#include <linux/slab.h>
#include <linux/clk.h>
#include <linux/clk-provider.h>
-#include <linux/gpio.h>
#include <linux/gpio/consumer.h>
#include <linux/io.h>
#include <linux/module.h>