summaryrefslogtreecommitdiff
path: root/drivers/gpio
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpio')
-rw-r--r--drivers/gpio/Kconfig6
-rw-r--r--drivers/gpio/Makefile1
-rw-r--r--drivers/gpio/adp5588_gpio.c3
-rw-r--r--drivers/gpio/dwapb_gpio.c2
-rw-r--r--drivers/gpio/ftgpio010.c110
-rw-r--r--drivers/gpio/gpio-aspeed-g7.c2
-rw-r--r--drivers/gpio/mpfs_gpio.c8
7 files changed, 8 insertions, 124 deletions
diff --git a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig
index 58e464106a3..db077e472a8 100644
--- a/drivers/gpio/Kconfig
+++ b/drivers/gpio/Kconfig
@@ -695,12 +695,6 @@ config SLG7XL45106_I2C_GPO
8-bit gpo expander, all gpo lines are controlled by writing
value into data register.
-config FTGPIO010
- bool "Faraday Technology FTGPIO010 driver"
- depends on DM_GPIO
- help
- Support for GPIOs on Faraday Technology's FTGPIO010 controller.
-
config ADP5585_GPIO
bool "ADP5585 GPIO driver"
depends on DM_GPIO && DM_I2C
diff --git a/drivers/gpio/Makefile b/drivers/gpio/Makefile
index 83e10c79b91..73c94329e36 100644
--- a/drivers/gpio/Makefile
+++ b/drivers/gpio/Makefile
@@ -77,7 +77,6 @@ obj-$(CONFIG_SL28CPLD_GPIO) += sl28cpld-gpio.o
obj-$(CONFIG_ADP5588_GPIO) += adp5588_gpio.o
obj-$(CONFIG_ZYNQMP_GPIO_MODEPIN) += zynqmp_gpio_modepin.o
obj-$(CONFIG_SLG7XL45106_I2C_GPO) += gpio_slg7xl45106.o
-obj-$(CONFIG_FTGPIO010) += ftgpio010.o
obj-$(CONFIG_$(PHASE_)ADP5585_GPIO) += adp5585_gpio.o
obj-$(CONFIG_RZG2L_GPIO) += rzg2l-gpio.o
obj-$(CONFIG_MPFS_GPIO) += mpfs_gpio.o
diff --git a/drivers/gpio/adp5588_gpio.c b/drivers/gpio/adp5588_gpio.c
index d081e169897..36304e48893 100644
--- a/drivers/gpio/adp5588_gpio.c
+++ b/drivers/gpio/adp5588_gpio.c
@@ -168,7 +168,7 @@ static int adp5588_ofdata_platdata(struct udevice *dev)
revid = ret & ID_MASK;
- printf("ADP5588 Detected: Rev %x, Rev ID %x\n", ret, revid);
+ printf("ADP558x Detected: Rev %x, Rev ID %x\n", ret, revid);
for (i = 0, ret = 0; i <= ADP5588_BANK(ADP5588_MAXGPIO); i++) {
plat->dat_out[i] = adp5588_gpio_read(dev, GPIO_DAT_OUT1 + i);
@@ -194,6 +194,7 @@ static const struct dm_gpio_ops adp5588_ops = {
static const struct udevice_id adp5588_of_match_list[] = {
{ .compatible = "adi,adp5588"},
+ { .compatible = "adi,adp5587"},
{ /* sentinel */ }
};
diff --git a/drivers/gpio/dwapb_gpio.c b/drivers/gpio/dwapb_gpio.c
index 04639a4cb68..7ab48780332 100644
--- a/drivers/gpio/dwapb_gpio.c
+++ b/drivers/gpio/dwapb_gpio.c
@@ -193,7 +193,7 @@ static int gpio_dwapb_bind(struct udevice *dev)
ofnode_get_name(node));
plat->name = strdup(name);
if (!plat->name) {
- kfree(plat);
+ devm_kfree(dev, plat);
return -ENOMEM;
}
}
diff --git a/drivers/gpio/ftgpio010.c b/drivers/gpio/ftgpio010.c
deleted file mode 100644
index 4cb550a540c..00000000000
--- a/drivers/gpio/ftgpio010.c
+++ /dev/null
@@ -1,110 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/*
- * Faraday Technology's FTGPIO010 controller.
- */
-
-#include <dm.h>
-#include <asm/io.h>
-#include <asm/gpio.h>
-
-struct ftgpio010_regs {
- u32 out;
- u32 in;
- u32 direction; // 1 - output
- u32 reserved;
- u32 set;
- u32 clear;
-};
-
-struct ftgpio010_plat {
- struct ftgpio010_regs __iomem *regs;
-};
-
-static int ftgpio010_direction_input(struct udevice *dev, unsigned int pin)
-{
- struct ftgpio010_plat *plat = dev_get_plat(dev);
- struct ftgpio010_regs *const regs = plat->regs;
-
- clrbits_le32(&regs->direction, 1 << pin);
- return 0;
-}
-
-static int ftgpio010_direction_output(struct udevice *dev, unsigned int pin,
- int val)
-{
- struct ftgpio010_plat *plat = dev_get_plat(dev);
- struct ftgpio010_regs *const regs = plat->regs;
-
- /* change the data first, then the direction. to avoid glitch */
- out_le32(val ? &regs->set : &regs->clear, 1 << pin);
- setbits_le32(&regs->direction, 1 << pin);
-
- return 0;
-}
-
-static int ftgpio010_get_value(struct udevice *dev, unsigned int pin)
-{
- struct ftgpio010_plat *plat = dev_get_plat(dev);
- struct ftgpio010_regs *const regs = plat->regs;
-
- return in_le32(&regs->in) >> pin & 1;
-}
-
-static int ftgpio010_set_value(struct udevice *dev, unsigned int pin, int val)
-{
- struct ftgpio010_plat *plat = dev_get_plat(dev);
- struct ftgpio010_regs *const regs = plat->regs;
-
- out_le32(val ? &regs->set : &regs->clear, 1 << pin);
- return 0;
-}
-
-static int ftgpio010_get_function(struct udevice *dev, unsigned int pin)
-{
- struct ftgpio010_plat *plat = dev_get_plat(dev);
- struct ftgpio010_regs *const regs = plat->regs;
-
- if (in_le32(&regs->direction) >> pin & 1)
- return GPIOF_OUTPUT;
- return GPIOF_INPUT;
-}
-
-static int ftgpio010_probe(struct udevice *dev)
-{
- struct gpio_dev_priv *uc_priv = dev_get_uclass_priv(dev);
-
- uc_priv->gpio_count = ofnode_read_u32_default(dev_ofnode(dev),
- "nr-gpios", 32);
- return 0;
-}
-
-static int ftgpio010_of_to_plat(struct udevice *dev)
-{
- struct ftgpio010_plat *plat = dev_get_plat(dev);
-
- plat->regs = dev_read_addr_ptr(dev);
- return 0;
-}
-
-static const struct dm_gpio_ops ftgpio010_ops = {
- .direction_input = ftgpio010_direction_input,
- .direction_output = ftgpio010_direction_output,
- .get_value = ftgpio010_get_value,
- .set_value = ftgpio010_set_value,
- .get_function = ftgpio010_get_function,
-};
-
-static const struct udevice_id ftgpio010_ids[] = {
- { .compatible = "faraday,ftgpio010" },
- { }
-};
-
-U_BOOT_DRIVER(ftgpio010) = {
- .name = "ftgpio010",
- .id = UCLASS_GPIO,
- .of_match = ftgpio010_ids,
- .ops = &ftgpio010_ops,
- .of_to_plat = ftgpio010_of_to_plat,
- .plat_auto = sizeof(struct ftgpio010_plat),
- .probe = ftgpio010_probe,
-};
diff --git a/drivers/gpio/gpio-aspeed-g7.c b/drivers/gpio/gpio-aspeed-g7.c
index 4c6ab86203c..4607468ca05 100644
--- a/drivers/gpio/gpio-aspeed-g7.c
+++ b/drivers/gpio/gpio-aspeed-g7.c
@@ -141,7 +141,7 @@ static const struct udevice_id aspeed_gpio_ids[] = {
{ }
};
-U_BOOT_DRIVER(gpio_aspeed) = {
+U_BOOT_DRIVER(gpio_aspeed_g7) = {
.name = "gpio-aspeed",
.id = UCLASS_GPIO,
.of_match = aspeed_gpio_ids,
diff --git a/drivers/gpio/mpfs_gpio.c b/drivers/gpio/mpfs_gpio.c
index 9bbeada4ef5..35eed596c10 100644
--- a/drivers/gpio/mpfs_gpio.c
+++ b/drivers/gpio/mpfs_gpio.c
@@ -75,7 +75,7 @@ static int mchp_gpio_direction_output(struct udevice *dev, u32 offset, int value
return 0;
}
-static bool mchp_gpio_get_value(struct udevice *dev, u32 offset)
+static int mchp_gpio_get_value(struct udevice *dev, u32 offset)
{
struct mchp_gpio_plat *plat = dev_get_plat(dev);
struct gpio_dev_priv *uc_priv = dev_get_uclass_priv(dev);
@@ -136,7 +136,7 @@ static int mchp_gpio_probe(struct udevice *dev)
struct gpio_dev_priv *uc_priv = dev_get_uclass_priv(dev);
char name[18], *str;
- plat->regs = dev_get_driver_data(dev);
+ plat->regs = (struct mpfs_gpio_reg_offsets *)dev_get_driver_data(dev);
sprintf(name, "gpio@%4lx_", (uintptr_t)plat->base);
str = strdup(name);
if (!str)
@@ -160,10 +160,10 @@ static const struct mpfs_gpio_reg_offsets coregpio_reg_offsets = {
static const struct udevice_id mchp_gpio_match[] = {
{
.compatible = "microchip,mpfs-gpio",
- .data = &mpfs_reg_offsets,
+ .data = (unsigned long)&mpfs_reg_offsets,
}, {
.compatible = "microchip,coregpio-rtl-v3",
- .data = &coregpio_reg_offsets,
+ .data = (unsigned long)&coregpio_reg_offsets,
},
{ /* end of list */ }
};