Skip to content

Commit 0869cfe

Browse files
sergey-suloevVincent-FK
authored andcommitted
spi: sun6i: introduce register set/unset helpers
Two helper functions were added in order to update registers easily. Signed-off-by: Sergey Suloev <ssuloev@orpaltech.com>
1 parent 23495b8 commit 0869cfe

1 file changed

Lines changed: 17 additions & 22 deletions

File tree

drivers/spi/spi-sun6i.c

Lines changed: 17 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -115,29 +115,29 @@ static inline void sun6i_spi_write(struct sun6i_spi *sspi, u32 reg, u32 value)
115115
writel(value, sspi->base_addr + reg);
116116
}
117117

118-
static inline u32 sun6i_spi_get_tx_fifo_count(struct sun6i_spi *sspi)
118+
static inline void sun6i_spi_set(struct sun6i_spi *sspi, u32 addr, u32 val)
119119
{
120-
u32 reg = sun6i_spi_read(sspi, SUN6I_FIFO_STA_REG);
121-
122-
reg >>= SUN6I_FIFO_STA_TF_CNT_BITS;
120+
u32 reg = sun6i_spi_read(sspi, addr);
123121

124-
return reg & SUN6I_FIFO_STA_TF_CNT_MASK;
122+
reg |= val;
123+
sun6i_spi_write(sspi, addr, reg);
125124
}
126125

127-
static inline void sun6i_spi_enable_interrupt(struct sun6i_spi *sspi, u32 mask)
126+
static inline void sun6i_spi_unset(struct sun6i_spi *sspi, u32 addr, u32 val)
128127
{
129-
u32 reg = sun6i_spi_read(sspi, SUN6I_INT_CTL_REG);
128+
u32 reg = sun6i_spi_read(sspi, addr);
130129

131-
reg |= mask;
132-
sun6i_spi_write(sspi, SUN6I_INT_CTL_REG, reg);
130+
reg &= ~val;
131+
sun6i_spi_write(sspi, addr, reg);
133132
}
134133

135-
static inline void sun6i_spi_disable_interrupt(struct sun6i_spi *sspi, u32 mask)
134+
static inline u32 sun6i_spi_get_tx_fifo_count(struct sun6i_spi *sspi)
136135
{
137-
u32 reg = sun6i_spi_read(sspi, SUN6I_INT_CTL_REG);
136+
u32 reg = sun6i_spi_read(sspi, SUN6I_FIFO_STA_REG);
138137

139-
reg &= ~mask;
140-
sun6i_spi_write(sspi, SUN6I_INT_CTL_REG, reg);
138+
reg >>= SUN6I_FIFO_STA_TF_CNT_BITS;
139+
140+
return reg & SUN6I_FIFO_STA_TF_CNT_MASK;
141141
}
142142

143143
static inline void sun6i_spi_drain_fifo(struct sun6i_spi *sspi, int len)
@@ -299,18 +299,14 @@ static int sun6i_spi_transfer_one(struct spi_master *master,
299299
sun6i_spi_write(sspi, SUN6I_FIFO_CTL_REG,
300300
SUN6I_FIFO_CTL_RF_RST | SUN6I_FIFO_CTL_TF_RST);
301301

302-
303-
reg = sun6i_spi_read(sspi, SUN6I_TFR_CTL_REG);
304302
/*
305303
* If it's a TX only transfer, we don't want to fill the RX
306304
* FIFO with bogus data
307305
*/
308306
if (sspi->rx_buf)
309-
reg &= ~SUN6I_TFR_CTL_DHB;
307+
sun6i_spi_unset(sspi, SUN6I_TFR_CTL_REG, SUN6I_TFR_CTL_DHB);
310308
else
311-
reg |= SUN6I_TFR_CTL_DHB;
312-
313-
sun6i_spi_write(sspi, SUN6I_TFR_CTL_REG, reg);
309+
sun6i_spi_set(sspi, SUN6I_TFR_CTL_REG, SUN6I_TFR_CTL_DHB);
314310

315311

316312
/* Ensure that we have a parent clock fast enough */
@@ -361,11 +357,10 @@ static int sun6i_spi_transfer_one(struct spi_master *master,
361357
sun6i_spi_fill_fifo(sspi, sspi->fifo_depth);
362358

363359
/* Enable transfer complete interrupt */
364-
sun6i_spi_enable_interrupt(sspi, SUN6I_INT_CTL_TC);
360+
sun6i_spi_set(sspi, SUN6I_INT_CTL_REG, SUN6I_INT_CTL_TC);
365361

366362
/* Start the transfer */
367-
reg = sun6i_spi_read(sspi, SUN6I_TFR_CTL_REG);
368-
sun6i_spi_write(sspi, SUN6I_TFR_CTL_REG, reg | SUN6I_TFR_CTL_XCH);
363+
sun6i_spi_set(sspi, SUN6I_TFR_CTL_REG, SUN6I_TFR_CTL_XCH);
369364

370365
/* Wait for completion */
371366
ret = sun6i_spi_wait_for_transfer(spi, tfr);

0 commit comments

Comments
 (0)