Lines Matching refs:voltdm

119 static int omap_vc_config_channel(struct voltagedomain *voltdm)  in omap_vc_config_channel()  argument
121 struct omap_vc_channel *vc = voltdm->vc; in omap_vc_config_channel()
130 voltdm->rmw(CFG_CHANNEL_MASK << vc->cfg_channel_sa_shift, in omap_vc_config_channel()
138 int omap_vc_pre_scale(struct voltagedomain *voltdm, in omap_vc_pre_scale() argument
142 struct omap_vc_channel *vc = voltdm->vc; in omap_vc_pre_scale()
146 if (!voltdm->pmic) { in omap_vc_pre_scale()
148 __func__, voltdm->name); in omap_vc_pre_scale()
152 if (!voltdm->pmic->uv_to_vsel) { in omap_vc_pre_scale()
154 __func__, voltdm->name); in omap_vc_pre_scale()
158 if (!voltdm->read || !voltdm->write) { in omap_vc_pre_scale()
160 __func__, voltdm->name); in omap_vc_pre_scale()
164 *target_vsel = voltdm->pmic->uv_to_vsel(target_volt); in omap_vc_pre_scale()
165 *current_vsel = voltdm->pmic->uv_to_vsel(voltdm->nominal_volt); in omap_vc_pre_scale()
168 vc_cmdval = voltdm->read(vc->cmdval_reg); in omap_vc_pre_scale()
171 voltdm->write(vc_cmdval, vc->cmdval_reg); in omap_vc_pre_scale()
173 voltdm->vc_param->on = target_volt; in omap_vc_pre_scale()
175 omap_vp_update_errorgain(voltdm, target_volt); in omap_vc_pre_scale()
180 void omap_vc_post_scale(struct voltagedomain *voltdm, in omap_vc_post_scale() argument
188 smps_delay = ((smps_steps * voltdm->pmic->step_size) / in omap_vc_post_scale()
189 voltdm->pmic->slew_rate) + 2; in omap_vc_post_scale()
194 int omap_vc_bypass_scale(struct voltagedomain *voltdm, in omap_vc_bypass_scale() argument
197 struct omap_vc_channel *vc = voltdm->vc; in omap_vc_bypass_scale()
203 ret = omap_vc_pre_scale(voltdm, target_volt, &target_vsel, &current_vsel); in omap_vc_bypass_scale()
213 voltdm->write(vc_bypass_value, vc_bypass_val_reg); in omap_vc_bypass_scale()
214 voltdm->write(vc_bypass_value | vc_valid, vc_bypass_val_reg); in omap_vc_bypass_scale()
216 vc_bypass_value = voltdm->read(vc_bypass_val_reg); in omap_vc_bypass_scale()
235 vc_bypass_value = voltdm->read(vc_bypass_val_reg); in omap_vc_bypass_scale()
238 omap_vc_post_scale(voltdm, target_volt, target_vsel, current_vsel); in omap_vc_bypass_scale()
333 static void __init omap3_vc_init_pmic_signaling(struct voltagedomain *voltdm) in omap3_vc_init_pmic_signaling() argument
340 vc.vd = voltdm; in omap3_vc_init_pmic_signaling()
342 val = voltdm->read(OMAP3_PRM_POLCTRL_OFFSET); in omap3_vc_init_pmic_signaling()
349 voltdm->write(val, OMAP3_PRM_POLCTRL_OFFSET); in omap3_vc_init_pmic_signaling()
363 val = voltdm->read(OMAP3_PRM_VOLTCTRL_OFFSET); in omap3_vc_init_pmic_signaling()
368 voltdm->write(val, OMAP3_PRM_VOLTCTRL_OFFSET); in omap3_vc_init_pmic_signaling()
375 static void omap3_init_voltsetup1(struct voltagedomain *voltdm, in omap3_init_voltsetup1() argument
380 val = (voltdm->vc_param->on - idle) / voltdm->pmic->slew_rate; in omap3_init_voltsetup1()
381 val *= voltdm->sys_clk.rate / 8 / 1000000 + 1; in omap3_init_voltsetup1()
382 val <<= __ffs(voltdm->vfsm->voltsetup_mask); in omap3_init_voltsetup1()
383 c->voltsetup1 &= ~voltdm->vfsm->voltsetup_mask; in omap3_init_voltsetup1()
403 static void omap3_set_i2c_timings(struct voltagedomain *voltdm) in omap3_set_i2c_timings() argument
408 omap3_init_voltsetup1(voltdm, c, voltdm->vc_param->off); in omap3_set_i2c_timings()
411 omap3_init_voltsetup1(voltdm, c, voltdm->vc_param->ret); in omap3_set_i2c_timings()
429 static void omap3_set_off_timings(struct voltagedomain *voltdm) in omap3_set_off_timings() argument
454 voltdm->write(clksetup, OMAP3_PRM_CLKSETUP_OFFSET); in omap3_set_off_timings()
455 voltdm->write(voltoffset, OMAP3_PRM_VOLTOFFSET_OFFSET); in omap3_set_off_timings()
458 static void __init omap3_vc_init_channel(struct voltagedomain *voltdm) in omap3_vc_init_channel() argument
460 omap3_vc_init_pmic_signaling(voltdm); in omap3_vc_init_channel()
461 omap3_set_off_timings(voltdm); in omap3_vc_init_channel()
462 omap3_set_i2c_timings(voltdm); in omap3_vc_init_channel()
475 static u32 omap4_calc_volt_ramp(struct voltagedomain *voltdm, u32 voltage_diff) in omap4_calc_volt_ramp() argument
481 time = voltage_diff / voltdm->pmic->slew_rate; in omap4_calc_volt_ramp()
483 cycles = voltdm->sys_clk.rate / 1000 * time / 1000; in omap4_calc_volt_ramp()
511 voltdm->name); in omap4_calc_volt_ramp()
552 static void omap4_set_timings(struct voltagedomain *voltdm, bool off_mode) in omap4_set_timings() argument
560 ramp = omap4_calc_volt_ramp(voltdm, in omap4_set_timings()
561 voltdm->vc_param->on - voltdm->vc_param->off); in omap4_set_timings()
562 offset = voltdm->vfsm->voltsetup_off_reg; in omap4_set_timings()
564 ramp = omap4_calc_volt_ramp(voltdm, in omap4_set_timings()
565 voltdm->vc_param->on - voltdm->vc_param->ret); in omap4_set_timings()
566 offset = voltdm->vfsm->voltsetup_reg; in omap4_set_timings()
572 val = voltdm->read(offset); in omap4_set_timings()
578 voltdm->write(val, offset); in omap4_set_timings()
590 static void __init omap4_vc_init_pmic_signaling(struct voltagedomain *voltdm) in omap4_vc_init_pmic_signaling() argument
595 vc.vd = voltdm; in omap4_vc_init_pmic_signaling()
596 voltdm->write(OMAP4_VDD_DEFAULT_VAL, OMAP4_PRM_VOLTCTRL_OFFSET); in omap4_vc_init_pmic_signaling()
600 static void __init omap4_vc_init_channel(struct voltagedomain *voltdm) in omap4_vc_init_channel() argument
602 omap4_vc_init_pmic_signaling(voltdm); in omap4_vc_init_channel()
603 omap4_set_timings(voltdm, true); in omap4_vc_init_channel()
604 omap4_set_timings(voltdm, false); in omap4_vc_init_channel()
665 static void __init omap4_vc_i2c_timing_init(struct voltagedomain *voltdm) in omap4_vc_i2c_timing_init() argument
672 if (!voltdm->pmic->i2c_high_speed) { in omap4_vc_i2c_timing_init()
684 capacitance += voltdm->pmic->i2c_pad_load; in omap4_vc_i2c_timing_init()
693 switch (voltdm->sys_clk.rate) { in omap4_vc_i2c_timing_init()
711 voltdm->sys_clk.rate); in omap4_vc_i2c_timing_init()
727 voltdm->write(val, OMAP4_PRM_VC_CFG_I2C_CLK_OFFSET); in omap4_vc_i2c_timing_init()
745 static void __init omap_vc_i2c_init(struct voltagedomain *voltdm) in omap_vc_i2c_init() argument
747 struct omap_vc_channel *vc = voltdm->vc; in omap_vc_i2c_init()
753 if (voltdm->pmic->i2c_high_speed != i2c_high_speed) in omap_vc_i2c_init()
755 __func__, voltdm->name, i2c_high_speed); in omap_vc_i2c_init()
766 i2c_high_speed = voltdm->pmic->i2c_high_speed; in omap_vc_i2c_init()
768 voltdm->rmw(vc->common->i2c_cfg_clear_mask, in omap_vc_i2c_init()
772 mcode = voltdm->pmic->i2c_mcode; in omap_vc_i2c_init()
774 voltdm->rmw(vc->common->i2c_mcode_mask, in omap_vc_i2c_init()
779 omap4_vc_i2c_timing_init(voltdm); in omap_vc_i2c_init()
794 static u8 omap_vc_calc_vsel(struct voltagedomain *voltdm, u32 uvolt) in omap_vc_calc_vsel() argument
796 if (voltdm->pmic->vddmin > uvolt) in omap_vc_calc_vsel()
797 uvolt = voltdm->pmic->vddmin; in omap_vc_calc_vsel()
798 if (voltdm->pmic->vddmax < uvolt) { in omap_vc_calc_vsel()
800 __func__, uvolt, voltdm->pmic->vddmax); in omap_vc_calc_vsel()
802 uvolt = voltdm->pmic->vddmax; in omap_vc_calc_vsel()
805 return voltdm->pmic->uv_to_vsel(uvolt); in omap_vc_calc_vsel()
823 void __init omap_vc_init_channel(struct voltagedomain *voltdm) in omap_vc_init_channel() argument
825 struct omap_vc_channel *vc = voltdm->vc; in omap_vc_init_channel()
829 if (!voltdm->pmic || !voltdm->pmic->uv_to_vsel) { in omap_vc_init_channel()
830 pr_err("%s: No PMIC info for vdd_%s\n", __func__, voltdm->name); in omap_vc_init_channel()
834 if (!voltdm->read || !voltdm->write) { in omap_vc_init_channel()
836 __func__, voltdm->name); in omap_vc_init_channel()
847 vc->i2c_slave_addr = voltdm->pmic->i2c_slave_addr; in omap_vc_init_channel()
848 vc->volt_reg_addr = voltdm->pmic->volt_reg_addr; in omap_vc_init_channel()
849 vc->cmd_reg_addr = voltdm->pmic->cmd_reg_addr; in omap_vc_init_channel()
852 voltdm->rmw(vc->smps_sa_mask, in omap_vc_init_channel()
860 voltdm->rmw(vc->smps_volra_mask, in omap_vc_init_channel()
866 voltdm->rmw(vc->smps_cmdra_mask, in omap_vc_init_channel()
876 on_vsel = omap_vc_calc_vsel(voltdm, voltdm->vc_param->on); in omap_vc_init_channel()
877 onlp_vsel = omap_vc_calc_vsel(voltdm, voltdm->vc_param->onlp); in omap_vc_init_channel()
878 ret_vsel = omap_vc_calc_vsel(voltdm, voltdm->vc_param->ret); in omap_vc_init_channel()
879 off_vsel = omap_vc_calc_vsel(voltdm, voltdm->vc_param->off); in omap_vc_init_channel()
885 voltdm->write(val, vc->cmdval_reg); in omap_vc_init_channel()
889 omap_vc_config_channel(voltdm); in omap_vc_init_channel()
891 omap_vc_i2c_init(voltdm); in omap_vc_init_channel()
894 omap3_vc_init_channel(voltdm); in omap_vc_init_channel()
896 omap4_vc_init_channel(voltdm); in omap_vc_init_channel()