diff options
Diffstat (limited to 'target/linux/layerscape/patches-5.4/808-i2c-0011-i2c-imx-support-slave-mode-for-imx-I2C-driver.patch')
-rw-r--r-- | target/linux/layerscape/patches-5.4/808-i2c-0011-i2c-imx-support-slave-mode-for-imx-I2C-driver.patch | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/target/linux/layerscape/patches-5.4/808-i2c-0011-i2c-imx-support-slave-mode-for-imx-I2C-driver.patch b/target/linux/layerscape/patches-5.4/808-i2c-0011-i2c-imx-support-slave-mode-for-imx-I2C-driver.patch index 246a2602f3..5377d05d0c 100644 --- a/target/linux/layerscape/patches-5.4/808-i2c-0011-i2c-imx-support-slave-mode-for-imx-I2C-driver.patch +++ b/target/linux/layerscape/patches-5.4/808-i2c-0011-i2c-imx-support-slave-mode-for-imx-I2C-driver.patch @@ -38,7 +38,7 @@ Signed-off-by: Biwen Li <biwen.li@nxp.com> /* 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 <biwen.li@nxp.com> - 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 <biwen.li@nxp.com> + 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 <biwen.li@nxp.com> + 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 <biwen.li@nxp.com> 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 <biwen.li@nxp.com> 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; |