diff options
Diffstat (limited to 'drivers/spi/spi.c')
-rw-r--r-- | drivers/spi/spi.c | 29 |
1 files changed, 12 insertions, 17 deletions
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c index b851888a0a0b..f47d1ccdf292 100644 --- a/drivers/spi/spi.c +++ b/drivers/spi/spi.c @@ -424,7 +424,7 @@ static LIST_HEAD(spi_controller_list); /* * Used to protect add/del opertion for board_info list and * spi_controller list, and their matching process - * also used to protect object of type struct idr + * also used to protect object of type struct idr */ static DEFINE_MUTEX(board_lock); @@ -2075,7 +2075,6 @@ int spi_register_controller(struct spi_controller *ctlr) */ if (ctlr->num_chipselect == 0) return -EINVAL; - /* allocate dynamic bus number using Linux idr */ if ((ctlr->bus_num < 0) && ctlr->dev.of_node) { id = of_alias_get_id(ctlr->dev.of_node, "spi"); @@ -2090,16 +2089,14 @@ int spi_register_controller(struct spi_controller *ctlr) } } if (ctlr->bus_num < 0) { - mutex_lock(&board_lock); - id = idr_alloc(&spi_master_idr, ctlr, - SPI_DYN_FIRST_BUS_NUM, 0, GFP_KERNEL); - mutex_unlock(&board_lock); - if (WARN(id < 0, "couldn't get idr")) - return id; - - ctlr->bus_num = id; + mutex_lock(&board_lock); + id = idr_alloc(&spi_master_idr, ctlr, SPI_DYN_FIRST_BUS_NUM, 0, + GFP_KERNEL); + mutex_unlock(&board_lock); + if (WARN(id < 0, "couldn't get idr")) + return id; + ctlr->bus_num = id; } - INIT_LIST_HEAD(&ctlr->queue); spin_lock_init(&ctlr->queue_lock); spin_lock_init(&ctlr->bus_lock_spinlock); @@ -2222,18 +2219,16 @@ void spi_unregister_controller(struct spi_controller *ctlr) mutex_lock(&board_lock); found = idr_find(&spi_master_idr, ctlr->bus_num); mutex_unlock(&board_lock); - if (found != ctlr) { - dev_dbg(&ctlr->dev, + if (found != ctlr) { + dev_dbg(&ctlr->dev, "attempting to delete unregistered controller [%s]\n", dev_name(&ctlr->dev)); - return; - } - + return; + } if (ctlr->queued) { if (spi_destroy_queue(ctlr)) dev_err(&ctlr->dev, "queue remove failed\n"); } - mutex_lock(&board_lock); list_del(&ctlr->list); mutex_unlock(&board_lock); |