David Brownell <[EMAIL PROTECTED]> writes:

> From: David Brownell <[EMAIL PROTECTED]>
>
> Generalize DaVinci I2C controller initialization to cope with the
> constraints imposed by the software I2C implementation the EVM's
> MSP430 firmare uses.  Prevents EVM's I2C bus from wedging after
> a short period of hard work, blinking the heartbeat LED.
>
> Signed-off-by: David Brownell <[EMAIL PROTECTED]>

Thanks, pushing today.

Kevin

>  arch/arm/mach-davinci/board-evm.c        |   18 +++++++++++++++++-
>  arch/arm/mach-davinci/devices.c          |   13 +++++++++----
>  arch/arm/mach-davinci/include/mach/i2c.h |    7 +++++--
>  3 files changed, 31 insertions(+), 7 deletions(-)
>
> --- a/arch/arm/mach-davinci/board-evm.c
> +++ b/arch/arm/mach-davinci/board-evm.c
> @@ -35,6 +35,8 @@
>  
>  #include <mach/common.h>
>  #include <mach/board.h>
> +#include <mach/i2c.h>
> +
>  
>  /* other misc. init functions */
>  void __init davinci_psc_init(void);
> @@ -452,6 +454,20 @@ static struct i2c_board_info __initdata 
>        */
>  };
>  
> +/* The msp430 uses a slow bitbanged I2C implementation (ergo 20 KHz),
> + * which requires 100 usec of idle bus after i2c writes sent to it.
> + */
> +static struct davinci_i2c_platform_data i2c_pdata = {
> +     .bus_freq       = 20 /* kHz */,
> +     .bus_delay      = 100 /* usec */,
> +};
> +
> +static void __init evm_init_i2c(void)
> +{
> +     davinci_init_i2c(&i2c_pdata);
> +     i2c_register_board_info(1, i2c_info, ARRAY_SIZE(i2c_info));
> +}
> +
>  static struct platform_device *davinci_evm_devices[] __initdata = {
>  #if defined(CONFIG_CONFIG_MTD_PHYSMAP) || \
>      defined(CONFIG_CONFIG_MTD_PHYSMAP_MODULE)
> @@ -502,7 +518,7 @@ static __init void davinci_evm_init(void
>  
>       platform_add_devices(davinci_evm_devices,
>                            ARRAY_SIZE(davinci_evm_devices));
> -     i2c_register_board_info(1, i2c_info, ARRAY_SIZE(i2c_info));
> +     evm_init_i2c();
>       davinci_board_config = davinci_evm_config;
>       davinci_board_config_size = ARRAY_SIZE(davinci_evm_config);
>       davinci_serial_init();
> --- a/arch/arm/mach-davinci/devices.c
> +++ b/arch/arm/mach-davinci/devices.c
> @@ -22,8 +22,10 @@
>  #include <mach/hardware.h>
>  #include <mach/eeprom.h>
>  #include <mach/emac.h>
> +#include <mach/i2c.h>
>  
> -#if  defined(CONFIG_I2C_DAVINCI) || defined(CONFIG_I2C_DAVINCI_MODULE)
> +
> +#if defined(CONFIG_I2C_DAVINCI) || defined(CONFIG_I2C_DAVINCI_MODULE)
>  
>  static struct resource i2c_resources[] = {
>       {
> @@ -44,14 +46,18 @@ static struct platform_device davinci_i2
>       .resource       = i2c_resources,
>  };
>  
> -static void davinci_init_i2c(void)
> +void __init davinci_init_i2c(struct davinci_i2c_platform_data *pdata)
>  {
> +     davinci_i2c_device.dev.platform_data = pdata;
>       (void) platform_device_register(&davinci_i2c_device);
>  }
>  
>  #else
>  
> -static void davinci_init_i2c(void) {}
> +void __init davinci_init_i2c(struct davinci_i2c_platform_data *pdata)
> +{
> +     /* nothing */
> +}
>  
>  #endif
>  
> @@ -154,7 +160,6 @@ static int __init davinci_init_devices(v
>       /* please keep these calls, and their implementations above,
>        * in alphabetical order so they're easier to sort through.
>        */
> -     davinci_init_i2c();
>       davinci_init_mmcsd();
>  
>       return 0;
> --- a/arch/arm/mach-davinci/include/mach/i2c.h
> +++ b/arch/arm/mach-davinci/include/mach/i2c.h
> @@ -14,8 +14,11 @@
>  
>  /* All frequencies are expressed in kHz */
>  struct davinci_i2c_platform_data {
> -     unsigned int    bus_freq;       /* standard bus frequency */
> -     unsigned int    bus_delay;      /* transaction delay */
> +     unsigned int    bus_freq;       /* standard bus frequency (kHz) */
> +     unsigned int    bus_delay;      /* post-transaction delay (usec) */
>  };
>  
> +/* for board setup code */
> +void davinci_init_i2c(struct davinci_i2c_platform_data *);
> +
>  #endif /* __ASM_ARCH_I2C_H */

_______________________________________________
Davinci-linux-open-source mailing list
[email protected]
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

Reply via email to