lkml.org 
[lkml]   [2011]   [Apr]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 8/9] OMAP1 / PM: Use generic clock manipulation routines for runtime PM
    Date
    From: Rafael J. Wysocki <rjw@sisk.pl>

    Convert OMAP1 to using the new generic clock manipulation routines
    and a device power domain for runtime PM instead of overriding the
    platform bus type's runtime PM callbacks. This allows us to simplify
    OMAP1-specific code and to share some code with other platforms
    (shmobile in particular).

    Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
    ---
    arch/arm/mach-omap1/pm_bus.c | 63 +++++++++++++------------------------------
    1 file changed, 20 insertions(+), 43 deletions(-)

    Index: linux-2.6/arch/arm/mach-omap1/pm_bus.c
    ===================================================================
    --- linux-2.6.orig/arch/arm/mach-omap1/pm_bus.c
    +++ linux-2.6/arch/arm/mach-omap1/pm_bus.c
    @@ -24,23 +24,18 @@
    #ifdef CONFIG_PM_RUNTIME
    static int omap1_pm_runtime_suspend(struct device *dev)
    {
    - struct clk *iclk, *fclk;
    - int ret = 0;
    + int ret;

    dev_dbg(dev, "%s\n", __func__);

    ret = pm_generic_runtime_suspend(dev);
    + if (ret)
    + return ret;

    - fclk = clk_get(dev, "fck");
    - if (!IS_ERR(fclk)) {
    - clk_disable(fclk);
    - clk_put(fclk);
    - }
    -
    - iclk = clk_get(dev, "ick");
    - if (!IS_ERR(iclk)) {
    - clk_disable(iclk);
    - clk_put(iclk);
    + ret = pm_runtime_clock_suspend(dev);
    + if (ret) {
    + pm_generic_runtime_resume(dev);
    + return ret;
    }

    return 0;
    @@ -48,23 +43,22 @@ static int omap1_pm_runtime_suspend(stru

    static int omap1_pm_runtime_resume(struct device *dev)
    {
    - struct clk *iclk, *fclk;
    -
    dev_dbg(dev, "%s\n", __func__);

    - iclk = clk_get(dev, "ick");
    - if (!IS_ERR(iclk)) {
    - clk_enable(iclk);
    - clk_put(iclk);
    - }
    + pm_runtime_clock_resume(dev);
    + return pm_generic_runtime_resume(dev);
    +};

    - fclk = clk_get(dev, "fck");
    - if (!IS_ERR(fclk)) {
    - clk_enable(fclk);
    - clk_put(fclk);
    - }
    +static struct dev_power_domain default_power_domain = {
    + .ops = {
    + USE_PLATFORM_PM_SLEEP_OPS,
    + .runtime_suspend = omap1_pm_runtime_suspend,
    + .runtime_resume = omap1_pm_runtime_resume,
    + },
    +};

    - return pm_generic_runtime_resume(dev);
    +static struct pm_domain_notifier_block platform_bus_notifier = {
    + .pwr_domain = &default_power_domain,
    };

    static int __init omap1_pm_runtime_init(void)
    @@ -75,24 +69,7 @@ static int __init omap1_pm_runtime_init(
    if (!cpu_class_is_omap1())
    return -ENODEV;

    - pm = platform_bus_get_pm_ops();
    - if (!pm) {
    - pr_err("%s: unable to get dev_pm_ops from platform_bus\n",
    - __func__);
    - return -ENODEV;
    - }
    -
    - omap_pm = kmemdup(pm, sizeof(struct dev_pm_ops), GFP_KERNEL);
    - if (!omap_pm) {
    - pr_err("%s: unable to alloc memory for new dev_pm_ops\n",
    - __func__);
    - return -ENOMEM;
    - }
    -
    - omap_pm->runtime_suspend = omap1_pm_runtime_suspend;
    - omap_pm->runtime_resume = omap1_pm_runtime_resume;
    -
    - platform_bus_set_pm_ops(omap_pm);
    + pm_runtim_clock_add_notifier(&platform_bus_type, &platform_bus_notifier);

    return 0;
    }


    \
     
     \ /
      Last update: 2011-04-17 01:49    [W:0.023 / U:31.744 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site