summaryrefslogtreecommitdiff
path: root/sound/soc/fsl/imx-cdnhdmi.c
diff options
context:
space:
mode:
authorShengjiu Wang <shengjiu.wang@nxp.com>2018-01-05 13:14:15 +0800
committerDong Aisheng <aisheng.dong@nxp.com>2019-11-25 15:52:33 +0800
commit7ffc2895efcae28f174dc36081f262c45b1061af (patch)
tree4d87577c457276e9f3bbad051b5086959132dc5a /sound/soc/fsl/imx-cdnhdmi.c
parentd16ae6be3502790e4f4fd53a4a964b0a85571b53 (diff)
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 <shengjiu.wang@nxp.com>
Diffstat (limited to 'sound/soc/fsl/imx-cdnhdmi.c')
-rw-r--r--sound/soc/fsl/imx-cdnhdmi.c33
1 files changed, 26 insertions, 7 deletions
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);