[PATCH V3 13/19] OMAP3+: SR: Reuse sr_[start|stop]_vddautocomp functions

2011-03-05 Thread Nishanth Menon
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

2011-03-07 Thread Jarkko Nikula
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

2011-03-17 Thread Kevin Hilman
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"
> -