.. | .. |
---|
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. |
---|
12 | 5 | |
---|
13 | 6 | #include <linux/gpio.h> |
---|
14 | 7 | #include <linux/module.h> |
---|
.. | .. |
---|
81 | 74 | struct device_node *ssi_np = NULL, *codec_np = NULL; |
---|
82 | 75 | struct platform_device *ssi_pdev; |
---|
83 | 76 | struct imx_es8328_data *data; |
---|
| 77 | + struct snd_soc_dai_link_component *comp; |
---|
84 | 78 | u32 int_port, ext_port; |
---|
85 | 79 | int ret; |
---|
86 | 80 | struct device *dev = &pdev->dev; |
---|
.. | .. |
---|
93 | 87 | if (int_port > MUX_PORT_MAX || int_port == 0) { |
---|
94 | 88 | dev_err(dev, "mux-int-port: hardware only has %d mux ports\n", |
---|
95 | 89 | MUX_PORT_MAX); |
---|
| 90 | + ret = -EINVAL; |
---|
96 | 91 | goto fail; |
---|
97 | 92 | } |
---|
98 | 93 | |
---|
.. | .. |
---|
151 | 146 | data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL); |
---|
152 | 147 | if (!data) { |
---|
153 | 148 | 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; |
---|
155 | 156 | } |
---|
156 | 157 | |
---|
157 | 158 | data->dev = dev; |
---|
158 | 159 | |
---|
159 | 160 | data->jack_gpio = of_get_named_gpio(pdev->dev.of_node, "jack-gpio", 0); |
---|
160 | 161 | |
---|
| 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 | + |
---|
161 | 170 | data->dai.name = "hifi"; |
---|
162 | 171 | 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; |
---|
167 | 176 | data->dai.init = &imx_es8328_dai_init; |
---|
168 | 177 | data->dai.dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | |
---|
169 | 178 | SND_SOC_DAIFMT_CBM_CFM; |
---|
.. | .. |
---|
174 | 183 | ret = snd_soc_of_parse_card_name(&data->card, "model"); |
---|
175 | 184 | if (ret) { |
---|
176 | 185 | dev_err(dev, "Unable to parse card name\n"); |
---|
177 | | - goto fail; |
---|
| 186 | + goto put_device; |
---|
178 | 187 | } |
---|
179 | 188 | ret = snd_soc_of_parse_audio_routing(&data->card, "audio-routing"); |
---|
180 | 189 | if (ret) { |
---|
181 | 190 | dev_err(dev, "Unable to parse routing: %d\n", ret); |
---|
182 | | - goto fail; |
---|
| 191 | + goto put_device; |
---|
183 | 192 | } |
---|
184 | 193 | data->card.num_links = 1; |
---|
185 | 194 | data->card.owner = THIS_MODULE; |
---|
.. | .. |
---|
188 | 197 | ret = snd_soc_register_card(&data->card); |
---|
189 | 198 | if (ret) { |
---|
190 | 199 | dev_err(dev, "Unable to register: %d\n", ret); |
---|
191 | | - goto fail; |
---|
| 200 | + goto put_device; |
---|
192 | 201 | } |
---|
193 | 202 | |
---|
194 | 203 | platform_set_drvdata(pdev, data); |
---|
| 204 | +put_device: |
---|
| 205 | + put_device(&ssi_pdev->dev); |
---|
195 | 206 | fail: |
---|
196 | 207 | of_node_put(ssi_np); |
---|
197 | 208 | of_node_put(codec_np); |
---|