summaryrefslogtreecommitdiff
path: root/sound/soc/rockchip/rockchip_sai.c
diff options
context:
space:
mode:
Diffstat (limited to 'sound/soc/rockchip/rockchip_sai.c')
-rw-r--r--sound/soc/rockchip/rockchip_sai.c52
1 files changed, 13 insertions, 39 deletions
diff --git a/sound/soc/rockchip/rockchip_sai.c b/sound/soc/rockchip/rockchip_sai.c
index 602f1ddfad00..6695349ee561 100644
--- a/sound/soc/rockchip/rockchip_sai.c
+++ b/sound/soc/rockchip/rockchip_sai.c
@@ -9,7 +9,6 @@
#include <linux/module.h>
#include <linux/mfd/syscon.h>
#include <linux/delay.h>
-#include <linux/of_gpio.h>
#include <linux/of_device.h>
#include <linux/clk.h>
#include <linux/pm_runtime.h>
@@ -378,19 +377,9 @@ static void rockchip_sai_xfer_start(struct rk_sai_dev *sai, int stream)
static void rockchip_sai_xfer_stop(struct rk_sai_dev *sai, int stream)
{
unsigned int msk = 0, val = 0, clr = 0;
- bool playback;
- bool capture;
-
- if (stream < 0) {
- playback = true;
- capture = true;
- } else if (stream == SNDRV_PCM_STREAM_PLAYBACK) {
- playback = true;
- capture = false;
- } else {
- playback = true;
- capture = false;
- }
+ bool capture = stream == SNDRV_PCM_STREAM_CAPTURE || stream < 0;
+ bool playback = stream == SNDRV_PCM_STREAM_PLAYBACK || stream < 0;
+ /* could be <= 0 but we don't want to depend on enum values */
if (playback) {
msk |= SAI_XFER_TXS_MASK;
@@ -1437,43 +1426,32 @@ static int rockchip_sai_probe(struct platform_device *pdev)
if (irq > 0) {
ret = devm_request_irq(&pdev->dev, irq, rockchip_sai_isr,
IRQF_SHARED, node->name, sai);
- if (ret) {
+ if (ret)
return dev_err_probe(&pdev->dev, ret,
"Failed to request irq %d\n", irq);
- }
} else {
dev_dbg(&pdev->dev, "Asked for an IRQ but got %d\n", irq);
}
sai->mclk = devm_clk_get(&pdev->dev, "mclk");
- if (IS_ERR(sai->mclk)) {
+ if (IS_ERR(sai->mclk))
return dev_err_probe(&pdev->dev, PTR_ERR(sai->mclk),
"Failed to get mclk\n");
- }
- sai->hclk = devm_clk_get(&pdev->dev, "hclk");
- if (IS_ERR(sai->hclk)) {
+ sai->hclk = devm_clk_get_enabled(&pdev->dev, "hclk");
+ if (IS_ERR(sai->hclk))
return dev_err_probe(&pdev->dev, PTR_ERR(sai->hclk),
"Failed to get hclk\n");
- }
-
- ret = clk_prepare_enable(sai->hclk);
- if (ret)
- return dev_err_probe(&pdev->dev, ret, "Failed to enable hclk\n");
regmap_read(sai->regmap, SAI_VERSION, &sai->version);
ret = rockchip_sai_init_dai(sai, res, &dai);
- if (ret) {
- dev_err(&pdev->dev, "Failed to initialize DAI: %d\n", ret);
- goto err_disable_hclk;
- }
+ if (ret)
+ return dev_err_probe(&pdev->dev, ret, "Failed to initialize DAI\n");
ret = rockchip_sai_parse_paths(sai, node);
- if (ret) {
- dev_err(&pdev->dev, "Failed to parse paths: %d\n", ret);
- goto err_disable_hclk;
- }
+ if (ret)
+ return dev_err_probe(&pdev->dev, ret, "Failed to parse paths\n");
/*
* From here on, all register accesses need to be wrapped in
@@ -1484,10 +1462,8 @@ static int rockchip_sai_probe(struct platform_device *pdev)
devm_pm_runtime_enable(&pdev->dev);
pm_runtime_get_noresume(&pdev->dev);
ret = rockchip_sai_runtime_resume(&pdev->dev);
- if (ret) {
- dev_err(&pdev->dev, "Failed to resume device: %pe\n", ERR_PTR(ret));
- goto err_disable_hclk;
- }
+ if (ret)
+ return dev_err_probe(&pdev->dev, ret, "Failed to resume device\n");
ret = devm_snd_dmaengine_pcm_register(&pdev->dev, NULL, 0);
if (ret) {
@@ -1514,8 +1490,6 @@ err_runtime_suspend:
/* If we're !CONFIG_PM, we get -ENOSYS and disable manually */
if (pm_runtime_put(&pdev->dev))
rockchip_sai_runtime_suspend(&pdev->dev);
-err_disable_hclk:
- clk_disable_unprepare(sai->hclk);
return ret;
}