diff mbox series

[v3,3/6] gpio: mxc_gpio: add OF_PLATDATA support

Message ID 20200729153121.29548-4-walter.lozano@collabora.com
State Awaiting Upstream
Delegated to: Stefano Babic
Headers show
Series mx6cuboxi: enable OF_PLATDATA with MMC support | expand

Commit Message

Walter Lozano July 29, 2020, 3:31 p.m. UTC
Continuing with the OF_PLATADATA support for iMX6 to reduce SPL
footprint, add it to mxc_gpio. Thanks to this, it will be possible to
enable card detection on MMC driver.

Signed-off-by: Walter Lozano <walter.lozano@collabora.com>
---

Changes in v3:
- Rework to resolve merge conflicts

 drivers/gpio/mxc_gpio.c | 26 +++++++++++++++++++++-----
 1 file changed, 21 insertions(+), 5 deletions(-)

Comments

Stefano Babic Aug. 4, 2020, 8:52 a.m. UTC | #1
> Continuing with the OF_PLATADATA support for iMX6 to reduce SPL
> footprint, add it to mxc_gpio. Thanks to this, it will be possible to
> enable card detection on MMC driver.
> Signed-off-by: Walter Lozano <walter.lozano@collabora.com>
Applied to u-boot-imx, master, thanks !

Best regards,
Stefano Babic
diff mbox series

Patch

diff --git a/drivers/gpio/mxc_gpio.c b/drivers/gpio/mxc_gpio.c
index a16f5719ed..e7585fce7b 100644
--- a/drivers/gpio/mxc_gpio.c
+++ b/drivers/gpio/mxc_gpio.c
@@ -13,6 +13,8 @@ 
 #include <asm/arch/imx-regs.h>
 #include <asm/gpio.h>
 #include <asm/io.h>
+#include <dt-structs.h>
+#include <mapmem.h>
 
 enum mxc_gpio_direction {
 	MXC_GPIO_DIRECTION_IN,
@@ -22,6 +24,10 @@  enum mxc_gpio_direction {
 #define GPIO_PER_BANK			32
 
 struct mxc_gpio_plat {
+#if CONFIG_IS_ENABLED(OF_PLATDATA)
+	/* Put this first since driver model will copy the data here */
+	struct dtd_gpio_mxc dtplat;
+#endif
 	int bank_index;
 	struct gpio_regs *regs;
 };
@@ -280,6 +286,12 @@  static int mxc_gpio_probe(struct udevice *dev)
 	int banknum;
 	char name[18], *str;
 
+#if CONFIG_IS_ENABLED(OF_PLATDATA)
+	struct dtd_gpio_mxc *dtplat = &plat->dtplat;
+
+	plat->regs = map_sysmem(dtplat->reg[0], dtplat->reg[1]);
+#endif
+
 	banknum = plat->bank_index;
 	if (IS_ENABLED(CONFIG_ARCH_IMX8))
 		sprintf(name, "GPIO%d_", banknum);
@@ -297,14 +309,16 @@  static int mxc_gpio_probe(struct udevice *dev)
 
 static int mxc_gpio_ofdata_to_platdata(struct udevice *dev)
 {
-	fdt_addr_t addr;
 	struct mxc_gpio_plat *plat = dev_get_platdata(dev);
+	if (!CONFIG_IS_ENABLED(OF_PLATDATA)) {
+		fdt_addr_t addr;
 
-	addr = dev_read_addr(dev);
-	if (addr == FDT_ADDR_T_NONE)
-		return -EINVAL;
+		addr = dev_read_addr(dev);
+		if (addr == FDT_ADDR_T_NONE)
+			return -EINVAL;
 
-	plat->regs = (struct gpio_regs *)addr;
+		plat->regs = (struct gpio_regs *)addr;
+	}
 	plat->bank_index = dev->req_seq;
 
 	return 0;
@@ -332,6 +346,8 @@  U_BOOT_DRIVER(gpio_mxc) = {
 	.bind	= mxc_gpio_bind,
 };
 
+U_BOOT_DRIVER_ALIAS(gpio_mxc, fsl_imx6q_gpio)
+
 #if !CONFIG_IS_ENABLED(OF_CONTROL)
 static const struct mxc_gpio_plat mxc_plat[] = {
 	{ 0, (struct gpio_regs *)GPIO1_BASE_ADDR },