ASoC: fsl-asoc-card: add nau8822 support
This is for an imx6sx EVB which has a nau8822 codec connects to the SSI2 interface, so add the nau8822 support in this machine driver. Because the codec driver nau8822.c doesn't handle mclk enabling, here adding a codec_priv->mclk for nau8822 and similar codecs which need to enable the mclk in the machine driver, and enable the mclk in the card_late_probe() conditionally. Signed-off-by: Hui Wang <hui.wang@canonical.com> Link: https://lore.kernel.org/r/Message-Id: <20220616040046.103524-1-hui.wang@canonical.com> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
320d0e2db9
commit
1075df4bde
|
@ -27,6 +27,7 @@
|
||||||
#include "../codecs/wm8960.h"
|
#include "../codecs/wm8960.h"
|
||||||
#include "../codecs/wm8994.h"
|
#include "../codecs/wm8994.h"
|
||||||
#include "../codecs/tlv320aic31xx.h"
|
#include "../codecs/tlv320aic31xx.h"
|
||||||
|
#include "../codecs/nau8822.h"
|
||||||
|
|
||||||
#define DRIVER_NAME "fsl-asoc-card"
|
#define DRIVER_NAME "fsl-asoc-card"
|
||||||
|
|
||||||
|
@ -47,6 +48,7 @@
|
||||||
* @pll_id: PLL id for set_pll()
|
* @pll_id: PLL id for set_pll()
|
||||||
*/
|
*/
|
||||||
struct codec_priv {
|
struct codec_priv {
|
||||||
|
struct clk *mclk;
|
||||||
unsigned long mclk_freq;
|
unsigned long mclk_freq;
|
||||||
unsigned long free_freq;
|
unsigned long free_freq;
|
||||||
u32 mclk_id;
|
u32 mclk_id;
|
||||||
|
@ -524,6 +526,9 @@ static int fsl_asoc_card_late_probe(struct snd_soc_card *card)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!IS_ERR_OR_NULL(codec_priv->mclk))
|
||||||
|
clk_prepare_enable(codec_priv->mclk);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -686,6 +691,14 @@ static int fsl_asoc_card_probe(struct platform_device *pdev)
|
||||||
priv->codec_priv.free_freq = priv->codec_priv.mclk_freq;
|
priv->codec_priv.free_freq = priv->codec_priv.mclk_freq;
|
||||||
priv->card.dapm_routes = NULL;
|
priv->card.dapm_routes = NULL;
|
||||||
priv->card.num_dapm_routes = 0;
|
priv->card.num_dapm_routes = 0;
|
||||||
|
} else if (of_device_is_compatible(np, "fsl,imx-audio-nau8822")) {
|
||||||
|
codec_dai_name = "nau8822-hifi";
|
||||||
|
priv->codec_priv.mclk_id = NAU8822_CLK_MCLK;
|
||||||
|
priv->codec_priv.fll_id = NAU8822_CLK_PLL;
|
||||||
|
priv->codec_priv.pll_id = NAU8822_CLK_PLL;
|
||||||
|
priv->dai_fmt |= SND_SOC_DAIFMT_CBM_CFM;
|
||||||
|
if (codec_dev)
|
||||||
|
priv->codec_priv.mclk = devm_clk_get(codec_dev, NULL);
|
||||||
} else {
|
} else {
|
||||||
dev_err(&pdev->dev, "unknown Device Tree compatible\n");
|
dev_err(&pdev->dev, "unknown Device Tree compatible\n");
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
|
@ -911,6 +924,7 @@ static const struct of_device_id fsl_asoc_card_dt_ids[] = {
|
||||||
{ .compatible = "fsl,imx-audio-wm8524", },
|
{ .compatible = "fsl,imx-audio-wm8524", },
|
||||||
{ .compatible = "fsl,imx-audio-si476x", },
|
{ .compatible = "fsl,imx-audio-si476x", },
|
||||||
{ .compatible = "fsl,imx-audio-wm8958", },
|
{ .compatible = "fsl,imx-audio-wm8958", },
|
||||||
|
{ .compatible = "fsl,imx-audio-nau8822", },
|
||||||
{}
|
{}
|
||||||
};
|
};
|
||||||
MODULE_DEVICE_TABLE(of, fsl_asoc_card_dt_ids);
|
MODULE_DEVICE_TABLE(of, fsl_asoc_card_dt_ids);
|
||||||
|
|
Loading…
Reference in New Issue