Lines Matching refs:i2c
119 static void rk_i2c_set_clk(struct rk_i2c *i2c, unsigned int scl_rate) in rk_i2c_set_clk() argument
125 i2c_rate = clk_get_rate(&i2c->clk); in rk_i2c_set_clk()
132 writel(I2C_CLKDIV_VAL(divl, divh), &i2c->regs->clkdiv); in rk_i2c_set_clk()
137 debug("set clk(I2C_CLKDIV: 0x%08x)\n", readl(&i2c->regs->clkdiv)); in rk_i2c_set_clk()
140 static int rk_i2c_adapter_clk(struct rk_i2c *i2c, unsigned int scl_rate) in rk_i2c_adapter_clk() argument
147 unsigned int i2c_rate = clk_get_rate(&i2c->clk); in rk_i2c_adapter_clk()
201 i2c->cfg = I2C_CON_SDA_CFG(1) | I2C_CON_STA_CFG(start_setup); in rk_i2c_adapter_clk()
203 &i2c->regs->clkdiv); in rk_i2c_adapter_clk()
205 debug("set clk(I2C_TIMING: 0x%08x)\n", i2c->cfg); in rk_i2c_adapter_clk()
206 debug("set clk(I2C_CLKDIV: 0x%08x)\n", readl(&i2c->regs->clkdiv)); in rk_i2c_adapter_clk()
211 static int rk_i2c_send_start_bit(struct rk_i2c *i2c, u32 con) in rk_i2c_send_start_bit() argument
213 struct i2c_regs *regs = i2c->regs; in rk_i2c_send_start_bit()
220 writel(I2C_CON_EN | I2C_CON_START | i2c->cfg | con, ®s->con); in rk_i2c_send_start_bit()
237 writel(I2C_CON_EN | i2c->cfg | con, ®s->con); in rk_i2c_send_start_bit()
242 static int rk_i2c_send_stop_bit(struct rk_i2c *i2c) in rk_i2c_send_stop_bit() argument
244 struct i2c_regs *regs = i2c->regs; in rk_i2c_send_stop_bit()
250 writel(I2C_CON_EN | i2c->cfg | I2C_CON_STOP, ®s->con); in rk_i2c_send_stop_bit()
271 static inline void rk_i2c_disable(struct rk_i2c *i2c) in rk_i2c_disable() argument
273 writel(0, &i2c->regs->ien); in rk_i2c_disable()
274 writel(I2C_IPD_ALL_CLEAN, &i2c->regs->ipd); in rk_i2c_disable()
275 writel(0, &i2c->regs->con); in rk_i2c_disable()
278 static int rk_i2c_read(struct rk_i2c *i2c, uchar chip, uint reg, uint r_len, in rk_i2c_read() argument
281 struct i2c_regs *regs = i2c->regs; in rk_i2c_read()
330 writel(con | i2c->cfg, ®s->con); in rk_i2c_read()
333 err = rk_i2c_send_start_bit(i2c, con); in rk_i2c_read()
380 static int rk_i2c_write(struct rk_i2c *i2c, uchar chip, uint reg, uint r_len, in rk_i2c_write() argument
383 struct i2c_regs *regs = i2c->regs; in rk_i2c_write()
425 err = rk_i2c_send_start_bit(i2c, I2C_CON_EN | in rk_i2c_write()
431 writel(I2C_CON_EN | I2C_CON_MOD(I2C_MODE_TX) | i2c->cfg, in rk_i2c_write()
468 struct rk_i2c *i2c = dev_get_priv(bus); in rockchip_i2c_xfer() local
485 i2c->cfg |= I2C_CON_ACTACK; in rockchip_i2c_xfer()
491 ret = rk_i2c_read(i2c, msg->addr, 0, 0, msg->buf, in rockchip_i2c_xfer()
495 ret = rk_i2c_write(i2c, msg->addr, 0, 0, msg->buf, in rockchip_i2c_xfer()
506 rk_i2c_send_stop_bit(i2c); in rockchip_i2c_xfer()
507 rk_i2c_disable(i2c); in rockchip_i2c_xfer()
514 static unsigned int rk3x_i2c_get_version(struct rk_i2c *i2c) in rk3x_i2c_get_version() argument
516 struct i2c_regs *regs = i2c->regs; in rk3x_i2c_get_version()
526 struct rk_i2c *i2c = dev_get_priv(bus); in rockchip_i2c_set_bus_speed() local
528 if (rk3x_i2c_get_version(i2c) >= RK_I2C_VERSION1) in rockchip_i2c_set_bus_speed()
529 rk_i2c_adapter_clk(i2c, speed); in rockchip_i2c_set_bus_speed()
531 rk_i2c_set_clk(i2c, speed); in rockchip_i2c_set_bus_speed()