diff options
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/gpio/mxc_gpio.c | 27 | 
1 files changed, 21 insertions, 6 deletions
| diff --git a/drivers/gpio/mxc_gpio.c b/drivers/gpio/mxc_gpio.c index 90d36fb87bb..fc7d296a2c1 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,15 @@ 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 = devfdt_get_addr(dev); +		if (addr == FDT_ADDR_T_NONE) +			return -EINVAL; -	addr = devfdt_get_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 +345,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 }, | 
