Lines Matching refs:i2c_base

41 static int  dw_i2c_enable(struct i2c_regs *i2c_base, bool enable)  in dw_i2c_enable()  argument
45 writel(ena, &i2c_base->ic_enable); in dw_i2c_enable()
50 static int dw_i2c_enable(struct i2c_regs *i2c_base, bool enable) in dw_i2c_enable() argument
56 writel(ena, &i2c_base->ic_enable); in dw_i2c_enable()
57 if ((readl(&i2c_base->ic_enable_status) & IC_ENABLE_0B) == ena) in dw_i2c_enable()
79 static unsigned int __dw_i2c_set_bus_speed(struct i2c_regs *i2c_base, in __dw_i2c_set_bus_speed() argument
95 dw_i2c_enable(i2c_base, false); in __dw_i2c_set_bus_speed()
97 cntl = (readl(&i2c_base->ic_con) & (~IC_CON_SPD_MSK)); in __dw_i2c_set_bus_speed()
110 writel(hcnt, &i2c_base->ic_hs_scl_hcnt); in __dw_i2c_set_bus_speed()
111 writel(lcnt, &i2c_base->ic_hs_scl_lcnt); in __dw_i2c_set_bus_speed()
124 writel(hcnt, &i2c_base->ic_ss_scl_hcnt); in __dw_i2c_set_bus_speed()
125 writel(lcnt, &i2c_base->ic_ss_scl_lcnt); in __dw_i2c_set_bus_speed()
138 writel(hcnt, &i2c_base->ic_fs_scl_hcnt); in __dw_i2c_set_bus_speed()
139 writel(lcnt, &i2c_base->ic_fs_scl_lcnt); in __dw_i2c_set_bus_speed()
143 writel(cntl, &i2c_base->ic_con); in __dw_i2c_set_bus_speed()
147 writel(scl_sda_cfg->sda_hold, &i2c_base->ic_sda_hold); in __dw_i2c_set_bus_speed()
150 dw_i2c_enable(i2c_base, true); in __dw_i2c_set_bus_speed()
161 static void i2c_setaddress(struct i2c_regs *i2c_base, unsigned int i2c_addr) in i2c_setaddress() argument
164 dw_i2c_enable(i2c_base, false); in i2c_setaddress()
166 writel(i2c_addr, &i2c_base->ic_tar); in i2c_setaddress()
169 dw_i2c_enable(i2c_base, true); in i2c_setaddress()
177 static void i2c_flush_rxfifo(struct i2c_regs *i2c_base) in i2c_flush_rxfifo() argument
179 while (readl(&i2c_base->ic_status) & IC_STATUS_RFNE) in i2c_flush_rxfifo()
180 readl(&i2c_base->ic_cmd_data); in i2c_flush_rxfifo()
188 static int i2c_wait_for_bb(struct i2c_regs *i2c_base) in i2c_wait_for_bb() argument
192 while ((readl(&i2c_base->ic_status) & IC_STATUS_MA) || in i2c_wait_for_bb()
193 !(readl(&i2c_base->ic_status) & IC_STATUS_TFE)) { in i2c_wait_for_bb()
203 static int i2c_xfer_init(struct i2c_regs *i2c_base, uchar chip, uint addr, in i2c_xfer_init() argument
206 if (i2c_wait_for_bb(i2c_base)) in i2c_xfer_init()
209 i2c_setaddress(i2c_base, chip); in i2c_xfer_init()
214 &i2c_base->ic_cmd_data); in i2c_xfer_init()
219 static int i2c_xfer_finish(struct i2c_regs *i2c_base) in i2c_xfer_finish() argument
224 if ((readl(&i2c_base->ic_raw_intr_stat) & IC_STOP_DET)) { in i2c_xfer_finish()
225 readl(&i2c_base->ic_clr_stop_det); in i2c_xfer_finish()
232 if (i2c_wait_for_bb(i2c_base)) { in i2c_xfer_finish()
237 i2c_flush_rxfifo(i2c_base); in i2c_xfer_finish()
252 static int __dw_i2c_read(struct i2c_regs *i2c_base, u8 dev, uint addr, in __dw_i2c_read() argument
277 if (i2c_xfer_init(i2c_base, dev, addr, alen)) in __dw_i2c_read()
291 writel(IC_CMD | IC_STOP, &i2c_base->ic_cmd_data); in __dw_i2c_read()
293 writel(IC_CMD, &i2c_base->ic_cmd_data); in __dw_i2c_read()
297 if (readl(&i2c_base->ic_status) & IC_STATUS_RFNE) { in __dw_i2c_read()
298 *buffer++ = (uchar)readl(&i2c_base->ic_cmd_data); in __dw_i2c_read()
307 return i2c_xfer_finish(i2c_base); in __dw_i2c_read()
320 static int __dw_i2c_write(struct i2c_regs *i2c_base, u8 dev, uint addr, in __dw_i2c_write() argument
345 if (i2c_xfer_init(i2c_base, dev, addr, alen)) in __dw_i2c_write()
350 if (readl(&i2c_base->ic_status) & IC_STATUS_TFNF) { in __dw_i2c_write()
353 &i2c_base->ic_cmd_data); in __dw_i2c_write()
355 writel(*buffer, &i2c_base->ic_cmd_data); in __dw_i2c_write()
366 return i2c_xfer_finish(i2c_base); in __dw_i2c_write()
376 static int __dw_i2c_init(struct i2c_regs *i2c_base, int speed, int slaveaddr) in __dw_i2c_init() argument
381 ret = dw_i2c_enable(i2c_base, false); in __dw_i2c_init()
386 &i2c_base->ic_con); in __dw_i2c_init()
387 writel(IC_RX_TL, &i2c_base->ic_rx_tl); in __dw_i2c_init()
388 writel(IC_TX_TL, &i2c_base->ic_tx_tl); in __dw_i2c_init()
389 writel(IC_STOP_DET, &i2c_base->ic_intr_mask); in __dw_i2c_init()
391 __dw_i2c_set_bus_speed(i2c_base, NULL, speed); in __dw_i2c_init()
392 writel(slaveaddr, &i2c_base->ic_sar); in __dw_i2c_init()
396 ret = dw_i2c_enable(i2c_base, true); in __dw_i2c_init()
459 struct i2c_regs *i2c_base = i2c_get_base(adap); in dw_i2c_probe() local
466 ret = __dw_i2c_read(i2c_base, dev, 0, 1, (uchar *)&tmp, 1); in dw_i2c_probe()
534 struct i2c_regs *i2c_base = i2c->regs;
539 ret = __dw_i2c_read(i2c_base, chip_addr, 0, 1, (uchar *)&tmp, 1);
541 __dw_i2c_init(i2c_base, 0, 0);