diff options
Diffstat (limited to 'drivers/spi/spi-dw.c')
-rw-r--r-- | drivers/spi/spi-dw.c | 26 |
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; |