Lines Matching refs:sr

39 static inline void sr_write_reg(struct omap_sr *sr, unsigned offset, u32 value)
41 __raw_writel(value, (sr->base + offset));
44 static inline void sr_modify_reg(struct omap_sr *sr, unsigned offset, u32 mask,
58 if (sr->ip_type == SR_TYPE_V1 && offset == ERRCONFIG_V1)
60 else if (sr->ip_type == SR_TYPE_V2 && offset == ERRCONFIG_V2)
63 reg_val = __raw_readl(sr->base + offset);
70 __raw_writel(reg_val, (sr->base + offset));
73 static inline u32 sr_read_reg(struct omap_sr *sr, unsigned offset)
75 return __raw_readl(sr->base + offset);
127 static void sr_set_clk_length(struct omap_sr *sr)
133 fck = clk_get(sr->pdev->dev.parent, "fck");
135 fck = clk_get(&sr->pdev->dev, "fck");
137 dev_err(&sr->pdev->dev,
139 __func__, dev_name(&sr->pdev->dev));
149 sr->clk_length = SRCLKLENGTH_12MHZ_SYSCLK;
152 sr->clk_length = SRCLKLENGTH_13MHZ_SYSCLK;
155 sr->clk_length = SRCLKLENGTH_19MHZ_SYSCLK;
158 sr->clk_length = SRCLKLENGTH_26MHZ_SYSCLK;
161 sr->clk_length = SRCLKLENGTH_38MHZ_SYSCLK;
164 dev_err(&sr->pdev->dev, "%s: Invalid fclk rate: %d\n",
170 static void sr_start_vddautocomp(struct omap_sr *sr)
173 dev_warn(&sr->pdev->dev,
179 if (!sr_class->enable(sr))
180 sr->autocomp_active = true;
183 static void sr_stop_vddautocomp(struct omap_sr *sr)
186 dev_warn(&sr->pdev->dev,
192 if (sr->autocomp_active) {
193 sr_class->disable(sr, 1);
194 sr->autocomp_active = false;
200 * only when both sr device and class driver regiter has
201 * completed. This will be attempted to be called from both sr class
202 * driver register and sr device intializtion API's. Only one call
235 static void sr_v1_disable(struct omap_sr *sr)
242 sr_modify_reg(sr, ERRCONFIG_V1,
246 sr_modify_reg(sr, SRCONFIG, SRCONFIG_SRENABLE, 0x0);
249 if (sr_read_reg(sr, ERRCONFIG_V1) & ERRCONFIG_VPBOUNDINTST_V1)
251 sr_modify_reg(sr, ERRCONFIG_V1,
260 sr_test_cond_timeout((sr_read_reg(sr, ERRCONFIG_V1) &
265 dev_warn(&sr->pdev->dev, "%s: Smartreflex disable timedout\n",
269 sr_modify_reg(sr, ERRCONFIG_V1, ERRCONFIG_MCUDISACKINTEN,
273 static void sr_v2_disable(struct omap_sr *sr)
278 sr_write_reg(sr, IRQENABLE_SET, IRQENABLE_MCUDISABLEACKINT);
281 sr_modify_reg(sr, SRCONFIG, SRCONFIG_SRENABLE, 0x0);
288 if (sr_read_reg(sr, ERRCONFIG_V2) & ERRCONFIG_VPBOUNDINTST_V2)
289 sr_modify_reg(sr, ERRCONFIG_V2, ERRCONFIG_VPBOUNDINTEN_V2,
292 sr_modify_reg(sr, ERRCONFIG_V2, ERRCONFIG_VPBOUNDINTEN_V2,
294 sr_write_reg(sr, IRQENABLE_CLR, (IRQENABLE_MCUACCUMINT |
297 sr_write_reg(sr, IRQSTATUS, (IRQSTATUS_MCUACCUMINT |
305 sr_test_cond_timeout((sr_read_reg(sr, IRQSTATUS) &
310 dev_warn(&sr->pdev->dev, "%s: Smartreflex disable timedout\n",
314 sr_write_reg(sr, IRQENABLE_CLR, IRQENABLE_MCUDISABLEACKINT);
315 sr_write_reg(sr, IRQSTATUS, IRQSTATUS_MCUDISABLEACKINT);
319 struct omap_sr *sr, u32 efuse_offs)
323 if (!sr->nvalue_table) {
324 dev_warn(&sr->pdev->dev, "%s: Missing ntarget value table\n",
329 for (i = 0; i < sr->nvalue_count; i++) {
330 if (sr->nvalue_table[i].efuse_offs == efuse_offs)
331 return &sr->nvalue_table[i];
342 * @sr: SR module to be configured.
351 int sr_configure_errgen(struct omap_sr *sr)
358 if (!sr) {
364 if (!sr->clk_length)
365 sr_set_clk_length(sr);
367 senp_en = sr->senp_mod;
368 senn_en = sr->senn_mod;
370 sr_config = (sr->clk_length << SRCONFIG_SRCLKLENGTH_SHIFT) |
373 switch (sr->ip_type) {
390 dev_err(&sr->pdev->dev, "%s: Trying to Configure smartreflex module without specifying the ip\n",
396 sr_write_reg(sr, SRCONFIG, sr_config);
397 sr_errconfig = (sr->err_weight << ERRCONFIG_ERRWEIGHT_SHIFT) |
398 (sr->err_maxlimit << ERRCONFIG_ERRMAXLIMIT_SHIFT) |
399 (sr->err_minlimit << ERRCONFIG_ERRMINLIMIT_SHIFT);
400 sr_modify_reg(sr, errconfig_offs, (SR_ERRWEIGHT_MASK |
405 sr_modify_reg(sr, errconfig_offs, (vpboundint_en | vpboundint_st),
413 * @sr: SR module to be configured.
420 int sr_disable_errgen(struct omap_sr *sr)
425 if (!sr) {
431 switch (sr->ip_type) {
443 dev_err(&sr->pdev->dev, "%s: Trying to Configure smartreflex module without specifying the ip\n",
449 sr_modify_reg(sr, SRCONFIG, SRCONFIG_SENENABLE | SRCONFIG_ERRGEN_EN, 0);
457 sr_modify_reg(sr, errconfig_offs, vpboundint_en | vpboundint_st, 0);
465 * @sr: SR module to be configured.
474 int sr_configure_minmax(struct omap_sr *sr)
480 if (!sr) {
486 if (!sr->clk_length)
487 sr_set_clk_length(sr);
489 senp_en = sr->senp_mod;
490 senn_en = sr->senn_mod;
492 sr_config = (sr->clk_length << SRCONFIG_SRCLKLENGTH_SHIFT) |
494 (sr->accum_data << SRCONFIG_ACCUMDATA_SHIFT);
496 switch (sr->ip_type) {
507 dev_err(&sr->pdev->dev, "%s: Trying to Configure smartreflex module without specifying the ip\n",
513 sr_write_reg(sr, SRCONFIG, sr_config);
514 sr_avgwt = (sr->senp_avgweight << AVGWEIGHT_SENPAVGWEIGHT_SHIFT) |
515 (sr->senn_avgweight << AVGWEIGHT_SENNAVGWEIGHT_SHIFT);
516 sr_write_reg(sr, AVGWEIGHT, sr_avgwt);
522 switch (sr->ip_type) {
524 sr_modify_reg(sr, ERRCONFIG_V1,
532 sr_write_reg(sr, IRQSTATUS,
535 sr_write_reg(sr, IRQENABLE_SET,
540 dev_err(&sr->pdev->dev, "%s: Trying to Configure smartreflex module without specifying the ip\n",
550 * @sr: pointer to which the SR module to be configured belongs to.
559 int sr_enable(struct omap_sr *sr, unsigned long volt)
565 if (!sr) {
571 volt_data = omap_voltage_get_voltdata(sr->voltdm, volt);
574 dev_warn(&sr->pdev->dev, "%s: Unable to get voltage table for nominal voltage %ld\n",
579 nvalue_row = sr_retrieve_nvalue_row(sr, volt_data->sr_efuse_offs);
582 dev_warn(&sr->pdev->dev, "%s: failure getting SR data for this voltage %ld\n",
588 sr->err_minlimit = nvalue_row->errminlimit;
590 pm_runtime_get_sync(&sr->pdev->dev);
593 if (sr_read_reg(sr, SRCONFIG) & SRCONFIG_SRENABLE)
597 ret = sr_class->configure(sr);
601 sr_write_reg(sr, NVALUERECIPROCAL, nvalue_row->nvalue);
604 sr_modify_reg(sr, SRCONFIG, SRCONFIG_SRENABLE, SRCONFIG_SRENABLE);
610 * @sr: pointer to which the SR module to be configured belongs to.
615 void sr_disable(struct omap_sr *sr)
617 if (!sr) {
624 if (pm_runtime_suspended(&sr->pdev->dev))
631 if (sr_read_reg(sr, SRCONFIG) & SRCONFIG_SRENABLE) {
632 switch (sr->ip_type) {
634 sr_v1_disable(sr);
637 sr_v2_disable(sr);
640 dev_err(&sr->pdev->dev, "UNKNOWN IP type %d\n",
641 sr->ip_type);
645 pm_runtime_put_sync_suspend(&sr->pdev->dev);
650 * @class_data: The structure containing various sr class specific data.
676 * both sr driver and sr class driver to be initiallized.
696 struct omap_sr *sr = _sr_lookup(voltdm);
698 if (IS_ERR(sr)) {
703 if (!sr->autocomp_active)
707 dev_warn(&sr->pdev->dev, "%s: smartreflex class driver not registered\n",
712 sr_class->enable(sr);
728 struct omap_sr *sr = _sr_lookup(voltdm);
730 if (IS_ERR(sr)) {
735 if (!sr->autocomp_active)
739 dev_warn(&sr->pdev->dev, "%s: smartreflex class driver not registered\n",
744 sr_class->disable(sr, 0);
760 struct omap_sr *sr = _sr_lookup(voltdm);
762 if (IS_ERR(sr)) {
767 if (!sr->autocomp_active)
771 dev_warn(&sr->pdev->dev, "%s: smartreflex class driver not registered\n",
776 sr_class->disable(sr, 1);
891 * both sr driver and sr class driver to be initiallized.