aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/arm/mach-omap2/vc.c90
-rw-r--r--arch/arm/mach-omap2/vc.h26
-rw-r--r--arch/arm/mach-omap2/vc3xxx_data.c10
-rw-r--r--arch/arm/mach-omap2/vc44xx_data.c14
-rw-r--r--arch/arm/mach-omap2/voltage.c6
-rw-r--r--arch/arm/mach-omap2/voltage.h6
-rw-r--r--arch/arm/mach-omap2/voltagedomains3xxx_data.c4
-rw-r--r--arch/arm/mach-omap2/voltagedomains44xx_data.c6
8 files changed, 81 insertions, 81 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);
diff --git a/arch/arm/mach-omap2/vc.h b/arch/arm/mach-omap2/vc.h
index d0bf34831c0b..51d36a80b131 100644
--- a/arch/arm/mach-omap2/vc.h
+++ b/arch/arm/mach-omap2/vc.h
@@ -22,7 +22,7 @@
22struct voltagedomain; 22struct voltagedomain;
23 23
24/** 24/**
25 * struct omap_vc_common_data - per-VC register/bitfield data 25 * struct omap_vc_common - per-VC register/bitfield data
26 * @cmd_on_mask: ON bitmask in PRM_VC_CMD_VAL* register 26 * @cmd_on_mask: ON bitmask in PRM_VC_CMD_VAL* register
27 * @valid: VALID bitmask in PRM_VC_BYPASS_VAL register 27 * @valid: VALID bitmask in PRM_VC_BYPASS_VAL register
28 * @prm_mod: PRM module id used for PRM register access 28 * @prm_mod: PRM module id used for PRM register access
@@ -40,7 +40,7 @@ struct voltagedomain;
40 * XXX One of cmd_on_mask and cmd_on_shift are not needed 40 * XXX One of cmd_on_mask and cmd_on_shift are not needed
41 * XXX VALID should probably be a shift, not a mask 41 * XXX VALID should probably be a shift, not a mask
42 */ 42 */
43struct omap_vc_common_data { 43struct omap_vc_common {
44 u32 cmd_on_mask; 44 u32 cmd_on_mask;
45 u32 valid; 45 u32 valid;
46 s16 prm_mod; 46 s16 prm_mod;
@@ -57,8 +57,8 @@ struct omap_vc_common_data {
57}; 57};
58 58
59/** 59/**
60 * struct omap_vc_instance_data - VC per-instance data 60 * struct omap_vc_channel - VC per-instance data
61 * @vc_common: pointer to VC common data for this platform 61 * @common: pointer to VC common data for this platform
62 * @smps_sa_mask: SA* bitmask in the PRM_VC_SMPS_SA register 62 * @smps_sa_mask: SA* bitmask in the PRM_VC_SMPS_SA register
63 * @smps_volra_mask: VOLRA* bitmask in the PRM_VC_VOL_RA register 63 * @smps_volra_mask: VOLRA* bitmask in the PRM_VC_VOL_RA register
64 * @smps_sa_shift: SA* field shift in the PRM_VC_SMPS_SA register 64 * @smps_sa_shift: SA* field shift in the PRM_VC_SMPS_SA register
@@ -67,8 +67,8 @@ struct omap_vc_common_data {
67 * XXX It is not necessary to have both a *_mask and a *_shift - 67 * XXX It is not necessary to have both a *_mask and a *_shift -
68 * remove one 68 * remove one
69 */ 69 */
70struct omap_vc_instance_data { 70struct omap_vc_channel {
71 const struct omap_vc_common_data *vc_common; 71 const struct omap_vc_common *common;
72 u32 smps_sa_mask; 72 u32 smps_sa_mask;
73 u32 smps_volra_mask; 73 u32 smps_volra_mask;
74 u8 cmdval_reg; 74 u8 cmdval_reg;
@@ -76,12 +76,12 @@ struct omap_vc_instance_data {
76 u8 smps_volra_shift; 76 u8 smps_volra_shift;
77}; 77};
78 78
79extern struct omap_vc_instance_data omap3_vc1_data; 79extern struct omap_vc_channel omap3_vc_mpu;
80extern struct omap_vc_instance_data omap3_vc2_data; 80extern struct omap_vc_channel omap3_vc_core;
81 81
82extern struct omap_vc_instance_data omap4_vc_mpu_data; 82extern struct omap_vc_channel omap4_vc_mpu;
83extern struct omap_vc_instance_data omap4_vc_iva_data; 83extern struct omap_vc_channel omap4_vc_iva;
84extern struct omap_vc_instance_data omap4_vc_core_data; 84extern struct omap_vc_channel omap4_vc_core;
85 85
86void omap_vc_init_channel(struct voltagedomain *voltdm); 86void omap_vc_init_channel(struct voltagedomain *voltdm);
87int omap_vc_pre_scale(struct voltagedomain *voltdm, 87int omap_vc_pre_scale(struct voltagedomain *voltdm,
@@ -90,8 +90,8 @@ int omap_vc_pre_scale(struct voltagedomain *voltdm,
90void omap_vc_post_scale(struct voltagedomain *voltdm, 90void omap_vc_post_scale(struct voltagedomain *voltdm,
91 unsigned long target_volt, 91 unsigned long target_volt,
92 u8 target_vsel, u8 current_vsel); 92 u8 target_vsel, u8 current_vsel);
93int omap_vc_bypass_scale_voltage(struct voltagedomain *voltdm, 93int omap_vc_bypass_scale(struct voltagedomain *voltdm,
94 unsigned long target_volt); 94 unsigned long target_volt);
95 95
96#endif 96#endif
97 97
diff --git a/arch/arm/mach-omap2/vc3xxx_data.c b/arch/arm/mach-omap2/vc3xxx_data.c
index 55caccb2908d..1a17ed459cc3 100644
--- a/arch/arm/mach-omap2/vc3xxx_data.c
+++ b/arch/arm/mach-omap2/vc3xxx_data.c
@@ -29,7 +29,7 @@
29 * VC data common to 34xx/36xx chips 29 * VC data common to 34xx/36xx chips
30 * XXX This stuff presumably belongs in the vc3xxx.c or vc.c file. 30 * XXX This stuff presumably belongs in the vc3xxx.c or vc.c file.
31 */ 31 */
32static struct omap_vc_common_data omap3_vc_common = { 32static struct omap_vc_common omap3_vc_common = {
33 .prm_mod = OMAP3430_GR_MOD, 33 .prm_mod = OMAP3430_GR_MOD,
34 .smps_sa_reg = OMAP3_PRM_VC_SMPS_SA_OFFSET, 34 .smps_sa_reg = OMAP3_PRM_VC_SMPS_SA_OFFSET,
35 .smps_volra_reg = OMAP3_PRM_VC_SMPS_VOL_RA_OFFSET, 35 .smps_volra_reg = OMAP3_PRM_VC_SMPS_VOL_RA_OFFSET,
@@ -45,8 +45,8 @@ static struct omap_vc_common_data omap3_vc_common = {
45 .cmd_off_shift = OMAP3430_VC_CMD_OFF_SHIFT, 45 .cmd_off_shift = OMAP3430_VC_CMD_OFF_SHIFT,
46}; 46};
47 47
48struct omap_vc_instance_data omap3_vc1_data = { 48struct omap_vc_channel omap3_vc_mpu = {
49 .vc_common = &omap3_vc_common, 49 .common = &omap3_vc_common,
50 .cmdval_reg = OMAP3_PRM_VC_CMD_VAL_0_OFFSET, 50 .cmdval_reg = OMAP3_PRM_VC_CMD_VAL_0_OFFSET,
51 .smps_sa_shift = OMAP3430_PRM_VC_SMPS_SA_SA0_SHIFT, 51 .smps_sa_shift = OMAP3430_PRM_VC_SMPS_SA_SA0_SHIFT,
52 .smps_sa_mask = OMAP3430_PRM_VC_SMPS_SA_SA0_MASK, 52 .smps_sa_mask = OMAP3430_PRM_VC_SMPS_SA_SA0_MASK,
@@ -54,8 +54,8 @@ struct omap_vc_instance_data omap3_vc1_data = {
54 .smps_volra_mask = OMAP3430_VOLRA0_MASK, 54 .smps_volra_mask = OMAP3430_VOLRA0_MASK,
55}; 55};
56 56
57struct omap_vc_instance_data omap3_vc2_data = { 57struct omap_vc_channel omap3_vc_core = {
58 .vc_common = &omap3_vc_common, 58 .common = &omap3_vc_common,
59 .cmdval_reg = OMAP3_PRM_VC_CMD_VAL_1_OFFSET, 59 .cmdval_reg = OMAP3_PRM_VC_CMD_VAL_1_OFFSET,
60 .smps_sa_shift = OMAP3430_PRM_VC_SMPS_SA_SA1_SHIFT, 60 .smps_sa_shift = OMAP3430_PRM_VC_SMPS_SA_SA1_SHIFT,
61 .smps_sa_mask = OMAP3430_PRM_VC_SMPS_SA_SA1_MASK, 61 .smps_sa_mask = OMAP3430_PRM_VC_SMPS_SA_SA1_MASK,
diff --git a/arch/arm/mach-omap2/vc44xx_data.c b/arch/arm/mach-omap2/vc44xx_data.c
index b62678e12a3c..56f3f4a37879 100644
--- a/arch/arm/mach-omap2/vc44xx_data.c
+++ b/arch/arm/mach-omap2/vc44xx_data.c
@@ -30,7 +30,7 @@
30 * VC data common to 44xx chips 30 * VC data common to 44xx chips
31 * XXX This stuff presumably belongs in the vc3xxx.c or vc.c file. 31 * XXX This stuff presumably belongs in the vc3xxx.c or vc.c file.
32 */ 32 */
33static const struct omap_vc_common_data omap4_vc_common = { 33static const struct omap_vc_common omap4_vc_common = {
34 .prm_mod = OMAP4430_PRM_DEVICE_INST, 34 .prm_mod = OMAP4430_PRM_DEVICE_INST,
35 .smps_sa_reg = OMAP4_PRM_VC_SMPS_SA_OFFSET, 35 .smps_sa_reg = OMAP4_PRM_VC_SMPS_SA_OFFSET,
36 .smps_volra_reg = OMAP4_PRM_VC_VAL_SMPS_RA_VOL_OFFSET, 36 .smps_volra_reg = OMAP4_PRM_VC_VAL_SMPS_RA_VOL_OFFSET,
@@ -47,8 +47,8 @@ static const struct omap_vc_common_data omap4_vc_common = {
47}; 47};
48 48
49/* VC instance data for each controllable voltage line */ 49/* VC instance data for each controllable voltage line */
50struct omap_vc_instance_data omap4_vc_mpu_data = { 50struct omap_vc_channel omap4_vc_mpu = {
51 .vc_common = &omap4_vc_common, 51 .common = &omap4_vc_common,
52 .cmdval_reg = OMAP4_PRM_VC_VAL_CMD_VDD_MPU_L_OFFSET, 52 .cmdval_reg = OMAP4_PRM_VC_VAL_CMD_VDD_MPU_L_OFFSET,
53 .smps_sa_shift = OMAP4430_SA_VDD_MPU_L_PRM_VC_SMPS_SA_SHIFT, 53 .smps_sa_shift = OMAP4430_SA_VDD_MPU_L_PRM_VC_SMPS_SA_SHIFT,
54 .smps_sa_mask = OMAP4430_SA_VDD_MPU_L_PRM_VC_SMPS_SA_MASK, 54 .smps_sa_mask = OMAP4430_SA_VDD_MPU_L_PRM_VC_SMPS_SA_MASK,
@@ -56,8 +56,8 @@ struct omap_vc_instance_data omap4_vc_mpu_data = {
56 .smps_volra_mask = OMAP4430_VOLRA_VDD_MPU_L_MASK, 56 .smps_volra_mask = OMAP4430_VOLRA_VDD_MPU_L_MASK,
57}; 57};
58 58
59struct omap_vc_instance_data omap4_vc_iva_data = { 59struct omap_vc_channel omap4_vc_iva = {
60 .vc_common = &omap4_vc_common, 60 .common = &omap4_vc_common,
61 .cmdval_reg = OMAP4_PRM_VC_VAL_CMD_VDD_IVA_L_OFFSET, 61 .cmdval_reg = OMAP4_PRM_VC_VAL_CMD_VDD_IVA_L_OFFSET,
62 .smps_sa_shift = OMAP4430_SA_VDD_IVA_L_PRM_VC_SMPS_SA_SHIFT, 62 .smps_sa_shift = OMAP4430_SA_VDD_IVA_L_PRM_VC_SMPS_SA_SHIFT,
63 .smps_sa_mask = OMAP4430_SA_VDD_IVA_L_PRM_VC_SMPS_SA_MASK, 63 .smps_sa_mask = OMAP4430_SA_VDD_IVA_L_PRM_VC_SMPS_SA_MASK,
@@ -65,8 +65,8 @@ struct omap_vc_instance_data omap4_vc_iva_data = {
65 .smps_volra_mask = OMAP4430_VOLRA_VDD_IVA_L_MASK, 65 .smps_volra_mask = OMAP4430_VOLRA_VDD_IVA_L_MASK,
66}; 66};
67 67
68struct omap_vc_instance_data omap4_vc_core_data = { 68struct omap_vc_channel omap4_vc_core = {
69 .vc_common = &omap4_vc_common, 69 .common = &omap4_vc_common,
70 .cmdval_reg = OMAP4_PRM_VC_VAL_CMD_VDD_CORE_L_OFFSET, 70 .cmdval_reg = OMAP4_PRM_VC_VAL_CMD_VDD_CORE_L_OFFSET,
71 .smps_sa_shift = OMAP4430_SA_VDD_CORE_L_0_6_SHIFT, 71 .smps_sa_shift = OMAP4430_SA_VDD_CORE_L_0_6_SHIFT,
72 .smps_sa_mask = OMAP4430_SA_VDD_CORE_L_0_6_MASK, 72 .smps_sa_mask = OMAP4430_SA_VDD_CORE_L_0_6_MASK,
diff --git a/arch/arm/mach-omap2/voltage.c b/arch/arm/mach-omap2/voltage.c
index 6ba6e493c757..c6352e3230b7 100644
--- a/arch/arm/mach-omap2/voltage.c
+++ b/arch/arm/mach-omap2/voltage.c
@@ -769,7 +769,7 @@ void omap_change_voltscale_method(struct voltagedomain *voltdm,
769 vdd->volt_scale = vp_forceupdate_scale_voltage; 769 vdd->volt_scale = vp_forceupdate_scale_voltage;
770 return; 770 return;
771 case VOLTSCALE_VCBYPASS: 771 case VOLTSCALE_VCBYPASS:
772 vdd->volt_scale = omap_vc_bypass_scale_voltage; 772 vdd->volt_scale = omap_vc_bypass_scale;
773 return; 773 return;
774 default: 774 default:
775 pr_warning("%s: Trying to change the method of voltage scaling" 775 pr_warning("%s: Trying to change the method of voltage scaling"
@@ -802,10 +802,12 @@ int __init omap_voltage_late_init(void)
802 if (!voltdm->scalable) 802 if (!voltdm->scalable)
803 continue; 803 continue;
804 804
805 if (voltdm->vc)
806 omap_vc_init_channel(voltdm);
807
805 if (voltdm->vdd) { 808 if (voltdm->vdd) {
806 if (omap_vdd_data_configure(voltdm)) 809 if (omap_vdd_data_configure(voltdm))
807 continue; 810 continue;
808 omap_vc_init_channel(voltdm);
809 vp_init(voltdm); 811 vp_init(voltdm);
810 vdd_debugfs_init(voltdm); 812 vdd_debugfs_init(voltdm);
811 } 813 }
diff --git a/arch/arm/mach-omap2/voltage.h b/arch/arm/mach-omap2/voltage.h
index 5063ab33af7b..488576497c88 100644
--- a/arch/arm/mach-omap2/voltage.h
+++ b/arch/arm/mach-omap2/voltage.h
@@ -58,6 +58,7 @@ struct omap_vfsm_instance_data {
58 * @scalable: Whether or not this voltage domain is scalable 58 * @scalable: Whether or not this voltage domain is scalable
59 * @node: list_head linking all voltage domains 59 * @node: list_head linking all voltage domains
60 * @pwrdm_list: list_head linking all powerdomains in this voltagedomain 60 * @pwrdm_list: list_head linking all powerdomains in this voltagedomain
61 * @vc: pointer to VC channel associated with this voltagedomain
61 * @vdd: to be removed 62 * @vdd: to be removed
62 */ 63 */
63struct voltagedomain { 64struct voltagedomain {
@@ -65,6 +66,8 @@ struct voltagedomain {
65 bool scalable; 66 bool scalable;
66 struct list_head node; 67 struct list_head node;
67 struct list_head pwrdm_list; 68 struct list_head pwrdm_list;
69 struct omap_vc_channel *vc;
70
68 struct omap_vdd_info *vdd; 71 struct omap_vdd_info *vdd;
69}; 72};
70 73
@@ -124,8 +127,6 @@ struct omap_volt_pmic_info {
124 * @vp_data : the register values, shifts, masks for various 127 * @vp_data : the register values, shifts, masks for various
125 * vp registers 128 * vp registers
126 * @vp_rt_data : VP data derived at runtime, not predefined 129 * @vp_rt_data : VP data derived at runtime, not predefined
127 * @vc_data : structure containing various various vc registers,
128 * shifts, masks etc.
129 * @vfsm : voltage manager FSM data 130 * @vfsm : voltage manager FSM data
130 * @debug_dir : debug directory for this voltage domain. 131 * @debug_dir : debug directory for this voltage domain.
131 * @curr_volt : current voltage for this vdd. 132 * @curr_volt : current voltage for this vdd.
@@ -138,7 +139,6 @@ struct omap_vdd_info {
138 struct omap_volt_pmic_info *pmic_info; 139 struct omap_volt_pmic_info *pmic_info;
139 struct omap_vp_instance_data *vp_data; 140 struct omap_vp_instance_data *vp_data;
140 struct omap_vp_runtime_data vp_rt_data; 141 struct omap_vp_runtime_data vp_rt_data;
141 struct omap_vc_instance_data *vc_data;
142 const struct omap_vfsm_instance_data *vfsm; 142 const struct omap_vfsm_instance_data *vfsm;
143 struct dentry *debug_dir; 143 struct dentry *debug_dir;
144 u32 curr_volt; 144 u32 curr_volt;
diff --git a/arch/arm/mach-omap2/voltagedomains3xxx_data.c b/arch/arm/mach-omap2/voltagedomains3xxx_data.c
index d7e1052d2cdb..7cb27ec64890 100644
--- a/arch/arm/mach-omap2/voltagedomains3xxx_data.c
+++ b/arch/arm/mach-omap2/voltagedomains3xxx_data.c
@@ -41,7 +41,6 @@ static struct omap_vdd_info omap3_vdd1_info = {
41 .prm_irqst_mod = OCP_MOD, 41 .prm_irqst_mod = OCP_MOD,
42 .prm_irqst_reg = OMAP3_PRM_IRQSTATUS_MPU_OFFSET, 42 .prm_irqst_reg = OMAP3_PRM_IRQSTATUS_MPU_OFFSET,
43 .vp_data = &omap3_vp1_data, 43 .vp_data = &omap3_vp1_data,
44 .vc_data = &omap3_vc1_data,
45 .vfsm = &omap3_vdd1_vfsm_data, 44 .vfsm = &omap3_vdd1_vfsm_data,
46}; 45};
47 46
@@ -55,19 +54,20 @@ static struct omap_vdd_info omap3_vdd2_info = {
55 .prm_irqst_mod = OCP_MOD, 54 .prm_irqst_mod = OCP_MOD,
56 .prm_irqst_reg = OMAP3_PRM_IRQSTATUS_MPU_OFFSET, 55 .prm_irqst_reg = OMAP3_PRM_IRQSTATUS_MPU_OFFSET,
57 .vp_data = &omap3_vp2_data, 56 .vp_data = &omap3_vp2_data,
58 .vc_data = &omap3_vc2_data,
59 .vfsm = &omap3_vdd2_vfsm_data, 57 .vfsm = &omap3_vdd2_vfsm_data,
60}; 58};
61 59
62static struct voltagedomain omap3_voltdm_mpu = { 60static struct voltagedomain omap3_voltdm_mpu = {
63 .name = "mpu_iva", 61 .name = "mpu_iva",
64 .scalable = true, 62 .scalable = true,
63 .vc = &omap3_vc_mpu,
65 .vdd = &omap3_vdd1_info, 64 .vdd = &omap3_vdd1_info,
66}; 65};
67 66
68static struct voltagedomain omap3_voltdm_core = { 67static struct voltagedomain omap3_voltdm_core = {
69 .name = "core", 68 .name = "core",
70 .scalable = true, 69 .scalable = true,
70 .vc = &omap3_vc_core,
71 .vdd = &omap3_vdd2_info, 71 .vdd = &omap3_vdd2_info,
72}; 72};
73 73
diff --git a/arch/arm/mach-omap2/voltagedomains44xx_data.c b/arch/arm/mach-omap2/voltagedomains44xx_data.c
index 9a17b5ebf665..a05d90ab6869 100644
--- a/arch/arm/mach-omap2/voltagedomains44xx_data.c
+++ b/arch/arm/mach-omap2/voltagedomains44xx_data.c
@@ -40,7 +40,6 @@ static struct omap_vdd_info omap4_vdd_mpu_info = {
40 .prm_irqst_mod = OMAP4430_PRM_OCP_SOCKET_INST, 40 .prm_irqst_mod = OMAP4430_PRM_OCP_SOCKET_INST,
41 .prm_irqst_reg = OMAP4_PRM_IRQSTATUS_MPU_2_OFFSET, 41 .prm_irqst_reg = OMAP4_PRM_IRQSTATUS_MPU_2_OFFSET,
42 .vp_data = &omap4_vp_mpu_data, 42 .vp_data = &omap4_vp_mpu_data,
43 .vc_data = &omap4_vc_mpu_data,
44 .vfsm = &omap4_vdd_mpu_vfsm_data, 43 .vfsm = &omap4_vdd_mpu_vfsm_data,
45}; 44};
46 45
@@ -52,7 +51,6 @@ static struct omap_vdd_info omap4_vdd_iva_info = {
52 .prm_irqst_mod = OMAP4430_PRM_OCP_SOCKET_INST, 51 .prm_irqst_mod = OMAP4430_PRM_OCP_SOCKET_INST,
53 .prm_irqst_reg = OMAP4_PRM_IRQSTATUS_MPU_OFFSET, 52 .prm_irqst_reg = OMAP4_PRM_IRQSTATUS_MPU_OFFSET,
54 .vp_data = &omap4_vp_iva_data, 53 .vp_data = &omap4_vp_iva_data,
55 .vc_data = &omap4_vc_iva_data,
56 .vfsm = &omap4_vdd_iva_vfsm_data, 54 .vfsm = &omap4_vdd_iva_vfsm_data,
57}; 55};
58 56
@@ -64,25 +62,27 @@ static struct omap_vdd_info omap4_vdd_core_info = {
64 .prm_irqst_mod = OMAP4430_PRM_OCP_SOCKET_INST, 62 .prm_irqst_mod = OMAP4430_PRM_OCP_SOCKET_INST,
65 .prm_irqst_reg = OMAP4_PRM_IRQSTATUS_MPU_OFFSET, 63 .prm_irqst_reg = OMAP4_PRM_IRQSTATUS_MPU_OFFSET,
66 .vp_data = &omap4_vp_core_data, 64 .vp_data = &omap4_vp_core_data,
67 .vc_data = &omap4_vc_core_data,
68 .vfsm = &omap4_vdd_core_vfsm_data, 65 .vfsm = &omap4_vdd_core_vfsm_data,
69}; 66};
70 67
71static struct voltagedomain omap4_voltdm_mpu = { 68static struct voltagedomain omap4_voltdm_mpu = {
72 .name = "mpu", 69 .name = "mpu",
73 .scalable = true, 70 .scalable = true,
71 .vc = &omap4_vc_mpu,
74 .vdd = &omap4_vdd_mpu_info, 72 .vdd = &omap4_vdd_mpu_info,
75}; 73};
76 74
77static struct voltagedomain omap4_voltdm_iva = { 75static struct voltagedomain omap4_voltdm_iva = {
78 .name = "iva", 76 .name = "iva",
79 .scalable = true, 77 .scalable = true,
78 .vc = &omap4_vc_iva,
80 .vdd = &omap4_vdd_iva_info, 79 .vdd = &omap4_vdd_iva_info,
81}; 80};
82 81
83static struct voltagedomain omap4_voltdm_core = { 82static struct voltagedomain omap4_voltdm_core = {
84 .name = "core", 83 .name = "core",
85 .scalable = true, 84 .scalable = true,
85 .vc = &omap4_vc_core,
86 .vdd = &omap4_vdd_core_info, 86 .vdd = &omap4_vdd_core_info,
87}; 87};
88 88