[PATCH] i2c: Race fix for i2c-mpc.c

Kumar Gala kumar.gala at freescale.com
Tue May 17 01:30:56 EST 2005


Sylvain,

Are you really still using the OCP side of the driver?  Do we need a 
similar fix for the platform driver side?

- kumar

On May 16, 2005, at 1:24 AM, Sylvain Munaut wrote:

> i2c: Race fix for i2c-mpc.c
>
> The problem was that the clock speed and driver data is
>  initialized after the i2c adapter was added. This caused
>  the i2c bus to start working at a wrong speed. (Mostly
> noticable on the second bus on mpc5200)
>
> With this patch we've tried to keep the i2c adapter
>  working perfectly all the time it is included in the system.
>  Initialize before added, Remove garbage after deleleted.
>
>
>
>  Submitted-by: Asier Llano Palacios
>  Signed-off-by: Sylvain Munaut <tnt at 246tNt.com>
> ---
>  --- linux-2.6/drivers/i2c/busses/i2c-mpc.c      2005-05-16 
> 09:08:02.000000000 +0200
>  +++ linux-2.6/drivers/i2c/busses/i2c-mpc.c      2005-05-16 
> 09:09:51.000000000 +0200
>  @@ -333,6 +333,9 @@
>          } else
>                  i2c->irq = 0;
>   
>  +       mpc_i2c_setclock(i2c);
> +       ocp_set_drvdata(ocp, i2c);
>  +
>          i2c->adap = mpc_ops;
>          i2c_set_adapdata(&i2c->adap, i2c);
>   
>  @@ -341,8 +344,6 @@
>                  goto fail_add;
>          }
>   
>  -       mpc_i2c_setclock(i2c);
> -       ocp_set_drvdata(ocp, i2c);
>          return result;
>   
>         fail_add:
>  @@ -358,8 +359,8 @@
>   static void __devexit mpc_i2c_remove(struct ocp_device *ocp)
>   {
>          struct mpc_i2c *i2c = ocp_get_drvdata(ocp);
> -       ocp_set_drvdata(ocp, NULL);
>          i2c_del_adapter(&i2c->adap);
>  +       ocp_set_drvdata(ocp, NULL);
>   
>          if (ocp->def->irq != OCP_IRQ_NA)
>                 free_irq(i2c->irq, i2c);
>  _______________________________________________
> Linuxppc-embedded mailing list
>  Linuxppc-embedded at ozlabs.org
> https://ozlabs.org/mailman/listinfo/linuxppc-embedded




More information about the Linuxppc-embedded mailing list