Lines Matching defs:i2c

11 #include <i2c.h>
99 * @param i2c: pointer to the appropriate register bank
105 static int hsi2c_wait_for_trx(struct exynos5_hsi2c *i2c)
110 u32 int_status = readl(&i2c->usi_int_stat);
113 u32 trans_status = readl(&i2c->usi_trans_status);
116 writel(int_status, &i2c->usi_int_stat);
229 struct exynos5_hsi2c *i2c = i2c_bus->hsregs;
233 i2c_ctl = readl(&i2c->usi_ctl);
235 writel(i2c_ctl, &i2c->usi_ctl);
237 i2c_ctl = readl(&i2c->usi_ctl);
239 writel(i2c_ctl, &i2c->usi_ctl);
258 * @param i2c: pointer to the appropriate i2c register bank.
262 static unsigned hsi2c_poll_fifo(struct exynos5_hsi2c *i2c, bool rx_transfer)
267 while (readl(&i2c->usi_fifo_stat) & fifo_bit) {
268 if (readl(&i2c->usi_int_stat) & HSI2C_INT_I2C_EN) {
278 !(readl(&i2c->usi_fifo_stat) & fifo_bit))
297 * @param i2c: pointer to the appropriate i2c register bank.
298 * @param chip: slave address on the i2c bus (with read/write bit exlcuded)
301 * @param: issue_stop: set to true if i2c stop condition should be generated
306 static int hsi2c_prepare_transaction(struct exynos5_hsi2c *i2c,
320 writel(readl(&i2c->usi_timeout) & ~HSI2C_TIMEOUT_EN, &i2c->usi_timeout);
323 writel(HSI2C_SLV_ADDR_MAS(chip), &i2c->i2c_addr);
326 /* i2c master, read transaction */
328 &i2c->usi_ctl);
331 writel(conf | HSI2C_READ_WRITE, &i2c->usi_auto_conf);
333 /* i2c master, write transaction */
335 &i2c->usi_ctl);
338 writel(conf, &i2c->usi_auto_conf);
342 writel(HSI2C_INT_I2C_EN, &i2c->usi_int_stat);
348 * Wait while i2c bus is settling down (mostly stop gets completed).
350 static int hsi2c_wait_while_busy(struct exynos5_hsi2c *i2c)
354 while (readl(&i2c->usi_trans_status) & HSI2C_MASTER_BUSY) {
364 static int hsi2c_write(struct exynos5_hsi2c *i2c,
381 (i2c, chip, len + alen, false, issue_stop);
387 rv = hsi2c_poll_fifo(i2c, false);
392 writel(addr[i], &i2c->usi_txdata);
396 rv = hsi2c_poll_fifo(i2c, false);
401 writel(data[i], &i2c->usi_txdata);
404 rv = hsi2c_wait_for_trx(i2c);
408 int tmp_ret = hsi2c_wait_while_busy(i2c);
413 writel(HSI2C_FUNC_MODE_I2C, &i2c->usi_ctl); /* done */
417 static int hsi2c_read(struct exynos5_hsi2c *i2c,
436 rv = hsi2c_write(i2c, chip, addr, alen, NULL, 0, false);
441 rv = hsi2c_prepare_transaction(i2c, chip, len, true, true);
447 rv = hsi2c_poll_fifo(i2c, true);
452 data[i] = readl(&i2c->usi_rxdata);
455 rv = hsi2c_wait_for_trx(i2c);
458 tmp_ret = hsi2c_wait_while_busy(i2c);
462 writel(HSI2C_FUNC_MODE_I2C, &i2c->usi_ctl); /* done */