12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- From 905ee06a9966113fe51d6bad1819759cb30fd0bd Mon Sep 17 00:00:00 2001
- From: Ionela Voinescu <[email protected]>
- Date: Tue, 9 Feb 2016 10:18:31 +0000
- Subject: spi: img-spfi: use device 0 configuration for all devices
- Given that we control the chip select line externally
- we can use only one parameter register (device 0 parameter
- register) and one set of configuration bits (port configuration
- bits for device 0) for all devices (all chip select lines).
- Signed-off-by: Ionela Voinescu <[email protected]>
- ---
- drivers/spi/spi-img-spfi.c | 23 ++++++++++++++++-------
- 1 file changed, 16 insertions(+), 7 deletions(-)
- --- a/drivers/spi/spi-img-spfi.c
- +++ b/drivers/spi/spi-img-spfi.c
- @@ -429,18 +429,23 @@ static int img_spfi_prepare(struct spi_m
- struct img_spfi *spfi = spi_master_get_devdata(master);
- u32 val;
-
- + /*
- + * The chip select line is controlled externally so
- + * we can use the CS0 configuration for all devices
- + */
- val = spfi_readl(spfi, SPFI_PORT_STATE);
- +
- + /* 0 for device selection */
- val &= ~(SPFI_PORT_STATE_DEV_SEL_MASK <<
- SPFI_PORT_STATE_DEV_SEL_SHIFT);
- - val |= msg->spi->chip_select << SPFI_PORT_STATE_DEV_SEL_SHIFT;
- if (msg->spi->mode & SPI_CPHA)
- - val |= SPFI_PORT_STATE_CK_PHASE(msg->spi->chip_select);
- + val |= SPFI_PORT_STATE_CK_PHASE(0);
- else
- - val &= ~SPFI_PORT_STATE_CK_PHASE(msg->spi->chip_select);
- + val &= ~SPFI_PORT_STATE_CK_PHASE(0);
- if (msg->spi->mode & SPI_CPOL)
- - val |= SPFI_PORT_STATE_CK_POL(msg->spi->chip_select);
- + val |= SPFI_PORT_STATE_CK_POL(0);
- else
- - val &= ~SPFI_PORT_STATE_CK_POL(msg->spi->chip_select);
- + val &= ~SPFI_PORT_STATE_CK_POL(0);
- spfi_writel(spfi, val, SPFI_PORT_STATE);
-
- return 0;
- @@ -492,11 +497,15 @@ static void img_spfi_config(struct spi_m
- div = DIV_ROUND_UP(clk_get_rate(spfi->spfi_clk), xfer->speed_hz);
- div = clamp(512 / (1 << get_count_order(div)), 1, 128);
-
- - val = spfi_readl(spfi, SPFI_DEVICE_PARAMETER(spi->chip_select));
- + /*
- + * The chip select line is controlled externally so
- + * we can use the CS0 parameters for all devices
- + */
- + val = spfi_readl(spfi, SPFI_DEVICE_PARAMETER(0));
- val &= ~(SPFI_DEVICE_PARAMETER_BITCLK_MASK <<
- SPFI_DEVICE_PARAMETER_BITCLK_SHIFT);
- val |= div << SPFI_DEVICE_PARAMETER_BITCLK_SHIFT;
- - spfi_writel(spfi, val, SPFI_DEVICE_PARAMETER(spi->chip_select));
- + spfi_writel(spfi, val, SPFI_DEVICE_PARAMETER(0));
-
- if (!list_is_last(&xfer->transfer_list, &master->cur_msg->transfers) &&
- /*
|