ASoC: rockchip: i2s: move pinctrl_pm_* to suspend/resume.
authorSugar Zhang <sugar.zhang@rock-chips.com>
Fri, 10 Jul 2015 08:27:25 +0000 (16:27 +0800)
committerSugar Zhang <sugar.zhang@rock-chips.com>
Fri, 10 Jul 2015 08:54:51 +0000 (16:54 +0800)
some codec initializtion depends on i2s's mclk/lrck, when codec enter
deep sleep, codec power loss, then codec resume and reinit
codec logic which need mclk/lrck, if these clk is not ready, codec will
work abnormally.

Signed-off-by: Sugar Zhang <sugar.zhang@rock-chips.com>
sound/soc/rockchip/rk_i2s.c

index aa144cd49ed6c561b9f08efd06de3e85d17237f3..f241e082d58db7eb77fee268cd5e25de7f7c8766 100755 (executable)
@@ -483,7 +483,7 @@ static int rockchip_i2s_runtime_suspend(struct device *dev)
        struct rk_i2s_dev *i2s = dev_get_drvdata(dev);
 
        dev_dbg(i2s->dev, "%s\n", __func__);
-       return pinctrl_pm_select_sleep_state(dev);
+       return 0;
 }
 
 static int rockchip_i2s_runtime_resume(struct device *dev)
@@ -491,7 +491,7 @@ static int rockchip_i2s_runtime_resume(struct device *dev)
        struct rk_i2s_dev *i2s = dev_get_drvdata(dev);
 
        dev_dbg(i2s->dev, "%s\n", __func__);
-       return pinctrl_pm_select_default_state(dev);
+       return 0;
 }
 #else
 #define i2s_runtime_suspend NULL
@@ -758,7 +758,7 @@ static int rockchip_i2s_suspend(struct device *dev)
        struct rk_i2s_dev *i2s = dev_get_drvdata(dev);
 
        dev_dbg(i2s->dev, "%s\n", __func__);
-       return 0;
+       return pinctrl_pm_select_sleep_state(dev);
 }
 
 static int rockchip_i2s_resume(struct device *dev)
@@ -767,6 +767,9 @@ static int rockchip_i2s_resume(struct device *dev)
        int ret;
 
        ret = pm_runtime_get_sync(dev);
+       if (ret < 0)
+               return ret;
+       ret = pinctrl_pm_select_default_state(dev);
        if (ret < 0)
                return ret;
        ret = regmap_reinit_cache(i2s->regmap, &rockchip_i2s_regmap_config);