@@ -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
143143static 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