Lines Matching refs:i2c_base

35 			REG(&(i2c_base->i2c_con)) = 0;\
40 static int _wait_for_bus(struct i2c_regs *i2c_base) in _wait_for_bus() argument
44 REG(&(i2c_base->i2c_stat)) = 0xffff; in _wait_for_bus()
47 stat = REG(&(i2c_base->i2c_stat)); in _wait_for_bus()
49 REG(&(i2c_base->i2c_stat)) = 0xffff; in _wait_for_bus()
53 REG(&(i2c_base->i2c_stat)) = stat; in _wait_for_bus()
57 REG(&(i2c_base->i2c_stat)) = 0xffff; in _wait_for_bus()
61 static int _poll_i2c_irq(struct i2c_regs *i2c_base, int mask) in _poll_i2c_irq() argument
67 stat = REG(&(i2c_base->i2c_stat)); in _poll_i2c_irq()
72 REG(&(i2c_base->i2c_stat)) = 0xffff; in _poll_i2c_irq()
76 static void _flush_rx(struct i2c_regs *i2c_base) in _flush_rx() argument
79 if (!(REG(&(i2c_base->i2c_stat)) & I2C_STAT_RRDY)) in _flush_rx()
82 REG(&(i2c_base->i2c_drr)); in _flush_rx()
83 REG(&(i2c_base->i2c_stat)) = I2C_STAT_RRDY; in _flush_rx()
88 static uint _davinci_i2c_setspeed(struct i2c_regs *i2c_base, in _davinci_i2c_setspeed() argument
96 REG(&(i2c_base->i2c_psc)) = psc; /* 27MHz / (2 + 1) = 9MHz */ in _davinci_i2c_setspeed()
97 REG(&(i2c_base->i2c_scll)) = (div * 50) / 100; /* 50% Duty */ in _davinci_i2c_setspeed()
98 REG(&(i2c_base->i2c_sclh)) = div - REG(&(i2c_base->i2c_scll)); in _davinci_i2c_setspeed()
103 static void _davinci_i2c_init(struct i2c_regs *i2c_base, in _davinci_i2c_init() argument
106 if (REG(&(i2c_base->i2c_con)) & I2C_CON_EN) { in _davinci_i2c_init()
107 REG(&(i2c_base->i2c_con)) = 0; in _davinci_i2c_init()
111 _davinci_i2c_setspeed(i2c_base, speed); in _davinci_i2c_init()
113 REG(&(i2c_base->i2c_oa)) = slaveadd; in _davinci_i2c_init()
114 REG(&(i2c_base->i2c_cnt)) = 0; in _davinci_i2c_init()
117 REG(&(i2c_base->i2c_ie)) = I2C_IE_SCD_IE | I2C_IE_XRDY_IE | in _davinci_i2c_init()
121 REG(&(i2c_base->i2c_con)) = I2C_CON_EN; in _davinci_i2c_init()
126 static int _davinci_i2c_read(struct i2c_regs *i2c_base, uint8_t chip, in _davinci_i2c_read() argument
137 if (_wait_for_bus(i2c_base)) in _davinci_i2c_read()
143 REG(&(i2c_base->i2c_cnt)) = alen; in _davinci_i2c_read()
144 REG(&(i2c_base->i2c_sa)) = chip; in _davinci_i2c_read()
145 REG(&(i2c_base->i2c_con)) = tmp; in _davinci_i2c_read()
147 tmp = _poll_i2c_irq(i2c_base, I2C_STAT_XRDY | I2C_STAT_NACK); in _davinci_i2c_read()
155 REG(&(i2c_base->i2c_dxr)) = (addr >> 8) & 0xff; in _davinci_i2c_read()
157 REG(&(i2c_base->i2c_con)) = 0; in _davinci_i2c_read()
161 tmp = _poll_i2c_irq(i2c_base, in _davinci_i2c_read()
169 REG(&(i2c_base->i2c_dxr)) = addr & 0xff; in _davinci_i2c_read()
171 REG(&(i2c_base->i2c_con)) = 0; in _davinci_i2c_read()
175 tmp = _poll_i2c_irq(i2c_base, I2C_STAT_XRDY | in _davinci_i2c_read()
181 REG(&(i2c_base->i2c_con)) = 0; in _davinci_i2c_read()
189 REG(&(i2c_base->i2c_cnt)) = len & 0xffff; in _davinci_i2c_read()
190 REG(&(i2c_base->i2c_sa)) = chip; in _davinci_i2c_read()
191 REG(&(i2c_base->i2c_con)) = tmp; in _davinci_i2c_read()
194 tmp = _poll_i2c_irq(i2c_base, I2C_STAT_RRDY | I2C_STAT_NACK | in _davinci_i2c_read()
200 buf[i] = REG(&(i2c_base->i2c_drr)); in _davinci_i2c_read()
202 REG(&(i2c_base->i2c_con)) = 0; in _davinci_i2c_read()
207 tmp = _poll_i2c_irq(i2c_base, I2C_STAT_SCD | I2C_STAT_NACK); in _davinci_i2c_read()
212 REG(&(i2c_base->i2c_con)) = 0; in _davinci_i2c_read()
216 _flush_rx(i2c_base); in _davinci_i2c_read()
217 REG(&(i2c_base->i2c_stat)) = 0xffff; in _davinci_i2c_read()
218 REG(&(i2c_base->i2c_cnt)) = 0; in _davinci_i2c_read()
219 REG(&(i2c_base->i2c_con)) = 0; in _davinci_i2c_read()
224 static int _davinci_i2c_write(struct i2c_regs *i2c_base, uint8_t chip, in _davinci_i2c_write() argument
239 if (_wait_for_bus(i2c_base)) in _davinci_i2c_write()
245 REG(&(i2c_base->i2c_cnt)) = (alen == 0) ? in _davinci_i2c_write()
247 REG(&(i2c_base->i2c_sa)) = chip; in _davinci_i2c_write()
248 REG(&(i2c_base->i2c_con)) = tmp; in _davinci_i2c_write()
253 tmp = _poll_i2c_irq(i2c_base, I2C_STAT_XRDY | I2C_STAT_NACK); in _davinci_i2c_write()
258 REG(&(i2c_base->i2c_dxr)) = (addr >> 8) & 0xff; in _davinci_i2c_write()
260 REG(&(i2c_base->i2c_con)) = 0; in _davinci_i2c_write()
266 tmp = _poll_i2c_irq(i2c_base, I2C_STAT_XRDY | I2C_STAT_NACK); in _davinci_i2c_write()
271 REG(&(i2c_base->i2c_dxr)) = addr & 0xff; in _davinci_i2c_write()
273 REG(&(i2c_base->i2c_con)) = 0; in _davinci_i2c_write()
279 tmp = _poll_i2c_irq(i2c_base, I2C_STAT_XRDY | I2C_STAT_NACK); in _davinci_i2c_write()
284 REG(&(i2c_base->i2c_dxr)) = buf[i]; in _davinci_i2c_write()
289 tmp = _poll_i2c_irq(i2c_base, I2C_STAT_SCD | I2C_STAT_NACK); in _davinci_i2c_write()
294 REG(&(i2c_base->i2c_con)) = 0; in _davinci_i2c_write()
298 _flush_rx(i2c_base); in _davinci_i2c_write()
299 REG(&(i2c_base->i2c_stat)) = 0xffff; in _davinci_i2c_write()
300 REG(&(i2c_base->i2c_cnt)) = 0; in _davinci_i2c_write()
301 REG(&(i2c_base->i2c_con)) = 0; in _davinci_i2c_write()
306 static int _davinci_i2c_probe_chip(struct i2c_regs *i2c_base, uint8_t chip) in _davinci_i2c_probe_chip() argument
310 if (chip == REG(&(i2c_base->i2c_oa))) in _davinci_i2c_probe_chip()
313 REG(&(i2c_base->i2c_con)) = 0; in _davinci_i2c_probe_chip()
314 if (_wait_for_bus(i2c_base)) in _davinci_i2c_probe_chip()
318 REG(&(i2c_base->i2c_cnt)) = 1; in _davinci_i2c_probe_chip()
319 REG(&(i2c_base->i2c_sa)) = chip; in _davinci_i2c_probe_chip()
320 REG(&(i2c_base->i2c_con)) = (I2C_CON_EN | I2C_CON_MST | I2C_CON_STT | in _davinci_i2c_probe_chip()
324 if (!(REG(&(i2c_base->i2c_stat)) & I2C_STAT_NACK)) { in _davinci_i2c_probe_chip()
326 _flush_rx(i2c_base); in _davinci_i2c_probe_chip()
327 REG(&(i2c_base->i2c_stat)) = 0xffff; in _davinci_i2c_probe_chip()
329 REG(&(i2c_base->i2c_stat)) = 0xffff; in _davinci_i2c_probe_chip()
330 REG(&(i2c_base->i2c_con)) |= I2C_CON_STP; in _davinci_i2c_probe_chip()
332 if (_wait_for_bus(i2c_base)) in _davinci_i2c_probe_chip()
336 _flush_rx(i2c_base); in _davinci_i2c_probe_chip()
337 REG(&(i2c_base->i2c_stat)) = 0xffff; in _davinci_i2c_probe_chip()
338 REG(&(i2c_base->i2c_cnt)) = 0; in _davinci_i2c_probe_chip()
366 struct i2c_regs *i2c_base = davinci_get_base(adap); in davinci_i2c_setspeed() local
370 ret = _davinci_i2c_setspeed(i2c_base, speed); in davinci_i2c_setspeed()
378 struct i2c_regs *i2c_base = davinci_get_base(adap); in davinci_i2c_init() local
381 _davinci_i2c_init(i2c_base, speed, slaveadd); in davinci_i2c_init()
389 struct i2c_regs *i2c_base = davinci_get_base(adap); in davinci_i2c_read() local
390 return _davinci_i2c_read(i2c_base, chip, addr, alen, buf, len); in davinci_i2c_read()
396 struct i2c_regs *i2c_base = davinci_get_base(adap); in davinci_i2c_write() local
398 return _davinci_i2c_write(i2c_base, chip, addr, alen, buf, len); in davinci_i2c_write()
403 struct i2c_regs *i2c_base = davinci_get_base(adap); in davinci_i2c_probe_chip() local
405 return _davinci_i2c_probe_chip(i2c_base, chip); in davinci_i2c_probe_chip()