Loading drivers/spi/spi-dw-mid.c +2 −2 Original line number Diff line number Diff line Loading @@ -89,10 +89,10 @@ static void mid_spi_dma_exit(struct dw_spi *dws) if (!dws->dma_inited) return; dmaengine_terminate_all(dws->txchan); dmaengine_terminate_sync(dws->txchan); dma_release_channel(dws->txchan); dmaengine_terminate_all(dws->rxchan); dmaengine_terminate_sync(dws->rxchan); dma_release_channel(dws->rxchan); } Loading drivers/spi/spi-dw-mmio.c +0 −5 Original line number Diff line number Diff line Loading @@ -47,11 +47,6 @@ static int dw_spi_mmio_probe(struct platform_device *pdev) /* Get basic io resource and map it */ mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!mem) { dev_err(&pdev->dev, "no mem resource?\n"); return -EINVAL; } dws->regs = devm_ioremap_resource(&pdev->dev, mem); if (IS_ERR(dws->regs)) { dev_err(&pdev->dev, "SPI region map failed\n"); Loading drivers/spi/spi.c +17 −12 Original line number Diff line number Diff line Loading @@ -1047,6 +1047,7 @@ EXPORT_SYMBOL_GPL(spi_finalize_current_transfer); * __spi_pump_messages - function which processes spi message queue * @master: master to process queue for * @in_kthread: true if we are in the context of the message pump thread * @bus_locked: true if the bus mutex is held when calling this function * * This function checks if there is any spi message in the queue that * needs processing and if so call out to the driver to initialize hardware Loading @@ -1056,7 +1057,8 @@ EXPORT_SYMBOL_GPL(spi_finalize_current_transfer); * inside spi_sync(); the queue extraction handling at the top of the * function should deal with this safely. */ static void __spi_pump_messages(struct spi_master *master, bool in_kthread) static void __spi_pump_messages(struct spi_master *master, bool in_kthread, bool bus_locked) { unsigned long flags; bool was_busy = false; Loading Loading @@ -1152,7 +1154,9 @@ static void __spi_pump_messages(struct spi_master *master, bool in_kthread) } } if (!bus_locked) mutex_lock(&master->bus_lock_mutex); trace_spi_message_start(master->cur_msg); if (master->prepare_message) { Loading @@ -1162,8 +1166,7 @@ static void __spi_pump_messages(struct spi_master *master, bool in_kthread) "failed to prepare message: %d\n", ret); master->cur_msg->status = ret; spi_finalize_current_message(master); mutex_unlock(&master->bus_lock_mutex); return; goto out; } master->cur_msg_prepared = true; } Loading @@ -1172,20 +1175,22 @@ static void __spi_pump_messages(struct spi_master *master, bool in_kthread) if (ret) { master->cur_msg->status = ret; spi_finalize_current_message(master); mutex_unlock(&master->bus_lock_mutex); return; goto out; } ret = master->transfer_one_message(master, master->cur_msg); if (ret) { dev_err(&master->dev, "failed to transfer one message from queue\n"); mutex_unlock(&master->bus_lock_mutex); return; goto out; } out: if (!bus_locked) mutex_unlock(&master->bus_lock_mutex); /* Prod the scheduler in case transfer_one() was busy waiting */ if (!ret) cond_resched(); } Loading @@ -1198,7 +1203,7 @@ static void spi_pump_messages(struct kthread_work *work) struct spi_master *master = container_of(work, struct spi_master, pump_messages); __spi_pump_messages(master, true); __spi_pump_messages(master, true, false); } static int spi_init_queue(struct spi_master *master) Loading Loading @@ -2479,7 +2484,7 @@ static int __spi_sync(struct spi_device *spi, struct spi_message *message, spi_sync_immediate); SPI_STATISTICS_INCREMENT_FIELD(&spi->statistics, spi_sync_immediate); __spi_pump_messages(master, false); __spi_pump_messages(master, false, bus_locked); } wait_for_completion(&done); Loading include/linux/spi/spi.h +2 −0 Original line number Diff line number Diff line Loading @@ -304,6 +304,8 @@ static inline void spi_unregister_driver(struct spi_driver *sdrv) * @min_speed_hz: Lowest supported transfer speed * @max_speed_hz: Highest supported transfer speed * @flags: other constraints relevant to this driver * @max_transfer_size: function that returns the max transfer size for * a &spi_device; may be %NULL, so the default %SIZE_MAX will be used. * @bus_lock_spinlock: spinlock for SPI bus locking * @bus_lock_mutex: mutex for SPI bus locking * @bus_lock_flag: indicates that the SPI bus is locked for exclusive use Loading Loading
drivers/spi/spi-dw-mid.c +2 −2 Original line number Diff line number Diff line Loading @@ -89,10 +89,10 @@ static void mid_spi_dma_exit(struct dw_spi *dws) if (!dws->dma_inited) return; dmaengine_terminate_all(dws->txchan); dmaengine_terminate_sync(dws->txchan); dma_release_channel(dws->txchan); dmaengine_terminate_all(dws->rxchan); dmaengine_terminate_sync(dws->rxchan); dma_release_channel(dws->rxchan); } Loading
drivers/spi/spi-dw-mmio.c +0 −5 Original line number Diff line number Diff line Loading @@ -47,11 +47,6 @@ static int dw_spi_mmio_probe(struct platform_device *pdev) /* Get basic io resource and map it */ mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!mem) { dev_err(&pdev->dev, "no mem resource?\n"); return -EINVAL; } dws->regs = devm_ioremap_resource(&pdev->dev, mem); if (IS_ERR(dws->regs)) { dev_err(&pdev->dev, "SPI region map failed\n"); Loading
drivers/spi/spi.c +17 −12 Original line number Diff line number Diff line Loading @@ -1047,6 +1047,7 @@ EXPORT_SYMBOL_GPL(spi_finalize_current_transfer); * __spi_pump_messages - function which processes spi message queue * @master: master to process queue for * @in_kthread: true if we are in the context of the message pump thread * @bus_locked: true if the bus mutex is held when calling this function * * This function checks if there is any spi message in the queue that * needs processing and if so call out to the driver to initialize hardware Loading @@ -1056,7 +1057,8 @@ EXPORT_SYMBOL_GPL(spi_finalize_current_transfer); * inside spi_sync(); the queue extraction handling at the top of the * function should deal with this safely. */ static void __spi_pump_messages(struct spi_master *master, bool in_kthread) static void __spi_pump_messages(struct spi_master *master, bool in_kthread, bool bus_locked) { unsigned long flags; bool was_busy = false; Loading Loading @@ -1152,7 +1154,9 @@ static void __spi_pump_messages(struct spi_master *master, bool in_kthread) } } if (!bus_locked) mutex_lock(&master->bus_lock_mutex); trace_spi_message_start(master->cur_msg); if (master->prepare_message) { Loading @@ -1162,8 +1166,7 @@ static void __spi_pump_messages(struct spi_master *master, bool in_kthread) "failed to prepare message: %d\n", ret); master->cur_msg->status = ret; spi_finalize_current_message(master); mutex_unlock(&master->bus_lock_mutex); return; goto out; } master->cur_msg_prepared = true; } Loading @@ -1172,20 +1175,22 @@ static void __spi_pump_messages(struct spi_master *master, bool in_kthread) if (ret) { master->cur_msg->status = ret; spi_finalize_current_message(master); mutex_unlock(&master->bus_lock_mutex); return; goto out; } ret = master->transfer_one_message(master, master->cur_msg); if (ret) { dev_err(&master->dev, "failed to transfer one message from queue\n"); mutex_unlock(&master->bus_lock_mutex); return; goto out; } out: if (!bus_locked) mutex_unlock(&master->bus_lock_mutex); /* Prod the scheduler in case transfer_one() was busy waiting */ if (!ret) cond_resched(); } Loading @@ -1198,7 +1203,7 @@ static void spi_pump_messages(struct kthread_work *work) struct spi_master *master = container_of(work, struct spi_master, pump_messages); __spi_pump_messages(master, true); __spi_pump_messages(master, true, false); } static int spi_init_queue(struct spi_master *master) Loading Loading @@ -2479,7 +2484,7 @@ static int __spi_sync(struct spi_device *spi, struct spi_message *message, spi_sync_immediate); SPI_STATISTICS_INCREMENT_FIELD(&spi->statistics, spi_sync_immediate); __spi_pump_messages(master, false); __spi_pump_messages(master, false, bus_locked); } wait_for_completion(&done); Loading
include/linux/spi/spi.h +2 −0 Original line number Diff line number Diff line Loading @@ -304,6 +304,8 @@ static inline void spi_unregister_driver(struct spi_driver *sdrv) * @min_speed_hz: Lowest supported transfer speed * @max_speed_hz: Highest supported transfer speed * @flags: other constraints relevant to this driver * @max_transfer_size: function that returns the max transfer size for * a &spi_device; may be %NULL, so the default %SIZE_MAX will be used. * @bus_lock_spinlock: spinlock for SPI bus locking * @bus_lock_mutex: mutex for SPI bus locking * @bus_lock_flag: indicates that the SPI bus is locked for exclusive use Loading