[PATCH V3 13/19] OMAP3+: SR: Reuse sr_[start|stop]_vddautocomp functions
From: Jarkko Nikula sr_start_vddautocomp and sr_stop_autocomp functions can be reused from omap_sr_enable, omap_sr_disable and omap_sr_disable_reset_volt and by adding one additional argument sr_stop_autocomp. This allows us to have a single point where SR enable and disable operations are controlled from. [n...@ti.com: synced it up with class start/stop as well. autocomp flag should only be disabled when SR is disabled for that domain] Signed-off-by: Nishanth Menon Signed-off-by: Jarkko Nikula --- Side note: Jarkko has'nt seen this rev as I just finished the rebase and tested but adding his signed-off anyways as he is primary contributor to the idea and the patch. arch/arm/mach-omap2/smartreflex.c | 66 + 1 files changed, 23 insertions(+), 43 deletions(-) diff --git a/arch/arm/mach-omap2/smartreflex.c b/arch/arm/mach-omap2/smartreflex.c index 592e9a0..d839fa6 100644 --- a/arch/arm/mach-omap2/smartreflex.c +++ b/arch/arm/mach-omap2/smartreflex.c @@ -211,8 +211,12 @@ static void sr_set_regfields(struct omap_sr *sr) } } -static void sr_start_vddautocomp(struct omap_sr *sr) +static void sr_start_vddautocomp(struct omap_sr *sr, bool class_start) { + int r; + if (sr->autocomp_active) + return; + if (!sr_class || !(sr_class->enable) || !(sr_class->configure)) { dev_warn(&sr->pdev->dev, "%s: smartreflex class driver not registered\n", @@ -220,19 +224,24 @@ static void sr_start_vddautocomp(struct omap_sr *sr) return; } - if (sr_class->start && + if (class_start && sr_class->start && sr_class->start(sr->voltdm, sr_class->class_priv_data)) { dev_err(&sr->pdev->dev, "%s: SRClass initialization failed\n", __func__); return; } - if (!sr_class->enable(sr->voltdm)) + r = sr_class->enable(sr->voltdm); + if (!r && class_start) sr->autocomp_active = true; } -static void sr_stop_vddautocomp(struct omap_sr *sr) +static void sr_stop_vddautocomp(struct omap_sr *sr, bool class_stop, + int is_volt_reset) { + if (!sr->autocomp_active) + return; + if (!sr_class || !(sr_class->disable)) { dev_warn(&sr->pdev->dev, "%s: smartreflex class driver not registered\n", @@ -240,15 +249,13 @@ static void sr_stop_vddautocomp(struct omap_sr *sr) return; } - if (sr->autocomp_active) { - sr_class->disable(sr->voltdm, 1); + sr_class->disable(sr->voltdm, is_volt_reset); + if (class_stop) { if (sr_class->stop && - sr_class->stop(sr->voltdm, - sr_class->class_priv_data)) { + sr_class->stop(sr->voltdm, sr_class->class_priv_data)) dev_err(&sr->pdev->dev, "%s: SR[%d]Class deinitialization failed\n", __func__, sr->srid); - } sr->autocomp_active = false; } } @@ -285,7 +292,7 @@ static int sr_late_init(struct omap_sr *sr_info) } if (pdata && pdata->enable_on_init) - sr_start_vddautocomp(sr_info); + sr_start_vddautocomp(sr_info, true); return ret; @@ -693,16 +700,7 @@ void omap_sr_enable(struct voltagedomain *voltdm) return; } - if (!sr->autocomp_active) - return; - - if (!sr_class || !(sr_class->enable) || !(sr_class->configure)) { - dev_warn(&sr->pdev->dev, "%s: smartreflex class driver not" - "registered\n", __func__); - return; - } - - sr_class->enable(voltdm); + sr_start_vddautocomp(sr, false); } /** @@ -726,16 +724,7 @@ void omap_sr_disable(struct voltagedomain *voltdm) return; } - if (!sr->autocomp_active) - return; - - if (!sr_class || !(sr_class->disable)) { - dev_warn(&sr->pdev->dev, "%s: smartreflex class driver not" - "registered\n", __func__); - return; - } - - sr_class->disable(voltdm, 0); + sr_stop_vddautocomp(sr, false, 0); } /** @@ -759,16 +748,7 @@ void omap_sr_disable_reset_volt(struct voltagedomain *voltdm) return; } - if (!sr->autocomp_active) - return; - - if (!sr_class || !(sr_class->disable)) { - dev_warn(&sr->pdev->dev, "%s: smartreflex class driver not" - "registered\n", __func__); - return; - } - - sr_class->disable(voltdm, 1); + sr_stop_vddautocomp(sr, false, 1); } /** @@ -823,9 +803,9 @@ static int omap_sr_autocomp_store(void *data, u64 val) /* control enable/disable only if th
Re: [PATCH V3 13/19] OMAP3+: SR: Reuse sr_[start|stop]_vddautocomp functions
On Sat, 5 Mar 2011 20:59:16 +0530 Nishanth Menon wrote: > From: Jarkko Nikula > > sr_start_vddautocomp and sr_stop_autocomp functions can be reused from > omap_sr_enable, omap_sr_disable and omap_sr_disable_reset_volt and by > adding one additional argument sr_stop_autocomp. This allows us to have > a single point where SR enable and disable operations are controlled from. > > [n...@ti.com: synced it up with class start/stop as well. autocomp flag > should only be disabled when SR is disabled for that domain] > Signed-off-by: Nishanth Menon > Signed-off-by: Jarkko Nikula > --- > Side note: Jarkko has'nt seen this rev as I just finished the rebase and > tested > but adding his signed-off anyways as he is primary contributor to the idea > and the patch. > This version looks good to me. We agreed with Nishant that squashing my trivial patches with Nishant's set makes the most sense. -- Jarkko -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH V3 13/19] OMAP3+: SR: Reuse sr_[start|stop]_vddautocomp functions
Nishanth Menon writes: > From: Jarkko Nikula > > sr_start_vddautocomp and sr_stop_autocomp functions can be reused from > omap_sr_enable, omap_sr_disable and omap_sr_disable_reset_volt and by > adding one additional argument sr_stop_autocomp. This allows us to have > a single point where SR enable and disable operations are controlled from. > > [n...@ti.com: synced it up with class start/stop as well. autocomp flag > should only be disabled when SR is disabled for that domain] > Signed-off-by: Nishanth Menon > Signed-off-by: Jarkko Nikula > --- > Side note: Jarkko has'nt seen this rev as I just finished the rebase and > tested > but adding his signed-off anyways as he is primary contributor to the idea > and the patch. This one looks fine, but will wait to apply it since it depends on the previous one which needs some minor fixups. Kevin > arch/arm/mach-omap2/smartreflex.c | 66 > + > 1 files changed, 23 insertions(+), 43 deletions(-) > > diff --git a/arch/arm/mach-omap2/smartreflex.c > b/arch/arm/mach-omap2/smartreflex.c > index 592e9a0..d839fa6 100644 > --- a/arch/arm/mach-omap2/smartreflex.c > +++ b/arch/arm/mach-omap2/smartreflex.c > @@ -211,8 +211,12 @@ static void sr_set_regfields(struct omap_sr *sr) > } > } > > -static void sr_start_vddautocomp(struct omap_sr *sr) > +static void sr_start_vddautocomp(struct omap_sr *sr, bool class_start) > { > + int r; > + if (sr->autocomp_active) > + return; > + > if (!sr_class || !(sr_class->enable) || !(sr_class->configure)) { > dev_warn(&sr->pdev->dev, > "%s: smartreflex class driver not registered\n", > @@ -220,19 +224,24 @@ static void sr_start_vddautocomp(struct omap_sr *sr) > return; > } > > - if (sr_class->start && > + if (class_start && sr_class->start && > sr_class->start(sr->voltdm, sr_class->class_priv_data)) { > dev_err(&sr->pdev->dev, > "%s: SRClass initialization failed\n", __func__); > return; > } > > - if (!sr_class->enable(sr->voltdm)) > + r = sr_class->enable(sr->voltdm); > + if (!r && class_start) > sr->autocomp_active = true; > } > > -static void sr_stop_vddautocomp(struct omap_sr *sr) > +static void sr_stop_vddautocomp(struct omap_sr *sr, bool class_stop, > + int is_volt_reset) > { > + if (!sr->autocomp_active) > + return; > + > if (!sr_class || !(sr_class->disable)) { > dev_warn(&sr->pdev->dev, > "%s: smartreflex class driver not registered\n", > @@ -240,15 +249,13 @@ static void sr_stop_vddautocomp(struct omap_sr *sr) > return; > } > > - if (sr->autocomp_active) { > - sr_class->disable(sr->voltdm, 1); > + sr_class->disable(sr->voltdm, is_volt_reset); > + if (class_stop) { > if (sr_class->stop && > - sr_class->stop(sr->voltdm, > - sr_class->class_priv_data)) { > + sr_class->stop(sr->voltdm, sr_class->class_priv_data)) > dev_err(&sr->pdev->dev, > "%s: SR[%d]Class deinitialization failed\n", > __func__, sr->srid); > - } > sr->autocomp_active = false; > } > } > @@ -285,7 +292,7 @@ static int sr_late_init(struct omap_sr *sr_info) > } > > if (pdata && pdata->enable_on_init) > - sr_start_vddautocomp(sr_info); > + sr_start_vddautocomp(sr_info, true); > > return ret; > > @@ -693,16 +700,7 @@ void omap_sr_enable(struct voltagedomain *voltdm) > return; > } > > - if (!sr->autocomp_active) > - return; > - > - if (!sr_class || !(sr_class->enable) || !(sr_class->configure)) { > - dev_warn(&sr->pdev->dev, "%s: smartreflex class driver not" > - "registered\n", __func__); > - return; > - } > - > - sr_class->enable(voltdm); > + sr_start_vddautocomp(sr, false); > } > > /** > @@ -726,16 +724,7 @@ void omap_sr_disable(struct voltagedomain *voltdm) > return; > } > > - if (!sr->autocomp_active) > - return; > - > - if (!sr_class || !(sr_class->disable)) { > - dev_warn(&sr->pdev->dev, "%s: smartreflex class driver not" > - "registered\n", __func__); > - return; > - } > - > - sr_class->disable(voltdm, 0); > + sr_stop_vddautocomp(sr, false, 0); > } > > /** > @@ -759,16 +748,7 @@ void omap_sr_disable_reset_volt(struct voltagedomain > *voltdm) > return; > } > > - if (!sr->autocomp_active) > - return; > - > - if (!sr_class || !(sr_class->disable)) { > - dev_warn(&sr->pdev->dev, "%s: smartreflex class driver not" > -