Re: [PATCH 1/3] Adding-support-framework for PR785 board.

2008-11-28 Thread Felipe Balbi
On Fri, Nov 28, 2008 at 11:11:29AM +0100, Koen Kooi wrote:
 Yes... you should for example:

 static struct i2c_board_info omap3evm_i2c_board_info[] __initdata = {
 ... (all devices but tps and twl) ...
 };

 static struct i2c_board_info pr785_i2c_board_info[] __initdata = {
  {
  I2C_BOARD_INFO(tps62352_core_pwr, 0x4A),
  .flags = I2C_CLIENT_WAKE,
  }, {
  I2C_BOARD_INFO(tps62353_mpu_pwr, 0x48),
  .flags = I2C_CLIENT_WAKE,
  },
 };

 static struct i2c_board_info twl4030_i2c_board_info[] __initdata = {
  {
  I2C_BOARD_INFO(twl4030, 0x48),
  },
 };

 Then on init:

 ...

 omap_register_i2c_bus(1, omap3_evm_i2c_board_info,
  ARRAY_SIZE(omap3evm_i2c_board_info);

 if (machine_is_pr785())
  i2c_register_board_info(1, pr785_i2c_board_info,
  ARRAY_SIZE(pr785_i2c_board_info));

 That's looks like unreachable code to me, since the pr785 is a  
 daughterboard of the omap3evm machine.

Hmm... that's news to me. But make it runtime check somehow. We can't
accept this kind of ifdefs in the i2c_board_info since it breaks multiomap.

And Tony has been pushing for it for quite a while, so let's not make
his life more difficult.

-- 
balbi
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 1/3] Adding-support-framework for PR785 board.

2008-11-28 Thread Felipe Balbi
On Fri, Nov 28, 2008 at 01:52:27PM +0530, ext Pillai, Manikandan wrote:
 Hi Balbi,
 
 Thanks for your comments. Pls find my response inlined.

please, keep linux-omap in the loop otherwise we loose the thread ;-)

  diff --git a/arch/arm/mach-omap2/board-omap3evm.c 
  b/arch/arm/mach-omap2/board-omap3evm.c
  index bc44cb5..f5f9ea5 100644
  --- a/arch/arm/mach-omap2/board-omap3evm.c
  +++ b/arch/arm/mach-omap2/board-omap3evm.c
  @@ -42,6 +42,9 @@
   #include twl4030-generic-scripts.h
   #include mmc-twl4030.h
   
  +#defineOMAP3_I2C_STD   100
  +#defineOMAP3_I2C_FAST  400
  +#defineOMAP3_I2C_HS2600
 
 Why ?? see below
 Mani: I got an earlier comment to remove the numbers. I guess I will go 
 back to how it was.

From who ? Every other boards use the number themselves ;-)

 No way. Create separated versions of the omap3evm_i2c_boardinfo[] for
 the conflicting devices and register one or the other version based on
 if (machine_is_XXX()) or something similar.
 
 You can register as many i2c_board_infos as you want per bus.
 
 Mani: Not clear on what the comment is. Do I need to remove the
 #if defined(CONFIG_PR785). 

Yes... you should for example:

static struct i2c_board_info omap3evm_i2c_board_info[] __initdata = {
... (all devices but tps and twl) ...
};

static struct i2c_board_info pr785_i2c_board_info[] __initdata = {
{
I2C_BOARD_INFO(tps62352_core_pwr, 0x4A),
.flags = I2C_CLIENT_WAKE,
}, {
I2C_BOARD_INFO(tps62353_mpu_pwr, 0x48),
.flags = I2C_CLIENT_WAKE,
},
};

static struct i2c_board_info twl4030_i2c_board_info[] __initdata = {
{
I2C_BOARD_INFO(twl4030, 0x48),
},
};

Then on init:

...

