blackfin: bf60x: twi: work around temporary anomaly 0501001
authorSonic Zhang <sonic.zhang@analog.com>
Tue, 15 May 2012 08:20:33 +0000 (16:20 +0800)
committerBob Liu <lliubbo@gmail.com>
Mon, 21 May 2012 06:55:03 +0000 (14:55 +0800)
Disable IRQ when reading MMR rcv_data8 and rcv_data16.

Signed-off-by: Sonic Zhang <sonic.zhang@analog.com>
Signed-off-by: Bob Liu <lliubbo@gmail.com>
arch/blackfin/include/asm/bfin_twi.h

index 72092108df1c9fe9c542736ce5551eeb9f53c287..87e6007b8f4a79eafbaf55497372698c2a346349 100644 (file)
@@ -83,8 +83,35 @@ DEFINE_TWI_REG(FIFO_CTL, fifo_ctl)
 DEFINE_TWI_REG(FIFO_STAT, fifo_stat)
 DEFINE_TWI_REG(XMT_DATA8, xmt_data8)
 DEFINE_TWI_REG(XMT_DATA16, xmt_data16)
+#if !ANOMALY_05001001
 DEFINE_TWI_REG(RCV_DATA8, rcv_data8)
 DEFINE_TWI_REG(RCV_DATA16, rcv_data16)
+#else
+static inline u16 read_RCV_DATA8(struct bfin_twi_iface *iface)
+{
+       u16 ret;
+       unsigned long flags;
+
+       flags = hard_local_irq_save();
+       ret = iface->regs_base->rcv_data8;
+       hard_local_irq_restore(flags);
+
+       return ret;
+}
+
+static inline u16 read_RCV_DATA16(struct bfin_twi_iface *iface)
+{
+       u16 ret;
+       unsigned long flags;
+
+       flags = hard_local_irq_save();
+       ret = iface->regs_base->rcv_data16;
+       hard_local_irq_restore(flags);
+
+       return ret;
+}
+#endif
+
 
 /*  ********************  TWO-WIRE INTERFACE (TWI) MASKS  ***********************/
 /* TWI_CLKDIV Macros (Use: *pTWI_CLKDIV = CLKLOW(x)|CLKHI(y);  )                               */