aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/layerscape/patches-5.4/808-i2c-0011-i2c-imx-support-slave-mode-for-imx-I2C-driver.patch
diff options
context:
space:
mode:
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.patch18
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;