diff options
Diffstat (limited to 'drivers/spi/spi-fsl-spi.c')
-rw-r--r-- | drivers/spi/spi-fsl-spi.c | 17 |
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 | ||
356 | static void fsl_spi_do_one_msg(struct spi_message *m) | 356 | static 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 | ||
422 | static int fsl_spi_setup(struct spi_device *spi) | 422 | static 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: | |||
704 | err_ioremap: | 702 | err_ioremap: |
705 | fsl_spi_cpm_free(mpc8xxx_spi); | 703 | fsl_spi_cpm_free(mpc8xxx_spi); |
706 | err_cpm_init: | 704 | err_cpm_init: |
707 | err_probe: | ||
708 | spi_master_put(master); | 705 | spi_master_put(master); |
709 | err: | 706 | err: |
710 | return ERR_PTR(ret); | 707 | return ERR_PTR(ret); |