2014-08-30 17:32:58 +08:00
|
|
|
From 9bc674f40f22596ef8c2ff6d7f9e53da0baa57e9 Mon Sep 17 00:00:00 2001
|
|
|
|
From: Andy Gross <agross@codeaurora.org>
|
|
|
|
Date: Thu, 12 Jun 2014 14:34:10 -0500
|
|
|
|
Subject: [PATCH 133/182] spi: qup: Remove chip select function
|
|
|
|
|
|
|
|
This patch removes the chip select function. Chip select should instead be
|
|
|
|
supported using GPIOs, defining the DT entry "cs-gpios", and letting the SPI
|
|
|
|
core assert/deassert the chip select as it sees fit.
|
|
|
|
|
|
|
|
Signed-off-by: Andy Gross <agross@codeaurora.org>
|
|
|
|
---
|
|
|
|
.../devicetree/bindings/spi/qcom,spi-qup.txt | 6 ++++
|
|
|
|
drivers/spi/spi-qup.c | 33 ++++----------------
|
|
|
|
2 files changed, 12 insertions(+), 27 deletions(-)
|
|
|
|
|
|
|
|
--- a/Documentation/devicetree/bindings/spi/qcom,spi-qup.txt
|
|
|
|
+++ b/Documentation/devicetree/bindings/spi/qcom,spi-qup.txt
|
|
|
|
@@ -23,6 +23,12 @@ Optional properties:
|
|
|
|
- spi-max-frequency: Specifies maximum SPI clock frequency,
|
|
|
|
Units - Hz. Definition as per
|
|
|
|
Documentation/devicetree/bindings/spi/spi-bus.txt
|
|
|
|
+- num-cs: total number of chipselects
|
|
|
|
+- cs-gpios: should specify GPIOs used for chipselects.
|
|
|
|
+ The gpios will be referred to as reg = <index> in the SPI child
|
|
|
|
+ nodes. If unspecified, a single SPI device without a chip
|
|
|
|
+ select can be used.
|
|
|
|
+
|
|
|
|
|
|
|
|
SPI slave nodes must be children of the SPI master node and can contain
|
|
|
|
properties described in Documentation/devicetree/bindings/spi/spi-bus.txt
|
|
|
|
--- a/drivers/spi/spi-qup.c
|
|
|
|
+++ b/drivers/spi/spi-qup.c
|
2014-09-11 05:40:19 +08:00
|
|
|
@@ -424,31 +424,6 @@ static int spi_qup_io_config(struct spi_
|
2014-08-30 17:32:58 +08:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
-static void spi_qup_set_cs(struct spi_device *spi, bool enable)
|
|
|
|
-{
|
|
|
|
- struct spi_qup *controller = spi_master_get_devdata(spi->master);
|
|
|
|
-
|
|
|
|
- u32 iocontol, mask;
|
|
|
|
-
|
|
|
|
- iocontol = readl_relaxed(controller->base + SPI_IO_CONTROL);
|
|
|
|
-
|
|
|
|
- /* Disable auto CS toggle and use manual */
|
|
|
|
- iocontol &= ~SPI_IO_C_MX_CS_MODE;
|
|
|
|
- iocontol |= SPI_IO_C_FORCE_CS;
|
|
|
|
-
|
|
|
|
- iocontol &= ~SPI_IO_C_CS_SELECT_MASK;
|
|
|
|
- iocontol |= SPI_IO_C_CS_SELECT(spi->chip_select);
|
|
|
|
-
|
|
|
|
- mask = SPI_IO_C_CS_N_POLARITY_0 << spi->chip_select;
|
|
|
|
-
|
|
|
|
- if (enable)
|
|
|
|
- iocontol |= mask;
|
|
|
|
- else
|
|
|
|
- iocontol &= ~mask;
|
|
|
|
-
|
|
|
|
- writel_relaxed(iocontol, controller->base + SPI_IO_CONTROL);
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
static int spi_qup_transfer_one(struct spi_master *master,
|
|
|
|
struct spi_device *spi,
|
|
|
|
struct spi_transfer *xfer)
|
2014-09-11 05:40:19 +08:00
|
|
|
@@ -571,12 +546,16 @@ static int spi_qup_probe(struct platform
|
2014-08-30 17:32:58 +08:00
|
|
|
return -ENOMEM;
|
|
|
|
}
|
|
|
|
|
|
|
|
+ /* use num-cs unless not present or out of range */
|
|
|
|
+ if (of_property_read_u16(dev->of_node, "num-cs",
|
|
|
|
+ &master->num_chipselect) ||
|
|
|
|
+ (master->num_chipselect > SPI_NUM_CHIPSELECTS))
|
|
|
|
+ master->num_chipselect = SPI_NUM_CHIPSELECTS;
|
|
|
|
+
|
|
|
|
master->bus_num = pdev->id;
|
|
|
|
master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH | SPI_LOOP;
|
|
|
|
- master->num_chipselect = SPI_NUM_CHIPSELECTS;
|
|
|
|
master->bits_per_word_mask = SPI_BPW_RANGE_MASK(4, 32);
|
|
|
|
master->max_speed_hz = max_freq;
|
|
|
|
- master->set_cs = spi_qup_set_cs;
|
|
|
|
master->transfer_one = spi_qup_transfer_one;
|
|
|
|
master->dev.of_node = pdev->dev.of_node;
|
|
|
|
master->auto_runtime_pm = true;
|