Lines Matching refs:i2c_base
34 REG(&(i2c_base->i2c_con)) = 0;\
39 static int _wait_for_bus(struct i2c_regs *i2c_base) in _wait_for_bus() argument
43 REG(&(i2c_base->i2c_stat)) = 0xffff; in _wait_for_bus()
46 stat = REG(&(i2c_base->i2c_stat)); in _wait_for_bus()
48 REG(&(i2c_base->i2c_stat)) = 0xffff; in _wait_for_bus()
52 REG(&(i2c_base->i2c_stat)) = stat; in _wait_for_bus()
56 REG(&(i2c_base->i2c_stat)) = 0xffff; in _wait_for_bus()
60 static int _poll_i2c_irq(struct i2c_regs *i2c_base, int mask) in _poll_i2c_irq() argument
66 stat = REG(&(i2c_base->i2c_stat)); in _poll_i2c_irq()
71 REG(&(i2c_base->i2c_stat)) = 0xffff; in _poll_i2c_irq()
75 static void _flush_rx(struct i2c_regs *i2c_base) in _flush_rx() argument
78 if (!(REG(&(i2c_base->i2c_stat)) & I2C_STAT_RRDY)) in _flush_rx()
81 REG(&(i2c_base->i2c_drr)); in _flush_rx()
82 REG(&(i2c_base->i2c_stat)) = I2C_STAT_RRDY; in _flush_rx()
87 static uint _davinci_i2c_setspeed(struct i2c_regs *i2c_base, in _davinci_i2c_setspeed() argument
95 REG(&(i2c_base->i2c_psc)) = psc; /* 27MHz / (2 + 1) = 9MHz */ in _davinci_i2c_setspeed()
96 REG(&(i2c_base->i2c_scll)) = (div * 50) / 100; /* 50% Duty */ in _davinci_i2c_setspeed()
97 REG(&(i2c_base->i2c_sclh)) = div - REG(&(i2c_base->i2c_scll)); in _davinci_i2c_setspeed()
102 static void _davinci_i2c_init(struct i2c_regs *i2c_base, in _davinci_i2c_init() argument
105 if (REG(&(i2c_base->i2c_con)) & I2C_CON_EN) { in _davinci_i2c_init()
106 REG(&(i2c_base->i2c_con)) = 0; in _davinci_i2c_init()
110 _davinci_i2c_setspeed(i2c_base, speed); in _davinci_i2c_init()
112 REG(&(i2c_base->i2c_oa)) = slaveadd; in _davinci_i2c_init()
113 REG(&(i2c_base->i2c_cnt)) = 0; in _davinci_i2c_init()
116 REG(&(i2c_base->i2c_ie)) = I2C_IE_SCD_IE | I2C_IE_XRDY_IE | in _davinci_i2c_init()
120 REG(&(i2c_base->i2c_con)) = I2C_CON_EN; in _davinci_i2c_init()
125 static int _davinci_i2c_read(struct i2c_regs *i2c_base, uint8_t chip, in _davinci_i2c_read() argument
136 if (_wait_for_bus(i2c_base)) in _davinci_i2c_read()
142 REG(&(i2c_base->i2c_cnt)) = alen; in _davinci_i2c_read()
143 REG(&(i2c_base->i2c_sa)) = chip; in _davinci_i2c_read()
144 REG(&(i2c_base->i2c_con)) = tmp; in _davinci_i2c_read()
146 tmp = _poll_i2c_irq(i2c_base, I2C_STAT_XRDY | I2C_STAT_NACK); in _davinci_i2c_read()
154 REG(&(i2c_base->i2c_dxr)) = (addr >> 8) & 0xff; in _davinci_i2c_read()
156 REG(&(i2c_base->i2c_con)) = 0; in _davinci_i2c_read()
160 tmp = _poll_i2c_irq(i2c_base, in _davinci_i2c_read()
168 REG(&(i2c_base->i2c_dxr)) = addr & 0xff; in _davinci_i2c_read()
170 REG(&(i2c_base->i2c_con)) = 0; in _davinci_i2c_read()
174 tmp = _poll_i2c_irq(i2c_base, I2C_STAT_XRDY | in _davinci_i2c_read()
180 REG(&(i2c_base->i2c_con)) = 0; in _davinci_i2c_read()
188 REG(&(i2c_base->i2c_cnt)) = len & 0xffff; in _davinci_i2c_read()
189 REG(&(i2c_base->i2c_sa)) = chip; in _davinci_i2c_read()
190 REG(&(i2c_base->i2c_con)) = tmp; in _davinci_i2c_read()
193 tmp = _poll_i2c_irq(i2c_base, I2C_STAT_RRDY | I2C_STAT_NACK | in _davinci_i2c_read()
199 buf[i] = REG(&(i2c_base->i2c_drr)); in _davinci_i2c_read()
201 REG(&(i2c_base->i2c_con)) = 0; in _davinci_i2c_read()
206 tmp = _poll_i2c_irq(i2c_base, I2C_STAT_SCD | I2C_STAT_NACK); in _davinci_i2c_read()
211 REG(&(i2c_base->i2c_con)) = 0; in _davinci_i2c_read()
215 _flush_rx(i2c_base); in _davinci_i2c_read()
216 REG(&(i2c_base->i2c_stat)) = 0xffff; in _davinci_i2c_read()
217 REG(&(i2c_base->i2c_cnt)) = 0; in _davinci_i2c_read()
218 REG(&(i2c_base->i2c_con)) = 0; in _davinci_i2c_read()
223 static int _davinci_i2c_write(struct i2c_regs *i2c_base, uint8_t chip, in _davinci_i2c_write() argument
238 if (_wait_for_bus(i2c_base)) in _davinci_i2c_write()
244 REG(&(i2c_base->i2c_cnt)) = (alen == 0) ? in _davinci_i2c_write()
246 REG(&(i2c_base->i2c_sa)) = chip; in _davinci_i2c_write()
247 REG(&(i2c_base->i2c_con)) = tmp; in _davinci_i2c_write()
252 tmp = _poll_i2c_irq(i2c_base, I2C_STAT_XRDY | I2C_STAT_NACK); in _davinci_i2c_write()
257 REG(&(i2c_base->i2c_dxr)) = (addr >> 8) & 0xff; in _davinci_i2c_write()
259 REG(&(i2c_base->i2c_con)) = 0; in _davinci_i2c_write()
265 tmp = _poll_i2c_irq(i2c_base, I2C_STAT_XRDY | I2C_STAT_NACK); in _davinci_i2c_write()
270 REG(&(i2c_base->i2c_dxr)) = addr & 0xff; in _davinci_i2c_write()
272 REG(&(i2c_base->i2c_con)) = 0; in _davinci_i2c_write()
278 tmp = _poll_i2c_irq(i2c_base, I2C_STAT_XRDY | I2C_STAT_NACK); in _davinci_i2c_write()
283 REG(&(i2c_base->i2c_dxr)) = buf[i]; in _davinci_i2c_write()
288 tmp = _poll_i2c_irq(i2c_base, I2C_STAT_SCD | I2C_STAT_NACK); in _davinci_i2c_write()
293 REG(&(i2c_base->i2c_con)) = 0; in _davinci_i2c_write()
297 _flush_rx(i2c_base); in _davinci_i2c_write()
298 REG(&(i2c_base->i2c_stat)) = 0xffff; in _davinci_i2c_write()
299 REG(&(i2c_base->i2c_cnt)) = 0; in _davinci_i2c_write()
300 REG(&(i2c_base->i2c_con)) = 0; in _davinci_i2c_write()
305 static int _davinci_i2c_probe_chip(struct i2c_regs *i2c_base, uint8_t chip) in _davinci_i2c_probe_chip() argument
309 if (chip == REG(&(i2c_base->i2c_oa))) in _davinci_i2c_probe_chip()
312 REG(&(i2c_base->i2c_con)) = 0; in _davinci_i2c_probe_chip()
313 if (_wait_for_bus(i2c_base)) in _davinci_i2c_probe_chip()
317 REG(&(i2c_base->i2c_cnt)) = 1; in _davinci_i2c_probe_chip()
318 REG(&(i2c_base->i2c_sa)) = chip; in _davinci_i2c_probe_chip()
319 REG(&(i2c_base->i2c_con)) = (I2C_CON_EN | I2C_CON_MST | I2C_CON_STT | in _davinci_i2c_probe_chip()
323 if (!(REG(&(i2c_base->i2c_stat)) & I2C_STAT_NACK)) { in _davinci_i2c_probe_chip()
325 _flush_rx(i2c_base); in _davinci_i2c_probe_chip()
326 REG(&(i2c_base->i2c_stat)) = 0xffff; in _davinci_i2c_probe_chip()
328 REG(&(i2c_base->i2c_stat)) = 0xffff; in _davinci_i2c_probe_chip()
329 REG(&(i2c_base->i2c_con)) |= I2C_CON_STP; in _davinci_i2c_probe_chip()
331 if (_wait_for_bus(i2c_base)) in _davinci_i2c_probe_chip()
335 _flush_rx(i2c_base); in _davinci_i2c_probe_chip()
336 REG(&(i2c_base->i2c_stat)) = 0xffff; in _davinci_i2c_probe_chip()
337 REG(&(i2c_base->i2c_cnt)) = 0; in _davinci_i2c_probe_chip()
365 struct i2c_regs *i2c_base = davinci_get_base(adap); in davinci_i2c_setspeed() local
369 ret = _davinci_i2c_setspeed(i2c_base, speed); in davinci_i2c_setspeed()
377 struct i2c_regs *i2c_base = davinci_get_base(adap); in davinci_i2c_init() local
380 _davinci_i2c_init(i2c_base, speed, slaveadd); in davinci_i2c_init()
388 struct i2c_regs *i2c_base = davinci_get_base(adap); in davinci_i2c_read() local
389 return _davinci_i2c_read(i2c_base, chip, addr, alen, buf, len); in davinci_i2c_read()
395 struct i2c_regs *i2c_base = davinci_get_base(adap); in davinci_i2c_write() local
397 return _davinci_i2c_write(i2c_base, chip, addr, alen, buf, len); in davinci_i2c_write()
402 struct i2c_regs *i2c_base = davinci_get_base(adap); in davinci_i2c_probe_chip() local
404 return _davinci_i2c_probe_chip(i2c_base, chip); in davinci_i2c_probe_chip()