forked from ~ljy/RK356X_SDK_RELEASE

hc
2023-12-11 1f93a7dfd1f8d5ff7a5c53246c7534fe2332d6f4
kernel/sound/soc/intel/boards/skl_rt286.c
....@@ -1,3 +1,4 @@
1
+// SPDX-License-Identifier: GPL-2.0-only
12 /*
23 * Intel Skylake I2S Machine Driver
34 *
....@@ -7,15 +8,6 @@
78 * Intel Broadwell Wildcatpoint SST Audio
89 *
910 * Copyright (C) 2013, Intel Corporation. All rights reserved.
10
- *
11
- * This program is free software; you can redistribute it and/or
12
- * modify it under the terms of the GNU General Public License version
13
- * 2 as published by the Free Software Foundation.
14
- *
15
- * This program is distributed in the hope that it will be useful,
16
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
- * GNU General Public License for more details.
1911 */
2012
2113 #include <linux/module.h>
....@@ -120,7 +112,7 @@
120112 static int skylake_rt286_fe_init(struct snd_soc_pcm_runtime *rtd)
121113 {
122114 struct snd_soc_dapm_context *dapm;
123
- struct snd_soc_component *component = rtd->cpu_dai->component;
115
+ struct snd_soc_component *component = asoc_rtd_to_cpu(rtd, 0)->component;
124116
125117 dapm = snd_soc_component_get_dapm(component);
126118 snd_soc_dapm_ignore_suspend(dapm, "Reference Capture");
....@@ -130,7 +122,7 @@
130122
131123 static int skylake_rt286_codec_init(struct snd_soc_pcm_runtime *rtd)
132124 {
133
- struct snd_soc_component *component = rtd->codec_dai->component;
125
+ struct snd_soc_component *component = asoc_rtd_to_codec(rtd, 0)->component;
134126 int ret;
135127
136128 ret = snd_soc_card_jack_new(rtd->card, "Headset",
....@@ -151,7 +143,7 @@
151143 static int skylake_hdmi_init(struct snd_soc_pcm_runtime *rtd)
152144 {
153145 struct skl_rt286_private *ctx = snd_soc_card_get_drvdata(rtd->card);
154
- struct snd_soc_dai *dai = rtd->codec_dai;
146
+ struct snd_soc_dai *dai = asoc_rtd_to_codec(rtd, 0);
155147 struct skl_hdmi_pcm *pcm;
156148
157149 pcm = devm_kzalloc(rtd->card->dev, sizeof(*pcm), GFP_KERNEL);
....@@ -219,13 +211,13 @@
219211 {
220212 struct snd_interval *rate = hw_param_interval(params,
221213 SNDRV_PCM_HW_PARAM_RATE);
222
- struct snd_interval *channels = hw_param_interval(params,
214
+ struct snd_interval *chan = hw_param_interval(params,
223215 SNDRV_PCM_HW_PARAM_CHANNELS);
224216 struct snd_mask *fmt = hw_param_mask(params, SNDRV_PCM_HW_PARAM_FORMAT);
225217
226218 /* The output is 48KHz, stereo, 16bits */
227219 rate->min = rate->max = 48000;
228
- channels->min = channels->max = 2;
220
+ chan->min = chan->max = 2;
229221
230222 /* set SSP0 to 24 bit */
231223 snd_mask_none(fmt);
....@@ -236,8 +228,8 @@
236228 static int skylake_rt286_hw_params(struct snd_pcm_substream *substream,
237229 struct snd_pcm_hw_params *params)
238230 {
239
- struct snd_soc_pcm_runtime *rtd = substream->private_data;
240
- struct snd_soc_dai *codec_dai = rtd->codec_dai;
231
+ struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream);
232
+ struct snd_soc_dai *codec_dai = asoc_rtd_to_codec(rtd, 0);
241233 int ret;
242234
243235 ret = snd_soc_dai_set_sysclk(codec_dai, RT286_SCLK_S_PLL, 24000000,
....@@ -255,12 +247,12 @@
255247 static int skylake_dmic_fixup(struct snd_soc_pcm_runtime *rtd,
256248 struct snd_pcm_hw_params *params)
257249 {
258
- struct snd_interval *channels = hw_param_interval(params,
250
+ struct snd_interval *chan = hw_param_interval(params,
259251 SNDRV_PCM_HW_PARAM_CHANNELS);
260252 if (params_channels(params) == 2)
261
- channels->min = channels->max = 2;
253
+ chan->min = chan->max = 2;
262254 else
263
- channels->min = channels->max = 4;
255
+ chan->min = chan->max = 4;
264256
265257 return 0;
266258 }
....@@ -291,18 +283,66 @@
291283 .startup = skylake_dmic_startup,
292284 };
293285
286
+SND_SOC_DAILINK_DEF(dummy,
287
+ DAILINK_COMP_ARRAY(COMP_DUMMY()));
288
+
289
+SND_SOC_DAILINK_DEF(system,
290
+ DAILINK_COMP_ARRAY(COMP_CPU("System Pin")));
291
+
292
+SND_SOC_DAILINK_DEF(deepbuffer,
293
+ DAILINK_COMP_ARRAY(COMP_CPU("Deepbuffer Pin")));
294
+
295
+SND_SOC_DAILINK_DEF(reference,
296
+ DAILINK_COMP_ARRAY(COMP_CPU("Reference Pin")));
297
+
298
+SND_SOC_DAILINK_DEF(dmic,
299
+ DAILINK_COMP_ARRAY(COMP_CPU("DMIC Pin")));
300
+
301
+SND_SOC_DAILINK_DEF(hdmi1,
302
+ DAILINK_COMP_ARRAY(COMP_CPU("HDMI1 Pin")));
303
+
304
+SND_SOC_DAILINK_DEF(hdmi2,
305
+ DAILINK_COMP_ARRAY(COMP_CPU("HDMI2 Pin")));
306
+
307
+SND_SOC_DAILINK_DEF(hdmi3,
308
+ DAILINK_COMP_ARRAY(COMP_CPU("HDMI3 Pin")));
309
+
310
+SND_SOC_DAILINK_DEF(ssp0_pin,
311
+ DAILINK_COMP_ARRAY(COMP_CPU("SSP0 Pin")));
312
+SND_SOC_DAILINK_DEF(ssp0_codec,
313
+ DAILINK_COMP_ARRAY(COMP_CODEC("i2c-INT343A:00", "rt286-aif1")));
314
+
315
+SND_SOC_DAILINK_DEF(dmic01_pin,
316
+ DAILINK_COMP_ARRAY(COMP_CPU("DMIC01 Pin")));
317
+SND_SOC_DAILINK_DEF(dmic_codec,
318
+ DAILINK_COMP_ARRAY(COMP_CODEC("dmic-codec", "dmic-hifi")));
319
+
320
+SND_SOC_DAILINK_DEF(idisp1_pin,
321
+ DAILINK_COMP_ARRAY(COMP_CPU("iDisp1 Pin")));
322
+SND_SOC_DAILINK_DEF(idisp1_codec,
323
+ DAILINK_COMP_ARRAY(COMP_CODEC("ehdaudio0D2", "intel-hdmi-hifi1")));
324
+
325
+SND_SOC_DAILINK_DEF(idisp2_pin,
326
+ DAILINK_COMP_ARRAY(COMP_CPU("iDisp2 Pin")));
327
+SND_SOC_DAILINK_DEF(idisp2_codec,
328
+ DAILINK_COMP_ARRAY(COMP_CODEC("ehdaudio0D2", "intel-hdmi-hifi2")));
329
+
330
+SND_SOC_DAILINK_DEF(idisp3_pin,
331
+ DAILINK_COMP_ARRAY(COMP_CPU("iDisp3 Pin")));
332
+SND_SOC_DAILINK_DEF(idisp3_codec,
333
+ DAILINK_COMP_ARRAY(COMP_CODEC("ehdaudio0D2", "intel-hdmi-hifi3")));
334
+
335
+SND_SOC_DAILINK_DEF(platform,
336
+ DAILINK_COMP_ARRAY(COMP_PLATFORM("0000:00:1f.3")));
337
+
294338 /* skylake digital audio interface glue - connects codec <--> CPU */
295339 static struct snd_soc_dai_link skylake_rt286_dais[] = {
296340 /* Front End DAI links */
297341 [SKL_DPCM_AUDIO_PB] = {
298342 .name = "Skl Audio Port",
299343 .stream_name = "Audio",
300
- .cpu_dai_name = "System Pin",
301
- .platform_name = "0000:00:1f.3",
302344 .nonatomic = 1,
303345 .dynamic = 1,
304
- .codec_name = "snd-soc-dummy",
305
- .codec_dai_name = "snd-soc-dummy-dai",
306346 .init = skylake_rt286_fe_init,
307347 .trigger = {
308348 SND_SOC_DPCM_TRIGGER_POST,
....@@ -310,100 +350,79 @@
310350 },
311351 .dpcm_playback = 1,
312352 .ops = &skylake_rt286_fe_ops,
353
+ SND_SOC_DAILINK_REG(system, dummy, platform),
313354 },
314355 [SKL_DPCM_AUDIO_DB_PB] = {
315356 .name = "Skl Deepbuffer Port",
316357 .stream_name = "Deep Buffer Audio",
317
- .cpu_dai_name = "Deepbuffer Pin",
318
- .platform_name = "0000:00:1f.3",
319358 .nonatomic = 1,
320359 .dynamic = 1,
321
- .codec_name = "snd-soc-dummy",
322
- .codec_dai_name = "snd-soc-dummy-dai",
323360 .trigger = {
324361 SND_SOC_DPCM_TRIGGER_POST,
325362 SND_SOC_DPCM_TRIGGER_POST
326363 },
327364 .dpcm_playback = 1,
328365 .ops = &skylake_rt286_fe_ops,
329
-
366
+ SND_SOC_DAILINK_REG(deepbuffer, dummy, platform),
330367 },
331368 [SKL_DPCM_AUDIO_CP] = {
332369 .name = "Skl Audio Capture Port",
333370 .stream_name = "Audio Record",
334
- .cpu_dai_name = "System Pin",
335
- .platform_name = "0000:00:1f.3",
336371 .nonatomic = 1,
337372 .dynamic = 1,
338
- .codec_name = "snd-soc-dummy",
339
- .codec_dai_name = "snd-soc-dummy-dai",
340373 .trigger = {
341374 SND_SOC_DPCM_TRIGGER_POST,
342375 SND_SOC_DPCM_TRIGGER_POST
343376 },
344377 .dpcm_capture = 1,
345378 .ops = &skylake_rt286_fe_ops,
379
+ SND_SOC_DAILINK_REG(system, dummy, platform),
346380 },
347381 [SKL_DPCM_AUDIO_REF_CP] = {
348382 .name = "Skl Audio Reference cap",
349383 .stream_name = "refcap",
350
- .cpu_dai_name = "Reference Pin",
351
- .codec_name = "snd-soc-dummy",
352
- .codec_dai_name = "snd-soc-dummy-dai",
353
- .platform_name = "0000:00:1f.3",
354384 .init = NULL,
355385 .dpcm_capture = 1,
356386 .nonatomic = 1,
357387 .dynamic = 1,
388
+ SND_SOC_DAILINK_REG(reference, dummy, platform),
358389 },
359390 [SKL_DPCM_AUDIO_DMIC_CP] = {
360391 .name = "Skl Audio DMIC cap",
361392 .stream_name = "dmiccap",
362
- .cpu_dai_name = "DMIC Pin",
363
- .codec_name = "snd-soc-dummy",
364
- .codec_dai_name = "snd-soc-dummy-dai",
365
- .platform_name = "0000:00:1f.3",
366393 .init = NULL,
367394 .dpcm_capture = 1,
368395 .nonatomic = 1,
369396 .dynamic = 1,
370397 .ops = &skylake_dmic_ops,
398
+ SND_SOC_DAILINK_REG(dmic, dummy, platform),
371399 },
372400 [SKL_DPCM_AUDIO_HDMI1_PB] = {
373401 .name = "Skl HDMI Port1",
374402 .stream_name = "Hdmi1",
375
- .cpu_dai_name = "HDMI1 Pin",
376
- .codec_name = "snd-soc-dummy",
377
- .codec_dai_name = "snd-soc-dummy-dai",
378
- .platform_name = "0000:00:1f.3",
379403 .dpcm_playback = 1,
380404 .init = NULL,
381405 .nonatomic = 1,
382406 .dynamic = 1,
407
+ SND_SOC_DAILINK_REG(hdmi1, dummy, platform),
383408 },
384409 [SKL_DPCM_AUDIO_HDMI2_PB] = {
385410 .name = "Skl HDMI Port2",
386411 .stream_name = "Hdmi2",
387
- .cpu_dai_name = "HDMI2 Pin",
388
- .codec_name = "snd-soc-dummy",
389
- .codec_dai_name = "snd-soc-dummy-dai",
390
- .platform_name = "0000:00:1f.3",
391412 .dpcm_playback = 1,
392413 .init = NULL,
393414 .nonatomic = 1,
394415 .dynamic = 1,
416
+ SND_SOC_DAILINK_REG(hdmi2, dummy, platform),
395417 },
396418 [SKL_DPCM_AUDIO_HDMI3_PB] = {
397419 .name = "Skl HDMI Port3",
398420 .stream_name = "Hdmi3",
399
- .cpu_dai_name = "HDMI3 Pin",
400
- .codec_name = "snd-soc-dummy",
401
- .codec_dai_name = "snd-soc-dummy-dai",
402
- .platform_name = "0000:00:1f.3",
403421 .dpcm_playback = 1,
404422 .init = NULL,
405423 .nonatomic = 1,
406424 .dynamic = 1,
425
+ SND_SOC_DAILINK_REG(hdmi3, dummy, platform),
407426 },
408427
409428 /* Back End DAI links */
....@@ -411,11 +430,7 @@
411430 /* SSP0 - Codec */
412431 .name = "SSP0-Codec",
413432 .id = 0,
414
- .cpu_dai_name = "SSP0 Pin",
415
- .platform_name = "0000:00:1f.3",
416433 .no_pcm = 1,
417
- .codec_name = "i2c-INT343A:00",
418
- .codec_dai_name = "rt286-aif1",
419434 .init = skylake_rt286_codec_init,
420435 .dai_fmt = SND_SOC_DAIFMT_I2S |
421436 SND_SOC_DAIFMT_NB_NF |
....@@ -425,51 +440,40 @@
425440 .ops = &skylake_rt286_ops,
426441 .dpcm_playback = 1,
427442 .dpcm_capture = 1,
443
+ SND_SOC_DAILINK_REG(ssp0_pin, ssp0_codec, platform),
428444 },
429445 {
430446 .name = "dmic01",
431447 .id = 1,
432
- .cpu_dai_name = "DMIC01 Pin",
433
- .codec_name = "dmic-codec",
434
- .codec_dai_name = "dmic-hifi",
435
- .platform_name = "0000:00:1f.3",
436448 .be_hw_params_fixup = skylake_dmic_fixup,
437449 .ignore_suspend = 1,
438450 .dpcm_capture = 1,
439451 .no_pcm = 1,
452
+ SND_SOC_DAILINK_REG(dmic01_pin, dmic_codec, platform),
440453 },
441454 {
442455 .name = "iDisp1",
443456 .id = 2,
444
- .cpu_dai_name = "iDisp1 Pin",
445
- .codec_name = "ehdaudio0D2",
446
- .codec_dai_name = "intel-hdmi-hifi1",
447
- .platform_name = "0000:00:1f.3",
448457 .init = skylake_hdmi_init,
449458 .dpcm_playback = 1,
450459 .no_pcm = 1,
460
+ SND_SOC_DAILINK_REG(idisp1_pin, idisp1_codec, platform),
451461 },
452462 {
453463 .name = "iDisp2",
454464 .id = 3,
455
- .cpu_dai_name = "iDisp2 Pin",
456
- .codec_name = "ehdaudio0D2",
457
- .codec_dai_name = "intel-hdmi-hifi2",
458
- .platform_name = "0000:00:1f.3",
459465 .init = skylake_hdmi_init,
460466 .dpcm_playback = 1,
461467 .no_pcm = 1,
468
+ SND_SOC_DAILINK_REG(idisp2_pin, idisp2_codec, platform),
462469 },
463470 {
464471 .name = "iDisp3",
465472 .id = 4,
466
- .cpu_dai_name = "iDisp3 Pin",
467
- .codec_name = "ehdaudio0D2",
468
- .codec_dai_name = "intel-hdmi-hifi3",
469
- .platform_name = "0000:00:1f.3",
470473 .init = skylake_hdmi_init,
471474 .dpcm_playback = 1,
472475 .no_pcm = 1,
476
+ SND_SOC_DAILINK_REG(idisp3_pin, idisp3_codec, platform),
473477 },
474478 };
475479