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

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
...@@ -350,26 +350,14 @@ static int mpc83xx_spi_bufs(struct spi_device *spi, struct spi_transfer *t) ...@@ -350,26 +350,14 @@ static int mpc83xx_spi_bufs(struct spi_device *spi, struct spi_transfer *t)
return mpc83xx_spi->count; 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 = struct spi_device *spi = m->spi;
container_of(work, struct mpc83xx_spi, work); struct spi_transfer *t;
unsigned int cs_change;
spin_lock_irq(&mpc83xx_spi->lock); const int nsecs = 50;
mpc83xx_spi->busy = 1; int status;
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;
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; cs_change = 1;
status = 0; status = 0;
list_for_each_entry(t, &m->transfers, transfer_list) { list_for_each_entry(t, &m->transfers, transfer_list) {
...@@ -415,6 +403,23 @@ static void mpc83xx_spi_work(struct work_struct *work) ...@@ -415,6 +403,23 @@ static void mpc83xx_spi_work(struct work_struct *work)
} }
mpc83xx_spi_setup_transfer(spi, NULL); 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); spin_lock_irq(&mpc83xx_spi->lock);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment