|
@@ -859,6 +859,10 @@ static int fsl_asrc_probe(struct platform_device *pdev)
|
|
return PTR_ERR(asrc_priv->ipg_clk);
|
|
return PTR_ERR(asrc_priv->ipg_clk);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ asrc_priv->spba_clk = devm_clk_get(&pdev->dev, "spba");
|
|
|
|
+ if (IS_ERR(asrc_priv->spba_clk))
|
|
|
|
+ dev_warn(&pdev->dev, "failed to get spba clock\n");
|
|
|
|
+
|
|
for (i = 0; i < ASRC_CLK_MAX_NUM; i++) {
|
|
for (i = 0; i < ASRC_CLK_MAX_NUM; i++) {
|
|
sprintf(tmp, "asrck_%x", i);
|
|
sprintf(tmp, "asrck_%x", i);
|
|
asrc_priv->asrck_clk[i] = devm_clk_get(&pdev->dev, tmp);
|
|
asrc_priv->asrck_clk[i] = devm_clk_get(&pdev->dev, tmp);
|
|
@@ -939,6 +943,11 @@ static int fsl_asrc_runtime_resume(struct device *dev)
|
|
ret = clk_prepare_enable(asrc_priv->ipg_clk);
|
|
ret = clk_prepare_enable(asrc_priv->ipg_clk);
|
|
if (ret)
|
|
if (ret)
|
|
goto disable_mem_clk;
|
|
goto disable_mem_clk;
|
|
|
|
+ if (!IS_ERR(asrc_priv->spba_clk)) {
|
|
|
|
+ ret = clk_prepare_enable(asrc_priv->spba_clk);
|
|
|
|
+ if (ret)
|
|
|
|
+ goto disable_ipg_clk;
|
|
|
|
+ }
|
|
for (i = 0; i < ASRC_CLK_MAX_NUM; i++) {
|
|
for (i = 0; i < ASRC_CLK_MAX_NUM; i++) {
|
|
ret = clk_prepare_enable(asrc_priv->asrck_clk[i]);
|
|
ret = clk_prepare_enable(asrc_priv->asrck_clk[i]);
|
|
if (ret)
|
|
if (ret)
|
|
@@ -950,6 +959,9 @@ static int fsl_asrc_runtime_resume(struct device *dev)
|
|
disable_asrck_clk:
|
|
disable_asrck_clk:
|
|
for (i--; i >= 0; i--)
|
|
for (i--; i >= 0; i--)
|
|
clk_disable_unprepare(asrc_priv->asrck_clk[i]);
|
|
clk_disable_unprepare(asrc_priv->asrck_clk[i]);
|
|
|
|
+ if (!IS_ERR(asrc_priv->spba_clk))
|
|
|
|
+ clk_disable_unprepare(asrc_priv->spba_clk);
|
|
|
|
+disable_ipg_clk:
|
|
clk_disable_unprepare(asrc_priv->ipg_clk);
|
|
clk_disable_unprepare(asrc_priv->ipg_clk);
|
|
disable_mem_clk:
|
|
disable_mem_clk:
|
|
clk_disable_unprepare(asrc_priv->mem_clk);
|
|
clk_disable_unprepare(asrc_priv->mem_clk);
|
|
@@ -963,6 +975,8 @@ static int fsl_asrc_runtime_suspend(struct device *dev)
|
|
|
|
|
|
for (i = 0; i < ASRC_CLK_MAX_NUM; i++)
|
|
for (i = 0; i < ASRC_CLK_MAX_NUM; i++)
|
|
clk_disable_unprepare(asrc_priv->asrck_clk[i]);
|
|
clk_disable_unprepare(asrc_priv->asrck_clk[i]);
|
|
|
|
+ if (!IS_ERR(asrc_priv->spba_clk))
|
|
|
|
+ clk_disable_unprepare(asrc_priv->spba_clk);
|
|
clk_disable_unprepare(asrc_priv->ipg_clk);
|
|
clk_disable_unprepare(asrc_priv->ipg_clk);
|
|
clk_disable_unprepare(asrc_priv->mem_clk);
|
|
clk_disable_unprepare(asrc_priv->mem_clk);
|
|
|
|
|