Lines Matching refs:sr

42 static inline void sr_write_reg(struct omap_sr *sr, unsigned offset, u32 value)  in sr_write_reg()  argument
44 __raw_writel(value, (sr->base + offset)); in sr_write_reg()
47 static inline void sr_modify_reg(struct omap_sr *sr, unsigned offset, u32 mask, in sr_modify_reg() argument
61 if (sr->ip_type == SR_TYPE_V1 && offset == ERRCONFIG_V1) in sr_modify_reg()
63 else if (sr->ip_type == SR_TYPE_V2 && offset == ERRCONFIG_V2) in sr_modify_reg()
66 reg_val = __raw_readl(sr->base + offset); in sr_modify_reg()
73 __raw_writel(reg_val, (sr->base + offset)); in sr_modify_reg()
76 static inline u32 sr_read_reg(struct omap_sr *sr, unsigned offset) in sr_read_reg() argument
78 return __raw_readl(sr->base + offset); in sr_read_reg()
130 static void sr_set_clk_length(struct omap_sr *sr) in sr_set_clk_length() argument
135 fck = clk_get(&sr->pdev->dev, "fck"); in sr_set_clk_length()
138 dev_err(&sr->pdev->dev, "%s: unable to get fck for device %s\n", in sr_set_clk_length()
139 __func__, dev_name(&sr->pdev->dev)); in sr_set_clk_length()
148 sr->clk_length = SRCLKLENGTH_12MHZ_SYSCLK; in sr_set_clk_length()
151 sr->clk_length = SRCLKLENGTH_13MHZ_SYSCLK; in sr_set_clk_length()
154 sr->clk_length = SRCLKLENGTH_19MHZ_SYSCLK; in sr_set_clk_length()
157 sr->clk_length = SRCLKLENGTH_26MHZ_SYSCLK; in sr_set_clk_length()
160 sr->clk_length = SRCLKLENGTH_38MHZ_SYSCLK; in sr_set_clk_length()
163 dev_err(&sr->pdev->dev, "%s: Invalid fclk rate: %d\n", in sr_set_clk_length()
169 static void sr_start_vddautocomp(struct omap_sr *sr) in sr_start_vddautocomp() argument
172 dev_warn(&sr->pdev->dev, in sr_start_vddautocomp()
178 if (!sr_class->enable(sr)) in sr_start_vddautocomp()
179 sr->autocomp_active = true; in sr_start_vddautocomp()
182 static void sr_stop_vddautocomp(struct omap_sr *sr) in sr_stop_vddautocomp() argument
185 dev_warn(&sr->pdev->dev, in sr_stop_vddautocomp()
191 if (sr->autocomp_active) { in sr_stop_vddautocomp()
192 sr_class->disable(sr, 1); in sr_stop_vddautocomp()
193 sr->autocomp_active = false; in sr_stop_vddautocomp()
235 static void sr_v1_disable(struct omap_sr *sr) in sr_v1_disable() argument
242 sr_modify_reg(sr, ERRCONFIG_V1, in sr_v1_disable()
246 sr_modify_reg(sr, SRCONFIG, SRCONFIG_SRENABLE, 0x0); in sr_v1_disable()
249 if (sr_read_reg(sr, ERRCONFIG_V1) & ERRCONFIG_VPBOUNDINTST_V1) in sr_v1_disable()
251 sr_modify_reg(sr, ERRCONFIG_V1, in sr_v1_disable()
260 sr_test_cond_timeout((sr_read_reg(sr, ERRCONFIG_V1) & in sr_v1_disable()
265 dev_warn(&sr->pdev->dev, "%s: Smartreflex disable timedout\n", in sr_v1_disable()
269 sr_modify_reg(sr, ERRCONFIG_V1, ERRCONFIG_MCUDISACKINTEN, in sr_v1_disable()
273 static void sr_v2_disable(struct omap_sr *sr) in sr_v2_disable() argument
278 sr_write_reg(sr, IRQENABLE_SET, IRQENABLE_MCUDISABLEACKINT); in sr_v2_disable()
281 sr_modify_reg(sr, SRCONFIG, SRCONFIG_SRENABLE, 0x0); in sr_v2_disable()
288 if (sr_read_reg(sr, ERRCONFIG_V2) & ERRCONFIG_VPBOUNDINTST_V2) in sr_v2_disable()
289 sr_modify_reg(sr, ERRCONFIG_V2, ERRCONFIG_VPBOUNDINTEN_V2, in sr_v2_disable()
292 sr_modify_reg(sr, ERRCONFIG_V2, ERRCONFIG_VPBOUNDINTEN_V2, in sr_v2_disable()
294 sr_write_reg(sr, IRQENABLE_CLR, (IRQENABLE_MCUACCUMINT | in sr_v2_disable()
297 sr_write_reg(sr, IRQSTATUS, (IRQSTATUS_MCUACCUMINT | in sr_v2_disable()
305 sr_test_cond_timeout((sr_read_reg(sr, IRQSTATUS) & in sr_v2_disable()
310 dev_warn(&sr->pdev->dev, "%s: Smartreflex disable timedout\n", in sr_v2_disable()
314 sr_write_reg(sr, IRQENABLE_CLR, IRQENABLE_MCUDISABLEACKINT); in sr_v2_disable()
315 sr_write_reg(sr, IRQSTATUS, IRQSTATUS_MCUDISABLEACKINT); in sr_v2_disable()
319 struct omap_sr *sr, u32 efuse_offs) in sr_retrieve_nvalue_row() argument
323 if (!sr->nvalue_table) { in sr_retrieve_nvalue_row()
324 dev_warn(&sr->pdev->dev, "%s: Missing ntarget value table\n", in sr_retrieve_nvalue_row()
329 for (i = 0; i < sr->nvalue_count; i++) { in sr_retrieve_nvalue_row()
330 if (sr->nvalue_table[i].efuse_offs == efuse_offs) in sr_retrieve_nvalue_row()
331 return &sr->nvalue_table[i]; in sr_retrieve_nvalue_row()
351 int sr_configure_errgen(struct omap_sr *sr) in sr_configure_errgen() argument
358 if (!sr) { in sr_configure_errgen()
364 if (!sr->clk_length) in sr_configure_errgen()
365 sr_set_clk_length(sr); in sr_configure_errgen()
367 senp_en = sr->senp_mod; in sr_configure_errgen()
368 senn_en = sr->senn_mod; in sr_configure_errgen()
370 sr_config = (sr->clk_length << SRCONFIG_SRCLKLENGTH_SHIFT) | in sr_configure_errgen()
373 switch (sr->ip_type) { in sr_configure_errgen()
390 dev_err(&sr->pdev->dev, "%s: Trying to Configure smartreflex" in sr_configure_errgen()
396 sr_write_reg(sr, SRCONFIG, sr_config); in sr_configure_errgen()
397 sr_errconfig = (sr->err_weight << ERRCONFIG_ERRWEIGHT_SHIFT) | in sr_configure_errgen()
398 (sr->err_maxlimit << ERRCONFIG_ERRMAXLIMIT_SHIFT) | in sr_configure_errgen()
399 (sr->err_minlimit << ERRCONFIG_ERRMINLIMIT_SHIFT); in sr_configure_errgen()
400 sr_modify_reg(sr, errconfig_offs, (SR_ERRWEIGHT_MASK | in sr_configure_errgen()
405 sr_modify_reg(sr, errconfig_offs, (vpboundint_en | vpboundint_st), in sr_configure_errgen()
420 int sr_disable_errgen(struct omap_sr *sr) in sr_disable_errgen() argument
425 if (!sr) { in sr_disable_errgen()
431 switch (sr->ip_type) { in sr_disable_errgen()
443 dev_err(&sr->pdev->dev, "%s: Trying to Configure smartreflex" in sr_disable_errgen()
449 sr_modify_reg(sr, SRCONFIG, SRCONFIG_SENENABLE | SRCONFIG_ERRGEN_EN, 0); in sr_disable_errgen()
457 sr_modify_reg(sr, errconfig_offs, vpboundint_en | vpboundint_st, 0); in sr_disable_errgen()
474 int sr_configure_minmax(struct omap_sr *sr) in sr_configure_minmax() argument
480 if (!sr) { in sr_configure_minmax()
486 if (!sr->clk_length) in sr_configure_minmax()
487 sr_set_clk_length(sr); in sr_configure_minmax()
489 senp_en = sr->senp_mod; in sr_configure_minmax()
490 senn_en = sr->senn_mod; in sr_configure_minmax()
492 sr_config = (sr->clk_length << SRCONFIG_SRCLKLENGTH_SHIFT) | in sr_configure_minmax()
494 (sr->accum_data << SRCONFIG_ACCUMDATA_SHIFT); in sr_configure_minmax()
496 switch (sr->ip_type) { in sr_configure_minmax()
507 dev_err(&sr->pdev->dev, "%s: Trying to Configure smartreflex" in sr_configure_minmax()
513 sr_write_reg(sr, SRCONFIG, sr_config); in sr_configure_minmax()
514 sr_avgwt = (sr->senp_avgweight << AVGWEIGHT_SENPAVGWEIGHT_SHIFT) | in sr_configure_minmax()
515 (sr->senn_avgweight << AVGWEIGHT_SENNAVGWEIGHT_SHIFT); in sr_configure_minmax()
516 sr_write_reg(sr, AVGWEIGHT, sr_avgwt); in sr_configure_minmax()
522 switch (sr->ip_type) { in sr_configure_minmax()
524 sr_modify_reg(sr, ERRCONFIG_V1, in sr_configure_minmax()
532 sr_write_reg(sr, IRQSTATUS, in sr_configure_minmax()
535 sr_write_reg(sr, IRQENABLE_SET, in sr_configure_minmax()
540 dev_err(&sr->pdev->dev, "%s: Trying to Configure smartreflex" in sr_configure_minmax()
559 int sr_enable(struct omap_sr *sr, unsigned long volt) in sr_enable() argument
565 if (!sr) { in sr_enable()
571 volt_data = omap_voltage_get_voltdata(sr->voltdm, volt); in sr_enable()
574 dev_warn(&sr->pdev->dev, "%s: Unable to get voltage table" in sr_enable()
579 nvalue_row = sr_retrieve_nvalue_row(sr, volt_data->sr_efuse_offs); in sr_enable()
582 dev_warn(&sr->pdev->dev, "%s: failure getting SR data for this voltage %ld\n", in sr_enable()
588 sr->err_minlimit = nvalue_row->errminlimit; in sr_enable()
590 pm_runtime_get_sync(&sr->pdev->dev); in sr_enable()
593 if (sr_read_reg(sr, SRCONFIG) & SRCONFIG_SRENABLE) in sr_enable()
597 ret = sr_class->configure(sr); in sr_enable()
601 sr_write_reg(sr, NVALUERECIPROCAL, nvalue_row->nvalue); in sr_enable()
604 sr_modify_reg(sr, SRCONFIG, SRCONFIG_SRENABLE, SRCONFIG_SRENABLE); in sr_enable()
615 void sr_disable(struct omap_sr *sr) in sr_disable() argument
617 if (!sr) { in sr_disable()
624 if (pm_runtime_suspended(&sr->pdev->dev)) in sr_disable()
631 if (sr_read_reg(sr, SRCONFIG) & SRCONFIG_SRENABLE) { in sr_disable()
632 switch (sr->ip_type) { in sr_disable()
634 sr_v1_disable(sr); in sr_disable()
637 sr_v2_disable(sr); in sr_disable()
640 dev_err(&sr->pdev->dev, "UNKNOWN IP type %d\n", in sr_disable()
641 sr->ip_type); in sr_disable()
645 pm_runtime_put_sync_suspend(&sr->pdev->dev); in sr_disable()
696 struct omap_sr *sr = _sr_lookup(voltdm); in omap_sr_enable() local
698 if (IS_ERR(sr)) { in omap_sr_enable()
703 if (!sr->autocomp_active) in omap_sr_enable()
707 dev_warn(&sr->pdev->dev, "%s: smartreflex class driver not" in omap_sr_enable()
712 sr_class->enable(sr); in omap_sr_enable()
728 struct omap_sr *sr = _sr_lookup(voltdm); in omap_sr_disable() local
730 if (IS_ERR(sr)) { in omap_sr_disable()
735 if (!sr->autocomp_active) in omap_sr_disable()
739 dev_warn(&sr->pdev->dev, "%s: smartreflex class driver not" in omap_sr_disable()
744 sr_class->disable(sr, 0); in omap_sr_disable()
760 struct omap_sr *sr = _sr_lookup(voltdm); in omap_sr_disable_reset_volt() local
762 if (IS_ERR(sr)) { in omap_sr_disable_reset_volt()
767 if (!sr->autocomp_active) in omap_sr_disable_reset_volt()
771 dev_warn(&sr->pdev->dev, "%s: smartreflex class driver not" in omap_sr_disable_reset_volt()
776 sr_class->disable(sr, 1); in omap_sr_disable_reset_volt()