Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f91c75d6 authored by Mark Brown's avatar Mark Brown
Browse files

Merge remote-tracking branches 'spi/topic/doc', 'spi/topic/dw' and 'spi/topic/flash' into spi-next

Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -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);
}

+0 −5
Original line number Diff line number Diff line
@@ -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");
+17 −12
Original line number Diff line number Diff line
@@ -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
@@ -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;
@@ -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) {
@@ -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;
	}
@@ -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();
}

@@ -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)
@@ -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);
+2 −0
Original line number Diff line number Diff line
@@ -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