OMAP2+: VC: more registers are per-channel starting with OMAP5
Starting with OMAP5, the following registers are per-channel and not common to a all VC channels: - SMPS I2C slave address - SMPS voltage register address offset - SMPS cmd/value register address offset - VC channel configuration register Move these from the channel-common struct into the per-channel struct to support OMAP5. Signed-off-by: Kevin Hilman <khilman@ti.com>
This commit is contained in:
parent
6a62b78d9a
commit
5876c940c0
|
@ -94,7 +94,7 @@ static int omap_vc_config_channel(struct voltagedomain *voltdm)
|
||||||
|
|
||||||
voltdm->rmw(CFG_CHANNEL_MASK << vc->cfg_channel_sa_shift,
|
voltdm->rmw(CFG_CHANNEL_MASK << vc->cfg_channel_sa_shift,
|
||||||
vc->cfg_channel << vc->cfg_channel_sa_shift,
|
vc->cfg_channel << vc->cfg_channel_sa_shift,
|
||||||
vc->common->cfg_channel_reg);
|
vc->cfg_channel_reg);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -319,7 +319,7 @@ void __init omap_vc_init_channel(struct voltagedomain *voltdm)
|
||||||
/* Configure the i2c slave address for this VC */
|
/* Configure the i2c slave address for this VC */
|
||||||
voltdm->rmw(vc->smps_sa_mask,
|
voltdm->rmw(vc->smps_sa_mask,
|
||||||
vc->i2c_slave_addr << __ffs(vc->smps_sa_mask),
|
vc->i2c_slave_addr << __ffs(vc->smps_sa_mask),
|
||||||
vc->common->smps_sa_reg);
|
vc->smps_sa_reg);
|
||||||
vc->cfg_channel |= vc_cfg_bits->sa;
|
vc->cfg_channel |= vc_cfg_bits->sa;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -327,13 +327,13 @@ void __init omap_vc_init_channel(struct voltagedomain *voltdm)
|
||||||
*/
|
*/
|
||||||
voltdm->rmw(vc->smps_volra_mask,
|
voltdm->rmw(vc->smps_volra_mask,
|
||||||
vc->volt_reg_addr << __ffs(vc->smps_volra_mask),
|
vc->volt_reg_addr << __ffs(vc->smps_volra_mask),
|
||||||
vc->common->smps_volra_reg);
|
vc->smps_volra_reg);
|
||||||
vc->cfg_channel |= vc_cfg_bits->rav;
|
vc->cfg_channel |= vc_cfg_bits->rav;
|
||||||
|
|
||||||
if (vc->cmd_reg_addr) {
|
if (vc->cmd_reg_addr) {
|
||||||
voltdm->rmw(vc->smps_cmdra_mask,
|
voltdm->rmw(vc->smps_cmdra_mask,
|
||||||
vc->cmd_reg_addr << __ffs(vc->smps_cmdra_mask),
|
vc->cmd_reg_addr << __ffs(vc->smps_cmdra_mask),
|
||||||
vc->common->smps_cmdra_reg);
|
vc->smps_cmdra_reg);
|
||||||
vc->cfg_channel |= vc_cfg_bits->rac | vc_cfg_bits->racen;
|
vc->cfg_channel |= vc_cfg_bits->rac | vc_cfg_bits->racen;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,9 +25,6 @@ struct voltagedomain;
|
||||||
* struct omap_vc_common - per-VC register/bitfield data
|
* struct omap_vc_common - per-VC register/bitfield data
|
||||||
* @cmd_on_mask: ON bitmask in PRM_VC_CMD_VAL* register
|
* @cmd_on_mask: ON bitmask in PRM_VC_CMD_VAL* register
|
||||||
* @valid: VALID bitmask in PRM_VC_BYPASS_VAL register
|
* @valid: VALID bitmask in PRM_VC_BYPASS_VAL register
|
||||||
* @smps_sa_reg: Offset of PRM_VC_SMPS_SA reg from PRM start
|
|
||||||
* @smps_volra_reg: Offset of PRM_VC_SMPS_VOL_RA reg from PRM start
|
|
||||||
* @smps_cmdra_reg: Offset of PRM_VC_SMPS_CMD_RA reg from PRM start
|
|
||||||
* @bypass_val_reg: Offset of PRM_VC_BYPASS_VAL reg from PRM start
|
* @bypass_val_reg: Offset of PRM_VC_BYPASS_VAL reg from PRM start
|
||||||
* @data_shift: DATA field shift in PRM_VC_BYPASS_VAL register
|
* @data_shift: DATA field shift in PRM_VC_BYPASS_VAL register
|
||||||
* @slaveaddr_shift: SLAVEADDR field shift in PRM_VC_BYPASS_VAL register
|
* @slaveaddr_shift: SLAVEADDR field shift in PRM_VC_BYPASS_VAL register
|
||||||
|
@ -36,7 +33,6 @@ struct voltagedomain;
|
||||||
* @cmd_onlp_shift: ONLP field shift in PRM_VC_CMD_VAL_* register
|
* @cmd_onlp_shift: ONLP field shift in PRM_VC_CMD_VAL_* register
|
||||||
* @cmd_ret_shift: RET field shift in PRM_VC_CMD_VAL_* register
|
* @cmd_ret_shift: RET field shift in PRM_VC_CMD_VAL_* register
|
||||||
* @cmd_off_shift: OFF field shift in PRM_VC_CMD_VAL_* register
|
* @cmd_off_shift: OFF field shift in PRM_VC_CMD_VAL_* register
|
||||||
* @cfg_channel_reg: VC channel configuration register
|
|
||||||
* @i2c_cfg_reg: I2C configuration register offset
|
* @i2c_cfg_reg: I2C configuration register offset
|
||||||
* @i2c_cfg_hsen_mask: high-speed mode bit field mask in I2C config register
|
* @i2c_cfg_hsen_mask: high-speed mode bit field mask in I2C config register
|
||||||
* @i2c_mcode_mask: MCODE field mask for I2C config register
|
* @i2c_mcode_mask: MCODE field mask for I2C config register
|
||||||
|
@ -47,9 +43,6 @@ struct voltagedomain;
|
||||||
struct omap_vc_common {
|
struct omap_vc_common {
|
||||||
u32 cmd_on_mask;
|
u32 cmd_on_mask;
|
||||||
u32 valid;
|
u32 valid;
|
||||||
u8 smps_sa_reg;
|
|
||||||
u8 smps_volra_reg;
|
|
||||||
u8 smps_cmdra_reg;
|
|
||||||
u8 bypass_val_reg;
|
u8 bypass_val_reg;
|
||||||
u8 data_shift;
|
u8 data_shift;
|
||||||
u8 slaveaddr_shift;
|
u8 slaveaddr_shift;
|
||||||
|
@ -58,7 +51,6 @@ struct omap_vc_common {
|
||||||
u8 cmd_onlp_shift;
|
u8 cmd_onlp_shift;
|
||||||
u8 cmd_ret_shift;
|
u8 cmd_ret_shift;
|
||||||
u8 cmd_off_shift;
|
u8 cmd_off_shift;
|
||||||
u8 cfg_channel_reg;
|
|
||||||
u8 i2c_cfg_reg;
|
u8 i2c_cfg_reg;
|
||||||
u8 i2c_cfg_hsen_mask;
|
u8 i2c_cfg_hsen_mask;
|
||||||
u8 i2c_mcode_mask;
|
u8 i2c_mcode_mask;
|
||||||
|
@ -82,6 +74,10 @@ struct omap_vc_common {
|
||||||
* @smps_volra_mask: VOLRA* bitmask in the PRM_VC_VOL_RA register
|
* @smps_volra_mask: VOLRA* bitmask in the PRM_VC_VOL_RA register
|
||||||
* @smps_cmdra_mask: CMDRA* bitmask in the PRM_VC_CMD_RA register
|
* @smps_cmdra_mask: CMDRA* bitmask in the PRM_VC_CMD_RA register
|
||||||
* @cmdval_reg: register for on/ret/off voltage level values for this channel
|
* @cmdval_reg: register for on/ret/off voltage level values for this channel
|
||||||
|
* @smps_sa_reg: Offset of PRM_VC_SMPS_SA reg from PRM start
|
||||||
|
* @smps_volra_reg: Offset of PRM_VC_SMPS_VOL_RA reg from PRM start
|
||||||
|
* @smps_cmdra_reg: Offset of PRM_VC_SMPS_CMD_RA reg from PRM start
|
||||||
|
* @cfg_channel_reg: VC channel configuration register
|
||||||
* @cfg_channel_sa_shift: bit shift for slave address cfg_channel register
|
* @cfg_channel_sa_shift: bit shift for slave address cfg_channel register
|
||||||
* @flags: VC channel-specific flags (optional)
|
* @flags: VC channel-specific flags (optional)
|
||||||
*/
|
*/
|
||||||
|
@ -100,6 +96,10 @@ struct omap_vc_channel {
|
||||||
u32 smps_volra_mask;
|
u32 smps_volra_mask;
|
||||||
u32 smps_cmdra_mask;
|
u32 smps_cmdra_mask;
|
||||||
u8 cmdval_reg;
|
u8 cmdval_reg;
|
||||||
|
u8 smps_sa_reg;
|
||||||
|
u8 smps_volra_reg;
|
||||||
|
u8 smps_cmdra_reg;
|
||||||
|
u8 cfg_channel_reg;
|
||||||
u8 cfg_channel_sa_shift;
|
u8 cfg_channel_sa_shift;
|
||||||
u8 flags;
|
u8 flags;
|
||||||
};
|
};
|
||||||
|
|
|
@ -30,9 +30,6 @@
|
||||||
* XXX This stuff presumably belongs in the vc3xxx.c or vc.c file.
|
* XXX This stuff presumably belongs in the vc3xxx.c or vc.c file.
|
||||||
*/
|
*/
|
||||||
static struct omap_vc_common omap3_vc_common = {
|
static struct omap_vc_common omap3_vc_common = {
|
||||||
.smps_sa_reg = OMAP3_PRM_VC_SMPS_SA_OFFSET,
|
|
||||||
.smps_volra_reg = OMAP3_PRM_VC_SMPS_VOL_RA_OFFSET,
|
|
||||||
.smps_cmdra_reg = OMAP3_PRM_VC_SMPS_CMD_RA_OFFSET,
|
|
||||||
.bypass_val_reg = OMAP3_PRM_VC_BYPASS_VAL_OFFSET,
|
.bypass_val_reg = OMAP3_PRM_VC_BYPASS_VAL_OFFSET,
|
||||||
.data_shift = OMAP3430_DATA_SHIFT,
|
.data_shift = OMAP3430_DATA_SHIFT,
|
||||||
.slaveaddr_shift = OMAP3430_SLAVEADDR_SHIFT,
|
.slaveaddr_shift = OMAP3430_SLAVEADDR_SHIFT,
|
||||||
|
@ -43,7 +40,6 @@ static struct omap_vc_common omap3_vc_common = {
|
||||||
.cmd_onlp_shift = OMAP3430_VC_CMD_ONLP_SHIFT,
|
.cmd_onlp_shift = OMAP3430_VC_CMD_ONLP_SHIFT,
|
||||||
.cmd_ret_shift = OMAP3430_VC_CMD_RET_SHIFT,
|
.cmd_ret_shift = OMAP3430_VC_CMD_RET_SHIFT,
|
||||||
.cmd_off_shift = OMAP3430_VC_CMD_OFF_SHIFT,
|
.cmd_off_shift = OMAP3430_VC_CMD_OFF_SHIFT,
|
||||||
.cfg_channel_reg = OMAP3_PRM_VC_CH_CONF_OFFSET,
|
|
||||||
.i2c_cfg_hsen_mask = OMAP3430_HSEN_MASK,
|
.i2c_cfg_hsen_mask = OMAP3430_HSEN_MASK,
|
||||||
.i2c_cfg_reg = OMAP3_PRM_VC_I2C_CFG_OFFSET,
|
.i2c_cfg_reg = OMAP3_PRM_VC_I2C_CFG_OFFSET,
|
||||||
.i2c_mcode_mask = OMAP3430_MCODE_MASK,
|
.i2c_mcode_mask = OMAP3430_MCODE_MASK,
|
||||||
|
@ -51,6 +47,10 @@ static struct omap_vc_common omap3_vc_common = {
|
||||||
|
|
||||||
struct omap_vc_channel omap3_vc_mpu = {
|
struct omap_vc_channel omap3_vc_mpu = {
|
||||||
.common = &omap3_vc_common,
|
.common = &omap3_vc_common,
|
||||||
|
.smps_sa_reg = OMAP3_PRM_VC_SMPS_SA_OFFSET,
|
||||||
|
.smps_volra_reg = OMAP3_PRM_VC_SMPS_VOL_RA_OFFSET,
|
||||||
|
.smps_cmdra_reg = OMAP3_PRM_VC_SMPS_CMD_RA_OFFSET,
|
||||||
|
.cfg_channel_reg = OMAP3_PRM_VC_CH_CONF_OFFSET,
|
||||||
.cmdval_reg = OMAP3_PRM_VC_CMD_VAL_0_OFFSET,
|
.cmdval_reg = OMAP3_PRM_VC_CMD_VAL_0_OFFSET,
|
||||||
.smps_sa_mask = OMAP3430_PRM_VC_SMPS_SA_SA0_MASK,
|
.smps_sa_mask = OMAP3430_PRM_VC_SMPS_SA_SA0_MASK,
|
||||||
.smps_volra_mask = OMAP3430_VOLRA0_MASK,
|
.smps_volra_mask = OMAP3430_VOLRA0_MASK,
|
||||||
|
@ -60,6 +60,10 @@ struct omap_vc_channel omap3_vc_mpu = {
|
||||||
|
|
||||||
struct omap_vc_channel omap3_vc_core = {
|
struct omap_vc_channel omap3_vc_core = {
|
||||||
.common = &omap3_vc_common,
|
.common = &omap3_vc_common,
|
||||||
|
.smps_sa_reg = OMAP3_PRM_VC_SMPS_SA_OFFSET,
|
||||||
|
.smps_volra_reg = OMAP3_PRM_VC_SMPS_VOL_RA_OFFSET,
|
||||||
|
.smps_cmdra_reg = OMAP3_PRM_VC_SMPS_CMD_RA_OFFSET,
|
||||||
|
.cfg_channel_reg = OMAP3_PRM_VC_CH_CONF_OFFSET,
|
||||||
.cmdval_reg = OMAP3_PRM_VC_CMD_VAL_1_OFFSET,
|
.cmdval_reg = OMAP3_PRM_VC_CMD_VAL_1_OFFSET,
|
||||||
.smps_sa_mask = OMAP3430_PRM_VC_SMPS_SA_SA1_MASK,
|
.smps_sa_mask = OMAP3430_PRM_VC_SMPS_SA_SA1_MASK,
|
||||||
.smps_volra_mask = OMAP3430_VOLRA1_MASK,
|
.smps_volra_mask = OMAP3430_VOLRA1_MASK,
|
||||||
|
|
|
@ -31,9 +31,6 @@
|
||||||
* XXX This stuff presumably belongs in the vc3xxx.c or vc.c file.
|
* XXX This stuff presumably belongs in the vc3xxx.c or vc.c file.
|
||||||
*/
|
*/
|
||||||
static const struct omap_vc_common omap4_vc_common = {
|
static const struct omap_vc_common omap4_vc_common = {
|
||||||
.smps_sa_reg = OMAP4_PRM_VC_SMPS_SA_OFFSET,
|
|
||||||
.smps_volra_reg = OMAP4_PRM_VC_VAL_SMPS_RA_VOL_OFFSET,
|
|
||||||
.smps_cmdra_reg = OMAP4_PRM_VC_VAL_SMPS_RA_CMD_OFFSET,
|
|
||||||
.bypass_val_reg = OMAP4_PRM_VC_VAL_BYPASS_OFFSET,
|
.bypass_val_reg = OMAP4_PRM_VC_VAL_BYPASS_OFFSET,
|
||||||
.data_shift = OMAP4430_DATA_SHIFT,
|
.data_shift = OMAP4430_DATA_SHIFT,
|
||||||
.slaveaddr_shift = OMAP4430_SLAVEADDR_SHIFT,
|
.slaveaddr_shift = OMAP4430_SLAVEADDR_SHIFT,
|
||||||
|
@ -44,7 +41,6 @@ static const struct omap_vc_common omap4_vc_common = {
|
||||||
.cmd_onlp_shift = OMAP4430_ONLP_SHIFT,
|
.cmd_onlp_shift = OMAP4430_ONLP_SHIFT,
|
||||||
.cmd_ret_shift = OMAP4430_RET_SHIFT,
|
.cmd_ret_shift = OMAP4430_RET_SHIFT,
|
||||||
.cmd_off_shift = OMAP4430_OFF_SHIFT,
|
.cmd_off_shift = OMAP4430_OFF_SHIFT,
|
||||||
.cfg_channel_reg = OMAP4_PRM_VC_CFG_CHANNEL_OFFSET,
|
|
||||||
.i2c_cfg_reg = OMAP4_PRM_VC_CFG_I2C_MODE_OFFSET,
|
.i2c_cfg_reg = OMAP4_PRM_VC_CFG_I2C_MODE_OFFSET,
|
||||||
.i2c_cfg_hsen_mask = OMAP4430_HSMODEEN_MASK,
|
.i2c_cfg_hsen_mask = OMAP4430_HSMODEEN_MASK,
|
||||||
.i2c_mcode_mask = OMAP4430_HSMCODE_MASK,
|
.i2c_mcode_mask = OMAP4430_HSMCODE_MASK,
|
||||||
|
@ -54,6 +50,10 @@ static const struct omap_vc_common omap4_vc_common = {
|
||||||
struct omap_vc_channel omap4_vc_mpu = {
|
struct omap_vc_channel omap4_vc_mpu = {
|
||||||
.flags = OMAP_VC_CHANNEL_DEFAULT | OMAP_VC_CHANNEL_CFG_MUTANT,
|
.flags = OMAP_VC_CHANNEL_DEFAULT | OMAP_VC_CHANNEL_CFG_MUTANT,
|
||||||
.common = &omap4_vc_common,
|
.common = &omap4_vc_common,
|
||||||
|
.smps_sa_reg = OMAP4_PRM_VC_SMPS_SA_OFFSET,
|
||||||
|
.smps_volra_reg = OMAP4_PRM_VC_VAL_SMPS_RA_VOL_OFFSET,
|
||||||
|
.smps_cmdra_reg = OMAP4_PRM_VC_VAL_SMPS_RA_CMD_OFFSET,
|
||||||
|
.cfg_channel_reg = OMAP4_PRM_VC_CFG_CHANNEL_OFFSET,
|
||||||
.cmdval_reg = OMAP4_PRM_VC_VAL_CMD_VDD_MPU_L_OFFSET,
|
.cmdval_reg = OMAP4_PRM_VC_VAL_CMD_VDD_MPU_L_OFFSET,
|
||||||
.smps_sa_mask = OMAP4430_SA_VDD_MPU_L_PRM_VC_SMPS_SA_MASK,
|
.smps_sa_mask = OMAP4430_SA_VDD_MPU_L_PRM_VC_SMPS_SA_MASK,
|
||||||
.smps_volra_mask = OMAP4430_VOLRA_VDD_MPU_L_MASK,
|
.smps_volra_mask = OMAP4430_VOLRA_VDD_MPU_L_MASK,
|
||||||
|
@ -63,6 +63,10 @@ struct omap_vc_channel omap4_vc_mpu = {
|
||||||
|
|
||||||
struct omap_vc_channel omap4_vc_iva = {
|
struct omap_vc_channel omap4_vc_iva = {
|
||||||
.common = &omap4_vc_common,
|
.common = &omap4_vc_common,
|
||||||
|
.smps_sa_reg = OMAP4_PRM_VC_SMPS_SA_OFFSET,
|
||||||
|
.smps_volra_reg = OMAP4_PRM_VC_VAL_SMPS_RA_VOL_OFFSET,
|
||||||
|
.smps_cmdra_reg = OMAP4_PRM_VC_VAL_SMPS_RA_CMD_OFFSET,
|
||||||
|
.cfg_channel_reg = OMAP4_PRM_VC_CFG_CHANNEL_OFFSET,
|
||||||
.cmdval_reg = OMAP4_PRM_VC_VAL_CMD_VDD_IVA_L_OFFSET,
|
.cmdval_reg = OMAP4_PRM_VC_VAL_CMD_VDD_IVA_L_OFFSET,
|
||||||
.smps_sa_mask = OMAP4430_SA_VDD_IVA_L_PRM_VC_SMPS_SA_MASK,
|
.smps_sa_mask = OMAP4430_SA_VDD_IVA_L_PRM_VC_SMPS_SA_MASK,
|
||||||
.smps_volra_mask = OMAP4430_VOLRA_VDD_IVA_L_MASK,
|
.smps_volra_mask = OMAP4430_VOLRA_VDD_IVA_L_MASK,
|
||||||
|
@ -72,6 +76,10 @@ struct omap_vc_channel omap4_vc_iva = {
|
||||||
|
|
||||||
struct omap_vc_channel omap4_vc_core = {
|
struct omap_vc_channel omap4_vc_core = {
|
||||||
.common = &omap4_vc_common,
|
.common = &omap4_vc_common,
|
||||||
|
.smps_sa_reg = OMAP4_PRM_VC_SMPS_SA_OFFSET,
|
||||||
|
.smps_volra_reg = OMAP4_PRM_VC_VAL_SMPS_RA_VOL_OFFSET,
|
||||||
|
.smps_cmdra_reg = OMAP4_PRM_VC_VAL_SMPS_RA_CMD_OFFSET,
|
||||||
|
.cfg_channel_reg = OMAP4_PRM_VC_CFG_CHANNEL_OFFSET,
|
||||||
.cmdval_reg = OMAP4_PRM_VC_VAL_CMD_VDD_CORE_L_OFFSET,
|
.cmdval_reg = OMAP4_PRM_VC_VAL_CMD_VDD_CORE_L_OFFSET,
|
||||||
.smps_sa_mask = OMAP4430_SA_VDD_CORE_L_0_6_MASK,
|
.smps_sa_mask = OMAP4430_SA_VDD_CORE_L_0_6_MASK,
|
||||||
.smps_volra_mask = OMAP4430_VOLRA_VDD_CORE_L_MASK,
|
.smps_volra_mask = OMAP4430_VOLRA_VDD_CORE_L_MASK,
|
||||||
|
|
Loading…
Reference in New Issue