From 7ffc2895efcae28f174dc36081f262c45b1061af Mon Sep 17 00:00:00 2001 From: Shengjiu Wang Date: Fri, 5 Jan 2018 13:14:15 +0800 Subject: MLK-17344-1: ASoC: imx-cdnhdmi: get constraint rate from dts Constraint rate depends on the clock rata of cpu dai, which is defined in dts, so we add constraint-rate property in dts, then driver can get it. Signed-off-by: Shengjiu Wang --- sound/soc/fsl/imx-cdnhdmi.c | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) (limited to 'sound/soc/fsl/imx-cdnhdmi.c') diff --git a/sound/soc/fsl/imx-cdnhdmi.c b/sound/soc/fsl/imx-cdnhdmi.c index 7cb8ad4d504a..0bd7278fe60b 100644 --- a/sound/soc/fsl/imx-cdnhdmi.c +++ b/sound/soc/fsl/imx-cdnhdmi.c @@ -32,23 +32,23 @@ struct imx_cdnhdmi_data { struct snd_soc_dai_link dai; struct snd_soc_card card; int protocol; + u32 support_rates[SUPPORT_RATE_NUM]; + u32 support_rates_num; }; static int imx_cdnhdmi_startup(struct snd_pcm_substream *substream) { struct snd_pcm_runtime *runtime = substream->runtime; + struct snd_soc_pcm_runtime *rtd = substream->private_data; + struct snd_soc_card *card = rtd->card; + struct imx_cdnhdmi_data *data = snd_soc_card_get_drvdata(card); static struct snd_pcm_hw_constraint_list constraint_rates; static struct snd_pcm_hw_constraint_list constraint_channels; - static u32 support_rates[SUPPORT_RATE_NUM]; static u32 support_channels[SUPPORT_CHANNEL_NUM]; int ret; - support_rates[0] = 48000; - support_rates[1] = 96000; - support_rates[2] = 32000; - support_rates[3] = 192000; - constraint_rates.list = support_rates; - constraint_rates.count = 4; + constraint_rates.list = data->support_rates; + constraint_rates.count = data->support_rates_num; ret = snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_RATE, &constraint_rates); @@ -123,6 +123,7 @@ static int imx_cdnhdmi_probe(struct platform_device *pdev) struct platform_device *cpu_pdev; struct imx_cdnhdmi_data *data; int ret; + int i; cpu_np = of_parse_phandle(pdev->dev.of_node, "audio-cpu", 0); if (!cpu_np) { @@ -144,6 +145,24 @@ static int imx_cdnhdmi_probe(struct platform_device *pdev) goto fail; } + for (i = 0; i < SUPPORT_RATE_NUM; i++) { + ret = of_property_read_u32_index(pdev->dev.of_node, + "constraint-rate", + i, &data->support_rates[i]); + if (!ret) + data->support_rates_num = i + 1; + else + break; + } + + if (data->support_rates_num == 0) { + data->support_rates[0] = 48000; + data->support_rates[1] = 96000; + data->support_rates[2] = 32000; + data->support_rates[3] = 192000; + data->support_rates_num = 4; + } + of_property_read_u32(pdev->dev.of_node, "protocol", &data->protocol); -- cgit v1.2.3