99 * Author: Srinidhi Kasagar <srinidhi.kasagar@stericsson.com>
1010 * Author: Sachin Verma <sachin.verma@st.com>
1111 */
12+ #include <linux/bitfield.h>
1213#include <linux/init.h>
1314#include <linux/module.h>
1415#include <linux/amba/bus.h>
4243#define I2C_ICR (0x038)
4344
4445/* Control registers */
45- #define I2C_CR_PE (0x1 << 0) /* Peripheral Enable */
46- #define I2C_CR_OM (0x3 << 1) /* Operating mode */
47- #define I2C_CR_SAM (0x1 << 3) /* Slave addressing mode */
48- #define I2C_CR_SM (0x3 << 4) /* Speed mode */
49- #define I2C_CR_SGCM (0x1 << 6) /* Slave general call mode */
50- #define I2C_CR_FTX (0x1 << 7) /* Flush Transmit */
51- #define I2C_CR_FRX (0x1 << 8) /* Flush Receive */
52- #define I2C_CR_DMA_TX_EN (0x1 << 9) /* DMA Tx enable */
53- #define I2C_CR_DMA_RX_EN (0x1 << 10) /* DMA Rx Enable */
54- #define I2C_CR_DMA_SLE (0x1 << 11) /* DMA sync. logic enable */
55- #define I2C_CR_LM (0x1 << 12) /* Loopback mode */
56- #define I2C_CR_FON (0x3 << 13) /* Filtering on */
57- #define I2C_CR_FS (0x3 << 15) /* Force stop enable */
46+ #define I2C_CR_PE BIT(0) /* Peripheral Enable */
47+ #define I2C_CR_OM GENMASK(2, 1) /* Operating mode */
48+ #define I2C_CR_SAM BIT(3) /* Slave addressing mode */
49+ #define I2C_CR_SM GENMASK(5, 4) /* Speed mode */
50+ #define I2C_CR_SGCM BIT(6) /* Slave general call mode */
51+ #define I2C_CR_FTX BIT(7) /* Flush Transmit */
52+ #define I2C_CR_FRX BIT(8) /* Flush Receive */
53+ #define I2C_CR_DMA_TX_EN BIT(9) /* DMA Tx enable */
54+ #define I2C_CR_DMA_RX_EN BIT(10) /* DMA Rx Enable */
55+ #define I2C_CR_DMA_SLE BIT(11) /* DMA sync. logic enable */
56+ #define I2C_CR_LM BIT(12) /* Loopback mode */
57+ #define I2C_CR_FON GENMASK(14, 13) /* Filtering on */
58+ #define I2C_CR_FS GENMASK(16, 15) /* Force stop enable */
59+
60+ /* Slave control register (SCR) */
61+ #define I2C_SCR_SLSU GENMASK(31, 16) /* Slave data setup time */
5862
5963/* Master controller (MCR) register */
60- #define I2C_MCR_OP (0x1 << 0) /* Operation */
61- #define I2C_MCR_A7 (0x7f << 1) /* 7-bit address */
62- #define I2C_MCR_EA10 (0x7 << 8) /* 10-bit Extended address */
63- #define I2C_MCR_SB (0x1 << 11) /* Extended address */
64- #define I2C_MCR_AM (0x3 << 12) /* Address type */
65- #define I2C_MCR_STOP (0x1 << 14) /* Stop condition */
66- #define I2C_MCR_LENGTH (0x7ff << 15) /* Transaction length */
64+ #define I2C_MCR_OP BIT(0) /* Operation */
65+ #define I2C_MCR_A7 GENMASK(7, 1) /* 7-bit address */
66+ #define I2C_MCR_EA10 GENMASK(10, 8) /* 10-bit Extended address */
67+ #define I2C_MCR_SB BIT( 11) /* Extended address */
68+ #define I2C_MCR_AM GENMASK(13, 12) /* Address type */
69+ #define I2C_MCR_STOP BIT( 14) /* Stop condition */
70+ #define I2C_MCR_LENGTH GENMASK(25, 15) /* Transaction length */
6771
6872/* Status register (SR) */
69- #define I2C_SR_OP (0x3 << 0) /* Operation */
70- #define I2C_SR_STATUS (0x3 << 2) /* controller status */
71- #define I2C_SR_CAUSE (0x7 << 4) /* Abort cause */
72- #define I2C_SR_TYPE (0x3 << 7) /* Receive type */
73- #define I2C_SR_LENGTH (0x7ff << 9) /* Transfer length */
73+ #define I2C_SR_OP GENMASK(1, 0) /* Operation */
74+ #define I2C_SR_STATUS GENMASK(3, 2) /* controller status */
75+ #define I2C_SR_CAUSE GENMASK(6, 4) /* Abort cause */
76+ #define I2C_SR_TYPE GENMASK(8, 7) /* Receive type */
77+ #define I2C_SR_LENGTH GENMASK(19, 9) /* Transfer length */
78+
79+ /* Baud-rate counter register (BRCR) */
80+ #define I2C_BRCR_BRCNT1 GENMASK(31, 16) /* Baud-rate counter 1 */
81+ #define I2C_BRCR_BRCNT2 GENMASK(15, 0) /* Baud-rate counter 2 */
7482
7583/* Interrupt mask set/clear (IMSCR) bits */
76- #define I2C_IT_TXFE (0x1 << 0)
77- #define I2C_IT_TXFNE (0x1 << 1)
78- #define I2C_IT_TXFF (0x1 << 2)
79- #define I2C_IT_TXFOVR (0x1 << 3)
80- #define I2C_IT_RXFE (0x1 << 4)
81- #define I2C_IT_RXFNF (0x1 << 5)
82- #define I2C_IT_RXFF (0x1 << 6)
83- #define I2C_IT_RFSR (0x1 << 16)
84- #define I2C_IT_RFSE (0x1 << 17)
85- #define I2C_IT_WTSR (0x1 << 18)
86- #define I2C_IT_MTD (0x1 << 19)
87- #define I2C_IT_STD (0x1 << 20)
88- #define I2C_IT_MAL (0x1 << 24)
89- #define I2C_IT_BERR (0x1 << 25)
90- #define I2C_IT_MTDWS (0x1 << 28)
91-
92- #define GEN_MASK (val , mask , sb ) (((val) << (sb)) & (mask))
84+ #define I2C_IT_TXFE BIT(0)
85+ #define I2C_IT_TXFNE BIT(1)
86+ #define I2C_IT_TXFF BIT(2)
87+ #define I2C_IT_TXFOVR BIT(3)
88+ #define I2C_IT_RXFE BIT(4)
89+ #define I2C_IT_RXFNF BIT(5)
90+ #define I2C_IT_RXFF BIT(6)
91+ #define I2C_IT_RFSR BIT(16)
92+ #define I2C_IT_RFSE BIT(17)
93+ #define I2C_IT_WTSR BIT(18)
94+ #define I2C_IT_MTD BIT(19)
95+ #define I2C_IT_STD BIT(20)
96+ #define I2C_IT_MAL BIT(24)
97+ #define I2C_IT_BERR BIT(25)
98+ #define I2C_IT_MTDWS BIT(28)
9399
94100/* some bits in ICR are reserved */
95101#define I2C_CLEAR_ALL_INTS 0x131f007f
@@ -128,6 +134,12 @@ enum i2c_operation {
128134 I2C_READ = 0x01
129135};
130136
137+ enum i2c_operating_mode {
138+ I2C_OM_SLAVE ,
139+ I2C_OM_MASTER ,
140+ I2C_OM_MASTER_OR_SLAVE ,
141+ };
142+
131143/**
132144 * struct i2c_nmk_client - client specific data
133145 * @slave_adr: 7-bit slave address
@@ -284,7 +296,10 @@ static int init_hw(struct nmk_i2c_dev *priv)
284296}
285297
286298/* enable peripheral, master mode operation */
287- #define DEFAULT_I2C_REG_CR ((1 << 1) | I2C_CR_PE)
299+ #define DEFAULT_I2C_REG_CR (FIELD_PREP(I2C_CR_OM, I2C_OM_MASTER) | I2C_CR_PE)
300+
301+ /* grab top three bits from extended I2C addresses */
302+ #define ADR_3MSB_BITS GENMASK(9, 7)
288303
289304/**
290305 * load_i2c_mcr_reg() - load the MCR register
@@ -296,41 +311,42 @@ static u32 load_i2c_mcr_reg(struct nmk_i2c_dev *priv, u16 flags)
296311 u32 mcr = 0 ;
297312 unsigned short slave_adr_3msb_bits ;
298313
299- mcr |= GEN_MASK ( priv -> cli .slave_adr , I2C_MCR_A7 , 1 );
314+ mcr |= FIELD_PREP ( I2C_MCR_A7 , priv -> cli .slave_adr );
300315
301316 if (unlikely (flags & I2C_M_TEN )) {
302317 /* 10-bit address transaction */
303- mcr |= GEN_MASK ( 2 , I2C_MCR_AM , 12 );
318+ mcr |= FIELD_PREP ( I2C_MCR_AM , 2 );
304319 /*
305320 * Get the top 3 bits.
306321 * EA10 represents extended address in MCR. This includes
307322 * the extension (MSB bits) of the 7 bit address loaded
308323 * in A7
309324 */
310- slave_adr_3msb_bits = (priv -> cli .slave_adr >> 7 ) & 0x7 ;
325+ slave_adr_3msb_bits = FIELD_GET (ADR_3MSB_BITS ,
326+ priv -> cli .slave_adr );
311327
312- mcr |= GEN_MASK ( slave_adr_3msb_bits , I2C_MCR_EA10 , 8 );
328+ mcr |= FIELD_PREP ( I2C_MCR_EA10 , slave_adr_3msb_bits );
313329 } else {
314330 /* 7-bit address transaction */
315- mcr |= GEN_MASK ( 1 , I2C_MCR_AM , 12 );
331+ mcr |= FIELD_PREP ( I2C_MCR_AM , 1 );
316332 }
317333
318334 /* start byte procedure not applied */
319- mcr |= GEN_MASK ( 0 , I2C_MCR_SB , 11 );
335+ mcr |= FIELD_PREP ( I2C_MCR_SB , 0 );
320336
321337 /* check the operation, master read/write? */
322338 if (priv -> cli .operation == I2C_WRITE )
323- mcr |= GEN_MASK ( I2C_WRITE , I2C_MCR_OP , 0 );
339+ mcr |= FIELD_PREP ( I2C_MCR_OP , I2C_WRITE );
324340 else
325- mcr |= GEN_MASK ( I2C_READ , I2C_MCR_OP , 0 );
341+ mcr |= FIELD_PREP ( I2C_MCR_OP , I2C_READ );
326342
327343 /* stop or repeated start? */
328344 if (priv -> stop )
329- mcr |= GEN_MASK ( 1 , I2C_MCR_STOP , 14 );
345+ mcr |= FIELD_PREP ( I2C_MCR_STOP , 1 );
330346 else
331- mcr &= ~( GEN_MASK ( 1 , I2C_MCR_STOP , 14 ) );
347+ mcr &= ~FIELD_PREP ( I2C_MCR_STOP , 1 );
332348
333- mcr |= GEN_MASK ( priv -> cli .count , I2C_MCR_LENGTH , 15 );
349+ mcr |= FIELD_PREP ( I2C_MCR_LENGTH , priv -> cli .count );
334350
335351 return mcr ;
336352}
@@ -383,7 +399,7 @@ static void setup_i2c_controller(struct nmk_i2c_dev *priv)
383399 slsu += 1 ;
384400
385401 dev_dbg (& priv -> adev -> dev , "calculated SLSU = %04x\n" , slsu );
386- writel (slsu << 16 , priv -> virtbase + I2C_SCR );
402+ writel (FIELD_PREP ( I2C_SCR_SLSU , slsu ) , priv -> virtbase + I2C_SCR );
387403
388404 /*
389405 * The spec says, in case of std. mode the divider is
@@ -399,8 +415,8 @@ static void setup_i2c_controller(struct nmk_i2c_dev *priv)
399415 * plus operation. Currently we do not supprt high speed mode
400416 * so set brcr1 to 0.
401417 */
402- brcr1 = 0 << 16 ;
403- brcr2 = ( i2c_clk / (priv -> clk_freq * div )) & 0xffff ;
418+ brcr1 = FIELD_PREP ( I2C_BRCR_BRCNT1 , 0 ) ;
419+ brcr2 = FIELD_PREP ( I2C_BRCR_BRCNT2 , i2c_clk / (priv -> clk_freq * div ));
404420
405421 /* set the baud rate counter register */
406422 writel ((brcr1 | brcr2 ), priv -> virtbase + I2C_BRCR );
@@ -414,12 +430,13 @@ static void setup_i2c_controller(struct nmk_i2c_dev *priv)
414430 if (priv -> sm > I2C_FREQ_MODE_FAST ) {
415431 dev_err (& priv -> adev -> dev ,
416432 "do not support this mode defaulting to std. mode\n" );
417- brcr2 = i2c_clk / (I2C_MAX_STANDARD_MODE_FREQ * 2 ) & 0xffff ;
433+ brcr2 = FIELD_PREP (I2C_BRCR_BRCNT2 ,
434+ i2c_clk / (I2C_MAX_STANDARD_MODE_FREQ * 2 ));
418435 writel ((brcr1 | brcr2 ), priv -> virtbase + I2C_BRCR );
419- writel (I2C_FREQ_MODE_STANDARD << 4 ,
420- priv -> virtbase + I2C_CR );
436+ writel (FIELD_PREP ( I2C_CR_SM , I2C_FREQ_MODE_STANDARD ) ,
437+ priv -> virtbase + I2C_CR );
421438 }
422- writel (priv -> sm << 4 , priv -> virtbase + I2C_CR );
439+ writel (FIELD_PREP ( I2C_CR_SM , priv -> sm ) , priv -> virtbase + I2C_CR );
423440
424441 /* set the Tx and Rx FIFO threshold */
425442 writel (priv -> tft , priv -> virtbase + I2C_TFTR );
@@ -583,13 +600,8 @@ static int nmk_i2c_xfer_one(struct nmk_i2c_dev *priv, u16 flags)
583600 u32 cause ;
584601
585602 i2c_sr = readl (priv -> virtbase + I2C_SR );
586- /*
587- * Check if the controller I2C operation status
588- * is set to ABORT(11b).
589- */
590- if (((i2c_sr >> 2 ) & 0x3 ) == 0x3 ) {
591- /* get the abort cause */
592- cause = (i2c_sr >> 4 ) & 0x7 ;
603+ if (FIELD_GET (I2C_SR_STATUS , i2c_sr ) == I2C_ABORT ) {
604+ cause = FIELD_GET (I2C_SR_CAUSE , i2c_sr );
593605 dev_err (& priv -> adev -> dev , "%s\n" ,
594606 cause >= ARRAY_SIZE (abort_causes ) ?
595607 "unknown reason" :
@@ -730,7 +742,7 @@ static irqreturn_t i2c_irq_handler(int irq, void *arg)
730742 misr = readl (priv -> virtbase + I2C_MISR );
731743
732744 src = __ffs (misr );
733- switch (( 1 << src )) {
745+ switch (BIT ( src )) {
734746
735747 /* Transmit FIFO nearly empty interrupt */
736748 case I2C_IT_TXFNE :
@@ -824,15 +836,18 @@ static irqreturn_t i2c_irq_handler(int irq, void *arg)
824836 * during the transaction.
825837 */
826838 case I2C_IT_BERR :
839+ {
840+ u32 sr ;
841+
842+ sr = readl (priv -> virtbase + I2C_SR );
827843 priv -> result = - EIO ;
828- /* get the status */
829- if (((readl (priv -> virtbase + I2C_SR ) >> 2 ) & 0x3 ) == I2C_ABORT )
844+ if (FIELD_GET (I2C_SR_STATUS , sr ) == I2C_ABORT )
830845 init_hw (priv );
831846
832847 i2c_set_bit (priv -> virtbase + I2C_ICR , I2C_IT_BERR );
833848 complete (& priv -> xfer_complete );
834-
835- break ;
849+ }
850+ break ;
836851
837852 /*
838853 * Tx FIFO overrun interrupt.
0 commit comments