Lines Matching refs:sr

39 static inline void sr_write_reg(struct omap_sr *sr, unsigned offset, u32 value)  in sr_write_reg()  argument
41 __raw_writel(value, (sr->base + offset)); in sr_write_reg()
44 static inline void sr_modify_reg(struct omap_sr *sr, unsigned offset, u32 mask, in sr_modify_reg() argument
58 if (sr->ip_type == SR_TYPE_V1 && offset == ERRCONFIG_V1) in sr_modify_reg()
60 else if (sr->ip_type == SR_TYPE_V2 && offset == ERRCONFIG_V2) in sr_modify_reg()
63 reg_val = __raw_readl(sr->base + offset); in sr_modify_reg()
70 __raw_writel(reg_val, (sr->base + offset)); in sr_modify_reg()
73 static inline u32 sr_read_reg(struct omap_sr *sr, unsigned offset) in sr_read_reg() argument
75 return __raw_readl(sr->base + offset); in sr_read_reg()
127 static void sr_set_clk_length(struct omap_sr *sr) in sr_set_clk_length() argument
132 if (IS_ERR(sr->fck)) in sr_set_clk_length()
135 fclk_speed = clk_get_rate(sr->fck); in sr_set_clk_length()
139 sr->clk_length = SRCLKLENGTH_12MHZ_SYSCLK; in sr_set_clk_length()
142 sr->clk_length = SRCLKLENGTH_13MHZ_SYSCLK; in sr_set_clk_length()
145 sr->clk_length = SRCLKLENGTH_19MHZ_SYSCLK; in sr_set_clk_length()
148 sr->clk_length = SRCLKLENGTH_26MHZ_SYSCLK; in sr_set_clk_length()
151 sr->clk_length = SRCLKLENGTH_38MHZ_SYSCLK; in sr_set_clk_length()
154 dev_err(&sr->pdev->dev, "%s: Invalid fclk rate: %d\n", in sr_set_clk_length()
160 static void sr_start_vddautocomp(struct omap_sr *sr) in sr_start_vddautocomp() argument
163 dev_warn(&sr->pdev->dev, in sr_start_vddautocomp()
169 if (!sr_class->enable(sr)) in sr_start_vddautocomp()
170 sr->autocomp_active = true; in sr_start_vddautocomp()
173 static void sr_stop_vddautocomp(struct omap_sr *sr) in sr_stop_vddautocomp() argument
176 dev_warn(&sr->pdev->dev, in sr_stop_vddautocomp()
182 if (sr->autocomp_active) { in sr_stop_vddautocomp()
183 sr_class->disable(sr, 1); in sr_stop_vddautocomp()
184 sr->autocomp_active = false; in sr_stop_vddautocomp()
225 static void sr_v1_disable(struct omap_sr *sr) in sr_v1_disable() argument
232 sr_modify_reg(sr, ERRCONFIG_V1, in sr_v1_disable()
236 sr_modify_reg(sr, SRCONFIG, SRCONFIG_SRENABLE, 0x0); in sr_v1_disable()
239 if (sr_read_reg(sr, ERRCONFIG_V1) & ERRCONFIG_VPBOUNDINTST_V1) in sr_v1_disable()
241 sr_modify_reg(sr, ERRCONFIG_V1, in sr_v1_disable()
250 sr_test_cond_timeout((sr_read_reg(sr, ERRCONFIG_V1) & in sr_v1_disable()
255 dev_warn(&sr->pdev->dev, "%s: Smartreflex disable timedout\n", in sr_v1_disable()
259 sr_modify_reg(sr, ERRCONFIG_V1, ERRCONFIG_MCUDISACKINTEN, in sr_v1_disable()
263 static void sr_v2_disable(struct omap_sr *sr) in sr_v2_disable() argument
268 sr_write_reg(sr, IRQENABLE_SET, IRQENABLE_MCUDISABLEACKINT); in sr_v2_disable()
271 sr_modify_reg(sr, SRCONFIG, SRCONFIG_SRENABLE, 0x0); in sr_v2_disable()
278 if (sr_read_reg(sr, ERRCONFIG_V2) & ERRCONFIG_VPBOUNDINTST_V2) in sr_v2_disable()
279 sr_modify_reg(sr, ERRCONFIG_V2, ERRCONFIG_VPBOUNDINTEN_V2, in sr_v2_disable()
282 sr_modify_reg(sr, ERRCONFIG_V2, ERRCONFIG_VPBOUNDINTEN_V2, in sr_v2_disable()
284 sr_write_reg(sr, IRQENABLE_CLR, (IRQENABLE_MCUACCUMINT | in sr_v2_disable()
287 sr_write_reg(sr, IRQSTATUS, (IRQSTATUS_MCUACCUMINT | in sr_v2_disable()
295 sr_test_cond_timeout((sr_read_reg(sr, IRQSTATUS) & in sr_v2_disable()
300 dev_warn(&sr->pdev->dev, "%s: Smartreflex disable timedout\n", in sr_v2_disable()
304 sr_write_reg(sr, IRQENABLE_CLR, IRQENABLE_MCUDISABLEACKINT); in sr_v2_disable()
305 sr_write_reg(sr, IRQSTATUS, IRQSTATUS_MCUDISABLEACKINT); in sr_v2_disable()
309 struct omap_sr *sr, u32 efuse_offs) in sr_retrieve_nvalue_row() argument
313 if (!sr->nvalue_table) { in sr_retrieve_nvalue_row()
314 dev_warn(&sr->pdev->dev, "%s: Missing ntarget value table\n", in sr_retrieve_nvalue_row()
319 for (i = 0; i < sr->nvalue_count; i++) { in sr_retrieve_nvalue_row()
320 if (sr->nvalue_table[i].efuse_offs == efuse_offs) in sr_retrieve_nvalue_row()
321 return &sr->nvalue_table[i]; in sr_retrieve_nvalue_row()
341 int sr_configure_errgen(struct omap_sr *sr) in sr_configure_errgen() argument
348 if (!sr) { in sr_configure_errgen()
354 if (!sr->clk_length) in sr_configure_errgen()
355 sr_set_clk_length(sr); in sr_configure_errgen()
357 senp_en = sr->senp_mod; in sr_configure_errgen()
358 senn_en = sr->senn_mod; in sr_configure_errgen()
360 sr_config = (sr->clk_length << SRCONFIG_SRCLKLENGTH_SHIFT) | in sr_configure_errgen()
363 switch (sr->ip_type) { in sr_configure_errgen()
380 dev_err(&sr->pdev->dev, "%s: Trying to Configure smartreflex module without specifying the ip\n", in sr_configure_errgen()
386 sr_write_reg(sr, SRCONFIG, sr_config); in sr_configure_errgen()
387 sr_errconfig = (sr->err_weight << ERRCONFIG_ERRWEIGHT_SHIFT) | in sr_configure_errgen()
388 (sr->err_maxlimit << ERRCONFIG_ERRMAXLIMIT_SHIFT) | in sr_configure_errgen()
389 (sr->err_minlimit << ERRCONFIG_ERRMINLIMIT_SHIFT); in sr_configure_errgen()
390 sr_modify_reg(sr, errconfig_offs, (SR_ERRWEIGHT_MASK | in sr_configure_errgen()
395 sr_modify_reg(sr, errconfig_offs, (vpboundint_en | vpboundint_st), in sr_configure_errgen()
410 int sr_disable_errgen(struct omap_sr *sr) in sr_disable_errgen() argument
415 if (!sr) { in sr_disable_errgen()
421 switch (sr->ip_type) { in sr_disable_errgen()
433 dev_err(&sr->pdev->dev, "%s: Trying to Configure smartreflex module without specifying the ip\n", in sr_disable_errgen()
439 sr_modify_reg(sr, SRCONFIG, SRCONFIG_SENENABLE | SRCONFIG_ERRGEN_EN, 0); in sr_disable_errgen()
447 sr_modify_reg(sr, errconfig_offs, vpboundint_en | vpboundint_st, 0); in sr_disable_errgen()
464 int sr_configure_minmax(struct omap_sr *sr) in sr_configure_minmax() argument
470 if (!sr) { in sr_configure_minmax()
476 if (!sr->clk_length) in sr_configure_minmax()
477 sr_set_clk_length(sr); in sr_configure_minmax()
479 senp_en = sr->senp_mod; in sr_configure_minmax()
480 senn_en = sr->senn_mod; in sr_configure_minmax()
482 sr_config = (sr->clk_length << SRCONFIG_SRCLKLENGTH_SHIFT) | in sr_configure_minmax()
484 (sr->accum_data << SRCONFIG_ACCUMDATA_SHIFT); in sr_configure_minmax()
486 switch (sr->ip_type) { in sr_configure_minmax()
497 dev_err(&sr->pdev->dev, "%s: Trying to Configure smartreflex module without specifying the ip\n", in sr_configure_minmax()
503 sr_write_reg(sr, SRCONFIG, sr_config); in sr_configure_minmax()
504 sr_avgwt = (sr->senp_avgweight << AVGWEIGHT_SENPAVGWEIGHT_SHIFT) | in sr_configure_minmax()
505 (sr->senn_avgweight << AVGWEIGHT_SENNAVGWEIGHT_SHIFT); in sr_configure_minmax()
506 sr_write_reg(sr, AVGWEIGHT, sr_avgwt); in sr_configure_minmax()
512 switch (sr->ip_type) { in sr_configure_minmax()
514 sr_modify_reg(sr, ERRCONFIG_V1, in sr_configure_minmax()
522 sr_write_reg(sr, IRQSTATUS, in sr_configure_minmax()
525 sr_write_reg(sr, IRQENABLE_SET, in sr_configure_minmax()
530 dev_err(&sr->pdev->dev, "%s: Trying to Configure smartreflex module without specifying the ip\n", in sr_configure_minmax()
549 int sr_enable(struct omap_sr *sr, unsigned long volt) in sr_enable() argument
555 if (!sr) { in sr_enable()
561 volt_data = omap_voltage_get_voltdata(sr->voltdm, volt); in sr_enable()
564 dev_warn(&sr->pdev->dev, "%s: Unable to get voltage table for nominal voltage %ld\n", in sr_enable()
569 nvalue_row = sr_retrieve_nvalue_row(sr, volt_data->sr_efuse_offs); in sr_enable()
572 dev_warn(&sr->pdev->dev, "%s: failure getting SR data for this voltage %ld\n", in sr_enable()
578 sr->err_minlimit = nvalue_row->errminlimit; in sr_enable()
580 clk_enable(sr->fck); in sr_enable()
583 if (sr_read_reg(sr, SRCONFIG) & SRCONFIG_SRENABLE) in sr_enable()
587 ret = sr_class->configure(sr); in sr_enable()
591 sr_write_reg(sr, NVALUERECIPROCAL, nvalue_row->nvalue); in sr_enable()
594 sr_modify_reg(sr, SRCONFIG, SRCONFIG_SRENABLE, SRCONFIG_SRENABLE); in sr_enable()
597 sr->enabled = 1; in sr_enable()
609 void sr_disable(struct omap_sr *sr) in sr_disable() argument
611 if (!sr) { in sr_disable()
618 if (!sr->enabled) in sr_disable()
625 if (sr_read_reg(sr, SRCONFIG) & SRCONFIG_SRENABLE) { in sr_disable()
626 switch (sr->ip_type) { in sr_disable()
628 sr_v1_disable(sr); in sr_disable()
631 sr_v2_disable(sr); in sr_disable()
634 dev_err(&sr->pdev->dev, "UNKNOWN IP type %d\n", in sr_disable()
635 sr->ip_type); in sr_disable()
639 clk_disable(sr->fck); in sr_disable()
640 sr->enabled = 0; in sr_disable()
691 struct omap_sr *sr = _sr_lookup(voltdm); in omap_sr_enable() local
693 if (IS_ERR(sr)) { in omap_sr_enable()
698 if (!sr->autocomp_active) in omap_sr_enable()
702 dev_warn(&sr->pdev->dev, "%s: smartreflex class driver not registered\n", in omap_sr_enable()
707 sr_class->enable(sr); in omap_sr_enable()
723 struct omap_sr *sr = _sr_lookup(voltdm); in omap_sr_disable() local
725 if (IS_ERR(sr)) { in omap_sr_disable()
730 if (!sr->autocomp_active) in omap_sr_disable()
734 dev_warn(&sr->pdev->dev, "%s: smartreflex class driver not registered\n", in omap_sr_disable()
739 sr_class->disable(sr, 0); in omap_sr_disable()
755 struct omap_sr *sr = _sr_lookup(voltdm); in omap_sr_disable_reset_volt() local
757 if (IS_ERR(sr)) { in omap_sr_disable_reset_volt()
762 if (!sr->autocomp_active) in omap_sr_disable_reset_volt()
766 dev_warn(&sr->pdev->dev, "%s: smartreflex class driver not registered\n", in omap_sr_disable_reset_volt()
771 sr_class->disable(sr, 1); in omap_sr_disable_reset_volt()