According to the "VFxxx Controller Reference Manual" (and the comment block starting at line 97), Vybrid requires writing a one for clearing an interrupt flag. Syncing the method for clearing I2SR_IIF in i2c_imx_isr().
Signed-off-by: Christian Eggers ceggers@arri.de Cc: stable@vger.kernel.org --- drivers/i2c/busses/i2c-imx.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-)
diff --git a/drivers/i2c/busses/i2c-imx.c b/drivers/i2c/busses/i2c-imx.c index 0ab5381aa012..cbdcab73a055 100644 --- a/drivers/i2c/busses/i2c-imx.c +++ b/drivers/i2c/busses/i2c-imx.c @@ -412,6 +412,19 @@ static void i2c_imx_dma_free(struct imx_i2c_struct *i2c_imx) dma->chan_using = NULL; }
+static void i2c_imx_clear_irq(struct imx_i2c_struct *i2c_imx, unsigned int bits) +{ + unsigned int temp; + + /* + * i2sr_clr_opcode is the value to clear all interrupts. Here we want to + * clear only <bits>, so we write ~i2sr_clr_opcode with just <bits> + * toggled. This is required because i.MX needs W1C and Vybrid uses W0C. + */ + temp = ~i2c_imx->hwdata->i2sr_clr_opcode ^ bits; + imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2SR); +} + static int i2c_imx_bus_busy(struct imx_i2c_struct *i2c_imx, int for_busy, bool atomic) { unsigned long orig_jiffies = jiffies; @@ -424,8 +437,7 @@ static int i2c_imx_bus_busy(struct imx_i2c_struct *i2c_imx, int for_busy, bool a
/* check for arbitration lost */ if (temp & I2SR_IAL) { - temp &= ~I2SR_IAL; - imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2SR); + i2c_imx_clear_irq(i2c_imx, I2SR_IAL); return -EAGAIN; }
@@ -623,9 +635,7 @@ static irqreturn_t i2c_imx_isr(int irq, void *dev_id) 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; }
On Tue, Oct 06, 2020 at 06:08:12PM +0200, Christian Eggers wrote:
According to the "VFxxx Controller Reference Manual" (and the comment block starting at line 97), Vybrid requires writing a one for clearing an interrupt flag. Syncing the method for clearing I2SR_IIF in i2c_imx_isr().
Signed-off-by: Christian Eggers ceggers@arri.de Cc: stable@vger.kernel.org
Fixes: 4b775022f6fd ("i2c: imx: add struct to hold more configurable quirks") Reviewed-by: Uwe Kleine-König u.kleine-koenig@pengutronix.de
Best regards and thanks Uwe
On Tue, 6 Oct 2020 at 18:10, Christian Eggers ceggers@arri.de wrote:
According to the "VFxxx Controller Reference Manual" (and the comment block starting at line 97), Vybrid requires writing a one for clearing an interrupt flag. Syncing the method for clearing I2SR_IIF in i2c_imx_isr().
Signed-off-by: Christian Eggers ceggers@arri.de Cc: stable@vger.kernel.org
drivers/i2c/busses/i2c-imx.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-)
I replied to your v2 with testing, so what happened with all my tested tags?
Best regards, Krzysztof
On Wednesday, 7 October 2020, 09:50:23 CEST, Krzysztof Kozlowski wrote:
I replied to your v2 with testing, so what happened with all my tested tags?
I am quite new to the kernel development process. Seems that I should integrate all "Tested-by" tags into following version of my patches.
In which cases shall the tested tags be kept and in which cases they become invalid?
Best regards Christian
On Wed, 7 Oct 2020 at 10:17, Christian Eggers ceggers@arri.de wrote:
On Wednesday, 7 October 2020, 09:50:23 CEST, Krzysztof Kozlowski wrote:
I replied to your v2 with testing, so what happened with all my tested tags?
I am quite new to the kernel development process. Seems that I should integrate all "Tested-by" tags into following version of my patches.
In which cases shall the tested tags be kept and in which cases they become invalid?
https://elixir.bootlin.com/linux/latest/source/Documentation/process/submitt...
Your v3 touched only one patch, so all tags for all other patches should be added and preserved. If the patch changed significantly that review or testing is not appropriate, you could remove someone's tag but then you should ask for testing again. And you did not send it for testing.
Your v4 only extended a comment which does not affect testing. All tags, review, ack and tested by should be added/preserved.
Otherwise you ask for testing (or reviewing) and then do not credit this person. Neither maintainers know that patches were tested.
Best regards, Krzysztof
linux-stable-mirror@lists.linaro.org