.. | .. |
---|
43 | 43 | static int mt8173_rt5650_rt5514_hw_params(struct snd_pcm_substream *substream, |
---|
44 | 44 | struct snd_pcm_hw_params *params) |
---|
45 | 45 | { |
---|
46 | | - struct snd_soc_pcm_runtime *rtd = substream->private_data; |
---|
| 46 | + struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream); |
---|
| 47 | + struct snd_soc_dai *codec_dai; |
---|
47 | 48 | int i, ret; |
---|
48 | 49 | |
---|
49 | | - for (i = 0; i < rtd->num_codecs; i++) { |
---|
50 | | - struct snd_soc_dai *codec_dai = rtd->codec_dais[i]; |
---|
51 | | - |
---|
| 50 | + for_each_rtd_codec_dais(rtd, i, codec_dai) { |
---|
52 | 51 | /* pll from mclk 12.288M */ |
---|
53 | 52 | ret = snd_soc_dai_set_pll(codec_dai, 0, 0, MCLK_FOR_CODECS, |
---|
54 | 53 | params_rate(params) * 512); |
---|
.. | .. |
---|
74 | 73 | static int mt8173_rt5650_rt5514_init(struct snd_soc_pcm_runtime *runtime) |
---|
75 | 74 | { |
---|
76 | 75 | struct snd_soc_card *card = runtime->card; |
---|
77 | | - struct snd_soc_component *component = runtime->codec_dais[0]->component; |
---|
| 76 | + struct snd_soc_component *component = asoc_rtd_to_codec(runtime, 0)->component; |
---|
78 | 77 | int ret; |
---|
79 | 78 | |
---|
80 | 79 | rt5645_sel_asrc_clk_src(component, |
---|
.. | .. |
---|
99 | 98 | &mt8173_rt5650_rt5514_jack); |
---|
100 | 99 | } |
---|
101 | 100 | |
---|
102 | | -static struct snd_soc_dai_link_component mt8173_rt5650_rt5514_codecs[] = { |
---|
103 | | - { |
---|
104 | | - .dai_name = "rt5645-aif1", |
---|
105 | | - }, |
---|
106 | | - { |
---|
107 | | - .dai_name = "rt5514-aif1", |
---|
108 | | - }, |
---|
109 | | -}; |
---|
110 | | - |
---|
111 | 101 | enum { |
---|
112 | 102 | DAI_LINK_PLAYBACK, |
---|
113 | 103 | DAI_LINK_CAPTURE, |
---|
114 | 104 | DAI_LINK_CODEC_I2S, |
---|
115 | 105 | }; |
---|
| 106 | + |
---|
| 107 | +SND_SOC_DAILINK_DEFS(playback, |
---|
| 108 | + DAILINK_COMP_ARRAY(COMP_CPU("DL1")), |
---|
| 109 | + DAILINK_COMP_ARRAY(COMP_DUMMY()), |
---|
| 110 | + DAILINK_COMP_ARRAY(COMP_EMPTY())); |
---|
| 111 | + |
---|
| 112 | +SND_SOC_DAILINK_DEFS(capture, |
---|
| 113 | + DAILINK_COMP_ARRAY(COMP_CPU("VUL")), |
---|
| 114 | + DAILINK_COMP_ARRAY(COMP_DUMMY()), |
---|
| 115 | + DAILINK_COMP_ARRAY(COMP_EMPTY())); |
---|
| 116 | + |
---|
| 117 | +SND_SOC_DAILINK_DEFS(codec, |
---|
| 118 | + DAILINK_COMP_ARRAY(COMP_CPU("I2S")), |
---|
| 119 | + DAILINK_COMP_ARRAY(COMP_CODEC(NULL, "rt5645-aif1"), |
---|
| 120 | + COMP_CODEC(NULL, "rt5514-aif1")), |
---|
| 121 | + DAILINK_COMP_ARRAY(COMP_EMPTY())); |
---|
116 | 122 | |
---|
117 | 123 | /* Digital audio interface glue - connects codec <---> CPU */ |
---|
118 | 124 | static struct snd_soc_dai_link mt8173_rt5650_rt5514_dais[] = { |
---|
.. | .. |
---|
120 | 126 | [DAI_LINK_PLAYBACK] = { |
---|
121 | 127 | .name = "rt5650_rt5514 Playback", |
---|
122 | 128 | .stream_name = "rt5650_rt5514 Playback", |
---|
123 | | - .cpu_dai_name = "DL1", |
---|
124 | | - .codec_name = "snd-soc-dummy", |
---|
125 | | - .codec_dai_name = "snd-soc-dummy-dai", |
---|
126 | 129 | .trigger = {SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST}, |
---|
127 | 130 | .dynamic = 1, |
---|
128 | 131 | .dpcm_playback = 1, |
---|
| 132 | + SND_SOC_DAILINK_REG(playback), |
---|
129 | 133 | }, |
---|
130 | 134 | [DAI_LINK_CAPTURE] = { |
---|
131 | 135 | .name = "rt5650_rt5514 Capture", |
---|
132 | 136 | .stream_name = "rt5650_rt5514 Capture", |
---|
133 | | - .cpu_dai_name = "VUL", |
---|
134 | | - .codec_name = "snd-soc-dummy", |
---|
135 | | - .codec_dai_name = "snd-soc-dummy-dai", |
---|
136 | 137 | .trigger = {SND_SOC_DPCM_TRIGGER_POST, SND_SOC_DPCM_TRIGGER_POST}, |
---|
137 | 138 | .dynamic = 1, |
---|
138 | 139 | .dpcm_capture = 1, |
---|
| 140 | + SND_SOC_DAILINK_REG(capture), |
---|
139 | 141 | }, |
---|
140 | 142 | /* Back End DAI links */ |
---|
141 | 143 | [DAI_LINK_CODEC_I2S] = { |
---|
142 | 144 | .name = "Codec", |
---|
143 | | - .cpu_dai_name = "I2S", |
---|
144 | 145 | .no_pcm = 1, |
---|
145 | | - .codecs = mt8173_rt5650_rt5514_codecs, |
---|
146 | | - .num_codecs = 2, |
---|
147 | 146 | .init = mt8173_rt5650_rt5514_init, |
---|
148 | 147 | .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | |
---|
149 | 148 | SND_SOC_DAIFMT_CBS_CFS, |
---|
.. | .. |
---|
151 | 150 | .ignore_pmdown_time = 1, |
---|
152 | 151 | .dpcm_playback = 1, |
---|
153 | 152 | .dpcm_capture = 1, |
---|
| 153 | + SND_SOC_DAILINK_REG(codec), |
---|
154 | 154 | }, |
---|
155 | 155 | }; |
---|
156 | 156 | |
---|
.. | .. |
---|
179 | 179 | { |
---|
180 | 180 | struct snd_soc_card *card = &mt8173_rt5650_rt5514_card; |
---|
181 | 181 | struct device_node *platform_node; |
---|
| 182 | + struct snd_soc_dai_link *dai_link; |
---|
182 | 183 | int i, ret; |
---|
183 | 184 | |
---|
184 | 185 | platform_node = of_parse_phandle(pdev->dev.of_node, |
---|
.. | .. |
---|
188 | 189 | return -EINVAL; |
---|
189 | 190 | } |
---|
190 | 191 | |
---|
191 | | - for (i = 0; i < card->num_links; i++) { |
---|
192 | | - if (mt8173_rt5650_rt5514_dais[i].platform_name) |
---|
| 192 | + for_each_card_prelinks(card, i, dai_link) { |
---|
| 193 | + if (dai_link->platforms->name) |
---|
193 | 194 | continue; |
---|
194 | | - mt8173_rt5650_rt5514_dais[i].platform_of_node = platform_node; |
---|
| 195 | + dai_link->platforms->of_node = platform_node; |
---|
195 | 196 | } |
---|
196 | 197 | |
---|
197 | | - mt8173_rt5650_rt5514_codecs[0].of_node = |
---|
| 198 | + mt8173_rt5650_rt5514_dais[DAI_LINK_CODEC_I2S].codecs[0].of_node = |
---|
198 | 199 | of_parse_phandle(pdev->dev.of_node, "mediatek,audio-codec", 0); |
---|
199 | | - if (!mt8173_rt5650_rt5514_codecs[0].of_node) { |
---|
| 200 | + if (!mt8173_rt5650_rt5514_dais[DAI_LINK_CODEC_I2S].codecs[0].of_node) { |
---|
200 | 201 | dev_err(&pdev->dev, |
---|
201 | 202 | "Property 'audio-codec' missing or invalid\n"); |
---|
202 | 203 | return -EINVAL; |
---|
203 | 204 | } |
---|
204 | | - mt8173_rt5650_rt5514_codecs[1].of_node = |
---|
| 205 | + mt8173_rt5650_rt5514_dais[DAI_LINK_CODEC_I2S].codecs[1].of_node = |
---|
205 | 206 | of_parse_phandle(pdev->dev.of_node, "mediatek,audio-codec", 1); |
---|
206 | | - if (!mt8173_rt5650_rt5514_codecs[1].of_node) { |
---|
| 207 | + if (!mt8173_rt5650_rt5514_dais[DAI_LINK_CODEC_I2S].codecs[1].of_node) { |
---|
207 | 208 | dev_err(&pdev->dev, |
---|
208 | 209 | "Property 'audio-codec' missing or invalid\n"); |
---|
209 | 210 | return -EINVAL; |
---|
210 | 211 | } |
---|
211 | | - mt8173_rt5650_rt5514_codec_conf[0].of_node = |
---|
212 | | - mt8173_rt5650_rt5514_codecs[1].of_node; |
---|
| 212 | + mt8173_rt5650_rt5514_codec_conf[0].dlc.of_node = |
---|
| 213 | + mt8173_rt5650_rt5514_dais[DAI_LINK_CODEC_I2S].codecs[1].of_node; |
---|
213 | 214 | |
---|
214 | 215 | card->dev = &pdev->dev; |
---|
215 | 216 | |
---|