aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/spi/spi-dw.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/spi/spi-dw.c')
-rw-r--r--drivers/spi/spi-dw.c26
1 files changed, 4 insertions, 22 deletions
diff --git a/drivers/spi/spi-dw.c b/drivers/spi/spi-dw.c
index c1abc06899e7..79c958e49f61 100644
--- a/drivers/spi/spi-dw.c
+++ b/drivers/spi/spi-dw.c
@@ -457,19 +457,7 @@ static void pump_transfers(unsigned long data)
457 } 457 }
458 if (transfer->bits_per_word) { 458 if (transfer->bits_per_word) {
459 bits = transfer->bits_per_word; 459 bits = transfer->bits_per_word;
460 460 dws->n_bytes = dws->dma_width = bits >> 3;
461 switch (bits) {
462 case 8:
463 case 16:
464 dws->n_bytes = dws->dma_width = bits >> 3;
465 break;
466 default:
467 printk(KERN_ERR "MRST SPI0: unsupported bits:"
468 "%db\n", bits);
469 message->status = -EIO;
470 goto early_exit;
471 }
472
473 cr0 = (bits - 1) 461 cr0 = (bits - 1)
474 | (chip->type << SPI_FRF_OFFSET) 462 | (chip->type << SPI_FRF_OFFSET)
475 | (spi->mode << SPI_MODE_OFFSET) 463 | (spi->mode << SPI_MODE_OFFSET)
@@ -629,9 +617,6 @@ static int dw_spi_setup(struct spi_device *spi)
629 struct dw_spi_chip *chip_info = NULL; 617 struct dw_spi_chip *chip_info = NULL;
630 struct chip_data *chip; 618 struct chip_data *chip;
631 619
632 if (spi->bits_per_word != 8 && spi->bits_per_word != 16)
633 return -EINVAL;
634
635 /* Only alloc on first setup */ 620 /* Only alloc on first setup */
636 chip = spi_get_ctldata(spi); 621 chip = spi_get_ctldata(spi);
637 if (!chip) { 622 if (!chip) {
@@ -660,16 +645,12 @@ static int dw_spi_setup(struct spi_device *spi)
660 chip->enable_dma = chip_info->enable_dma; 645 chip->enable_dma = chip_info->enable_dma;
661 } 646 }
662 647
663 if (spi->bits_per_word <= 8) { 648 if (spi->bits_per_word == 8) {
664 chip->n_bytes = 1; 649 chip->n_bytes = 1;
665 chip->dma_width = 1; 650 chip->dma_width = 1;
666 } else if (spi->bits_per_word <= 16) { 651 } else if (spi->bits_per_word == 16) {
667 chip->n_bytes = 2; 652 chip->n_bytes = 2;
668 chip->dma_width = 2; 653 chip->dma_width = 2;
669 } else {
670 /* Never take >16b case for MRST SPIC */
671 dev_err(&spi->dev, "invalid wordsize\n");
672 return -EINVAL;
673 } 654 }
674 chip->bits_per_word = spi->bits_per_word; 655 chip->bits_per_word = spi->bits_per_word;
675 656
@@ -824,6 +805,7 @@ int dw_spi_add_host(struct dw_spi *dws)
824 } 805 }
825 806
826 master->mode_bits = SPI_CPOL | SPI_CPHA; 807 master->mode_bits = SPI_CPOL | SPI_CPHA;
808 master->bits_per_word_mask = SPI_BPW_MASK(8) | SPI_BPW_MASK(16);
827 master->bus_num = dws->bus_num; 809 master->bus_num = dws->bus_num;
828 master->num_chipselect = dws->num_cs; 810 master->num_chipselect = dws->num_cs;
829 master->cleanup = dw_spi_cleanup; 811 master->cleanup = dw_spi_cleanup;