aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/spi/spi-fsl-spi.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/spi/spi-fsl-spi.c')
-rw-r--r--drivers/spi/spi-fsl-spi.c17
1 files changed, 7 insertions, 10 deletions
diff --git a/drivers/spi/spi-fsl-spi.c b/drivers/spi/spi-fsl-spi.c
index ed792880c9d6..3b159364c459 100644
--- a/drivers/spi/spi-fsl-spi.c
+++ b/drivers/spi/spi-fsl-spi.c
@@ -353,7 +353,8 @@ static int fsl_spi_bufs(struct spi_device *spi, struct spi_transfer *t,
353 return mpc8xxx_spi->count; 353 return mpc8xxx_spi->count;
354} 354}
355 355
356static void fsl_spi_do_one_msg(struct spi_message *m) 356static int fsl_spi_do_one_msg(struct spi_master *master,
357 struct spi_message *m)
357{ 358{
358 struct spi_device *spi = m->spi; 359 struct spi_device *spi = m->spi;
359 struct spi_transfer *t, *first; 360 struct spi_transfer *t, *first;
@@ -367,10 +368,9 @@ static void fsl_spi_do_one_msg(struct spi_message *m)
367 list_for_each_entry(t, &m->transfers, transfer_list) { 368 list_for_each_entry(t, &m->transfers, transfer_list) {
368 if ((first->bits_per_word != t->bits_per_word) || 369 if ((first->bits_per_word != t->bits_per_word) ||
369 (first->speed_hz != t->speed_hz)) { 370 (first->speed_hz != t->speed_hz)) {
370 status = -EINVAL;
371 dev_err(&spi->dev, 371 dev_err(&spi->dev,
372 "bits_per_word/speed_hz should be same for the same SPI transfer\n"); 372 "bits_per_word/speed_hz should be same for the same SPI transfer\n");
373 return; 373 return -EINVAL;
374 } 374 }
375 } 375 }
376 376
@@ -408,8 +408,7 @@ static void fsl_spi_do_one_msg(struct spi_message *m)
408 } 408 }
409 409
410 m->status = status; 410 m->status = status;
411 if (m->complete) 411 spi_finalize_current_message(master);
412 m->complete(m->context);
413 412
414 if (status || !cs_change) { 413 if (status || !cs_change) {
415 ndelay(nsecs); 414 ndelay(nsecs);
@@ -417,6 +416,7 @@ static void fsl_spi_do_one_msg(struct spi_message *m)
417 } 416 }
418 417
419 fsl_spi_setup_transfer(spi, NULL); 418 fsl_spi_setup_transfer(spi, NULL);
419 return 0;
420} 420}
421 421
422static int fsl_spi_setup(struct spi_device *spi) 422static int fsl_spi_setup(struct spi_device *spi)
@@ -624,15 +624,13 @@ static struct spi_master * fsl_spi_probe(struct device *dev,
624 624
625 dev_set_drvdata(dev, master); 625 dev_set_drvdata(dev, master);
626 626
627 ret = mpc8xxx_spi_probe(dev, mem, irq); 627 mpc8xxx_spi_probe(dev, mem, irq);
628 if (ret)
629 goto err_probe;
630 628
631 master->setup = fsl_spi_setup; 629 master->setup = fsl_spi_setup;
632 master->cleanup = fsl_spi_cleanup; 630 master->cleanup = fsl_spi_cleanup;
631 master->transfer_one_message = fsl_spi_do_one_msg;
633 632
634 mpc8xxx_spi = spi_master_get_devdata(master); 633 mpc8xxx_spi = spi_master_get_devdata(master);
635 mpc8xxx_spi->spi_do_one_msg = fsl_spi_do_one_msg;
636 mpc8xxx_spi->spi_remove = fsl_spi_remove; 634 mpc8xxx_spi->spi_remove = fsl_spi_remove;
637 mpc8xxx_spi->max_bits_per_word = 32; 635 mpc8xxx_spi->max_bits_per_word = 32;
638 mpc8xxx_spi->type = fsl_spi_get_type(dev); 636 mpc8xxx_spi->type = fsl_spi_get_type(dev);
@@ -704,7 +702,6 @@ free_irq:
704err_ioremap: 702err_ioremap:
705 fsl_spi_cpm_free(mpc8xxx_spi); 703 fsl_spi_cpm_free(mpc8xxx_spi);
706err_cpm_init: 704err_cpm_init:
707err_probe:
708 spi_master_put(master); 705 spi_master_put(master);
709err: 706err:
710 return ERR_PTR(ret); 707 return ERR_PTR(ret);