kernel: bump 5.4 to 5.4.83
[openwrt/openwrt.git] / target / linux / layerscape / patches-5.4 / 808-i2c-0011-i2c-imx-support-slave-mode-for-imx-I2C-driver.patch
index 246a2602f31b7e512a6763efbce6601a2dac7a25..5377d05d0ce72ee6acb49d3d3014dba37c08e783 100644 (file)
@@ -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;