mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 23:24:38 +00:00
spi: Add of-platdata support to SPI and SPI flash
Some boards may want to use these subsystems with of-platdata in SPL. Add support for this by avoiding any device tree access in this case. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
d844efec47
commit
71634f289d
2 changed files with 13 additions and 2 deletions
|
@ -1138,7 +1138,7 @@ int spi_flash_scan(struct spi_flash *flash)
|
|||
return ret;
|
||||
#endif
|
||||
|
||||
#if CONFIG_IS_ENABLED(OF_CONTROL)
|
||||
#if CONFIG_IS_ENABLED(OF_CONTROL) && !CONFIG_IS_ENABLED(OF_PLATDATA)
|
||||
ret = spi_flash_decode_fdt(gd->fdt_blob, flash);
|
||||
if (ret) {
|
||||
debug("SF: FDT decode error\n");
|
||||
|
|
|
@ -108,6 +108,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)
|
||||
static int spi_child_post_bind(struct udevice *dev)
|
||||
{
|
||||
struct dm_spi_slave_platdata *plat = dev_get_parent_platdata(dev);
|
||||
|
@ -117,14 +118,16 @@ static int spi_child_post_bind(struct udevice *dev)
|
|||
|
||||
return spi_slave_ofdata_to_platdata(gd->fdt_blob, dev->of_offset, plat);
|
||||
}
|
||||
#endif
|
||||
|
||||
static int spi_post_probe(struct udevice *bus)
|
||||
{
|
||||
#if !CONFIG_IS_ENABLED(OF_PLATDATA)
|
||||
struct dm_spi_bus *spi = dev_get_uclass_priv(bus);
|
||||
|
||||
spi->max_hz = fdtdec_get_int(gd->fdt_blob, bus->of_offset,
|
||||
"spi-max-frequency", 0);
|
||||
|
||||
#endif
|
||||
#if defined(CONFIG_NEEDS_MANUAL_RELOC)
|
||||
struct dm_spi_ops *ops = spi_get_ops(bus);
|
||||
|
||||
|
@ -274,7 +277,11 @@ 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)
|
||||
ret = uclass_first_device_err(UCLASS_SPI, &bus);
|
||||
#else
|
||||
ret = uclass_get_device_by_seq(UCLASS_SPI, busnum, &bus);
|
||||
#endif
|
||||
if (ret) {
|
||||
printf("Invalid bus %d (err=%d)\n", busnum, ret);
|
||||
return ret;
|
||||
|
@ -436,14 +443,18 @@ UCLASS_DRIVER(spi) = {
|
|||
.id = UCLASS_SPI,
|
||||
.name = "spi",
|
||||
.flags = DM_UC_FLAG_SEQ_ALIAS,
|
||||
#if !CONFIG_IS_ENABLED(OF_PLATDATA)
|
||||
.post_bind = dm_scan_fdt_dev,
|
||||
#endif
|
||||
.post_probe = spi_post_probe,
|
||||
.child_pre_probe = spi_child_pre_probe,
|
||||
.per_device_auto_alloc_size = sizeof(struct dm_spi_bus),
|
||||
.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)
|
||||
.child_post_bind = spi_child_post_bind,
|
||||
#endif
|
||||
};
|
||||
|
||||
UCLASS_DRIVER(spi_generic) = {
|
||||
|
|
Loading…
Reference in a new issue