On Fri, Aug 14, 2015 at 04:50:22PM +0100, 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: commit 27bce457d588 ("i2c: img-scb: Add Imagination Technologies I2C
> SCB driver")
> Signed-off-by: Sifan Naeem <[email protected]>
> Reviewed-by: James Hartley <[email protected]>
> ---
> 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 e4daebcdf824..200108dbd194 100644
> --- a/drivers/i2c/busses/i2c-img-scb.c
> +++ b/drivers/i2c/busses/i2c-img-scb.c
> @@ -857,10 +857,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 (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;If we start checking line_status instead of i2c->line_status, this masking off of START_BIT_DET from i2c->line_status seems redundant as it won't have any effect on whether we hit this condition again on the next interrupt. I think the one line patch with just s/i2c->line_status/line_status/ on the condition should be sufficient to prevent it handling the situation repeatedly (that line status bit is latched, and should have been already acked). Cheers James > } > > mod_timer(&i2c->check_timer, jiffies + msecs_to_jiffies(1)); > -- > 1.7.9.5 >
signature.asc
Description: Digital signature
