forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-01-31 f70575805708cabdedea7498aaa3f710fde4d920
kernel/sound/soc/fsl/imx-es8328.c
....@@ -1,14 +1,7 @@
1
-/*
2
- * Copyright 2012 Freescale Semiconductor, Inc.
3
- * Copyright 2012 Linaro Ltd.
4
- *
5
- * The code contained herein is licensed under the GNU General Public
6
- * License. You may obtain a copy of the GNU General Public License
7
- * Version 2 or later at the following locations:
8
- *
9
- * http://www.opensource.org/licenses/gpl-license.html
10
- * http://www.gnu.org/copyleft/gpl.html
11
- */
1
+// SPDX-License-Identifier: GPL-2.0+
2
+//
3
+// Copyright 2012 Freescale Semiconductor, Inc.
4
+// Copyright 2012 Linaro Ltd.
125
136 #include <linux/gpio.h>
147 #include <linux/module.h>
....@@ -81,6 +74,7 @@
8174 struct device_node *ssi_np = NULL, *codec_np = NULL;
8275 struct platform_device *ssi_pdev;
8376 struct imx_es8328_data *data;
77
+ struct snd_soc_dai_link_component *comp;
8478 u32 int_port, ext_port;
8579 int ret;
8680 struct device *dev = &pdev->dev;
....@@ -93,6 +87,7 @@
9387 if (int_port > MUX_PORT_MAX || int_port == 0) {
9488 dev_err(dev, "mux-int-port: hardware only has %d mux ports\n",
9589 MUX_PORT_MAX);
90
+ ret = -EINVAL;
9691 goto fail;
9792 }
9893
....@@ -151,19 +146,33 @@
151146 data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL);
152147 if (!data) {
153148 ret = -ENOMEM;
154
- goto fail;
149
+ goto put_device;
150
+ }
151
+
152
+ comp = devm_kzalloc(dev, 3 * sizeof(*comp), GFP_KERNEL);
153
+ if (!comp) {
154
+ ret = -ENOMEM;
155
+ goto put_device;
155156 }
156157
157158 data->dev = dev;
158159
159160 data->jack_gpio = of_get_named_gpio(pdev->dev.of_node, "jack-gpio", 0);
160161
162
+ data->dai.cpus = &comp[0];
163
+ data->dai.codecs = &comp[1];
164
+ data->dai.platforms = &comp[2];
165
+
166
+ data->dai.num_cpus = 1;
167
+ data->dai.num_codecs = 1;
168
+ data->dai.num_platforms = 1;
169
+
161170 data->dai.name = "hifi";
162171 data->dai.stream_name = "hifi";
163
- data->dai.codec_dai_name = "es8328-hifi-analog";
164
- data->dai.codec_of_node = codec_np;
165
- data->dai.cpu_of_node = ssi_np;
166
- data->dai.platform_of_node = ssi_np;
172
+ data->dai.codecs->dai_name = "es8328-hifi-analog";
173
+ data->dai.codecs->of_node = codec_np;
174
+ data->dai.cpus->of_node = ssi_np;
175
+ data->dai.platforms->of_node = ssi_np;
167176 data->dai.init = &imx_es8328_dai_init;
168177 data->dai.dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |
169178 SND_SOC_DAIFMT_CBM_CFM;
....@@ -174,12 +183,12 @@
174183 ret = snd_soc_of_parse_card_name(&data->card, "model");
175184 if (ret) {
176185 dev_err(dev, "Unable to parse card name\n");
177
- goto fail;
186
+ goto put_device;
178187 }
179188 ret = snd_soc_of_parse_audio_routing(&data->card, "audio-routing");
180189 if (ret) {
181190 dev_err(dev, "Unable to parse routing: %d\n", ret);
182
- goto fail;
191
+ goto put_device;
183192 }
184193 data->card.num_links = 1;
185194 data->card.owner = THIS_MODULE;
....@@ -188,10 +197,12 @@
188197 ret = snd_soc_register_card(&data->card);
189198 if (ret) {
190199 dev_err(dev, "Unable to register: %d\n", ret);
191
- goto fail;
200
+ goto put_device;
192201 }
193202
194203 platform_set_drvdata(pdev, data);
204
+put_device:
205
+ put_device(&ssi_pdev->dev);
195206 fail:
196207 of_node_put(ssi_np);
197208 of_node_put(codec_np);