|
@@ -38,7 +38,7 @@ Signed-off-by: Biwen Li <[email protected]>
|
|
|
/* Functions for DMA support */
|
|
|
static void i2c_imx_dma_request(struct imx_i2c_struct *i2c_imx,
|
|
|
dma_addr_t phy_addr)
|
|
|
-@@ -681,23 +692,33 @@ static void i2c_imx_stop(struct imx_i2c_
|
|
|
+@@ -705,21 +716,33 @@ static void i2c_imx_stop(struct imx_i2c_
|
|
|
imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2CR);
|
|
|
}
|
|
|
|
|
@@ -57,9 +57,7 @@ Signed-off-by: Biwen Li <[email protected]>
|
|
|
- if (temp & I2SR_IIF) {
|
|
|
- /* save status register */
|
|
|
- i2c_imx->i2csr = temp;
|
|
|
-- temp &= ~I2SR_IIF;
|
|
|
-- temp |= (i2c_imx->hwdata->i2sr_clr_opcode & I2SR_IIF);
|
|
|
-- imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2SR);
|
|
|
+- i2c_imx_clear_irq(i2c_imx, I2SR_IIF);
|
|
|
- wake_up(&i2c_imx->queue);
|
|
|
- return IRQ_HANDLED;
|
|
|
- }
|
|
@@ -70,8 +68,7 @@ Signed-off-by: Biwen Li <[email protected]>
|
|
|
+ status |= (i2c_imx->hwdata->i2sr_clr_opcode & I2SR_IAL);
|
|
|
+ imx_i2c_write_reg(status, i2c_imx, IMX_I2C_I2SR);
|
|
|
+}
|
|
|
-
|
|
|
-- return IRQ_NONE;
|
|
|
++
|
|
|
+static irqreturn_t i2c_imx_master_isr(struct imx_i2c_struct *i2c_imx)
|
|
|
+{
|
|
|
+ unsigned int status;
|
|
@@ -81,12 +78,13 @@ Signed-off-by: Biwen Li <[email protected]>
|
|
|
+ i2c_imx->i2csr = status | I2SR_IIF;
|
|
|
+
|
|
|
+ wake_up(&i2c_imx->queue);
|
|
|
-+
|
|
|
+
|
|
|
+- return IRQ_NONE;
|
|
|
+ return IRQ_HANDLED;
|
|
|
}
|
|
|
|
|
|
static int i2c_imx_dma_write(struct imx_i2c_struct *i2c_imx,
|
|
|
-@@ -1066,6 +1087,13 @@ static int i2c_imx_xfer(struct i2c_adapt
|
|
|
+@@ -1094,6 +1117,13 @@ static int i2c_imx_xfer(struct i2c_adapt
|
|
|
|
|
|
dev_dbg(&i2c_imx->adapter.dev, "<%s>\n", __func__);
|
|
|
|
|
@@ -100,7 +98,7 @@ Signed-off-by: Biwen Li <[email protected]>
|
|
|
if (!pm_runtime_enabled(i2c_imx->adapter.dev.parent)) {
|
|
|
pm_runtime_enable(i2c_imx->adapter.dev.parent);
|
|
|
enable_runtime_pm = true;
|
|
|
-@@ -1279,11 +1307,169 @@ static u32 i2c_imx_func(struct i2c_adapt
|
|
|
+@@ -1307,11 +1337,169 @@ static u32 i2c_imx_func(struct i2c_adapt
|
|
|
| I2C_FUNC_SMBUS_READ_BLOCK_DATA;
|
|
|
}
|
|
|
|
|
@@ -270,7 +268,7 @@ Signed-off-by: Biwen Li <[email protected]>
|
|
|
static int i2c_imx_probe(struct platform_device *pdev)
|
|
|
{
|
|
|
struct imx_i2c_struct *i2c_imx;
|
|
|
-@@ -1392,10 +1578,7 @@ static int i2c_imx_probe(struct platform
|
|
|
+@@ -1420,10 +1608,7 @@ static int i2c_imx_probe(struct platform
|
|
|
if (is_imx7d_i2c(i2c_imx) && i2c_imx->bitrate > IMX_I2C_MAX_E_BIT_RATE)
|
|
|
i2c_imx->bitrate = IMX_I2C_MAX_E_BIT_RATE;
|
|
|
|