omap_register_i2c_bus(1, omap3_evm_i2c_board_info,
ARRAY_SIZE(omap3evm_i2c_board_info);

if (machine_is_pr785())
i2c_register_board_info(1, pr785_i2c_board_info,
ARRAY_SIZE(pr785_i2c_board_info));

if (machine_is_())
i2c_register_board_info(1, twl4030_i2c_board_info,
ARRAY_SIZE(twl4030_i2c_board_info));


  diff --git a/drivers/video/omap/lcd_omap3evm.c 
  b/drivers/video/omap/lcd_omap3evm.c
  index 90aa015..ac51dd0 100644
  --- a/drivers/video/omap/lcd_omap3evm.c
  +++ b/drivers/video/omap/lcd_omap3evm.c
  @@ -66,9 +66,11 @@ static int omap3evm_panel_init(struct lcd_panel *panel,
  gpio_direction_output(LCD_PANEL_LR, 1);
  gpio_direction_output(LCD_PANEL_UD, 1);
   
  +#if !defined(CONFIG_PR785)
  twl4030_i2c_write_u8(TWL4030_MODULE_LED, 0x11, TWL_LED_LEDEN);
  twl4030_i2c_write_u8(TWL4030_MODULE_PWMA, 0x01, TWL_PWMA_PWMAON);
  twl4030_i2c_write_u8(TWL4030_MODULE_PWMA, 0x02, TWL_PWMA_PWMAOFF);
  +#endif
  bklight_level = 100;
   
  return 0;
  @@ -97,12 +99,14 @@ static unsigned long omap3evm_panel_get_caps(struct 
  lcd_panel *panel)
   static int omap3evm_bklight_setlevel(struct lcd_panel *panel,
  unsigned int level)
   {
  +#if !defined(CONFIG_PR785)
  u8 c;
  if ((level = 0)  (level = 100)) {
  c = (125 * (100 - level)) / 100 + 2;
  twl4030_i2c_write_u8(TWL4030_MODULE_PWMA, c, TWL_PWMA_PWMAOFF);
  bklight_level = level;
  }
  +#endif
 
 No!!
 
 NAK to all ifdefs. It'll break multiomap support.
 Mani: Will use a positive #if defined. 

also not.. you need to use platform_data to tell you how to set stuff
up for different boards, don't use pre-processor conditionals.

-- 
balbi
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 1/3] Adding-support-framework for PR785 board.

2008-11-28 Thread Koen Kooi


Op 28 nov 2008, om 11:50 heeft Felipe Balbi het volgende geschreven:


On Fri, Nov 28, 2008 at 11:11:29AM +0100, Koen Kooi wrote:

Yes... you should for example:

static struct i2c_board_info omap3evm_i2c_board_info[] __initdata  
= {

... (all devices but tps and twl) ...
};

static struct i2c_board_info pr785_i2c_board_info[] __initdata = {
{
I2C_BOARD_INFO(tps62352_core_pwr, 0x4A),
.flags = I2C_CLIENT_WAKE,
}, {
I2C_BOARD_INFO(tps62353_mpu_pwr, 0x48),
.flags = I2C_CLIENT_WAKE,
},
};

static struct i2c_board_info twl4030_i2c_board_info[] __initdata = {
{
I2C_BOARD_INFO(twl4030, 0x48),
},
};

Then on init:

...

omap_register_i2c_bus(1, omap3_evm_i2c_board_info,
ARRAY_SIZE(omap3evm_i2c_board_info);

if (machine_is_pr785())
i2c_register_board_info(1, pr785_i2c_board_info,
ARRAY_SIZE(pr785_i2c_board_info));


That's looks like unreachable code to me, since the pr785 is a
daughterboard of the omap3evm machine.


Hmm... that's news to me. But make it runtime check somehow. We can't
accept this kind of ifdefs in the i2c_board_info since it breaks  
multiomap.


And Tony has been pushing for it for quite a while, so let's not make
his life more difficult.


I'm not advocating ifdefs, quite the reverse. I was just pointing out  
that the pr785 is a daughterboard for the evm :) My omap3evm board has  
the twl4030 daughterboard, so I sadly can't test patches for the pr785.


regards,

Koen





--
balbi
--
To unsubscribe from this list: send the line unsubscribe linux- 
omap in

the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html





PGP.sig
Description: This is a digitally signed message part


Re: [PATCH 1/3] Adding-support-framework for PR785 board.

2008-11-27 Thread Felipe Balbi
On Fri, Nov 28, 2008 at 10:57:58AM +0530, ext Manikandan Pillai wrote:
 This patch provides the support framework for PR785 boards.
 More patches will follow that will allow complete programming
 support for PR785 boards.
 The board-omap3evm.c contains the I2C devices to be supported.
 CONFIG_PR785 is configuration used for the PR784 boards.
 
 Signed-off-by: Manikandan Pillai [EMAIL PROTECTED]
 ---
  arch/arm/mach-omap2/board-omap3evm.c |   29 ++---
  arch/arm/mach-omap2/mmc-twl4030.c|5 +++--
  drivers/i2c/chips/Kconfig|   11 +++
  drivers/mfd/Kconfig  |   14 ++
  drivers/video/omap/lcd_omap3evm.c|4 
  5 files changed, 58 insertions(+), 5 deletions(-)
 
 diff --git a/arch/arm/mach-omap2/board-omap3evm.c 
 b/arch/arm/mach-omap2/board-omap3evm.c
 index bc44cb5..f5f9ea5 100644
 --- a/arch/arm/mach-omap2/board-omap3evm.c
 +++ b/arch/arm/mach-omap2/board-omap3evm.c
 @@ -42,6 +42,9 @@
  #include twl4030-generic-scripts.h
  #include mmc-twl4030.h
  
 +#define  OMAP3_I2C_STD   100
 +#define  OMAP3_I2C_FAST  400
 +#define  OMAP3_I2C_HS2600

Why ?? see below

  
  static struct resource omap3evm_smc911x_resources[] = {
   [0] =   {
 @@ -144,6 +147,19 @@ static struct twl4030_platform_data omap3evm_twldata = {
   .gpio   = omap3evm_gpio_data,
  };
  
 +#if defined(CONFIG_PR785)
 +static struct i2c_board_info __initdata tps_6235x_i2c_board_info[] = {
 + {
 + I2C_BOARD_INFO(tps62352_core_pwr, 0x4A),
 + .flags = I2C_CLIENT_WAKE,
 + },
 + {
 + I2C_BOARD_INFO(tps62353_mpu_pwr, 0x48),
 + .flags = I2C_CLIENT_WAKE,
 + },
 +};
 +#endif
 +#if defined(CONFIG_TWL4030_CORE)

No way. Create separated versions of the omap3evm_i2c_boardinfo[] for
the conflicting devices and register one or the other version based on
if (machine_is_XXX()) or something similar.

You can register as many i2c_board_infos as you want per bus.

  static struct i2c_board_info __initdata omap3evm_i2c_boardinfo[] = {
   {
   I2C_BOARD_INFO(twl4030, 0x48),
 @@ -152,13 +168,20 @@ static struct i2c_board_info __initdata 
 omap3evm_i2c_boardinfo[] = {
   .platform_data = omap3evm_twldata,
   },
  };
 +#endif
  
  static int __init omap3_evm_i2c_init(void)
  {
 - omap_register_i2c_bus(1, 2600, omap3evm_i2c_boardinfo,
 +#if defined(CONFIG_PR785)
 + omap_register_i2c_bus(1, OMAP3_I2C_HS, tps_6235x_i2c_board_info,

/see below the numbers here will be easier to read.

 + ARRAY_SIZE(tps_6235x_i2c_board_info));
 +#endif
 +#if defined(CONFIG_TWL4030_CORE)
 + omap_register_i2c_bus(1, OMAP3_I2C_HS, omap3evm_i2c_boardinfo,
   ARRAY_SIZE(omap3evm_i2c_boardinfo));
 - omap_register_i2c_bus(2, 400, NULL, 0);
 - omap_register_i2c_bus(3, 400, NULL, 0);
 +#endif
 + omap_register_i2c_bus(2, OMAP3_I2C_FAST, NULL, 0);
 + omap_register_i2c_bus(3, OMAP3_I2C_FAST, NULL, 0);
   return 0;
  }
  
 diff --git a/arch/arm/mach-omap2/mmc-twl4030.c 
 b/arch/arm/mach-omap2/mmc-twl4030.c
 index 626d668..daf10f3 100644
 --- a/arch/arm/mach-omap2/mmc-twl4030.c
 +++ b/arch/arm/mach-omap2/mmc-twl4030.c
 @@ -167,7 +167,7 @@ static int twl_mmc_resume(struct device *dev, int slot)
   */
  static int twl_mmc_set_voltage(struct twl_mmc_controller *c, int vdd)
  {
 - int ret;
 + int ret = 0;
   u8 vmmc, dev_grp_val;
  
   switch (1  vdd) {
 @@ -222,6 +222,7 @@ static int twl_mmc_set_voltage(struct twl_mmc_controller 
 *c, int vdd)
   else
   dev_grp_val = LDO_CLR;  /* Power down */
  
 +#if defined(CONFIG_TWL4030_CORE)
   ret = twl4030_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
   dev_grp_val, c-twl_vmmc_dev_grp);
   if (ret)
 @@ -229,7 +230,7 @@ static int twl_mmc_set_voltage(struct twl_mmc_controller 
 *c, int vdd)
  
   ret = twl4030_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER,
   vmmc, c-twl_mmc_dedicated);
 -
 +#endif
   return ret;
  }
  
 diff --git a/drivers/i2c/chips/Kconfig b/drivers/i2c/chips/Kconfig
 index 4c73bb5..32cf887 100644
 --- a/drivers/i2c/chips/Kconfig
 +++ b/drivers/i2c/chips/Kconfig
 @@ -186,6 +186,17 @@ config TWL4030_POWEROFF
   tristate TWL4030 device poweroff
   depends on TWL4030_CORE
  
 +config TPS6235X
 + tristate TPS6235x Power Management chips
 + depends on I2C=y  ARCH_OMAP34XX  PR785=y
 + default n
 + help
 + If you say yes here you get support for the TPS6235x series of
 + Power Management chips.
 +
 + This driver can also be built as a module.  If so, the module
 + will be called tps6235x.o.
 +
  config SENSORS_MAX6875
   tristate Maxim MAX6875 Power supply supervisor
   depends on EXPERIMENTAL
 diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
 index 2438aab..93f2c0a 100644
 --- a/drivers/mfd/Kconfig
 +++