+// SPDX-License-Identifier: GPL-2.0+
/*
* Copyright 2016 Freescale Semiconductors, Inc.
- *
- * SPDX-License-Identifier: GPL-2.0+
*/
#include <common.h>
#include <asm/io.h>
#include <asm/arch/clock.h>
#include <asm/arch/imx-regs.h>
-#include <asm/arch/imx_lpi2c.h>
+#include <imx_lpi2c.h>
#include <asm/arch/sys_proto.h>
#include <dm.h>
#include <fdtdec.h>
#include <i2c.h>
#define LPI2C_FIFO_SIZE 4
+#define LPI2C_NACK_TOUT_MS 1
#define LPI2C_TIMEOUT_MS 100
/* Weak linked function for overridden by some SoC power function */
{
lpi2c_status_t result;
u32 status;
+ ulong start_time;
result = bus_i2c_wait_for_tx_ready(regs);
if (result) {
/* send stop command */
writel(LPI2C_MTDR_CMD(0x2), ®s->mtdr);
- while (result == LPI2C_SUCESS) {
+ start_time = get_timer(0);
+ while (1) {
status = readl(®s->msr);
result = imx_lpci2c_check_clear_error(regs);
/* stop detect flag */
writel(status, ®s->msr);
break;
}
+
+ if (get_timer(start_time) > LPI2C_NACK_TOUT_MS) {
+ debug("stop timeout\n");
+ return -ETIMEDOUT;
+ }
}
return result;
}
result = bus_i2c_stop(regs);
- if (result) {
+ if (result)
bus_i2c_init(bus, 100000);
- return -result;
- }
return result;
}
static const struct udevice_id imx_lpi2c_ids[] = {
{ .compatible = "fsl,imx7ulp-lpi2c", },
+ { .compatible = "fsl,imx8qm-lpi2c", },
{}
};