Lines Matching refs:i2c_base

119 static int wait_for_bb(struct i2c *i2c_base, int waitdelay)  argument
124 writew(0xFFFF, &i2c_base->stat); /* clear current interrupts...*/
126 while ((stat = readw(&i2c_base->stat) & I2C_STAT_BB) && timeout--) {
129 while ((stat = readw(&i2c_base->irqstatus_raw) &
132 writew(stat, &i2c_base->stat);
141 writew(0xFFFF, &i2c_base->stat); /* clear delayed stuff*/
149 static u16 wait_for_event(struct i2c *i2c_base, int waitdelay) argument
157 status = readw(&i2c_base->stat);
160 status = readw(&i2c_base->irqstatus_raw);
175 writew(0xFFFF, &i2c_base->stat);
182 static void flush_fifo(struct i2c *i2c_base) argument
191 stat = readw(&i2c_base->stat);
193 readb(&i2c_base->data);
194 writew(I2C_STAT_RRDY, &i2c_base->stat);
201 static int __omap24_i2c_setspeed(struct i2c *i2c_base, uint speed, argument
254 writew(0, &i2c_base->con);
255 writew(psc, &i2c_base->psc);
256 writew(scll, &i2c_base->scll);
257 writew(sclh, &i2c_base->sclh);
258 writew(I2C_CON_EN, &i2c_base->con);
259 writew(0xFFFF, &i2c_base->stat); /* clear all pending status */
264 static void omap24_i2c_deblock(struct i2c *i2c_base) argument
271 orgsystest = readw(&i2c_base->systest);
275 writew(systest, &i2c_base->systest);
278 writew(systest, &i2c_base->systest);
282 writew(systest, &i2c_base->systest);
289 writew(systest, &i2c_base->systest);
293 writew(systest, &i2c_base->systest);
299 writew(systest, &i2c_base->systest);
302 writew(systest, &i2c_base->systest);
306 writew(orgsystest, &i2c_base->systest);
309 static void __omap24_i2c_init(struct i2c *i2c_base, int speed, int slaveadd, argument
316 if (readw(&i2c_base->con) & I2C_CON_EN) {
317 writew(0, &i2c_base->con);
321 writew(0x2, &i2c_base->sysc); /* for ES2 after soft reset */
324 writew(I2C_CON_EN, &i2c_base->con);
325 while (!(readw(&i2c_base->syss) & I2C_SYSS_RDONE) && timeout--) {
333 if (0 != __omap24_i2c_setspeed(i2c_base, speed, waitdelay)) {
339 writew(slaveadd, &i2c_base->oa);
347 I2C_IE_NACK_IE | I2C_IE_AL_IE, &i2c_base->ie);
350 flush_fifo(i2c_base);
351 writew(0xFFFF, &i2c_base->stat);
354 if (wait_for_bb(i2c_base, *waitdelay))
356 omap24_i2c_deblock(i2c_base);
366 static int __omap24_i2c_probe(struct i2c *i2c_base, int waitdelay, uchar chip) argument
371 if (chip == readw(&i2c_base->oa))
375 if (wait_for_bb(i2c_base, waitdelay))
379 writew(chip, &i2c_base->sa);
382 I2C_CON_STP, &i2c_base->con);
384 status = wait_for_event(i2c_base, waitdelay);
405 writew(I2C_CON_MST | I2C_CON_TRX, &i2c_base->con); /* Reset */
408 I2C_CON_STP, &i2c_base->con); /* STP */
411 flush_fifo(i2c_base);
412 writew(0xFFFF, &i2c_base->stat);
429 static int __omap24_i2c_read(struct i2c *i2c_base, int waitdelay, uchar chip, argument
476 if (wait_for_bb(i2c_base, waitdelay))
480 writew(alen, &i2c_base->cnt);
482 writew(chip, &i2c_base->sa);
489 I2C_CON_TRX, &i2c_base->con);
493 I2C_CON_TRX, &i2c_base->con);
497 status = wait_for_event(i2c_base, waitdelay);
516 &i2c_base->data);
517 writew(I2C_STAT_XRDY, &i2c_base->stat);
521 writew(I2C_STAT_ARDY, &i2c_base->stat);
527 writew(chip, &i2c_base->sa);
529 writew(len, &i2c_base->cnt);
533 &i2c_base->con);
537 status = wait_for_event(i2c_base, waitdelay);
554 *buffer++ = readb(&i2c_base->data);
555 writew(I2C_STAT_RRDY, &i2c_base->stat);
558 writew(I2C_STAT_ARDY, &i2c_base->stat);
564 flush_fifo(i2c_base);
565 writew(0xFFFF, &i2c_base->stat);
570 static int __omap24_i2c_write(struct i2c *i2c_base, int waitdelay, uchar chip, argument
622 if (wait_for_bb(i2c_base, waitdelay))
626 writew(alen + len, &i2c_base->cnt);
628 writew(chip, &i2c_base->sa);
631 I2C_CON_STP, &i2c_base->con);
635 status = wait_for_event(i2c_base, waitdelay);
651 writeb((addr >> (8 * alen)) & 0xff, &i2c_base->data);
652 writew(I2C_STAT_XRDY, &i2c_base->stat);
662 status = wait_for_event(i2c_base, waitdelay);
670 writeb(buffer[i], &i2c_base->data);
671 writew(I2C_STAT_XRDY, &i2c_base->stat);
684 status = wait_for_event(i2c_base, waitdelay);
690 flush_fifo(i2c_base);
691 writew(0xFFFF, &i2c_base->stat);
735 struct i2c *i2c_base = omap24_get_base(adap); local
737 return __omap24_i2c_read(i2c_base, adap->waitdelay, chip, addr,
745 struct i2c *i2c_base = omap24_get_base(adap); local
747 return __omap24_i2c_write(i2c_base, adap->waitdelay, chip, addr,
753 struct i2c *i2c_base = omap24_get_base(adap); local
756 ret = __omap24_i2c_setspeed(i2c_base, speed, &adap->waitdelay);
769 struct i2c *i2c_base = omap24_get_base(adap); local
771 return __omap24_i2c_init(i2c_base, speed, slaveadd, &adap->waitdelay);
776 struct i2c *i2c_base = omap24_get_base(adap); local
778 return __omap24_i2c_probe(i2c_base, adap->waitdelay, chip);