From fbe8dc221ae4ed469ec5b6c9ce86eccff2b48d1d Mon Sep 17 00:00:00 2001 From: Sugar Zhang Date: Fri, 10 Jul 2015 16:27:25 +0800 Subject: [PATCH] ASoC: rockchip: i2s: move pinctrl_pm_* to suspend/resume. 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 --- sound/soc/rockchip/rk_i2s.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/sound/soc/rockchip/rk_i2s.c b/sound/soc/rockchip/rk_i2s.c index aa144cd49ed6..f241e082d58d 100755 --- a/sound/soc/rockchip/rk_i2s.c +++ b/sound/soc/rockchip/rk_i2s.c @@ -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); -- 2.34.1