Lines Matching refs:i2c_base
41 static void 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()
48 static void dw_i2c_enable(struct i2c_regs *i2c_base, bool enable) in dw_i2c_enable() argument
54 writel(ena, &i2c_base->ic_enable); in dw_i2c_enable()
55 if ((readl(&i2c_base->ic_enable_status) & IC_ENABLE_0B) == ena) in dw_i2c_enable()
76 static unsigned int __dw_i2c_set_bus_speed(struct i2c_regs *i2c_base, in __dw_i2c_set_bus_speed() argument
92 dw_i2c_enable(i2c_base, false); in __dw_i2c_set_bus_speed()
94 cntl = (readl(&i2c_base->ic_con) & (~IC_CON_SPD_MSK)); in __dw_i2c_set_bus_speed()
107 writel(hcnt, &i2c_base->ic_hs_scl_hcnt); in __dw_i2c_set_bus_speed()
108 writel(lcnt, &i2c_base->ic_hs_scl_lcnt); in __dw_i2c_set_bus_speed()
121 writel(hcnt, &i2c_base->ic_ss_scl_hcnt); in __dw_i2c_set_bus_speed()
122 writel(lcnt, &i2c_base->ic_ss_scl_lcnt); in __dw_i2c_set_bus_speed()
135 writel(hcnt, &i2c_base->ic_fs_scl_hcnt); in __dw_i2c_set_bus_speed()
136 writel(lcnt, &i2c_base->ic_fs_scl_lcnt); in __dw_i2c_set_bus_speed()
140 writel(cntl, &i2c_base->ic_con); in __dw_i2c_set_bus_speed()
144 writel(scl_sda_cfg->sda_hold, &i2c_base->ic_sda_hold); in __dw_i2c_set_bus_speed()
147 dw_i2c_enable(i2c_base, true); in __dw_i2c_set_bus_speed()
158 static void i2c_setaddress(struct i2c_regs *i2c_base, unsigned int i2c_addr) in i2c_setaddress() argument
161 dw_i2c_enable(i2c_base, false); in i2c_setaddress()
163 writel(i2c_addr, &i2c_base->ic_tar); in i2c_setaddress()
166 dw_i2c_enable(i2c_base, true); in i2c_setaddress()
174 static void i2c_flush_rxfifo(struct i2c_regs *i2c_base) in i2c_flush_rxfifo() argument
176 while (readl(&i2c_base->ic_status) & IC_STATUS_RFNE) in i2c_flush_rxfifo()
177 readl(&i2c_base->ic_cmd_data); in i2c_flush_rxfifo()
185 static int i2c_wait_for_bb(struct i2c_regs *i2c_base) in i2c_wait_for_bb() argument
189 while ((readl(&i2c_base->ic_status) & IC_STATUS_MA) || in i2c_wait_for_bb()
190 !(readl(&i2c_base->ic_status) & IC_STATUS_TFE)) { in i2c_wait_for_bb()
200 static int i2c_xfer_init(struct i2c_regs *i2c_base, uchar chip, uint addr, in i2c_xfer_init() argument
203 if (i2c_wait_for_bb(i2c_base)) in i2c_xfer_init()
206 i2c_setaddress(i2c_base, chip); in i2c_xfer_init()
211 &i2c_base->ic_cmd_data); in i2c_xfer_init()
216 static int i2c_xfer_finish(struct i2c_regs *i2c_base) in i2c_xfer_finish() argument
221 if ((readl(&i2c_base->ic_raw_intr_stat) & IC_STOP_DET)) { in i2c_xfer_finish()
222 readl(&i2c_base->ic_clr_stop_det); in i2c_xfer_finish()
229 if (i2c_wait_for_bb(i2c_base)) { in i2c_xfer_finish()
234 i2c_flush_rxfifo(i2c_base); in i2c_xfer_finish()
249 static int __dw_i2c_read(struct i2c_regs *i2c_base, u8 dev, uint addr, in __dw_i2c_read() argument
274 if (i2c_xfer_init(i2c_base, dev, addr, alen)) in __dw_i2c_read()
288 writel(IC_CMD | IC_STOP, &i2c_base->ic_cmd_data); in __dw_i2c_read()
290 writel(IC_CMD, &i2c_base->ic_cmd_data); in __dw_i2c_read()
294 if (readl(&i2c_base->ic_status) & IC_STATUS_RFNE) { in __dw_i2c_read()
295 *buffer++ = (uchar)readl(&i2c_base->ic_cmd_data); in __dw_i2c_read()
304 return i2c_xfer_finish(i2c_base); in __dw_i2c_read()
317 static int __dw_i2c_write(struct i2c_regs *i2c_base, u8 dev, uint addr, in __dw_i2c_write() argument
342 if (i2c_xfer_init(i2c_base, dev, addr, alen)) in __dw_i2c_write()
347 if (readl(&i2c_base->ic_status) & IC_STATUS_TFNF) { in __dw_i2c_write()
350 &i2c_base->ic_cmd_data); in __dw_i2c_write()
352 writel(*buffer, &i2c_base->ic_cmd_data); in __dw_i2c_write()
363 return i2c_xfer_finish(i2c_base); in __dw_i2c_write()
373 static void __dw_i2c_init(struct i2c_regs *i2c_base, int speed, int slaveaddr) in __dw_i2c_init() argument
376 dw_i2c_enable(i2c_base, false); in __dw_i2c_init()
379 &i2c_base->ic_con); in __dw_i2c_init()
380 writel(IC_RX_TL, &i2c_base->ic_rx_tl); in __dw_i2c_init()
381 writel(IC_TX_TL, &i2c_base->ic_tx_tl); in __dw_i2c_init()
382 writel(IC_STOP_DET, &i2c_base->ic_intr_mask); in __dw_i2c_init()
384 __dw_i2c_set_bus_speed(i2c_base, NULL, speed); in __dw_i2c_init()
385 writel(slaveaddr, &i2c_base->ic_sar); in __dw_i2c_init()
389 dw_i2c_enable(i2c_base, true); in __dw_i2c_init()
448 struct i2c_regs *i2c_base = i2c_get_base(adap); in dw_i2c_probe() local
455 ret = __dw_i2c_read(i2c_base, dev, 0, 1, (uchar *)&tmp, 1); in dw_i2c_probe()
523 struct i2c_regs *i2c_base = i2c->regs;
528 ret = __dw_i2c_read(i2c_base, chip_addr, 0, 1, (uchar *)&tmp, 1);
530 __dw_i2c_init(i2c_base, 0, 0);