diff options
Diffstat (limited to 'sound/soc/fsl/fsl_asrc.c')
-rw-r--r-- | sound/soc/fsl/fsl_asrc.c | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/sound/soc/fsl/fsl_asrc.c b/sound/soc/fsl/fsl_asrc.c index c068494bae30..9f087d4f73ed 100644 --- a/sound/soc/fsl/fsl_asrc.c +++ b/sound/soc/fsl/fsl_asrc.c | |||
@@ -931,14 +931,29 @@ static int fsl_asrc_probe(struct platform_device *pdev) | |||
931 | static int fsl_asrc_runtime_resume(struct device *dev) | 931 | static int fsl_asrc_runtime_resume(struct device *dev) |
932 | { | 932 | { |
933 | struct fsl_asrc *asrc_priv = dev_get_drvdata(dev); | 933 | struct fsl_asrc *asrc_priv = dev_get_drvdata(dev); |
934 | int i; | 934 | int i, ret; |
935 | 935 | ||
936 | clk_prepare_enable(asrc_priv->mem_clk); | 936 | ret = clk_prepare_enable(asrc_priv->mem_clk); |
937 | clk_prepare_enable(asrc_priv->ipg_clk); | 937 | if (ret) |
938 | for (i = 0; i < ASRC_CLK_MAX_NUM; i++) | 938 | return ret; |
939 | clk_prepare_enable(asrc_priv->asrck_clk[i]); | 939 | ret = clk_prepare_enable(asrc_priv->ipg_clk); |
940 | if (ret) | ||
941 | goto disable_mem_clk; | ||
942 | for (i = 0; i < ASRC_CLK_MAX_NUM; i++) { | ||
943 | ret = clk_prepare_enable(asrc_priv->asrck_clk[i]); | ||
944 | if (ret) | ||
945 | goto disable_asrck_clk; | ||
946 | } | ||
940 | 947 | ||
941 | return 0; | 948 | return 0; |
949 | |||
950 | disable_asrck_clk: | ||
951 | for (i--; i >= 0; i--) | ||
952 | clk_disable_unprepare(asrc_priv->asrck_clk[i]); | ||
953 | clk_disable_unprepare(asrc_priv->ipg_clk); | ||
954 | disable_mem_clk: | ||
955 | clk_disable_unprepare(asrc_priv->mem_clk); | ||
956 | return ret; | ||
942 | } | 957 | } |
943 | 958 | ||
944 | static int fsl_asrc_runtime_suspend(struct device *dev) | 959 | static int fsl_asrc_runtime_suspend(struct device *dev) |