aboutsummaryrefslogtreecommitdiffstats
path: root/arch/blackfin
diff options
context:
space:
mode:
authorSonic Zhang <sonic.zhang@analog.com>2012-05-15 04:20:33 -0400
committerBob Liu <lliubbo@gmail.com>2012-05-21 02:55:03 -0400
commitc41704f509d1649f7ba0815c8d47c9563ff9b107 (patch)
tree38bfd638944b53e31567e2cf9dc9d8979d8fb3a2 /arch/blackfin
parent1e92bf6d80b5a0a137455c96bf6cdd9c1a5b531e (diff)
blackfin: bf60x: twi: work around temporary anomaly 0501001
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>
Diffstat (limited to 'arch/blackfin')
-rw-r--r--arch/blackfin/include/asm/bfin_twi.h27
1 files changed, 27 insertions, 0 deletions
diff --git a/arch/blackfin/include/asm/bfin_twi.h b/arch/blackfin/include/asm/bfin_twi.h
index 72092108df1c..87e6007b8f4a 100644
--- a/arch/blackfin/include/asm/bfin_twi.h
+++ b/arch/blackfin/include/asm/bfin_twi.h
@@ -83,8 +83,35 @@ DEFINE_TWI_REG(FIFO_CTL, fifo_ctl)
83DEFINE_TWI_REG(FIFO_STAT, fifo_stat) 83DEFINE_TWI_REG(FIFO_STAT, fifo_stat)
84DEFINE_TWI_REG(XMT_DATA8, xmt_data8) 84DEFINE_TWI_REG(XMT_DATA8, xmt_data8)
85DEFINE_TWI_REG(XMT_DATA16, xmt_data16) 85DEFINE_TWI_REG(XMT_DATA16, xmt_data16)
86#if !ANOMALY_05001001
86DEFINE_TWI_REG(RCV_DATA8, rcv_data8) 87DEFINE_TWI_REG(RCV_DATA8, rcv_data8)
87DEFINE_TWI_REG(RCV_DATA16, rcv_data16) 88DEFINE_TWI_REG(RCV_DATA16, rcv_data16)
89#else
90static inline u16 read_RCV_DATA8(struct bfin_twi_iface *iface)
91{
92 u16 ret;
93 unsigned long flags;
94
95 flags = hard_local_irq_save();
96 ret = iface->regs_base->rcv_data8;
97 hard_local_irq_restore(flags);
98
99 return ret;
100}
101
102static inline u16 read_RCV_DATA16(struct bfin_twi_iface *iface)
103{
104 u16 ret;
105 unsigned long flags;
106
107 flags = hard_local_irq_save();
108 ret = iface->regs_base->rcv_data16;
109 hard_local_irq_restore(flags);
110
111 return ret;
112}
113#endif
114
88 115
89/* ******************** TWO-WIRE INTERFACE (TWI) MASKS ***********************/ 116/* ******************** TWO-WIRE INTERFACE (TWI) MASKS ***********************/
90/* TWI_CLKDIV Macros (Use: *pTWI_CLKDIV = CLKLOW(x)|CLKHI(y); ) */ 117/* TWI_CLKDIV Macros (Use: *pTWI_CLKDIV = CLKLOW(x)|CLKHI(y); ) */