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

Commit b9b9af11 authored by Anton Vorontsov's avatar Anton Vorontsov Committed by Linus Torvalds
Browse files

spi_mpc83xx: split mpc83xx_spi_work() into two routines



mpc83xx_spi_work() is quite large, with up to five indentation levels and
is quite difficult to read.

So, split the function in two parts:
1. mpc83xx_spi_work() now only traverse queued spi messages;
2. mpc83xx_spi_do_one_msg() only manages single messages.

There should be no functional changes.

Signed-off-by: default avatarAnton Vorontsov <avorontsov@ru.mvista.com>
Cc: Kumar Gala <galak@gate.crashing.org>
Cc: David Brownell <david-b@pacbell.net>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 9effb959
Loading
Loading
Loading
Loading
+60 −55
Original line number Diff line number Diff line
@@ -350,26 +350,14 @@ static int mpc83xx_spi_bufs(struct spi_device *spi, struct spi_transfer *t)
	return mpc83xx_spi->count;
}

static void mpc83xx_spi_work(struct work_struct *work)
static void mpc83xx_spi_do_one_msg(struct spi_message *m)
{
	struct mpc83xx_spi *mpc83xx_spi =
		container_of(work, struct mpc83xx_spi, work);

	spin_lock_irq(&mpc83xx_spi->lock);
	mpc83xx_spi->busy = 1;
	while (!list_empty(&mpc83xx_spi->queue)) {
		struct spi_message *m;
		struct spi_device *spi;
		struct spi_transfer *t = NULL;
		unsigned cs_change;
		int status, nsecs = 50;
	struct spi_device *spi = m->spi;
	struct spi_transfer *t;
	unsigned int cs_change;
	const int nsecs = 50;
	int status;

		m = container_of(mpc83xx_spi->queue.next,
				struct spi_message, queue);
		list_del_init(&m->queue);
		spin_unlock_irq(&mpc83xx_spi->lock);

		spi = m->spi;
	cs_change = 1;
	status = 0;
	list_for_each_entry(t, &m->transfers, transfer_list) {
@@ -415,6 +403,23 @@ static void mpc83xx_spi_work(struct work_struct *work)
	}

	mpc83xx_spi_setup_transfer(spi, NULL);
}

static void mpc83xx_spi_work(struct work_struct *work)
{
	struct mpc83xx_spi *mpc83xx_spi = container_of(work, struct mpc83xx_spi,
						       work);

	spin_lock_irq(&mpc83xx_spi->lock);
	mpc83xx_spi->busy = 1;
	while (!list_empty(&mpc83xx_spi->queue)) {
		struct spi_message *m = container_of(mpc83xx_spi->queue.next,
						   struct spi_message, queue);

		list_del_init(&m->queue);
		spin_unlock_irq(&mpc83xx_spi->lock);

		mpc83xx_spi_do_one_msg(m);

		spin_lock_irq(&mpc83xx_spi->lock);
	}