On 9/26/2012 9:36 PM, Linus WALLEIJ wrote:
> This factors out the resource handling in runtime
> suspend/resume and also calls it from the ordinary suspend
> and resume hooks.
>
> The semantics require that ordinary PM op suspend is called
> with runtime PM in resumed mode, so that ordinary suspend
> can assume that it will e.g. decrease the clock reference
> counter to 0, runtime resume having previously increased it
> to 1.
>
> Cc: Vipul Kumar Samar<vipulkumar.sa...@st.com>
> Cc: Viresh Kumar<viresh.ku...@linaro.org>
> Acked-by: Ulf Hansson<ulf.hans...@linaro.org>
> Signed-off-by: Linus Walleij<linus.wall...@stericsson.com>
> ---
> ChangeLog v1->v2:
> - Add more #ifdef for the case where we have neither normal
>    PM nor runtime PM.
> ---
>   drivers/spi/spi-pl022.c | 66 
> ++++++++++++++++++++++++++++++++-----------------
>   1 file changed, 44 insertions(+), 22 deletions(-)
>
> diff --git a/drivers/spi/spi-pl022.c b/drivers/spi/spi-pl022.c
> index 15737bc..9194641 100644
> --- a/drivers/spi/spi-pl022.c
> +++ b/drivers/spi/spi-pl022.c
> @@ -2300,6 +2300,45 @@ pl022_remove(struct amba_device *adev)
>       return 0;
>   }
>
> +#if defined(CONFIG_SUSPEND) || defined(CONFIG_PM_RUNTIME)
> +/*
> + * These two functions are used from both suspend/resume and
> + * the runtime counterparts to handle external resources like
> + * clocks, pins and regulators when going to sleep.
> + */
> +static void pl022_suspend_resources(struct pl022 *pl022)
> +{
> +     int ret;
> +
> +     clk_disable(pl022->clk);
> +
> +     /* Optionally let pins go into sleep states */
> +     if (!IS_ERR(pl022->pins_sleep)) {
> +             ret = pinctrl_select_state(pl022->pinctrl,
> +                                        pl022->pins_sleep);
> +             if (ret)
> +                     dev_err(&pl022->adev->dev,
> +                             "could not set pins to sleep state\n");
> +     }
> +}
> +
> +static void pl022_resume_resources(struct pl022 *pl022)
> +{
> +     int ret;
> +
> +     /* Optionaly enable pins to be muxed in and configured */
> +     if (!IS_ERR(pl022->pins_default)) {
> +             ret = pinctrl_select_state(pl022->pinctrl,
> +                                        pl022->pins_default);
> +             if (ret)
> +                     dev_err(&pl022->adev->dev,
> +                             "could not set default pins\n");
> +     }
> +
> +     clk_enable(pl022->clk);

What happen in case clk_enable returns an error??

Rest all is fine.

Regards
Vipul Samar

------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://ad.doubleclick.net/clk;258768047;13503038;j?
http://info.appdynamics.com/FreeJavaPerformanceDownload.html
_______________________________________________
spi-devel-general mailing list
spi-devel-general@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/spi-devel-general

Reply via email to