Lines Matching refs:i2c

103 static int hsi2c_wait_for_trx(struct exynos5_hsi2c *i2c)  in hsi2c_wait_for_trx()  argument
108 u32 int_status = readl(&i2c->usi_int_stat); in hsi2c_wait_for_trx()
111 u32 trans_status = readl(&i2c->usi_trans_status); in hsi2c_wait_for_trx()
114 writel(int_status, &i2c->usi_int_stat); in hsi2c_wait_for_trx()
227 struct exynos5_hsi2c *i2c = i2c_bus->hsregs; in exynos5_i2c_reset() local
231 i2c_ctl = readl(&i2c->usi_ctl); in exynos5_i2c_reset()
233 writel(i2c_ctl, &i2c->usi_ctl); in exynos5_i2c_reset()
235 i2c_ctl = readl(&i2c->usi_ctl); in exynos5_i2c_reset()
237 writel(i2c_ctl, &i2c->usi_ctl); in exynos5_i2c_reset()
260 static unsigned hsi2c_poll_fifo(struct exynos5_hsi2c *i2c, bool rx_transfer) in hsi2c_poll_fifo() argument
265 while (readl(&i2c->usi_fifo_stat) & fifo_bit) { in hsi2c_poll_fifo()
266 if (readl(&i2c->usi_int_stat) & HSI2C_INT_I2C_EN) { in hsi2c_poll_fifo()
276 !(readl(&i2c->usi_fifo_stat) & fifo_bit)) in hsi2c_poll_fifo()
304 static int hsi2c_prepare_transaction(struct exynos5_hsi2c *i2c, in hsi2c_prepare_transaction() argument
318 writel(readl(&i2c->usi_timeout) & ~HSI2C_TIMEOUT_EN, &i2c->usi_timeout); in hsi2c_prepare_transaction()
321 writel(HSI2C_SLV_ADDR_MAS(chip), &i2c->i2c_addr); in hsi2c_prepare_transaction()
326 &i2c->usi_ctl); in hsi2c_prepare_transaction()
329 writel(conf | HSI2C_READ_WRITE, &i2c->usi_auto_conf); in hsi2c_prepare_transaction()
333 &i2c->usi_ctl); in hsi2c_prepare_transaction()
336 writel(conf, &i2c->usi_auto_conf); in hsi2c_prepare_transaction()
340 writel(HSI2C_INT_I2C_EN, &i2c->usi_int_stat); in hsi2c_prepare_transaction()
348 static int hsi2c_wait_while_busy(struct exynos5_hsi2c *i2c) in hsi2c_wait_while_busy() argument
352 while (readl(&i2c->usi_trans_status) & HSI2C_MASTER_BUSY) { in hsi2c_wait_while_busy()
362 static int hsi2c_write(struct exynos5_hsi2c *i2c, in hsi2c_write() argument
379 (i2c, chip, len + alen, false, issue_stop); in hsi2c_write()
385 rv = hsi2c_poll_fifo(i2c, false); in hsi2c_write()
390 writel(addr[i], &i2c->usi_txdata); in hsi2c_write()
394 rv = hsi2c_poll_fifo(i2c, false); in hsi2c_write()
399 writel(data[i], &i2c->usi_txdata); in hsi2c_write()
402 rv = hsi2c_wait_for_trx(i2c); in hsi2c_write()
406 int tmp_ret = hsi2c_wait_while_busy(i2c); in hsi2c_write()
411 writel(HSI2C_FUNC_MODE_I2C, &i2c->usi_ctl); /* done */ in hsi2c_write()
415 static int hsi2c_read(struct exynos5_hsi2c *i2c, in hsi2c_read() argument
434 rv = hsi2c_write(i2c, chip, addr, alen, NULL, 0, false); in hsi2c_read()
439 rv = hsi2c_prepare_transaction(i2c, chip, len, true, true); in hsi2c_read()
445 rv = hsi2c_poll_fifo(i2c, true); in hsi2c_read()
450 data[i] = readl(&i2c->usi_rxdata); in hsi2c_read()
453 rv = hsi2c_wait_for_trx(i2c); in hsi2c_read()
456 tmp_ret = hsi2c_wait_while_busy(i2c); in hsi2c_read()
460 writel(HSI2C_FUNC_MODE_I2C, &i2c->usi_ctl); /* done */ in hsi2c_read()