Changes in v9:
- Conver to use CS GPIO description
Changes in v8:
- There is a problem with the version 7 mail format. resend it
Changes in v7:
- Fall back "rockchip,rv1126-spi" to "rockchip,rk3066-spi"
Changes in v6:
- Consider to compatibility, the "rockchip,rk3568-spi" is removed in
Series-changes v5, so the commit massage should also remove the
corresponding information
Changes in v5:
- Change to leave one compatible id rv1126, and rk3568 is compatible
with rv1126
Changes in v4:
- Adjust the order patches
- Simply commit massage like redundancy "application" content
Changes in v3:
- Fix compile error which is find by Sascha in [v2,2/8]
Jon Lin (6):
dt-bindings: spi: spi-rockchip: add description for rv1126
spi: rockchip: add compatible string for rv1126
spi: rockchip: Set rx_fifo interrupt waterline base on transfer item
spi: rockchip: Wait for STB status in slave mode tx_xfer
spi: rockchip: Support cs-gpio
spi: rockchip: Support SPI_CS_HIGH
.../devicetree/bindings/spi/spi-rockchip.yaml | 1 +
drivers/spi/spi-rockchip.c | 49 +++++++++++++------
2 files changed, 34 insertions(+), 16 deletions(-)
--
2.17.1
The description below will be used for rv1126.dtsi or compatible one in
the future
Signed-off-by: Jon Lin <redacted>
---
Changes in v9:
- Conver to use CS GPIO description
Changes in v8:
- There is a problem with the version 7 mail format. resend it
Changes in v7:
- Fall back "rockchip,rv1126-spi" to "rockchip,rk3066-spi"
Changes in v6:
- Consider to compatibility, the "rockchip,rk3568-spi" is removed in
Series-changes v5, so the commit massage should also remove the
corresponding information
Changes in v5:
- Change to leave one compatible id rv1126, and rk3568 is compatible
with rv1126
Changes in v4:
- Adjust the order patches
- Simply commit massage like redundancy "application" content
Changes in v3:
- Fix compile error which is find by Sascha in [v2,2/8]
Documentation/devicetree/bindings/spi/spi-rockchip.yaml | 1 +
1 file changed, 1 insertion(+)
Add compatible string for rv1126 for potential applications.
Signed-off-by: Jon Lin <redacted>
---
Changes in v9: None
Changes in v8: None
Changes in v7: None
Changes in v6: None
Changes in v5: None
Changes in v4: None
Changes in v3: None
drivers/spi/spi-rockchip.c | 1 +
1 file changed, 1 insertion(+)
The error here is to calculate the width as 8 bits. In fact, 16 bits
should be considered.
Signed-off-by: Jon Lin <redacted>
---
Changes in v9: None
Changes in v8: None
Changes in v7: None
Changes in v6: None
Changes in v5: None
Changes in v4: None
Changes in v3: None
drivers/spi/spi-rockchip.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
After ROCKCHIP_SPI_VER2_TYPE2, SR->STB is a more accurate judgment
bit for spi slave transmition.
Signed-off-by: Jon Lin <redacted>
---
Changes in v9: None
Changes in v8: None
Changes in v7: None
Changes in v6: None
Changes in v5: None
Changes in v4: None
Changes in v3: None
drivers/spi/spi-rockchip.c | 21 ++++++++++++++-------
1 file changed, 14 insertions(+), 7 deletions(-)
@@ -116,13 +116,14 @@#define BAUDR_SCKDV_MIN 2#define BAUDR_SCKDV_MAX 65534-/* Bit fields in SR, 5bit */-#define SR_MASK 0x1f+/* Bit fields in SR, 6bit */+#define SR_MASK 0x3f#define SR_BUSY (1 << 0)#define SR_TF_FULL (1 << 1)#define SR_TF_EMPTY (1 << 2)#define SR_RF_EMPTY (1 << 3)#define SR_RF_FULL (1 << 4)+#define SR_SLAVE_TX_BUSY (1 << 5)/* Bit fields in ISR, IMR, ISR, RISR, 5bit */#define INT_MASK 0x1f
@@ -197,13 +198,19 @@ static inline void spi_enable_chip(struct rockchip_spi *rs, bool enable)writel_relaxed((enable?1U:0U),rs->regs+ROCKCHIP_SPI_SSIENR);}-staticinlinevoidwait_for_idle(structrockchip_spi*rs)+staticinlinevoidwait_for_tx_idle(structrockchip_spi*rs,boolslave_mode){unsignedlongtimeout=jiffies+msecs_to_jiffies(5);do{-if(!(readl_relaxed(rs->regs+ROCKCHIP_SPI_SR)&SR_BUSY))-return;+if(slave_mode){+if(!(readl_relaxed(rs->regs+ROCKCHIP_SPI_SR)&SR_SLAVE_TX_BUSY)&&+!((readl_relaxed(rs->regs+ROCKCHIP_SPI_SR)&SR_BUSY)))+return;+}else{+if(!(readl_relaxed(rs->regs+ROCKCHIP_SPI_SR)&SR_BUSY))+return;+}}while(!time_after(jiffies,timeout));dev_warn(rs->dev,"spi controller is in busy state!\n");
@@ -383,7 +390,7 @@ static void rockchip_spi_dma_txcb(void *data)return;/* Wait until the FIFO data completely. */-wait_for_idle(rs);+wait_for_tx_idle(rs,ctlr->slave);spi_enable_chip(rs,false);spi_finalize_current_transfer(ctlr);
@@ -545,7 +552,7 @@ static int rockchip_spi_config(struct rockchip_spi *rs,elsewritel_relaxed(rs->fifo_len/2-1,rs->regs+ROCKCHIP_SPI_RXFTLR);-writel_relaxed(rs->fifo_len/2,rs->regs+ROCKCHIP_SPI_DMATDLR);+writel_relaxed(rs->fifo_len/2-1,rs->regs+ROCKCHIP_SPI_DMATDLR);writel_relaxed(rockchip_spi_calc_burst_size(xfer->len/rs->n_bytes)-1,rs->regs+ROCKCHIP_SPI_DMARDLR);writel_relaxed(dmacr,rs->regs+ROCKCHIP_SPI_DMACR);
1.Add standard cs-gpio support
2.Refer to spi-controller.yaml for details
Signed-off-by: Jon Lin <redacted>
---
Changes in v9: None
Changes in v8: None
Changes in v7: None
Changes in v6: None
Changes in v5: None
Changes in v4: None
Changes in v3: None
drivers/spi/spi-rockchip.c | 15 ++++++++++-----
1 file changed, 10 insertions(+), 5 deletions(-)
@@ -245,11 +246,15 @@ static void rockchip_spi_set_cs(struct spi_device *spi, bool enable)/* Keep things powered as long as CS is asserted */pm_runtime_get_sync(rs->dev);-ROCKCHIP_SPI_SET_BITS(rs->regs+ROCKCHIP_SPI_SER,-BIT(spi->chip_select));+if(spi->cs_gpiod)+ROCKCHIP_SPI_SET_BITS(rs->regs+ROCKCHIP_SPI_SER,1);+else+ROCKCHIP_SPI_SET_BITS(rs->regs+ROCKCHIP_SPI_SER,BIT(spi->chip_select));}else{-ROCKCHIP_SPI_CLR_BITS(rs->regs+ROCKCHIP_SPI_SER,-BIT(spi->chip_select));+if(spi->cs_gpiod)+ROCKCHIP_SPI_CLR_BITS(rs->regs+ROCKCHIP_SPI_SER,1);+else+ROCKCHIP_SPI_CLR_BITS(rs->regs+ROCKCHIP_SPI_SER,BIT(spi->chip_select));/* Drop reference from when we first asserted CS */pm_runtime_put(rs->dev);
1.Add standard spi-cs-high support
2.Refer to spi-controller.yaml for details
Signed-off-by: Jon Lin <redacted>
---
Changes in v9: None
Changes in v8: None
Changes in v7: None
Changes in v6: None
Changes in v5: None
Changes in v4: None
Changes in v3: None
drivers/spi/spi-rockchip.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)