hc
2023-12-11 6778948f9de86c3cfaf36725a7c87dcff9ba247f
kernel/sound/soc/ux500/mop500.c
....@@ -1,3 +1,4 @@
1
+// SPDX-License-Identifier: GPL-2.0-only
12 /*
23 * Copyright (C) ST-Ericsson SA 2012
34 *
....@@ -5,10 +6,6 @@
56 * for ST-Ericsson.
67 *
78 * License terms:
8
- *
9
- * This program is free software; you can redistribute it and/or modify
10
- * it under the terms of the GNU General Public License version 2 as published
11
- * by the Free Software Foundation.
129 */
1310
1411 #include <asm/mach-types.h>
....@@ -27,26 +24,30 @@
2724 #include "mop500_ab8500.h"
2825
2926 /* Define the whole MOP500 soundcard, linking platform to the codec-drivers */
27
+SND_SOC_DAILINK_DEFS(link1,
28
+ DAILINK_COMP_ARRAY(COMP_CPU("ux500-msp-i2s.1")),
29
+ DAILINK_COMP_ARRAY(COMP_CODEC("ab8500-codec.0", "ab8500-codec-dai.0")),
30
+ DAILINK_COMP_ARRAY(COMP_PLATFORM("ux500-msp-i2s.1")));
31
+
32
+SND_SOC_DAILINK_DEFS(link2,
33
+ DAILINK_COMP_ARRAY(COMP_CPU("ux500-msp-i2s.3")),
34
+ DAILINK_COMP_ARRAY(COMP_CODEC("ab8500-codec.0", "ab8500-codec-dai.1")),
35
+ DAILINK_COMP_ARRAY(COMP_PLATFORM("ux500-msp-i2s.3")));
36
+
3037 static struct snd_soc_dai_link mop500_dai_links[] = {
3138 {
3239 .name = "ab8500_0",
3340 .stream_name = "ab8500_0",
34
- .cpu_dai_name = "ux500-msp-i2s.1",
35
- .codec_dai_name = "ab8500-codec-dai.0",
36
- .platform_name = "ux500-msp-i2s.1",
37
- .codec_name = "ab8500-codec.0",
3841 .init = mop500_ab8500_machine_init,
3942 .ops = mop500_ab8500_ops,
43
+ SND_SOC_DAILINK_REG(link1),
4044 },
4145 {
4246 .name = "ab8500_1",
4347 .stream_name = "ab8500_1",
44
- .cpu_dai_name = "ux500-msp-i2s.3",
45
- .codec_dai_name = "ab8500-codec-dai.1",
46
- .platform_name = "ux500-msp-i2s.3",
47
- .codec_name = "ab8500-codec.0",
4848 .init = NULL,
4949 .ops = mop500_ab8500_ops,
50
+ SND_SOC_DAILINK_REG(link2),
5051 },
5152 };
5253
....@@ -62,10 +63,11 @@
6263 {
6364 int i;
6465
65
- for (i = 0; i < 2; i++) {
66
- of_node_put(mop500_dai_links[i].cpu_of_node);
67
- of_node_put(mop500_dai_links[i].codec_of_node);
68
- }
66
+ for (i = 0; i < 2; i++)
67
+ of_node_put(mop500_dai_links[i].cpus->of_node);
68
+
69
+ /* Both links use the same codec, which is refcounted only once */
70
+ of_node_put(mop500_dai_links[0].codecs->of_node);
6971 }
7072
7173 static int mop500_of_probe(struct platform_device *pdev,
....@@ -80,17 +82,19 @@
8082
8183 if (!(msp_np[0] && msp_np[1] && codec_np)) {
8284 dev_err(&pdev->dev, "Phandle missing or invalid\n");
83
- mop500_of_node_put();
85
+ for (i = 0; i < 2; i++)
86
+ of_node_put(msp_np[i]);
87
+ of_node_put(codec_np);
8488 return -EINVAL;
8589 }
8690
8791 for (i = 0; i < 2; i++) {
88
- mop500_dai_links[i].cpu_of_node = msp_np[i];
89
- mop500_dai_links[i].cpu_dai_name = NULL;
90
- mop500_dai_links[i].platform_of_node = msp_np[i];
91
- mop500_dai_links[i].platform_name = NULL;
92
- mop500_dai_links[i].codec_of_node = codec_np;
93
- mop500_dai_links[i].codec_name = NULL;
92
+ mop500_dai_links[i].cpus->of_node = msp_np[i];
93
+ mop500_dai_links[i].cpus->dai_name = NULL;
94
+ mop500_dai_links[i].platforms->of_node = msp_np[i];
95
+ mop500_dai_links[i].platforms->name = NULL;
96
+ mop500_dai_links[i].codecs->of_node = codec_np;
97
+ mop500_dai_links[i].codecs->name = NULL;
9498 }
9599
96100 snd_soc_of_parse_card_name(&mop500_card, "stericsson,card-name");