| From 905ee06a9966113fe51d6bad1819759cb30fd0bd Mon Sep 17 00:00:00 2001 |
| From: Ionela Voinescu <ionela.voinescu@imgtec.com> |
| 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 <ionela.voinescu@imgtec.com> |
| --- |
| 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 |
| @@ -434,18 +434,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; |
| @@ -545,11 +550,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) && |
| /* |