summaryrefslogtreecommitdiffstats
path: root/drivers/spi
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2013-10-28 12:07:48 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2013-10-31 12:53:08 +0100
commitfb40dd5157f5045726c667a0216744189bea591c (patch)
treedab143af81b008e4a99bd4bcc7dca8747fc61aee /drivers/spi
parentfd5b82e640e8f7b8d62bf305123e974567e41e48 (diff)
downloadbarebox-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.c5
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);