diff options
| -rw-r--r-- | Documentation/devicetree/bindings/spi/qcom,spi-qup.txt | 6 | ||||
| -rw-r--r-- | drivers/spi/spi-qup.c | 33 |
2 files changed, 12 insertions, 27 deletions
diff --git a/Documentation/devicetree/bindings/spi/qcom,spi-qup.txt b/Documentation/devicetree/bindings/spi/qcom,spi-qup.txt index b82a268f1bd4..bee6ff204baf 100644 --- a/Documentation/devicetree/bindings/spi/qcom,spi-qup.txt +++ b/Documentation/devicetree/bindings/spi/qcom,spi-qup.txt | |||
| @@ -23,6 +23,12 @@ Optional properties: | |||
| 23 | - spi-max-frequency: Specifies maximum SPI clock frequency, | 23 | - spi-max-frequency: Specifies maximum SPI clock frequency, |
| 24 | Units - Hz. Definition as per | 24 | Units - Hz. Definition as per |
| 25 | Documentation/devicetree/bindings/spi/spi-bus.txt | 25 | Documentation/devicetree/bindings/spi/spi-bus.txt |
| 26 | - num-cs: total number of chipselects | ||
| 27 | - cs-gpios: should specify GPIOs used for chipselects. | ||
| 28 | The gpios will be referred to as reg = <index> in the SPI child | ||
| 29 | nodes. If unspecified, a single SPI device without a chip | ||
| 30 | select can be used. | ||
| 31 | |||
| 26 | 32 | ||
| 27 | SPI slave nodes must be children of the SPI master node and can contain | 33 | SPI slave nodes must be children of the SPI master node and can contain |
| 28 | properties described in Documentation/devicetree/bindings/spi/spi-bus.txt | 34 | properties described in Documentation/devicetree/bindings/spi/spi-bus.txt |
diff --git a/drivers/spi/spi-qup.c b/drivers/spi/spi-qup.c index e783e4ce2cdc..c08da380cb23 100644 --- a/drivers/spi/spi-qup.c +++ b/drivers/spi/spi-qup.c | |||
| @@ -424,31 +424,6 @@ static int spi_qup_io_config(struct spi_device *spi, struct spi_transfer *xfer) | |||
| 424 | return 0; | 424 | return 0; |
| 425 | } | 425 | } |
| 426 | 426 | ||
| 427 | static void spi_qup_set_cs(struct spi_device *spi, bool enable) | ||
| 428 | { | ||
| 429 | struct spi_qup *controller = spi_master_get_devdata(spi->master); | ||
| 430 | |||
| 431 | u32 iocontol, mask; | ||
| 432 | |||
| 433 | iocontol = readl_relaxed(controller->base + SPI_IO_CONTROL); | ||
| 434 | |||
| 435 | /* Disable auto CS toggle and use manual */ | ||
| 436 | iocontol &= ~SPI_IO_C_MX_CS_MODE; | ||
| 437 | iocontol |= SPI_IO_C_FORCE_CS; | ||
| 438 | |||
| 439 | iocontol &= ~SPI_IO_C_CS_SELECT_MASK; | ||
| 440 | iocontol |= SPI_IO_C_CS_SELECT(spi->chip_select); | ||
| 441 | |||
| 442 | mask = SPI_IO_C_CS_N_POLARITY_0 << spi->chip_select; | ||
| 443 | |||
| 444 | if (enable) | ||
| 445 | iocontol |= mask; | ||
| 446 | else | ||
| 447 | iocontol &= ~mask; | ||
| 448 | |||
| 449 | writel_relaxed(iocontol, controller->base + SPI_IO_CONTROL); | ||
| 450 | } | ||
| 451 | |||
| 452 | static int spi_qup_transfer_one(struct spi_master *master, | 427 | static int spi_qup_transfer_one(struct spi_master *master, |
| 453 | struct spi_device *spi, | 428 | struct spi_device *spi, |
| 454 | struct spi_transfer *xfer) | 429 | struct spi_transfer *xfer) |
| @@ -571,12 +546,16 @@ static int spi_qup_probe(struct platform_device *pdev) | |||
| 571 | return -ENOMEM; | 546 | return -ENOMEM; |
| 572 | } | 547 | } |
| 573 | 548 | ||
| 549 | /* use num-cs unless not present or out of range */ | ||
| 550 | if (of_property_read_u16(dev->of_node, "num-cs", | ||
| 551 | &master->num_chipselect) || | ||
| 552 | (master->num_chipselect > SPI_NUM_CHIPSELECTS)) | ||
| 553 | master->num_chipselect = SPI_NUM_CHIPSELECTS; | ||
| 554 | |||
| 574 | master->bus_num = pdev->id; | 555 | master->bus_num = pdev->id; |
| 575 | master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH | SPI_LOOP; | 556 | master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH | SPI_LOOP; |
| 576 | master->num_chipselect = SPI_NUM_CHIPSELECTS; | ||
| 577 | master->bits_per_word_mask = SPI_BPW_RANGE_MASK(4, 32); | 557 | master->bits_per_word_mask = SPI_BPW_RANGE_MASK(4, 32); |
| 578 | master->max_speed_hz = max_freq; | 558 | master->max_speed_hz = max_freq; |
| 579 | master->set_cs = spi_qup_set_cs; | ||
| 580 | master->transfer_one = spi_qup_transfer_one; | 559 | master->transfer_one = spi_qup_transfer_one; |
| 581 | master->dev.of_node = pdev->dev.of_node; | 560 | master->dev.of_node = pdev->dev.of_node; |
| 582 | master->auto_runtime_pm = true; | 561 | master->auto_runtime_pm = true; |
