|
@@ -45,7 +45,6 @@
|
|
|
|
|
|
#define CREATE_TRACE_POINTS
|
|
|
#include <trace/events/spi.h>
|
|
|
-#define SPI_DYN_FIRST_BUS_NUM 0
|
|
|
|
|
|
static DEFINE_IDR(spi_master_idr);
|
|
|
|
|
@@ -2086,7 +2085,7 @@ int spi_register_controller(struct spi_controller *ctlr)
|
|
|
struct device *dev = ctlr->dev.parent;
|
|
|
struct boardinfo *bi;
|
|
|
int status = -ENODEV;
|
|
|
- int id;
|
|
|
+ int id, first_dynamic;
|
|
|
|
|
|
if (!dev)
|
|
|
return -ENODEV;
|
|
@@ -2116,9 +2115,15 @@ int spi_register_controller(struct spi_controller *ctlr)
|
|
|
}
|
|
|
}
|
|
|
if (ctlr->bus_num < 0) {
|
|
|
+ first_dynamic = of_alias_get_highest_id("spi");
|
|
|
+ if (first_dynamic < 0)
|
|
|
+ first_dynamic = 0;
|
|
|
+ else
|
|
|
+ first_dynamic++;
|
|
|
+
|
|
|
mutex_lock(&board_lock);
|
|
|
- id = idr_alloc(&spi_master_idr, ctlr, SPI_DYN_FIRST_BUS_NUM, 0,
|
|
|
- GFP_KERNEL);
|
|
|
+ id = idr_alloc(&spi_master_idr, ctlr, first_dynamic,
|
|
|
+ 0, GFP_KERNEL);
|
|
|
mutex_unlock(&board_lock);
|
|
|
if (WARN(id < 0, "couldn't get idr"))
|
|
|
return id;
|