Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 93e4ad74 authored by Tomoya MORINAGA's avatar Tomoya MORINAGA Committed by Ben Dooks
Browse files

i2c-eg20t: Fix bus-idle waiting issue



Currently, when checking whether bus is idle or not,
if timeout occurs,
this function always returns success(zero).
This patch fixes the issue.

Signed-off-by: default avatarTomoya MORINAGA <tomoya-linux@dsn.lapis-semi.com>
Signed-off-by: default avatarBen Dooks <ben-linux@fluff.org>
parent 1fdb24e9
Loading
Loading
Loading
Loading
+9 −9
Original line number Diff line number Diff line
@@ -273,23 +273,23 @@ static s32 pch_i2c_wait_for_bus_idle(struct i2c_algo_pch_data *adap,
				     s32 timeout)
{
	void __iomem *p = adap->pch_base_address;
	ktime_t ns_val;

	if ((ioread32(p + PCH_I2CSR) & I2CMBB_BIT) == 0)
		return 0;

	/* MAX timeout value is timeout*1000*1000nsec */
	ktime_t ns_val = ktime_add_ns(ktime_get(), timeout*1000*1000);
	ns_val = ktime_add_ns(ktime_get(), timeout*1000*1000);
	do {
		if ((ioread32(p + PCH_I2CSR) & I2CMBB_BIT) == 0)
			break;
		msleep(20);
		if ((ioread32(p + PCH_I2CSR) & I2CMBB_BIT) == 0)
			return 0;
	} while (ktime_lt(ktime_get(), ns_val));

	pch_dbg(adap, "I2CSR = %x\n", ioread32(p + PCH_I2CSR));

	if (timeout == 0) {
	pch_err(adap, "%s: Timeout Error.return%d\n", __func__, -ETIME);
		return -ETIME;
	}

	return 0;
	return -ETIME;
}

/**