Re: [PATCH v2 2/2] i2c: mediatek: Fixup i2c ack error interrupt handling
> Or, did I not wait long enough? This. signature.asc Description: Digital signature
Re: [PATCH v2 2/2] i2c: mediatek: Fixup i2c ack error interrupt handling
Hi Wolfram, On Tue, Aug 11, 2015 at 10:55 PM, Wolfram Sang wrote: > On Thu, Aug 06, 2015 at 03:22:11PM +0800, Eddie Huang wrote: >> When occur i2c ack error, i2c controller generate two interrupts, >> first is the ack error interrupt, then the complete interrupt. >> i2c interrupt handler should keep the two interrupt value, and only >> call complete() for the complete interrupt. >> >> Signed-off-by: Liguo Zhang >> Signed-off-by: Eddie Huang > > Applied to for-next, thanks! I don't see them in [0]. [0] https://git.kernel.org/cgit/linux/kernel/git/wsa/linux.git/log/?h=i2c/for-next Am I not looking in the right place? Or, did I not wait long enough? Thanks! -Dan -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH v2 2/2] i2c: mediatek: Fixup i2c ack error interrupt handling
On Thu, Aug 06, 2015 at 03:22:11PM +0800, Eddie Huang wrote: > When occur i2c ack error, i2c controller generate two interrupts, > first is the ack error interrupt, then the complete interrupt. > i2c interrupt handler should keep the two interrupt value, and only > call complete() for the complete interrupt. > > Signed-off-by: Liguo Zhang > Signed-off-by: Eddie Huang Applied to for-next, thanks! signature.asc Description: Digital signature
Re: [PATCH v2 2/2] i2c: mediatek: Fixup i2c ack error interrupt handling
On Thu, Aug 6, 2015 at 3:22 PM, Eddie Huang wrote: > When occur i2c ack error, i2c controller generate two interrupts, > first is the ack error interrupt, then the complete interrupt. > i2c interrupt handler should keep the two interrupt value, and only > call complete() for the complete interrupt. > > Signed-off-by: Liguo Zhang > Signed-off-by: Eddie Huang Reviewed-by: Daniel Kurtz > --- > drivers/i2c/busses/i2c-mt65xx.c | 15 +++ > 1 file changed, 11 insertions(+), 4 deletions(-) > > diff --git a/drivers/i2c/busses/i2c-mt65xx.c b/drivers/i2c/busses/i2c-mt65xx.c > index e28ad4c..c02e6c0 100644 > --- a/drivers/i2c/busses/i2c-mt65xx.c > +++ b/drivers/i2c/busses/i2c-mt65xx.c > @@ -557,15 +557,22 @@ static irqreturn_t mtk_i2c_irq(int irqno, void *dev_id) > { > struct mtk_i2c *i2c = dev_id; > u16 restart_flag = 0; > + u16 intr_stat; > > if (i2c->dev_comp->auto_restart) > restart_flag = I2C_RS_TRANSFER; > > - i2c->irq_stat = readw(i2c->base + OFFSET_INTR_STAT); > - writew(restart_flag | I2C_HS_NACKERR | I2C_ACKERR > - | I2C_TRANSAC_COMP, i2c->base + OFFSET_INTR_STAT); > + intr_stat = readw(i2c->base + OFFSET_INTR_STAT); > + writew(intr_stat, i2c->base + OFFSET_INTR_STAT); > > - complete(>msg_complete); > + /* > +* when occurs ack error, i2c controller generate two interrupts > +* first is the ack error interrupt, then the complete interrupt > +* i2c->irq_stat need keep the two interrupt value. > +*/ > + i2c->irq_stat |= intr_stat; > + if (i2c->irq_stat & (I2C_TRANSAC_COMP | restart_flag)) > + complete(>msg_complete); > > return IRQ_HANDLED; > } > -- > 1.7.9.5 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majord...@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH v2 2/2] i2c: mediatek: Fixup i2c ack error interrupt handling
On Thu, Aug 6, 2015 at 3:22 PM, Eddie Huang eddie.hu...@mediatek.com wrote: When occur i2c ack error, i2c controller generate two interrupts, first is the ack error interrupt, then the complete interrupt. i2c interrupt handler should keep the two interrupt value, and only call complete() for the complete interrupt. Signed-off-by: Liguo Zhang liguo.zh...@mediatek.com Signed-off-by: Eddie Huang eddie.hu...@mediatek.com Reviewed-by: Daniel Kurtz djku...@chromium.org --- drivers/i2c/busses/i2c-mt65xx.c | 15 +++ 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/drivers/i2c/busses/i2c-mt65xx.c b/drivers/i2c/busses/i2c-mt65xx.c index e28ad4c..c02e6c0 100644 --- a/drivers/i2c/busses/i2c-mt65xx.c +++ b/drivers/i2c/busses/i2c-mt65xx.c @@ -557,15 +557,22 @@ static irqreturn_t mtk_i2c_irq(int irqno, void *dev_id) { struct mtk_i2c *i2c = dev_id; u16 restart_flag = 0; + u16 intr_stat; if (i2c-dev_comp-auto_restart) restart_flag = I2C_RS_TRANSFER; - i2c-irq_stat = readw(i2c-base + OFFSET_INTR_STAT); - writew(restart_flag | I2C_HS_NACKERR | I2C_ACKERR - | I2C_TRANSAC_COMP, i2c-base + OFFSET_INTR_STAT); + intr_stat = readw(i2c-base + OFFSET_INTR_STAT); + writew(intr_stat, i2c-base + OFFSET_INTR_STAT); - complete(i2c-msg_complete); + /* +* when occurs ack error, i2c controller generate two interrupts +* first is the ack error interrupt, then the complete interrupt +* i2c-irq_stat need keep the two interrupt value. +*/ + i2c-irq_stat |= intr_stat; + if (i2c-irq_stat (I2C_TRANSAC_COMP | restart_flag)) + complete(i2c-msg_complete); return IRQ_HANDLED; } -- 1.7.9.5 -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/ -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH v2 2/2] i2c: mediatek: Fixup i2c ack error interrupt handling
On Thu, Aug 06, 2015 at 03:22:11PM +0800, Eddie Huang wrote: When occur i2c ack error, i2c controller generate two interrupts, first is the ack error interrupt, then the complete interrupt. i2c interrupt handler should keep the two interrupt value, and only call complete() for the complete interrupt. Signed-off-by: Liguo Zhang liguo.zh...@mediatek.com Signed-off-by: Eddie Huang eddie.hu...@mediatek.com Applied to for-next, thanks! signature.asc Description: Digital signature
Re: [PATCH v2 2/2] i2c: mediatek: Fixup i2c ack error interrupt handling
Or, did I not wait long enough? This. signature.asc Description: Digital signature
Re: [PATCH v2 2/2] i2c: mediatek: Fixup i2c ack error interrupt handling
Hi Wolfram, On Tue, Aug 11, 2015 at 10:55 PM, Wolfram Sang w...@the-dreams.de wrote: On Thu, Aug 06, 2015 at 03:22:11PM +0800, Eddie Huang wrote: When occur i2c ack error, i2c controller generate two interrupts, first is the ack error interrupt, then the complete interrupt. i2c interrupt handler should keep the two interrupt value, and only call complete() for the complete interrupt. Signed-off-by: Liguo Zhang liguo.zh...@mediatek.com Signed-off-by: Eddie Huang eddie.hu...@mediatek.com Applied to for-next, thanks! I don't see them in [0]. [0] https://git.kernel.org/cgit/linux/kernel/git/wsa/linux.git/log/?h=i2c/for-next Am I not looking in the right place? Or, did I not wait long enough? Thanks! -Dan -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[PATCH v2 2/2] i2c: mediatek: Fixup i2c ack error interrupt handling
When occur i2c ack error, i2c controller generate two interrupts, first is the ack error interrupt, then the complete interrupt. i2c interrupt handler should keep the two interrupt value, and only call complete() for the complete interrupt. Signed-off-by: Liguo Zhang Signed-off-by: Eddie Huang --- drivers/i2c/busses/i2c-mt65xx.c | 15 +++ 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/drivers/i2c/busses/i2c-mt65xx.c b/drivers/i2c/busses/i2c-mt65xx.c index e28ad4c..c02e6c0 100644 --- a/drivers/i2c/busses/i2c-mt65xx.c +++ b/drivers/i2c/busses/i2c-mt65xx.c @@ -557,15 +557,22 @@ static irqreturn_t mtk_i2c_irq(int irqno, void *dev_id) { struct mtk_i2c *i2c = dev_id; u16 restart_flag = 0; + u16 intr_stat; if (i2c->dev_comp->auto_restart) restart_flag = I2C_RS_TRANSFER; - i2c->irq_stat = readw(i2c->base + OFFSET_INTR_STAT); - writew(restart_flag | I2C_HS_NACKERR | I2C_ACKERR - | I2C_TRANSAC_COMP, i2c->base + OFFSET_INTR_STAT); + intr_stat = readw(i2c->base + OFFSET_INTR_STAT); + writew(intr_stat, i2c->base + OFFSET_INTR_STAT); - complete(>msg_complete); + /* +* when occurs ack error, i2c controller generate two interrupts +* first is the ack error interrupt, then the complete interrupt +* i2c->irq_stat need keep the two interrupt value. +*/ + i2c->irq_stat |= intr_stat; + if (i2c->irq_stat & (I2C_TRANSAC_COMP | restart_flag)) + complete(>msg_complete); return IRQ_HANDLED; } -- 1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[PATCH v2 2/2] i2c: mediatek: Fixup i2c ack error interrupt handling
When occur i2c ack error, i2c controller generate two interrupts, first is the ack error interrupt, then the complete interrupt. i2c interrupt handler should keep the two interrupt value, and only call complete() for the complete interrupt. Signed-off-by: Liguo Zhang liguo.zh...@mediatek.com Signed-off-by: Eddie Huang eddie.hu...@mediatek.com --- drivers/i2c/busses/i2c-mt65xx.c | 15 +++ 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/drivers/i2c/busses/i2c-mt65xx.c b/drivers/i2c/busses/i2c-mt65xx.c index e28ad4c..c02e6c0 100644 --- a/drivers/i2c/busses/i2c-mt65xx.c +++ b/drivers/i2c/busses/i2c-mt65xx.c @@ -557,15 +557,22 @@ static irqreturn_t mtk_i2c_irq(int irqno, void *dev_id) { struct mtk_i2c *i2c = dev_id; u16 restart_flag = 0; + u16 intr_stat; if (i2c-dev_comp-auto_restart) restart_flag = I2C_RS_TRANSFER; - i2c-irq_stat = readw(i2c-base + OFFSET_INTR_STAT); - writew(restart_flag | I2C_HS_NACKERR | I2C_ACKERR - | I2C_TRANSAC_COMP, i2c-base + OFFSET_INTR_STAT); + intr_stat = readw(i2c-base + OFFSET_INTR_STAT); + writew(intr_stat, i2c-base + OFFSET_INTR_STAT); - complete(i2c-msg_complete); + /* +* when occurs ack error, i2c controller generate two interrupts +* first is the ack error interrupt, then the complete interrupt +* i2c-irq_stat need keep the two interrupt value. +*/ + i2c-irq_stat |= intr_stat; + if (i2c-irq_stat (I2C_TRANSAC_COMP | restart_flag)) + complete(i2c-msg_complete); return IRQ_HANDLED; } -- 1.7.9.5 -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/