i2c: i2c_cdns: Fix clearing of all interrupts
The arbitration lost interrupt was not getting cleared while clearing interrupts. This patch fixes this by adding arbitration lost interrupt as well during clear. This patch also removes hardcoded value and defined a macro for it. Signed-off-by: Siva Durga Prasad Paladugu <siva.durga.paladugu@xilinx.com> Signed-off-by: Michal Simek <michal.simek@xilinx.com> Reviewed-by: Heiko Schocher <hs@denx.de>
This commit is contained in:
		
							parent
							
								
									da53b0543d
								
							
						
					
					
						commit
						006265d063
					
				|  | @ -64,6 +64,16 @@ struct cdns_i2c_regs { | ||||||
| #define CDNS_I2C_INTERRUPT_RXUNF	0x00000080 | #define CDNS_I2C_INTERRUPT_RXUNF	0x00000080 | ||||||
| #define CDNS_I2C_INTERRUPT_ARBLOST	0x00000200 | #define CDNS_I2C_INTERRUPT_ARBLOST	0x00000200 | ||||||
| 
 | 
 | ||||||
|  | #define CDNS_I2C_INTERRUPTS_MASK	(CDNS_I2C_INTERRUPT_COMP | \ | ||||||
|  | 					CDNS_I2C_INTERRUPT_DATA | \ | ||||||
|  | 					CDNS_I2C_INTERRUPT_NACK | \ | ||||||
|  | 					CDNS_I2C_INTERRUPT_TO | \ | ||||||
|  | 					CDNS_I2C_INTERRUPT_SLVRDY | \ | ||||||
|  | 					CDNS_I2C_INTERRUPT_RXOVF | \ | ||||||
|  | 					CDNS_I2C_INTERRUPT_TXOVF | \ | ||||||
|  | 					CDNS_I2C_INTERRUPT_RXUNF | \ | ||||||
|  | 					CDNS_I2C_INTERRUPT_ARBLOST) | ||||||
|  | 
 | ||||||
| #define CDNS_I2C_FIFO_DEPTH		16 | #define CDNS_I2C_FIFO_DEPTH		16 | ||||||
| #define CDNS_I2C_TRANSFER_SIZE_MAX	255 /* Controller transfer limit */ | #define CDNS_I2C_TRANSFER_SIZE_MAX	255 /* Controller transfer limit */ | ||||||
| #define CDNS_I2C_TRANSFER_SIZE		(CDNS_I2C_TRANSFER_SIZE_MAX - 3) | #define CDNS_I2C_TRANSFER_SIZE		(CDNS_I2C_TRANSFER_SIZE_MAX - 3) | ||||||
|  | @ -241,7 +251,7 @@ static int cdns_i2c_write_data(struct i2c_cdns_bus *i2c_bus, u32 addr, u8 *data, | ||||||
| 		setbits_le32(®s->control, CDNS_I2C_CONTROL_HOLD); | 		setbits_le32(®s->control, CDNS_I2C_CONTROL_HOLD); | ||||||
| 
 | 
 | ||||||
| 	/* Clear the interrupts in status register */ | 	/* Clear the interrupts in status register */ | ||||||
| 	writel(0xFF, ®s->interrupt_status); | 	writel(CDNS_I2C_INTERRUPTS_MASK, ®s->interrupt_status); | ||||||
| 
 | 
 | ||||||
| 	writel(addr, ®s->address); | 	writel(addr, ®s->address); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue