Skip to content

Commit

Permalink
ASoC: mediatek: fix error handling in mt2701_afe_pcm_dev_probe()
Browse files Browse the repository at this point in the history
Fix unbalanced error handling path which will get incorrect counts
if probe failed. The .remove() should be adjusted accordingly.

Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
Tested-by: Garlic Tseng <garlic.tseng@mediatek.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
  • Loading branch information
Ryder Lee authored and Mark Brown committed Jan 3, 2018
1 parent 4fbd8d1 commit dd6bb9b
Showing 1 changed file with 14 additions and 17 deletions.
31 changes: 14 additions & 17 deletions sound/soc/mediatek/mt2701/mt2701-afe-pcm.c
Original file line number Diff line number Diff line change
Expand Up @@ -1590,12 +1590,16 @@ static int mt2701_afe_pcm_dev_probe(struct platform_device *pdev)
}

platform_set_drvdata(pdev, afe);
pm_runtime_enable(&pdev->dev);
if (!pm_runtime_enabled(&pdev->dev))
goto err_pm_disable;
pm_runtime_get_sync(&pdev->dev);

ret = snd_soc_register_platform(&pdev->dev, &mtk_afe_pcm_platform);
pm_runtime_enable(dev);
if (!pm_runtime_enabled(dev)) {
ret = mt2701_afe_runtime_resume(dev);
if (ret)
goto err_pm_disable;
}
pm_runtime_get_sync(dev);

ret = snd_soc_register_platform(dev, &mtk_afe_pcm_platform);
if (ret) {
dev_warn(dev, "err_platform\n");
goto err_platform;
Expand All @@ -1610,35 +1614,28 @@ static int mt2701_afe_pcm_dev_probe(struct platform_device *pdev)
goto err_dai_component;
}

mt2701_afe_runtime_resume(&pdev->dev);

return 0;

err_dai_component:
snd_soc_unregister_component(&pdev->dev);

snd_soc_unregister_platform(dev);
err_platform:
snd_soc_unregister_platform(&pdev->dev);

pm_runtime_put_sync(dev);
err_pm_disable:
pm_runtime_disable(&pdev->dev);
pm_runtime_disable(dev);

return ret;
}

static int mt2701_afe_pcm_dev_remove(struct platform_device *pdev)
{
struct mtk_base_afe *afe = platform_get_drvdata(pdev);

pm_runtime_put_sync(&pdev->dev);
pm_runtime_disable(&pdev->dev);
if (!pm_runtime_status_suspended(&pdev->dev))
mt2701_afe_runtime_suspend(&pdev->dev);
pm_runtime_put_sync(&pdev->dev);

snd_soc_unregister_component(&pdev->dev);
snd_soc_unregister_platform(&pdev->dev);
/* disable afe clock */
mt2701_afe_disable_clock(afe);

return 0;
}

Expand Down

0 comments on commit dd6bb9b

Please sign in to comment.