Lines Matching +full:imx7ulp +full:- +full:lpi2c

4  * SPDX-License-Identifier:	GPL-2.0+
11 #include <asm/arch/imx-regs.h>
33 status = readl(&regs->msr); in imx_lpci2c_check_busy_bus()
46 status = readl(&regs->msr); in imx_lpci2c_check_clear_error()
62 writel(0x7f00, &regs->msr); in imx_lpci2c_check_clear_error()
64 val = readl(&regs->mcr); in imx_lpci2c_check_clear_error()
66 writel(val, &regs->mcr); in imx_lpci2c_check_clear_error()
79 txcount = LPI2C_MFSR_TXCOUNT(readl(&regs->mfsr)); in bus_i2c_wait_for_tx_ready()
80 txcount = LPI2C_FIFO_SIZE - txcount; in bus_i2c_wait_for_tx_ready()
88 return -1; in bus_i2c_wait_for_tx_ready()
103 while (len--) { in bus_i2c_send()
109 writel(*txbuf++, &regs->mtdr); in bus_i2c_send()
132 writel(0x7f00, &regs->msr); in bus_i2c_receive()
134 val = LPI2C_MTDR_CMD(0x1) | LPI2C_MTDR_DATA(len - 1); in bus_i2c_receive()
135 writel(val, &regs->mtdr); in bus_i2c_receive()
137 while (len--) { in bus_i2c_receive()
147 return -1; in bus_i2c_receive()
149 val = readl(&regs->mrdr); in bus_i2c_receive()
168 writel(0x7f00, &regs->msr); in bus_i2c_start()
169 /* turn off auto-stop condition */ in bus_i2c_start()
170 val = readl(&regs->mcfgr1) & ~LPI2C_MCFGR1_AUTOSTOP_MASK; in bus_i2c_start()
171 writel(val, &regs->mcfgr1); in bus_i2c_start()
180 writel(val, &regs->mtdr); in bus_i2c_start()
197 writel(LPI2C_MTDR_CMD(0x2), &regs->mtdr); in bus_i2c_stop()
200 status = readl(&regs->msr); in bus_i2c_stop()
206 writel(status, &regs->msr); in bus_i2c_stop()
261 clock_rate = imx_get_i2cclk(bus->seq + 4); in bus_i2c_set_bus_speed()
263 return -EPERM; in bus_i2c_set_bus_speed()
265 mode = (readl(&regs->mcr) & LPI2C_MCR_MEN_MASK) >> LPI2C_MCR_MEN_SHIFT; in bus_i2c_set_bus_speed()
267 val = readl(&regs->mcr) & ~LPI2C_MCR_MEN_MASK; in bus_i2c_set_bus_speed()
268 writel(val | LPI2C_MCR_MEN(0), &regs->mcr); in bus_i2c_set_bus_speed()
278 abs_error = speed > rate ? speed - rate : rate - speed; in bus_i2c_set_bus_speed()
290 /* Standard, fast, fast mode plus and ultra-fast transfers. */ in bus_i2c_set_bus_speed()
297 writel(val, &regs->mccr0); in bus_i2c_set_bus_speed()
306 val = readl(&regs->mcfgr1) & ~LPI2C_MCFGR1_PRESCALE_MASK; in bus_i2c_set_bus_speed()
307 writel(val | LPI2C_MCFGR1_PRESCALE(best_pre), &regs->mcfgr1); in bus_i2c_set_bus_speed()
310 val = readl(&regs->mcr) & ~LPI2C_MCR_MEN_MASK; in bus_i2c_set_bus_speed()
311 writel(val | LPI2C_MCR_MEN(1), &regs->mcr); in bus_i2c_set_bus_speed()
325 writel(LPI2C_MCR_RST_MASK, &regs->mcr); in bus_i2c_init()
326 writel(0x0, &regs->mcr); in bus_i2c_init()
328 writel(LPI2C_MCR_DBGEN(0) | LPI2C_MCR_DOZEN(1), &regs->mcr); in bus_i2c_init()
330 val = readl(&regs->mcfgr0); in bus_i2c_init()
334 writel(val, &regs->mcfgr0); in bus_i2c_init()
336 val = readl(&regs->mcfgr1); in bus_i2c_init()
340 writel(val, &regs->mcfgr1); in bus_i2c_init()
344 /* enable lpi2c in master mode */ in bus_i2c_init()
345 val = readl(&regs->mcr) & ~LPI2C_MCR_MEN_MASK; in bus_i2c_init()
346 writel(val | LPI2C_MCR_MEN(1), &regs->mcr); in bus_i2c_init()
348 debug("i2c : controller bus %d, speed %d:\n", bus->seq, speed); in bus_i2c_init()
370 return -result; in imx_lpi2c_probe_chip()
382 for (; nmsgs > 0; nmsgs--, msg++) { in imx_lpi2c_xfer()
383 debug("i2c_xfer: chip=0x%x, len=0x%x\n", msg->addr, msg->len); in imx_lpi2c_xfer()
384 if (msg->flags & I2C_M_RD) in imx_lpi2c_xfer()
385 ret = bus_i2c_read(regs, msg->addr, msg->buf, msg->len); in imx_lpi2c_xfer()
387 ret = bus_i2c_write(regs, msg->addr, msg->buf, in imx_lpi2c_xfer()
388 msg->len); in imx_lpi2c_xfer()
411 i2c_bus->driver_data = dev_get_driver_data(bus); in imx_lpi2c_probe()
415 return -EINVAL; in imx_lpi2c_probe()
417 i2c_bus->base = addr; in imx_lpi2c_probe()
418 i2c_bus->index = bus->seq; in imx_lpi2c_probe()
419 i2c_bus->bus = bus; in imx_lpi2c_probe()
422 ret = init_i2c_power(bus->seq + 4); in imx_lpi2c_probe()
428 /* Enable clk, only i2c4-7 can be handled by A7 core */ in imx_lpi2c_probe()
429 ret = enable_i2c_clk(1, bus->seq + 4); in imx_lpi2c_probe()
438 bus->seq, i2c_bus->base, in imx_lpi2c_probe()
439 i2c_bus->speed); in imx_lpi2c_probe()
451 { .compatible = "fsl,imx7ulp-lpi2c", },