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 <sifan.na...@imgtec.com>
> Reviewed-by: James Hartley <james.hart...@imgtec.com>
> ---
>  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
> 

Attachment: signature.asc
Description: Digital signature

Reply via email to