
To be able to build spi driver with DM support, a new config option has been introduced (DM_NO_OF) since m68k architecture does not support fdt.
--- Changes from v1: - split into 2 patches
Signed-off-by: Angelo Dureghello angelo@sysam.it --- arch/Kconfig | 1 + drivers/core/Kconfig | 4 ++++ drivers/spi/spi-uclass.c | 12 +++++++----- 3 files changed, 12 insertions(+), 5 deletions(-)
diff --git a/arch/Kconfig b/arch/Kconfig index dd5a887001..c96cbfa2bd 100644 --- a/arch/Kconfig +++ b/arch/Kconfig @@ -28,6 +28,7 @@ config M68K select HAVE_PRIVATE_LIBGCC select SYS_BOOT_GET_CMDLINE select SYS_BOOT_GET_KBD + select DM_NO_OF
config MICROBLAZE bool "MicroBlaze architecture" diff --git a/drivers/core/Kconfig b/drivers/core/Kconfig index e8ba20ca82..47960a8a6a 100644 --- a/drivers/core/Kconfig +++ b/drivers/core/Kconfig @@ -244,4 +244,8 @@ config DM_DEV_READ_INLINE bool default y if !OF_LIVE
+config DM_NO_OF + bool + default n + endmenu diff --git a/drivers/spi/spi-uclass.c b/drivers/spi/spi-uclass.c index 15d90a54a1..908be1d4cf 100644 --- a/drivers/spi/spi-uclass.c +++ b/drivers/spi/spi-uclass.c @@ -107,7 +107,7 @@ int spi_xfer(struct spi_slave *slave, unsigned int bitlen, return dm_spi_xfer(slave->dev, bitlen, dout, din, flags); }
-#if !CONFIG_IS_ENABLED(OF_PLATDATA) +#if !CONFIG_IS_ENABLED(OF_PLATDATA) && !defined(CONFIG_DM_NO_OF) static int spi_child_post_bind(struct udevice *dev) { struct dm_spi_slave_platdata *plat = dev_get_parent_platdata(dev); @@ -121,7 +121,7 @@ static int spi_child_post_bind(struct udevice *dev)
static int spi_post_probe(struct udevice *bus) { -#if !CONFIG_IS_ENABLED(OF_PLATDATA) +#if !CONFIG_IS_ENABLED(OF_PLATDATA) && !defined(CONFIG_DM_NO_OF) struct dm_spi_bus *spi = dev_get_uclass_priv(bus);
spi->max_hz = dev_read_u32_default(bus, "spi-max-frequency", 0); @@ -274,7 +274,7 @@ int spi_get_bus_and_cs(int busnum, int cs, int speed, int mode, bool created = false; int ret;
-#if CONFIG_IS_ENABLED(OF_PLATDATA) +#if CONFIG_IS_ENABLED(OF_PLATDATA) || defined(CONFIG_DM_NO_OF) ret = uclass_first_device_err(UCLASS_SPI, &bus); #else ret = uclass_get_device_by_seq(UCLASS_SPI, busnum, &bus); @@ -283,6 +283,7 @@ int spi_get_bus_and_cs(int busnum, int cs, int speed, int mode, printf("Invalid bus %d (err=%d)\n", busnum, ret); return ret; } + ret = spi_find_chip_select(bus, cs, &dev);
/* @@ -321,6 +322,7 @@ int spi_get_bus_and_cs(int busnum, int cs, int speed, int mode, }
plat = dev_get_parent_platdata(dev); + if (!speed) { speed = plat->max_hz; mode = plat->mode; @@ -427,7 +429,7 @@ UCLASS_DRIVER(spi) = { .id = UCLASS_SPI, .name = "spi", .flags = DM_UC_FLAG_SEQ_ALIAS, -#if !CONFIG_IS_ENABLED(OF_PLATDATA) +#if !CONFIG_IS_ENABLED(OF_PLATDATA) && !defined(CONFIG_DM_NO_OF) .post_bind = dm_scan_fdt_dev, #endif .post_probe = spi_post_probe, @@ -436,7 +438,7 @@ UCLASS_DRIVER(spi) = { .per_child_auto_alloc_size = sizeof(struct spi_slave), .per_child_platdata_auto_alloc_size = sizeof(struct dm_spi_slave_platdata), -#if !CONFIG_IS_ENABLED(OF_PLATDATA) +#if !CONFIG_IS_ENABLED(OF_PLATDATA) && !defined(CONFIG_DM_NO_OF) .child_post_bind = spi_child_post_bind, #endif };