aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-omap2/vc.c
diff options
context:
space:
mode:
authorKevin Hilman <khilman@ti.com>2011-03-22 19:14:57 -0400
committerKevin Hilman <khilman@ti.com>2011-09-15 14:39:10 -0400
commitd84adcf46b9c235d1f4975b72a8c2763dbfb0081 (patch)
tree76f5d8877a3c99540267fc9fb63cae7e63f61236 /arch/arm/mach-omap2/vc.c
parentccd5ca7787df8f1bd267b90f03a09c31c160ffe2 (diff)
OMAP2+: voltage: move VC into struct voltagedomain, misc. renames
Move the VC instance struct from omap_vdd_info into struct voltagedomain. While moving, perform some misc. renames for readability. No functional changes. Summary of renames: - rename omap_vc_instance to omap_vc_channel, since there is only one instance of the VC IP and this actually represents channels using TRM terminology. - rename 'vc_common' field of VC channel which led to: s/vc->vc_common/vc->common/ - remove redundant '_data' suffix - OMAP3: vc1 --> vc_mpu, vc2 --> vc_core - omap_vc_bypass_scale_voltage() -> omap_vc_bypass_scale() Signed-off-by: Kevin Hilman <khilman@ti.com> merge
Diffstat (limited to 'arch/arm/mach-omap2/vc.c')
-rw-r--r--arch/arm/mach-omap2/vc.c90
1 files changed, 44 insertions, 46 deletions
diff --git a/arch/arm/mach-omap2/vc.c b/arch/arm/mach-omap2/vc.c
index 098af2f3a63e..b62363d9d2b7 100644
--- a/arch/arm/mach-omap2/vc.c
+++ b/arch/arm/mach-omap2/vc.c
@@ -24,14 +24,12 @@ int omap_vc_pre_scale(struct voltagedomain *voltdm,
24 unsigned long target_volt, 24 unsigned long target_volt,
25 u8 *target_vsel, u8 *current_vsel) 25 u8 *target_vsel, u8 *current_vsel)
26{ 26{
27 struct omap_vc_instance_data *vc = voltdm->vdd->vc_data; 27 struct omap_vc_channel *vc = voltdm->vc;
28 struct omap_vdd_info *vdd = voltdm->vdd; 28 struct omap_vdd_info *vdd = voltdm->vdd;
29 struct omap_volt_data *volt_data; 29 struct omap_volt_data *volt_data;
30 const struct omap_vc_common_data *vc_common;
31 const struct omap_vp_common_data *vp_common; 30 const struct omap_vp_common_data *vp_common;
32 u32 vc_cmdval, vp_errgain_val; 31 u32 vc_cmdval, vp_errgain_val;
33 32
34 vc_common = vc->vc_common;
35 vp_common = vdd->vp_data->vp_common; 33 vp_common = vdd->vp_data->vp_common;
36 34
37 /* Check if sufficient pmic info is available for this vdd */ 35 /* Check if sufficient pmic info is available for this vdd */
@@ -63,10 +61,10 @@ int omap_vc_pre_scale(struct voltagedomain *voltdm,
63 *current_vsel = vdd->read_reg(vdd->vp_data->vp_common->prm_mod, vdd->vp_data->voltage); 61 *current_vsel = vdd->read_reg(vdd->vp_data->vp_common->prm_mod, vdd->vp_data->voltage);
64 62
65 /* Setting the ON voltage to the new target voltage */ 63 /* Setting the ON voltage to the new target voltage */
66 vc_cmdval = vdd->read_reg(vc->vc_common->prm_mod, vc->cmdval_reg); 64 vc_cmdval = vdd->read_reg(vc->common->prm_mod, vc->cmdval_reg);
67 vc_cmdval &= ~vc_common->cmd_on_mask; 65 vc_cmdval &= ~vc->common->cmd_on_mask;
68 vc_cmdval |= (*target_vsel << vc_common->cmd_on_shift); 66 vc_cmdval |= (*target_vsel << vc->common->cmd_on_shift);
69 vdd->write_reg(vc_cmdval, vc->vc_common->prm_mod, vc->cmdval_reg); 67 vdd->write_reg(vc_cmdval, vc->common->prm_mod, vc->cmdval_reg);
70 68
71 /* Setting vp errorgain based on the voltage */ 69 /* Setting vp errorgain based on the voltage */
72 if (volt_data) { 70 if (volt_data) {
@@ -99,11 +97,11 @@ void omap_vc_post_scale(struct voltagedomain *voltdm,
99 vdd->curr_volt = target_volt; 97 vdd->curr_volt = target_volt;
100} 98}
101 99
102/* vc_bypass_scale_voltage - VC bypass method of voltage scaling */ 100/* vc_bypass_scale - VC bypass method of voltage scaling */
103int omap_vc_bypass_scale_voltage(struct voltagedomain *voltdm, 101int omap_vc_bypass_scale(struct voltagedomain *voltdm,
104 unsigned long target_volt) 102 unsigned long target_volt)
105{ 103{
106 struct omap_vc_instance_data *vc = voltdm->vdd->vc_data; 104 struct omap_vc_channel *vc = voltdm->vc;
107 struct omap_vdd_info *vdd = voltdm->vdd; 105 struct omap_vdd_info *vdd = voltdm->vdd;
108 u32 loop_cnt = 0, retries_cnt = 0; 106 u32 loop_cnt = 0, retries_cnt = 0;
109 u32 vc_valid, vc_bypass_val_reg, vc_bypass_value; 107 u32 vc_valid, vc_bypass_val_reg, vc_bypass_value;
@@ -114,19 +112,19 @@ int omap_vc_bypass_scale_voltage(struct voltagedomain *voltdm,
114 if (ret) 112 if (ret)
115 return ret; 113 return ret;
116 114
117 vc_valid = vc->vc_common->valid; 115 vc_valid = vc->common->valid;
118 vc_bypass_val_reg = vc->vc_common->bypass_val_reg; 116 vc_bypass_val_reg = vc->common->bypass_val_reg;
119 vc_bypass_value = (target_vsel << vc->vc_common->data_shift) | 117 vc_bypass_value = (target_vsel << vc->common->data_shift) |
120 (vdd->pmic_info->pmic_reg << 118 (vdd->pmic_info->pmic_reg <<
121 vc->vc_common->regaddr_shift) | 119 vc->common->regaddr_shift) |
122 (vdd->pmic_info->i2c_slave_addr << 120 (vdd->pmic_info->i2c_slave_addr <<
123 vc->vc_common->slaveaddr_shift); 121 vc->common->slaveaddr_shift);
124 122
125 vdd->write_reg(vc_bypass_value, vc->vc_common->prm_mod, vc_bypass_val_reg); 123 vdd->write_reg(vc_bypass_value, vc->common->prm_mod, vc_bypass_val_reg);
126 vdd->write_reg(vc_bypass_value | vc_valid, vc->vc_common->prm_mod, 124 vdd->write_reg(vc_bypass_value | vc_valid, vc->common->prm_mod,
127 vc_bypass_val_reg); 125 vc_bypass_val_reg);
128 126
129 vc_bypass_value = vdd->read_reg(vc->vc_common->prm_mod, vc_bypass_val_reg); 127 vc_bypass_value = vdd->read_reg(vc->common->prm_mod, vc_bypass_val_reg);
130 /* 128 /*
131 * Loop till the bypass command is acknowledged from the SMPS. 129 * Loop till the bypass command is acknowledged from the SMPS.
132 * NOTE: This is legacy code. The loop count and retry count needs 130 * NOTE: This is legacy code. The loop count and retry count needs
@@ -145,7 +143,7 @@ int omap_vc_bypass_scale_voltage(struct voltagedomain *voltdm,
145 loop_cnt = 0; 143 loop_cnt = 0;
146 udelay(10); 144 udelay(10);
147 } 145 }
148 vc_bypass_value = vdd->read_reg(vc->vc_common->prm_mod, 146 vc_bypass_value = vdd->read_reg(vc->common->prm_mod,
149 vc_bypass_val_reg); 147 vc_bypass_val_reg);
150 } 148 }
151 149
@@ -155,23 +153,23 @@ int omap_vc_bypass_scale_voltage(struct voltagedomain *voltdm,
155 153
156static void __init omap3_vfsm_init(struct voltagedomain *voltdm) 154static void __init omap3_vfsm_init(struct voltagedomain *voltdm)
157{ 155{
158 struct omap_vc_instance_data *vc = voltdm->vdd->vc_data; 156 struct omap_vc_channel *vc = voltdm->vc;
159 struct omap_vdd_info *vdd = voltdm->vdd; 157 struct omap_vdd_info *vdd = voltdm->vdd;
160 158
161 /* 159 /*
162 * Voltage Manager FSM parameters init 160 * Voltage Manager FSM parameters init
163 * XXX This data should be passed in from the board file 161 * XXX This data should be passed in from the board file
164 */ 162 */
165 vdd->write_reg(OMAP3_CLKSETUP, vc->vc_common->prm_mod, OMAP3_PRM_CLKSETUP_OFFSET); 163 vdd->write_reg(OMAP3_CLKSETUP, vc->common->prm_mod, OMAP3_PRM_CLKSETUP_OFFSET);
166 vdd->write_reg(OMAP3_VOLTOFFSET, vc->vc_common->prm_mod, 164 vdd->write_reg(OMAP3_VOLTOFFSET, vc->common->prm_mod,
167 OMAP3_PRM_VOLTOFFSET_OFFSET); 165 OMAP3_PRM_VOLTOFFSET_OFFSET);
168 vdd->write_reg(OMAP3_VOLTSETUP2, vc->vc_common->prm_mod, 166 vdd->write_reg(OMAP3_VOLTSETUP2, vc->common->prm_mod,
169 OMAP3_PRM_VOLTSETUP2_OFFSET); 167 OMAP3_PRM_VOLTSETUP2_OFFSET);
170} 168}
171 169
172static void __init omap3_vc_init_channel(struct voltagedomain *voltdm) 170static void __init omap3_vc_init_channel(struct voltagedomain *voltdm)
173{ 171{
174 struct omap_vc_instance_data *vc = voltdm->vdd->vc_data; 172 struct omap_vc_channel *vc = voltdm->vc;
175 struct omap_vdd_info *vdd = voltdm->vdd; 173 struct omap_vdd_info *vdd = voltdm->vdd;
176 static bool is_initialized; 174 static bool is_initialized;
177 u8 on_vsel, onlp_vsel, ret_vsel, off_vsel; 175 u8 on_vsel, onlp_vsel, ret_vsel, off_vsel;
@@ -185,19 +183,19 @@ static void __init omap3_vc_init_channel(struct voltagedomain *voltdm)
185 onlp_vsel = vdd->pmic_info->uv_to_vsel(vdd->pmic_info->onlp_volt); 183 onlp_vsel = vdd->pmic_info->uv_to_vsel(vdd->pmic_info->onlp_volt);
186 ret_vsel = vdd->pmic_info->uv_to_vsel(vdd->pmic_info->ret_volt); 184 ret_vsel = vdd->pmic_info->uv_to_vsel(vdd->pmic_info->ret_volt);
187 off_vsel = vdd->pmic_info->uv_to_vsel(vdd->pmic_info->off_volt); 185 off_vsel = vdd->pmic_info->uv_to_vsel(vdd->pmic_info->off_volt);
188 vc_val = ((on_vsel << vc->vc_common->cmd_on_shift) | 186 vc_val = ((on_vsel << vc->common->cmd_on_shift) |
189 (onlp_vsel << vc->vc_common->cmd_onlp_shift) | 187 (onlp_vsel << vc->common->cmd_onlp_shift) |
190 (ret_vsel << vc->vc_common->cmd_ret_shift) | 188 (ret_vsel << vc->common->cmd_ret_shift) |
191 (off_vsel << vc->vc_common->cmd_off_shift)); 189 (off_vsel << vc->common->cmd_off_shift));
192 vdd->write_reg(vc_val, vc->vc_common->prm_mod, vc->cmdval_reg); 190 vdd->write_reg(vc_val, vc->common->prm_mod, vc->cmdval_reg);
193 191
194 /* 192 /*
195 * Generic VC parameters init 193 * Generic VC parameters init
196 * XXX This data should be abstracted out 194 * XXX This data should be abstracted out
197 */ 195 */
198 vdd->write_reg(OMAP3430_CMD1_MASK | OMAP3430_RAV1_MASK, vc->vc_common->prm_mod, 196 vdd->write_reg(OMAP3430_CMD1_MASK | OMAP3430_RAV1_MASK, vc->common->prm_mod,
199 OMAP3_PRM_VC_CH_CONF_OFFSET); 197 OMAP3_PRM_VC_CH_CONF_OFFSET);
200 vdd->write_reg(OMAP3430_MCODE_SHIFT | OMAP3430_HSEN_MASK, vc->vc_common->prm_mod, 198 vdd->write_reg(OMAP3430_MCODE_SHIFT | OMAP3430_HSEN_MASK, vc->common->prm_mod,
201 OMAP3_PRM_VC_I2C_CFG_OFFSET); 199 OMAP3_PRM_VC_I2C_CFG_OFFSET);
202 200
203 omap3_vfsm_init(voltdm); 201 omap3_vfsm_init(voltdm);
@@ -209,7 +207,7 @@ static void __init omap3_vc_init_channel(struct voltagedomain *voltdm)
209/* OMAP4 specific voltage init functions */ 207/* OMAP4 specific voltage init functions */
210static void __init omap4_vc_init_channel(struct voltagedomain *voltdm) 208static void __init omap4_vc_init_channel(struct voltagedomain *voltdm)
211{ 209{
212 struct omap_vc_instance_data *vc = voltdm->vdd->vc_data; 210 struct omap_vc_channel *vc = voltdm->vc;
213 struct omap_vdd_info *vdd = voltdm->vdd; 211 struct omap_vdd_info *vdd = voltdm->vdd;
214 static bool is_initialized; 212 static bool is_initialized;
215 u32 vc_val; 213 u32 vc_val;
@@ -226,18 +224,18 @@ static void __init omap4_vc_init_channel(struct voltagedomain *voltdm)
226 vc_val = (OMAP4430_RAV_VDD_MPU_L_MASK | OMAP4430_CMD_VDD_MPU_L_MASK | 224 vc_val = (OMAP4430_RAV_VDD_MPU_L_MASK | OMAP4430_CMD_VDD_MPU_L_MASK |
227 OMAP4430_RAV_VDD_IVA_L_MASK | OMAP4430_CMD_VDD_IVA_L_MASK | 225 OMAP4430_RAV_VDD_IVA_L_MASK | OMAP4430_CMD_VDD_IVA_L_MASK |
228 OMAP4430_RAV_VDD_CORE_L_MASK | OMAP4430_CMD_VDD_CORE_L_MASK); 226 OMAP4430_RAV_VDD_CORE_L_MASK | OMAP4430_CMD_VDD_CORE_L_MASK);
229 vdd->write_reg(vc_val, vc->vc_common->prm_mod, OMAP4_PRM_VC_CFG_CHANNEL_OFFSET); 227 vdd->write_reg(vc_val, vc->common->prm_mod, OMAP4_PRM_VC_CFG_CHANNEL_OFFSET);
230 228
231 /* XXX These are magic numbers and do not belong! */ 229 /* XXX These are magic numbers and do not belong! */
232 vc_val = (0x60 << OMAP4430_SCLL_SHIFT | 0x26 << OMAP4430_SCLH_SHIFT); 230 vc_val = (0x60 << OMAP4430_SCLL_SHIFT | 0x26 << OMAP4430_SCLH_SHIFT);
233 vdd->write_reg(vc_val, vc->vc_common->prm_mod, OMAP4_PRM_VC_CFG_I2C_CLK_OFFSET); 231 vdd->write_reg(vc_val, vc->common->prm_mod, OMAP4_PRM_VC_CFG_I2C_CLK_OFFSET);
234 232
235 is_initialized = true; 233 is_initialized = true;
236} 234}
237 235
238void __init omap_vc_init_channel(struct voltagedomain *voltdm) 236void __init omap_vc_init_channel(struct voltagedomain *voltdm)
239{ 237{
240 struct omap_vc_instance_data *vc = voltdm->vdd->vc_data; 238 struct omap_vc_channel *vc = voltdm->vc;
241 struct omap_vdd_info *vdd = voltdm->vdd; 239 struct omap_vdd_info *vdd = voltdm->vdd;
242 u32 vc_val; 240 u32 vc_val;
243 241
@@ -255,27 +253,27 @@ void __init omap_vc_init_channel(struct voltagedomain *voltdm)
255 } 253 }
256 254
257 /* Set up the SMPS_SA(i2c slave address in VC */ 255 /* Set up the SMPS_SA(i2c slave address in VC */
258 vc_val = vdd->read_reg(vc->vc_common->prm_mod, 256 vc_val = vdd->read_reg(vc->common->prm_mod,
259 vc->vc_common->smps_sa_reg); 257 vc->common->smps_sa_reg);
260 vc_val &= ~vc->smps_sa_mask; 258 vc_val &= ~vc->smps_sa_mask;
261 vc_val |= vdd->pmic_info->i2c_slave_addr << vc->smps_sa_shift; 259 vc_val |= vdd->pmic_info->i2c_slave_addr << vc->smps_sa_shift;
262 vdd->write_reg(vc_val, vc->vc_common->prm_mod, 260 vdd->write_reg(vc_val, vc->common->prm_mod,
263 vc->vc_common->smps_sa_reg); 261 vc->common->smps_sa_reg);
264 262
265 /* Setup the VOLRA(pmic reg addr) in VC */ 263 /* Setup the VOLRA(pmic reg addr) in VC */
266 vc_val = vdd->read_reg(vc->vc_common->prm_mod, 264 vc_val = vdd->read_reg(vc->common->prm_mod,
267 vc->vc_common->smps_volra_reg); 265 vc->common->smps_volra_reg);
268 vc_val &= ~vc->smps_volra_mask; 266 vc_val &= ~vc->smps_volra_mask;
269 vc_val |= vdd->pmic_info->pmic_reg << vc->smps_volra_shift; 267 vc_val |= vdd->pmic_info->pmic_reg << vc->smps_volra_shift;
270 vdd->write_reg(vc_val, vc->vc_common->prm_mod, 268 vdd->write_reg(vc_val, vc->common->prm_mod,
271 vc->vc_common->smps_volra_reg); 269 vc->common->smps_volra_reg);
272 270
273 /* Configure the setup times */ 271 /* Configure the setup times */
274 vc_val = vdd->read_reg(vc->vc_common->prm_mod, vdd->vfsm->voltsetup_reg); 272 vc_val = vdd->read_reg(vc->common->prm_mod, vdd->vfsm->voltsetup_reg);
275 vc_val &= ~vdd->vfsm->voltsetup_mask; 273 vc_val &= ~vdd->vfsm->voltsetup_mask;
276 vc_val |= vdd->pmic_info->volt_setup_time << 274 vc_val |= vdd->pmic_info->volt_setup_time <<
277 vdd->vfsm->voltsetup_shift; 275 vdd->vfsm->voltsetup_shift;
278 vdd->write_reg(vc_val, vc->vc_common->prm_mod, vdd->vfsm->voltsetup_reg); 276 vdd->write_reg(vc_val, vc->common->prm_mod, vdd->vfsm->voltsetup_reg);
279 277
280 if (cpu_is_omap34xx()) 278 if (cpu_is_omap34xx())
281 omap3_vc_init_channel(voltdm); 279 omap3_vc_init_channel(voltdm);