diff options
-rw-r--r-- | arch/arm/mach-omap2/vc.c | 90 | ||||
-rw-r--r-- | arch/arm/mach-omap2/vc.h | 26 | ||||
-rw-r--r-- | arch/arm/mach-omap2/vc3xxx_data.c | 10 | ||||
-rw-r--r-- | arch/arm/mach-omap2/vc44xx_data.c | 14 | ||||
-rw-r--r-- | arch/arm/mach-omap2/voltage.c | 6 | ||||
-rw-r--r-- | arch/arm/mach-omap2/voltage.h | 6 | ||||
-rw-r--r-- | arch/arm/mach-omap2/voltagedomains3xxx_data.c | 4 | ||||
-rw-r--r-- | arch/arm/mach-omap2/voltagedomains44xx_data.c | 6 |
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 */ |
103 | int omap_vc_bypass_scale_voltage(struct voltagedomain *voltdm, | 101 | int 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 | ||
156 | static void __init omap3_vfsm_init(struct voltagedomain *voltdm) | 154 | static 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 | ||
172 | static void __init omap3_vc_init_channel(struct voltagedomain *voltdm) | 170 | static 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 */ |
210 | static void __init omap4_vc_init_channel(struct voltagedomain *voltdm) | 208 | static 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 | ||
238 | void __init omap_vc_init_channel(struct voltagedomain *voltdm) | 236 | void __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 @@ | |||
22 | struct voltagedomain; | 22 | struct 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 | */ |
43 | struct omap_vc_common_data { | 43 | struct 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 | */ |
70 | struct omap_vc_instance_data { | 70 | struct 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 | ||
79 | extern struct omap_vc_instance_data omap3_vc1_data; | 79 | extern struct omap_vc_channel omap3_vc_mpu; |
80 | extern struct omap_vc_instance_data omap3_vc2_data; | 80 | extern struct omap_vc_channel omap3_vc_core; |
81 | 81 | ||
82 | extern struct omap_vc_instance_data omap4_vc_mpu_data; | 82 | extern struct omap_vc_channel omap4_vc_mpu; |
83 | extern struct omap_vc_instance_data omap4_vc_iva_data; | 83 | extern struct omap_vc_channel omap4_vc_iva; |
84 | extern struct omap_vc_instance_data omap4_vc_core_data; | 84 | extern struct omap_vc_channel omap4_vc_core; |
85 | 85 | ||
86 | void omap_vc_init_channel(struct voltagedomain *voltdm); | 86 | void omap_vc_init_channel(struct voltagedomain *voltdm); |
87 | int omap_vc_pre_scale(struct voltagedomain *voltdm, | 87 | int omap_vc_pre_scale(struct voltagedomain *voltdm, |
@@ -90,8 +90,8 @@ int omap_vc_pre_scale(struct voltagedomain *voltdm, | |||
90 | void omap_vc_post_scale(struct voltagedomain *voltdm, | 90 | void 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); |
93 | int omap_vc_bypass_scale_voltage(struct voltagedomain *voltdm, | 93 | int 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 | */ |
32 | static struct omap_vc_common_data omap3_vc_common = { | 32 | static 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 | ||
48 | struct omap_vc_instance_data omap3_vc1_data = { | 48 | struct 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 | ||
57 | struct omap_vc_instance_data omap3_vc2_data = { | 57 | struct 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 | */ |
33 | static const struct omap_vc_common_data omap4_vc_common = { | 33 | static 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 */ |
50 | struct omap_vc_instance_data omap4_vc_mpu_data = { | 50 | struct 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 | ||
59 | struct omap_vc_instance_data omap4_vc_iva_data = { | 59 | struct 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 | ||
68 | struct omap_vc_instance_data omap4_vc_core_data = { | 68 | struct 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 | */ |
63 | struct voltagedomain { | 64 | struct 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 | ||
62 | static struct voltagedomain omap3_voltdm_mpu = { | 60 | static 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 | ||
68 | static struct voltagedomain omap3_voltdm_core = { | 67 | static 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 | ||
71 | static struct voltagedomain omap4_voltdm_mpu = { | 68 | static 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 | ||
77 | static struct voltagedomain omap4_voltdm_iva = { | 75 | static 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 | ||
83 | static struct voltagedomain omap4_voltdm_core = { | 82 | static 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 | ||