Lines Matching refs:i2c_base

40 static void dw_i2c_enable(struct i2c_regs *i2c_base, bool enable)  in dw_i2c_enable()  argument
44 writel(ena, &i2c_base->ic_enable); in dw_i2c_enable()
47 static void dw_i2c_enable(struct i2c_regs *i2c_base, bool enable) in dw_i2c_enable() argument
53 writel(ena, &i2c_base->ic_enable); in dw_i2c_enable()
54 if ((readl(&i2c_base->ic_enable_status) & IC_ENABLE_0B) == ena) in dw_i2c_enable()
75 static unsigned int __dw_i2c_set_bus_speed(struct i2c_regs *i2c_base, in __dw_i2c_set_bus_speed() argument
91 dw_i2c_enable(i2c_base, false); in __dw_i2c_set_bus_speed()
93 cntl = (readl(&i2c_base->ic_con) & (~IC_CON_SPD_MSK)); in __dw_i2c_set_bus_speed()
106 writel(hcnt, &i2c_base->ic_hs_scl_hcnt); in __dw_i2c_set_bus_speed()
107 writel(lcnt, &i2c_base->ic_hs_scl_lcnt); in __dw_i2c_set_bus_speed()
120 writel(hcnt, &i2c_base->ic_ss_scl_hcnt); in __dw_i2c_set_bus_speed()
121 writel(lcnt, &i2c_base->ic_ss_scl_lcnt); in __dw_i2c_set_bus_speed()
134 writel(hcnt, &i2c_base->ic_fs_scl_hcnt); in __dw_i2c_set_bus_speed()
135 writel(lcnt, &i2c_base->ic_fs_scl_lcnt); in __dw_i2c_set_bus_speed()
139 writel(cntl, &i2c_base->ic_con); in __dw_i2c_set_bus_speed()
143 writel(scl_sda_cfg->sda_hold, &i2c_base->ic_sda_hold); in __dw_i2c_set_bus_speed()
146 dw_i2c_enable(i2c_base, true); in __dw_i2c_set_bus_speed()
157 static void i2c_setaddress(struct i2c_regs *i2c_base, unsigned int i2c_addr) in i2c_setaddress() argument
160 dw_i2c_enable(i2c_base, false); in i2c_setaddress()
162 writel(i2c_addr, &i2c_base->ic_tar); in i2c_setaddress()
165 dw_i2c_enable(i2c_base, true); in i2c_setaddress()
173 static void i2c_flush_rxfifo(struct i2c_regs *i2c_base) in i2c_flush_rxfifo() argument
175 while (readl(&i2c_base->ic_status) & IC_STATUS_RFNE) in i2c_flush_rxfifo()
176 readl(&i2c_base->ic_cmd_data); in i2c_flush_rxfifo()
184 static int i2c_wait_for_bb(struct i2c_regs *i2c_base) in i2c_wait_for_bb() argument
188 while ((readl(&i2c_base->ic_status) & IC_STATUS_MA) || in i2c_wait_for_bb()
189 !(readl(&i2c_base->ic_status) & IC_STATUS_TFE)) { in i2c_wait_for_bb()
199 static int i2c_xfer_init(struct i2c_regs *i2c_base, uchar chip, uint addr, in i2c_xfer_init() argument
202 if (i2c_wait_for_bb(i2c_base)) in i2c_xfer_init()
205 i2c_setaddress(i2c_base, chip); in i2c_xfer_init()
210 &i2c_base->ic_cmd_data); in i2c_xfer_init()
215 static int i2c_xfer_finish(struct i2c_regs *i2c_base) in i2c_xfer_finish() argument
220 if ((readl(&i2c_base->ic_raw_intr_stat) & IC_STOP_DET)) { in i2c_xfer_finish()
221 readl(&i2c_base->ic_clr_stop_det); in i2c_xfer_finish()
228 if (i2c_wait_for_bb(i2c_base)) { in i2c_xfer_finish()
233 i2c_flush_rxfifo(i2c_base); in i2c_xfer_finish()
248 static int __dw_i2c_read(struct i2c_regs *i2c_base, u8 dev, uint addr, in __dw_i2c_read() argument
273 if (i2c_xfer_init(i2c_base, dev, addr, alen)) in __dw_i2c_read()
287 writel(IC_CMD | IC_STOP, &i2c_base->ic_cmd_data); in __dw_i2c_read()
289 writel(IC_CMD, &i2c_base->ic_cmd_data); in __dw_i2c_read()
293 if (readl(&i2c_base->ic_status) & IC_STATUS_RFNE) { in __dw_i2c_read()
294 *buffer++ = (uchar)readl(&i2c_base->ic_cmd_data); in __dw_i2c_read()
303 return i2c_xfer_finish(i2c_base); in __dw_i2c_read()
316 static int __dw_i2c_write(struct i2c_regs *i2c_base, u8 dev, uint addr, in __dw_i2c_write() argument
341 if (i2c_xfer_init(i2c_base, dev, addr, alen)) in __dw_i2c_write()
346 if (readl(&i2c_base->ic_status) & IC_STATUS_TFNF) { in __dw_i2c_write()
349 &i2c_base->ic_cmd_data); in __dw_i2c_write()
351 writel(*buffer, &i2c_base->ic_cmd_data); in __dw_i2c_write()
362 return i2c_xfer_finish(i2c_base); in __dw_i2c_write()
372 static void __dw_i2c_init(struct i2c_regs *i2c_base, int speed, int slaveaddr) in __dw_i2c_init() argument
375 dw_i2c_enable(i2c_base, false); in __dw_i2c_init()
378 &i2c_base->ic_con); in __dw_i2c_init()
379 writel(IC_RX_TL, &i2c_base->ic_rx_tl); in __dw_i2c_init()
380 writel(IC_TX_TL, &i2c_base->ic_tx_tl); in __dw_i2c_init()
381 writel(IC_STOP_DET, &i2c_base->ic_intr_mask); in __dw_i2c_init()
383 __dw_i2c_set_bus_speed(i2c_base, NULL, speed); in __dw_i2c_init()
384 writel(slaveaddr, &i2c_base->ic_sar); in __dw_i2c_init()
388 dw_i2c_enable(i2c_base, true); in __dw_i2c_init()
447 struct i2c_regs *i2c_base = i2c_get_base(adap); in dw_i2c_probe() local
454 ret = __dw_i2c_read(i2c_base, dev, 0, 1, (uchar *)&tmp, 1); in dw_i2c_probe()
522 struct i2c_regs *i2c_base = i2c->regs;
527 ret = __dw_i2c_read(i2c_base, chip_addr, 0, 1, (uchar *)&tmp, 1);
529 __dw_i2c_init(i2c_base, 0, 0);