Lines Matching refs:i2c
102 static int hsi2c_wait_for_trx(struct exynos5_hsi2c *i2c) in hsi2c_wait_for_trx() argument
107 u32 int_status = readl(&i2c->usi_int_stat); in hsi2c_wait_for_trx()
110 u32 trans_status = readl(&i2c->usi_trans_status); in hsi2c_wait_for_trx()
113 writel(int_status, &i2c->usi_int_stat); in hsi2c_wait_for_trx()
226 struct exynos5_hsi2c *i2c = i2c_bus->hsregs; in exynos5_i2c_reset() local
230 i2c_ctl = readl(&i2c->usi_ctl); in exynos5_i2c_reset()
232 writel(i2c_ctl, &i2c->usi_ctl); in exynos5_i2c_reset()
234 i2c_ctl = readl(&i2c->usi_ctl); in exynos5_i2c_reset()
236 writel(i2c_ctl, &i2c->usi_ctl); in exynos5_i2c_reset()
259 static unsigned hsi2c_poll_fifo(struct exynos5_hsi2c *i2c, bool rx_transfer) in hsi2c_poll_fifo() argument
264 while (readl(&i2c->usi_fifo_stat) & fifo_bit) { in hsi2c_poll_fifo()
265 if (readl(&i2c->usi_int_stat) & HSI2C_INT_I2C_EN) { in hsi2c_poll_fifo()
275 !(readl(&i2c->usi_fifo_stat) & fifo_bit)) in hsi2c_poll_fifo()
303 static int hsi2c_prepare_transaction(struct exynos5_hsi2c *i2c, in hsi2c_prepare_transaction() argument
317 writel(readl(&i2c->usi_timeout) & ~HSI2C_TIMEOUT_EN, &i2c->usi_timeout); in hsi2c_prepare_transaction()
320 writel(HSI2C_SLV_ADDR_MAS(chip), &i2c->i2c_addr); in hsi2c_prepare_transaction()
325 &i2c->usi_ctl); in hsi2c_prepare_transaction()
328 writel(conf | HSI2C_READ_WRITE, &i2c->usi_auto_conf); in hsi2c_prepare_transaction()
332 &i2c->usi_ctl); in hsi2c_prepare_transaction()
335 writel(conf, &i2c->usi_auto_conf); in hsi2c_prepare_transaction()
339 writel(HSI2C_INT_I2C_EN, &i2c->usi_int_stat); in hsi2c_prepare_transaction()
347 static int hsi2c_wait_while_busy(struct exynos5_hsi2c *i2c) in hsi2c_wait_while_busy() argument
351 while (readl(&i2c->usi_trans_status) & HSI2C_MASTER_BUSY) { in hsi2c_wait_while_busy()
361 static int hsi2c_write(struct exynos5_hsi2c *i2c, in hsi2c_write() argument
378 (i2c, chip, len + alen, false, issue_stop); in hsi2c_write()
384 rv = hsi2c_poll_fifo(i2c, false); in hsi2c_write()
389 writel(addr[i], &i2c->usi_txdata); in hsi2c_write()
393 rv = hsi2c_poll_fifo(i2c, false); in hsi2c_write()
398 writel(data[i], &i2c->usi_txdata); in hsi2c_write()
401 rv = hsi2c_wait_for_trx(i2c); in hsi2c_write()
405 int tmp_ret = hsi2c_wait_while_busy(i2c); in hsi2c_write()
410 writel(HSI2C_FUNC_MODE_I2C, &i2c->usi_ctl); /* done */ in hsi2c_write()
414 static int hsi2c_read(struct exynos5_hsi2c *i2c, in hsi2c_read() argument
433 rv = hsi2c_write(i2c, chip, addr, alen, NULL, 0, false); in hsi2c_read()
438 rv = hsi2c_prepare_transaction(i2c, chip, len, true, true); in hsi2c_read()
444 rv = hsi2c_poll_fifo(i2c, true); in hsi2c_read()
449 data[i] = readl(&i2c->usi_rxdata); in hsi2c_read()
452 rv = hsi2c_wait_for_trx(i2c); in hsi2c_read()
455 tmp_ret = hsi2c_wait_while_busy(i2c); in hsi2c_read()
459 writel(HSI2C_FUNC_MODE_I2C, &i2c->usi_ctl); /* done */ in hsi2c_read()