forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-01-31 f70575805708cabdedea7498aaa3f710fde4d920
kernel/sound/soc/fsl/imx-sgtl5000.c
....@@ -30,7 +30,7 @@
3030 struct device *dev = rtd->card->dev;
3131 int ret;
3232
33
- ret = snd_soc_dai_set_sysclk(rtd->codec_dai, SGTL5000_SYSCLK,
33
+ ret = snd_soc_dai_set_sysclk(asoc_rtd_to_codec(rtd, 0), SGTL5000_SYSCLK,
3434 data->clk_frequency, SND_SOC_CLOCK_IN);
3535 if (ret) {
3636 dev_err(dev, "could not set codec driver clock params\n");
....@@ -55,6 +55,7 @@
5555 struct platform_device *ssi_pdev;
5656 struct i2c_client *codec_dev;
5757 struct imx_sgtl5000_data *data = NULL;
58
+ struct snd_soc_dai_link_component *comp;
5859 int int_port, ext_port;
5960 int ret;
6061
....@@ -104,14 +105,14 @@
104105
105106 ssi_pdev = of_find_device_by_node(ssi_np);
106107 if (!ssi_pdev) {
107
- dev_err(&pdev->dev, "failed to find SSI platform device\n");
108
+ dev_dbg(&pdev->dev, "failed to find SSI platform device\n");
108109 ret = -EPROBE_DEFER;
109110 goto fail;
110111 }
111112 put_device(&ssi_pdev->dev);
112113 codec_dev = of_find_i2c_device_by_node(codec_np);
113114 if (!codec_dev) {
114
- dev_err(&pdev->dev, "failed to find codec platform device\n");
115
+ dev_dbg(&pdev->dev, "failed to find codec platform device\n");
115116 ret = -EPROBE_DEFER;
116117 goto fail;
117118 }
....@@ -119,23 +120,37 @@
119120 data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL);
120121 if (!data) {
121122 ret = -ENOMEM;
122
- goto fail;
123
+ goto put_device;
124
+ }
125
+
126
+ comp = devm_kzalloc(&pdev->dev, 3 * sizeof(*comp), GFP_KERNEL);
127
+ if (!comp) {
128
+ ret = -ENOMEM;
129
+ goto put_device;
123130 }
124131
125132 data->codec_clk = clk_get(&codec_dev->dev, NULL);
126133 if (IS_ERR(data->codec_clk)) {
127134 ret = PTR_ERR(data->codec_clk);
128
- goto fail;
135
+ goto put_device;
129136 }
130137
131138 data->clk_frequency = clk_get_rate(data->codec_clk);
132139
140
+ data->dai.cpus = &comp[0];
141
+ data->dai.codecs = &comp[1];
142
+ data->dai.platforms = &comp[2];
143
+
144
+ data->dai.num_cpus = 1;
145
+ data->dai.num_codecs = 1;
146
+ data->dai.num_platforms = 1;
147
+
133148 data->dai.name = "HiFi";
134149 data->dai.stream_name = "HiFi";
135
- data->dai.codec_dai_name = "sgtl5000";
136
- data->dai.codec_of_node = codec_np;
137
- data->dai.cpu_of_node = ssi_np;
138
- data->dai.platform_of_node = ssi_np;
150
+ data->dai.codecs->dai_name = "sgtl5000";
151
+ data->dai.codecs->of_node = codec_np;
152
+ data->dai.cpus->of_node = ssi_np;
153
+ data->dai.platforms->of_node = ssi_np;
139154 data->dai.init = &imx_sgtl5000_dai_init;
140155 data->dai.dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |
141156 SND_SOC_DAIFMT_CBM_CFM;
....@@ -143,10 +158,10 @@
143158 data->card.dev = &pdev->dev;
144159 ret = snd_soc_of_parse_card_name(&data->card, "model");
145160 if (ret)
146
- goto fail;
161
+ goto put_device;
147162 ret = snd_soc_of_parse_audio_routing(&data->card, "audio-routing");
148163 if (ret)
149
- goto fail;
164
+ goto put_device;
150165 data->card.num_links = 1;
151166 data->card.owner = THIS_MODULE;
152167 data->card.dai_link = &data->dai;
....@@ -158,8 +173,10 @@
158173
159174 ret = devm_snd_soc_register_card(&pdev->dev, &data->card);
160175 if (ret) {
161
- dev_err(&pdev->dev, "snd_soc_register_card failed (%d)\n", ret);
162
- goto fail;
176
+ if (ret != -EPROBE_DEFER)
177
+ dev_err(&pdev->dev, "snd_soc_register_card failed (%d)\n",
178
+ ret);
179
+ goto put_device;
163180 }
164181
165182 of_node_put(ssi_np);
....@@ -167,6 +184,8 @@
167184
168185 return 0;
169186
187
+put_device:
188
+ put_device(&codec_dev->dev);
170189 fail:
171190 if (data && !IS_ERR(data->codec_clk))
172191 clk_put(data->codec_clk);