mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-21 22:51:37 +00:00
gpio: mxc_gpio: add OF_PLATDATA support
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>
This commit is contained in:
parent
2372177864
commit
a2845c9eeb
1 changed files with 21 additions and 6 deletions
|
@ -13,6 +13,8 @@
|
||||||
#include <asm/arch/imx-regs.h>
|
#include <asm/arch/imx-regs.h>
|
||||||
#include <asm/gpio.h>
|
#include <asm/gpio.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
|
#include <dt-structs.h>
|
||||||
|
#include <mapmem.h>
|
||||||
|
|
||||||
enum mxc_gpio_direction {
|
enum mxc_gpio_direction {
|
||||||
MXC_GPIO_DIRECTION_IN,
|
MXC_GPIO_DIRECTION_IN,
|
||||||
|
@ -22,6 +24,10 @@ enum mxc_gpio_direction {
|
||||||
#define GPIO_PER_BANK 32
|
#define GPIO_PER_BANK 32
|
||||||
|
|
||||||
struct mxc_gpio_plat {
|
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;
|
int bank_index;
|
||||||
struct gpio_regs *regs;
|
struct gpio_regs *regs;
|
||||||
};
|
};
|
||||||
|
@ -280,6 +286,12 @@ static int mxc_gpio_probe(struct udevice *dev)
|
||||||
int banknum;
|
int banknum;
|
||||||
char name[18], *str;
|
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;
|
banknum = plat->bank_index;
|
||||||
if (IS_ENABLED(CONFIG_ARCH_IMX8))
|
if (IS_ENABLED(CONFIG_ARCH_IMX8))
|
||||||
sprintf(name, "GPIO%d_", banknum);
|
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)
|
static int mxc_gpio_ofdata_to_platdata(struct udevice *dev)
|
||||||
{
|
{
|
||||||
fdt_addr_t addr;
|
|
||||||
struct mxc_gpio_plat *plat = dev_get_platdata(dev);
|
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);
|
plat->regs = (struct gpio_regs *)addr;
|
||||||
if (addr == FDT_ADDR_T_NONE)
|
}
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
plat->regs = (struct gpio_regs *)addr;
|
|
||||||
plat->bank_index = dev->req_seq;
|
plat->bank_index = dev->req_seq;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -332,6 +345,8 @@ U_BOOT_DRIVER(gpio_mxc) = {
|
||||||
.bind = mxc_gpio_bind,
|
.bind = mxc_gpio_bind,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
U_BOOT_DRIVER_ALIAS(gpio_mxc, fsl_imx6q_gpio)
|
||||||
|
|
||||||
#if !CONFIG_IS_ENABLED(OF_CONTROL)
|
#if !CONFIG_IS_ENABLED(OF_CONTROL)
|
||||||
static const struct mxc_gpio_plat mxc_plat[] = {
|
static const struct mxc_gpio_plat mxc_plat[] = {
|
||||||
{ 0, (struct gpio_regs *)GPIO1_BASE_ADDR },
|
{ 0, (struct gpio_regs *)GPIO1_BASE_ADDR },
|
||||||
|
|
Loading…
Add table
Reference in a new issue