diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2013-10-28 12:07:48 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2013-10-31 12:53:08 +0100 |
commit | fb40dd5157f5045726c667a0216744189bea591c (patch) | |
tree | dab143af81b008e4a99bd4bcc7dca8747fc61aee /drivers/spi | |
parent | fd5b82e640e8f7b8d62bf305123e974567e41e48 (diff) | |
download | barebox-fb40dd5157f5045726c667a0216744189bea591c.tar.gz barebox-fb40dd5157f5045726c667a0216744189bea591c.tar.xz |
spi: support dynamic bus ids
When probing spi bus masters from devicetree they got a bus_num
of -1. This works with a single bus master only since all bus masters
had the same bus_num. Detect this and dynamically assign a valid
bus_num.
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers/spi')
-rw-r--r-- | drivers/spi/spi.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c index bf8265ac12..64aa63e47a 100644 --- a/drivers/spi/spi.c +++ b/drivers/spi/spi.c @@ -215,6 +215,7 @@ static LIST_HEAD(spi_master_list); */ int spi_register_master(struct spi_master *master) { + static int dyn_bus_id = (1 << 15) - 1; int status = -ENODEV; debug("%s: %s:%d\n", __func__, master->dev->name, master->dev->id); @@ -225,6 +226,10 @@ int spi_register_master(struct spi_master *master) if (master->num_chipselect == 0) return -EINVAL; + /* convention: dynamically assigned bus IDs count down from the max */ + if (master->bus_num < 0) + master->bus_num = dyn_bus_id--; + list_add_tail(&master->list, &spi_master_list); spi_of_register_slaves(master); |