Message ID | 1437997641-32575-7-git-send-email-sifan.naeem@imgtec.com |
---|---|
State | Changes Requested |
Headers | show |
On 27/07/15 12:47, Sifan Naeem wrote: > Remove start bit detected status after it is handled, > doing so will prevent this condition being hit for > every interrupt on a particular transfer. > > Fixes: 27bce4 ("i2c: img-scb: Add Imagination Technologies I2C SCB driver") > Signed-off-by: Sifan Naeem <sifan.naeem@imgtec.com> > Cc: Stable kernel (v3.19+) <stable@vger.kernel.org> > --- > drivers/i2c/busses/i2c-img-scb.c | 16 ++++++++++++---- > 1 file changed, 12 insertions(+), 4 deletions(-) > > diff --git a/drivers/i2c/busses/i2c-img-scb.c b/drivers/i2c/busses/i2c-img-scb.c > index 653f9bd..341130e 100644 > --- a/drivers/i2c/busses/i2c-img-scb.c > +++ b/drivers/i2c/busses/i2c-img-scb.c > @@ -871,10 +871,18 @@ static unsigned int img_i2c_auto(struct img_i2c *i2c, > } > > /* Enable transaction halt on start bit */ > - if (!i2c->last_msg && i2c->line_status & LINESTAT_START_BIT_DET) { i2c->line_status accumulates the line status bits that have been seen with each interrupt. If we're only interested in that bit from the current interrupt, should it just be referring to line_status (the argument to img_i2c_auto) instead of i2c->line_status? Cheers James > - img_i2c_transaction_halt(i2c, true); > - /* we're no longer interested in the slave event */ > - i2c->int_enable &= ~INT_SLAVE_EVENT; > + if (i2c->line_status & LINESTAT_START_BIT_DET) { > + if (!i2c->last_msg) { > + img_i2c_transaction_halt(i2c, true); > + /* we're no longer interested in the slave event */ > + i2c->int_enable &= ~INT_SLAVE_EVENT; > + } > + /* > + * Remove start bit detected status after it is handled, > + * doing so will prevent this condition being hit for > + * every interrupt on a particular transfer. > + */ > + i2c->line_status &= ~LINESTAT_START_BIT_DET; > } > > mod_timer(&i2c->check_timer, jiffies + msecs_to_jiffies(1)); >
> -----Original Message----- > From: James Hogan > Sent: 28 July 2015 14:53 > To: Sifan Naeem; Wolfram Sang; linux-i2c@vger.kernel.org > Cc: Stable kernel (v3.19+) > Subject: Re: [PATCH 6/8] i2c: img-scb: remove start bit detected status after > handling > > On 27/07/15 12:47, Sifan Naeem wrote: > > Remove start bit detected status after it is handled, doing so will > > prevent this condition being hit for every interrupt on a particular > > transfer. > > > > Fixes: 27bce4 ("i2c: img-scb: Add Imagination Technologies I2C SCB > > driver") > > Signed-off-by: Sifan Naeem <sifan.naeem@imgtec.com> > > Cc: Stable kernel (v3.19+) <stable@vger.kernel.org> > > --- > > drivers/i2c/busses/i2c-img-scb.c | 16 ++++++++++++---- > > 1 file changed, 12 insertions(+), 4 deletions(-) > > > > diff --git a/drivers/i2c/busses/i2c-img-scb.c > > b/drivers/i2c/busses/i2c-img-scb.c > > index 653f9bd..341130e 100644 > > --- a/drivers/i2c/busses/i2c-img-scb.c > > +++ b/drivers/i2c/busses/i2c-img-scb.c > > @@ -871,10 +871,18 @@ static unsigned int img_i2c_auto(struct img_i2c > *i2c, > > } > > > > /* Enable transaction halt on start bit */ > > - if (!i2c->last_msg && i2c->line_status & LINESTAT_START_BIT_DET) { > > i2c->line_status accumulates the line status bits that have been seen > with each interrupt. If we're only interested in that bit from the current > interrupt, should it just be referring to line_status (the argument to > img_i2c_auto) instead of i2c->line_status? > Yes, I can't think of why we cannot use line_status from the argument. Thanks, Sifan > Cheers > James > > > - img_i2c_transaction_halt(i2c, true); > > - /* we're no longer interested in the slave event */ > > - i2c->int_enable &= ~INT_SLAVE_EVENT; > > + if (i2c->line_status & LINESTAT_START_BIT_DET) { > > + if (!i2c->last_msg) { > > + img_i2c_transaction_halt(i2c, true); > > + /* we're no longer interested in the slave event */ > > + i2c->int_enable &= ~INT_SLAVE_EVENT; > > + } > > + /* > > + * Remove start bit detected status after it is handled, > > + * doing so will prevent this condition being hit for > > + * every interrupt on a particular transfer. > > + */ > > + i2c->line_status &= ~LINESTAT_START_BIT_DET; > > } > > > > mod_timer(&i2c->check_timer, jiffies + msecs_to_jiffies(1)); > > -- To unsubscribe from this list: send the line "unsubscribe linux-i2c" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/i2c/busses/i2c-img-scb.c b/drivers/i2c/busses/i2c-img-scb.c index 653f9bd..341130e 100644 --- a/drivers/i2c/busses/i2c-img-scb.c +++ b/drivers/i2c/busses/i2c-img-scb.c @@ -871,10 +871,18 @@ static unsigned int img_i2c_auto(struct img_i2c *i2c, } /* Enable transaction halt on start bit */ - if (!i2c->last_msg && i2c->line_status & LINESTAT_START_BIT_DET) { - img_i2c_transaction_halt(i2c, true); - /* we're no longer interested in the slave event */ - i2c->int_enable &= ~INT_SLAVE_EVENT; + if (i2c->line_status & LINESTAT_START_BIT_DET) { + if (!i2c->last_msg) { + img_i2c_transaction_halt(i2c, true); + /* we're no longer interested in the slave event */ + i2c->int_enable &= ~INT_SLAVE_EVENT; + } + /* + * Remove start bit detected status after it is handled, + * doing so will prevent this condition being hit for + * every interrupt on a particular transfer. + */ + i2c->line_status &= ~LINESTAT_START_BIT_DET; } mod_timer(&i2c->check_timer, jiffies + msecs_to_jiffies(1));
Remove start bit detected status after it is handled, doing so will prevent this condition being hit for every interrupt on a particular transfer. Fixes: 27bce4 ("i2c: img-scb: Add Imagination Technologies I2C SCB driver") Signed-off-by: Sifan Naeem <sifan.naeem@imgtec.com> Cc: Stable kernel (v3.19+) <stable@vger.kernel.org> --- drivers/i2c/busses/i2c-img-scb.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-)