Lines Matching refs:base

29 static struct sh_i2c *base;  variable
68 static void sh_i2c_send_stop(struct sh_i2c *base) in sh_i2c_send_stop() argument
70 clrbits_8(&base->iccr2, SH_I2C_ICCR2_BBSY | SH_I2C_ICCR2_SCP); in sh_i2c_send_stop()
73 static int check_icsr_bits(struct sh_i2c *base, u8 bits) in check_icsr_bits() argument
78 if (bits & readb(&base->icsr)) in check_icsr_bits()
86 static int check_stop(struct sh_i2c *base) in check_stop() argument
88 int ret = check_icsr_bits(base, SH_I2C_ICSR_STOP); in check_stop()
89 clrbits_8(&base->icsr, SH_I2C_ICSR_STOP); in check_stop()
94 static int check_tend(struct sh_i2c *base, int stop) in check_tend() argument
96 int ret = check_icsr_bits(base, SH_I2C_ICSR_TEND); in check_tend()
99 clrbits_8(&base->icsr, SH_I2C_ICSR_STOP); in check_tend()
100 sh_i2c_send_stop(base); in check_tend()
103 clrbits_8(&base->icsr, SH_I2C_ICSR_TEND); in check_tend()
107 static int check_tdre(struct sh_i2c *base) in check_tdre() argument
109 return check_icsr_bits(base, SH_I2C_ICSR_TDRE); in check_tdre()
112 static int check_rdrf(struct sh_i2c *base) in check_rdrf() argument
114 return check_icsr_bits(base, SH_I2C_ICSR_RDRF); in check_rdrf()
117 static int check_bbsy(struct sh_i2c *base) in check_bbsy() argument
122 if (!(SH_I2C_ICCR2_BBSY & readb(&base->iccr2))) in check_bbsy()
129 static int check_ackbr(struct sh_i2c *base) in check_ackbr() argument
134 if (!(SH_I2C_ICIER_ACKBR & readb(&base->icier))) in check_ackbr()
142 static void sh_i2c_reset(struct sh_i2c *base) in sh_i2c_reset() argument
144 setbits_8(&base->iccr2, SH_I2C_ICCR2_IICRST); in sh_i2c_reset()
148 clrbits_8(&base->iccr2, SH_I2C_ICCR2_IICRST); in sh_i2c_reset()
151 static int i2c_set_addr(struct sh_i2c *base, u8 id, u8 reg) in i2c_set_addr() argument
153 if (check_bbsy(base)) { in i2c_set_addr()
158 setbits_8(&base->iccr1, SH_I2C_ICCR1_MTRS); in i2c_set_addr()
159 clrsetbits_8(&base->iccr2, SH_I2C_ICCR2_SCP, SH_I2C_ICCR2_BBSY); in i2c_set_addr()
161 writeb((id << 1), &base->icdrt); in i2c_set_addr()
163 if (check_tend(base, 0)) { in i2c_set_addr()
168 if (check_ackbr(base)) { in i2c_set_addr()
169 check_tend(base, 0); in i2c_set_addr()
170 sh_i2c_send_stop(base); in i2c_set_addr()
174 writeb(reg, &base->icdrt); in i2c_set_addr()
176 if (check_tdre(base)) { in i2c_set_addr()
181 if (check_tend(base, 0)) { in i2c_set_addr()
193 i2c_raw_write(struct sh_i2c *base, u8 id, u8 reg, u8 *val, int size) in i2c_raw_write() argument
197 if (i2c_set_addr(base, id, reg)) { in i2c_raw_write()
203 writeb(val[i], &base->icdrt); in i2c_raw_write()
204 check_tdre(base); in i2c_raw_write()
207 check_tend(base, 1); in i2c_raw_write()
208 check_stop(base); in i2c_raw_write()
212 clrbits_8(&base->iccr1, SH_I2C_ICCR1_MTRS); in i2c_raw_write()
213 clrbits_8(&base->icsr, SH_I2C_ICSR_TDRE); in i2c_raw_write()
214 sh_i2c_reset(base); in i2c_raw_write()
219 static u8 i2c_raw_read(struct sh_i2c *base, u8 id, u8 reg) in i2c_raw_read() argument
223 if (i2c_set_addr(base, id, reg)) { in i2c_raw_read()
228 clrsetbits_8(&base->iccr2, SH_I2C_ICCR2_SCP, SH_I2C_ICCR2_BBSY); in i2c_raw_read()
229 writeb((id << 1) | 1, &base->icdrt); in i2c_raw_read()
231 if (check_tend(base, 0)) in i2c_raw_read()
234 clrsetbits_8(&base->iccr1, SH_I2C_ICCR1_TRS, SH_I2C_ICCR1_MST); in i2c_raw_read()
235 clrbits_8(&base->icsr, SH_I2C_ICSR_TDRE); in i2c_raw_read()
236 setbits_8(&base->icier, SH_I2C_ICIER_ACKBT); in i2c_raw_read()
237 setbits_8(&base->iccr1, SH_I2C_ICCR1_RCVD); in i2c_raw_read()
240 ret = readb(&base->icdrr); in i2c_raw_read()
242 if (check_rdrf(base)) { in i2c_raw_read()
247 clrbits_8(&base->icsr, SH_I2C_ICSR_STOP); in i2c_raw_read()
250 sh_i2c_send_stop(base); in i2c_raw_read()
252 if (check_stop(base)) { in i2c_raw_read()
257 clrbits_8(&base->iccr1, SH_I2C_ICCR1_MTRS); in i2c_raw_read()
258 clrbits_8(&base->icsr, SH_I2C_ICSR_TDRE); in i2c_raw_read()
261 ret = readb(&base->icdrr); in i2c_raw_read()
264 clrbits_8(&base->iccr1, SH_I2C_ICCR1_RCVD); in i2c_raw_read()
281 base = (void *)CONFIG_SH_I2C_BASE0; in i2c_set_bus_num()
284 base = (void *)CONFIG_SH_I2C_BASE1; in i2c_set_bus_num()
310 base = (struct sh_i2c *)CONFIG_SH_I2C_BASE0; in i2c_init()
320 sh_i2c_reset(base); in i2c_init()
323 writeb(SH_I2C_ICCR1_ICE | iccr1_cks, &base->iccr1); in i2c_init()
324 writeb(nf2cyc, &base->nf2cyc); in i2c_init()
344 buffer[i] = i2c_raw_read(base, chip, addr + i); in i2c_read()
364 return i2c_raw_write(base, chip, addr, buffer, len); in i2c_write()