@@ -311,10 +311,12 @@ void __init omap_vc_init_channel(struct voltagedomain *voltdm)
if ((vc->flags & OMAP_VC_CHANNEL_DEFAULT) &&
((vc->i2c_slave_addr == USE_DEFAULT_CHANNEL_I2C_PARAM) ||
+ (vc->cmd_reg_addr == USE_DEFAULT_CHANNEL_I2C_PARAM) ||
(vc->volt_reg_addr == USE_DEFAULT_CHANNEL_I2C_PARAM))) {
pr_err("%s: voltdm %s: default channel "
- "bad config-sa=%2x vol=%2x?\n", __func__, voltdm->name,
- vc->i2c_slave_addr, vc->volt_reg_addr);
+ "bad config-sa=%2x vol=%2x, cmd=%2x?\n", __func__,
+ voltdm->name, vc->i2c_slave_addr, vc->volt_reg_addr,
+ vc->cmd_reg_addr);
return;
}
@@ -336,7 +338,7 @@ void __init omap_vc_init_channel(struct voltagedomain *voltdm)
vc->cfg_channel |= vc_cfg_bits->rav;
}
- if (vc->cmd_reg_addr) {
+ if (vc->cmd_reg_addr != USE_DEFAULT_CHANNEL_I2C_PARAM) {
voltdm->rmw(vc->smps_cmdra_mask,
vc->cmd_reg_addr << __ffs(vc->smps_cmdra_mask),
vc->common->smps_cmdra_reg);
@@ -79,7 +79,7 @@ struct omap_vc_channel {
/* channel state */
u16 i2c_slave_addr;
u16 volt_reg_addr;
- u8 cmd_reg_addr;
+ u16 cmd_reg_addr;
u8 cfg_channel;
u16 setup_time;
bool i2c_high_speed;
@@ -114,7 +114,7 @@ struct omap_volt_data {
* channel is MPU, all other domains such as IVA/CORE, could optionally
* link their i2c reg configuration to use MPU channel's configuration if
* required. To do this, mark in the PMIC structure's
- * i2c_slave_addr, volt_reg_addr with this macro.
+ * i2c_slave_addr, volt_reg_addr,cmd_reg_addr with this macro.
*/
#define USE_DEFAULT_CHANNEL_I2C_PARAM 0x8000
@@ -143,7 +143,7 @@ struct omap_voltdm_pmic {
u8 vp_timeout_us;
u16 i2c_slave_addr;
u16 volt_reg_addr;
- u8 cmd_reg_addr;
+ u16 cmd_reg_addr;
bool i2c_high_speed;
u8 i2c_mcode;
unsigned long (*vsel_to_uv) (const u8 vsel);
OMAP4's PRM_VC_CFG_CHANNEL register allows for flexibility of configuring for various PMIC configurations. In combinations where we'd like to use the default VC channel's cmd_reg address in a particular non-default VC channel, we allow the use of USE_DEFAULT_CHANNEL_I2C_PARAM. Since 0 is a valid register address, we need to increase the size of reg storage for the flag. Depending on the PMIC and platform used, this can be populated on the PMIC's datastructure and percolates to VC's configuration. Signed-off-by: Nishanth Menon <nm@ti.com> --- arch/arm/mach-omap2/vc.c | 8 +++++--- arch/arm/mach-omap2/vc.h | 2 +- arch/arm/mach-omap2/voltage.h | 4 ++-- 3 files changed, 8 insertions(+), 6 deletions(-)