Intergrate memory to memory feature to ASRC driver, call m2m probe(), remove(), suspend() and resume() in different callback.
Signed-off-by: Shengjiu Wang shengjiu.wang@nxp.com --- sound/soc/fsl/fsl_asrc.c | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-)
diff --git a/sound/soc/fsl/fsl_asrc.c b/sound/soc/fsl/fsl_asrc.c index 30190ccb74e7..bd5f134e3473 100644 --- a/sound/soc/fsl/fsl_asrc.c +++ b/sound/soc/fsl/fsl_asrc.c @@ -17,6 +17,7 @@ #include <sound/pcm_params.h>
#include "fsl_asrc.h" +#include "fsl_asrc_m2m.h"
#define IDEAL_RATIO_DECIMAL_DEPTH 26 #define DIVIDER_NUM 64 @@ -1380,6 +1381,13 @@ static int fsl_asrc_probe(struct platform_device *pdev) goto err_pm_get_sync; }
+ /* probe m2m feature */ + ret = fsl_asrc_m2m_probe(asrc); + if (ret) { + dev_err(&pdev->dev, "failed to init m2m device %d\n", ret); + goto err_pm_get_sync; + } + return 0;
err_pm_get_sync: @@ -1392,6 +1400,9 @@ static int fsl_asrc_probe(struct platform_device *pdev)
static void fsl_asrc_remove(struct platform_device *pdev) { + /* remove m2m feature */ + fsl_asrc_m2m_remove(pdev); + pm_runtime_disable(&pdev->dev); if (!pm_runtime_status_suspended(&pdev->dev)) fsl_asrc_runtime_suspend(&pdev->dev); @@ -1493,10 +1504,32 @@ static int fsl_asrc_runtime_suspend(struct device *dev) return 0; }
+static int __maybe_unused fsl_asrc_suspend(struct device *dev) +{ + struct fsl_asrc *asrc = dev_get_drvdata(dev); + + /* suspend asrc m2m */ + fsl_asrc_m2m_suspend(asrc); + + return pm_runtime_force_suspend(dev); +} + +static int __maybe_unused fsl_asrc_resume(struct device *dev) +{ + struct fsl_asrc *asrc = dev_get_drvdata(dev); + int ret; + + ret = pm_runtime_force_resume(dev); + + /* resume asrc m2m */ + fsl_asrc_m2m_resume(asrc); + + return ret; +} + static const struct dev_pm_ops fsl_asrc_pm = { SET_RUNTIME_PM_OPS(fsl_asrc_runtime_suspend, fsl_asrc_runtime_resume, NULL) - SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend, - pm_runtime_force_resume) + SET_SYSTEM_SLEEP_PM_OPS(fsl_asrc_suspend, fsl_asrc_resume) };
static const struct fsl_asrc_soc_data fsl_asrc_imx35_data = {