| .. | .. |
|---|
| 1 | | -/* |
|---|
| 2 | | - * Littlemill audio support |
|---|
| 3 | | - * |
|---|
| 4 | | - * Copyright 2011 Wolfson Microelectronics |
|---|
| 5 | | - * |
|---|
| 6 | | - * This program is free software; you can redistribute it and/or modify it |
|---|
| 7 | | - * under the terms of the GNU General Public License as published by the |
|---|
| 8 | | - * Free Software Foundation; either version 2 of the License, or (at your |
|---|
| 9 | | - * option) any later version. |
|---|
| 10 | | - */ |
|---|
| 1 | +// SPDX-License-Identifier: GPL-2.0+ |
|---|
| 2 | +// |
|---|
| 3 | +// Littlemill audio support |
|---|
| 4 | +// |
|---|
| 5 | +// Copyright 2011 Wolfson Microelectronics |
|---|
| 11 | 6 | |
|---|
| 12 | 7 | #include <sound/soc.h> |
|---|
| 13 | 8 | #include <sound/soc-dapm.h> |
|---|
| .. | .. |
|---|
| 27 | 22 | struct snd_soc_dai *aif1_dai; |
|---|
| 28 | 23 | int ret; |
|---|
| 29 | 24 | |
|---|
| 30 | | - rtd = snd_soc_get_pcm_runtime(card, card->dai_link[0].name); |
|---|
| 31 | | - aif1_dai = rtd->codec_dai; |
|---|
| 25 | + rtd = snd_soc_get_pcm_runtime(card, &card->dai_link[0]); |
|---|
| 26 | + aif1_dai = asoc_rtd_to_codec(rtd, 0); |
|---|
| 32 | 27 | |
|---|
| 33 | 28 | if (dapm->dev != aif1_dai->dev) |
|---|
| 34 | 29 | return 0; |
|---|
| .. | .. |
|---|
| 74 | 69 | struct snd_soc_dai *aif1_dai; |
|---|
| 75 | 70 | int ret; |
|---|
| 76 | 71 | |
|---|
| 77 | | - rtd = snd_soc_get_pcm_runtime(card, card->dai_link[0].name); |
|---|
| 78 | | - aif1_dai = rtd->codec_dai; |
|---|
| 72 | + rtd = snd_soc_get_pcm_runtime(card, &card->dai_link[0]); |
|---|
| 73 | + aif1_dai = asoc_rtd_to_codec(rtd, 0); |
|---|
| 79 | 74 | |
|---|
| 80 | 75 | if (dapm->dev != aif1_dai->dev) |
|---|
| 81 | 76 | return 0; |
|---|
| .. | .. |
|---|
| 109 | 104 | static int littlemill_hw_params(struct snd_pcm_substream *substream, |
|---|
| 110 | 105 | struct snd_pcm_hw_params *params) |
|---|
| 111 | 106 | { |
|---|
| 112 | | - struct snd_soc_pcm_runtime *rtd = substream->private_data; |
|---|
| 113 | | - struct snd_soc_dai *codec_dai = rtd->codec_dai; |
|---|
| 107 | + struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream); |
|---|
| 108 | + struct snd_soc_dai *codec_dai = asoc_rtd_to_codec(rtd, 0); |
|---|
| 114 | 109 | int ret; |
|---|
| 115 | 110 | |
|---|
| 116 | 111 | sample_rate = params_rate(params); |
|---|
| .. | .. |
|---|
| 147 | 142 | .channels_max = 2, |
|---|
| 148 | 143 | }; |
|---|
| 149 | 144 | |
|---|
| 145 | +SND_SOC_DAILINK_DEFS(cpu, |
|---|
| 146 | + DAILINK_COMP_ARRAY(COMP_CPU("samsung-i2s.0")), |
|---|
| 147 | + DAILINK_COMP_ARRAY(COMP_CODEC("wm8994-codec", "wm8994-aif1")), |
|---|
| 148 | + DAILINK_COMP_ARRAY(COMP_PLATFORM("samsung-i2s.0"))); |
|---|
| 149 | + |
|---|
| 150 | +SND_SOC_DAILINK_DEFS(baseband, |
|---|
| 151 | + DAILINK_COMP_ARRAY(COMP_CPU("wm8994-aif2")), |
|---|
| 152 | + DAILINK_COMP_ARRAY(COMP_CODEC("wm1250-ev1.1-0027", |
|---|
| 153 | + "wm1250-ev1"))); |
|---|
| 154 | + |
|---|
| 150 | 155 | static struct snd_soc_dai_link littlemill_dai[] = { |
|---|
| 151 | 156 | { |
|---|
| 152 | 157 | .name = "CPU", |
|---|
| 153 | 158 | .stream_name = "CPU", |
|---|
| 154 | | - .cpu_dai_name = "samsung-i2s.0", |
|---|
| 155 | | - .codec_dai_name = "wm8994-aif1", |
|---|
| 156 | | - .platform_name = "samsung-i2s.0", |
|---|
| 157 | | - .codec_name = "wm8994-codec", |
|---|
| 158 | 159 | .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |
|---|
| 159 | 160 | | SND_SOC_DAIFMT_CBM_CFM, |
|---|
| 160 | 161 | .ops = &littlemill_ops, |
|---|
| 162 | + SND_SOC_DAILINK_REG(cpu), |
|---|
| 161 | 163 | }, |
|---|
| 162 | 164 | { |
|---|
| 163 | 165 | .name = "Baseband", |
|---|
| 164 | 166 | .stream_name = "Baseband", |
|---|
| 165 | | - .cpu_dai_name = "wm8994-aif2", |
|---|
| 166 | | - .codec_dai_name = "wm1250-ev1", |
|---|
| 167 | | - .codec_name = "wm1250-ev1.1-0027", |
|---|
| 168 | 167 | .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |
|---|
| 169 | 168 | | SND_SOC_DAIFMT_CBM_CFM, |
|---|
| 170 | 169 | .ignore_suspend = 1, |
|---|
| 171 | 170 | .params = &baseband_params, |
|---|
| 171 | + SND_SOC_DAILINK_REG(baseband), |
|---|
| 172 | 172 | }, |
|---|
| 173 | 173 | }; |
|---|
| 174 | 174 | |
|---|
| .. | .. |
|---|
| 180 | 180 | struct snd_soc_dai *aif2_dai; |
|---|
| 181 | 181 | int ret; |
|---|
| 182 | 182 | |
|---|
| 183 | | - rtd = snd_soc_get_pcm_runtime(card, card->dai_link[1].name); |
|---|
| 184 | | - aif2_dai = rtd->cpu_dai; |
|---|
| 183 | + rtd = snd_soc_get_pcm_runtime(card, &card->dai_link[1]); |
|---|
| 184 | + aif2_dai = asoc_rtd_to_cpu(rtd, 0); |
|---|
| 185 | 185 | |
|---|
| 186 | 186 | switch (event) { |
|---|
| 187 | 187 | case SND_SOC_DAPM_PRE_PMU: |
|---|
| .. | .. |
|---|
| 263 | 263 | struct snd_soc_dai *aif2_dai; |
|---|
| 264 | 264 | int ret; |
|---|
| 265 | 265 | |
|---|
| 266 | | - rtd = snd_soc_get_pcm_runtime(card, card->dai_link[0].name); |
|---|
| 267 | | - component = rtd->codec_dai->component; |
|---|
| 268 | | - aif1_dai = rtd->codec_dai; |
|---|
| 266 | + rtd = snd_soc_get_pcm_runtime(card, &card->dai_link[0]); |
|---|
| 267 | + component = asoc_rtd_to_codec(rtd, 0)->component; |
|---|
| 268 | + aif1_dai = asoc_rtd_to_codec(rtd, 0); |
|---|
| 269 | 269 | |
|---|
| 270 | | - rtd = snd_soc_get_pcm_runtime(card, card->dai_link[1].name); |
|---|
| 271 | | - aif2_dai = rtd->cpu_dai; |
|---|
| 270 | + rtd = snd_soc_get_pcm_runtime(card, &card->dai_link[1]); |
|---|
| 271 | + aif2_dai = asoc_rtd_to_cpu(rtd, 0); |
|---|
| 272 | 272 | |
|---|
| 273 | 273 | ret = snd_soc_dai_set_sysclk(aif1_dai, WM8994_SYSCLK_MCLK2, |
|---|
| 274 | 274 | 32768, SND_SOC_CLOCK_IN); |
|---|
| .. | .. |
|---|
| 326 | 326 | |
|---|
| 327 | 327 | ret = devm_snd_soc_register_card(&pdev->dev, card); |
|---|
| 328 | 328 | if (ret) |
|---|
| 329 | | - dev_err(&pdev->dev, "snd_soc_register_card() failed: %d\n", |
|---|
| 330 | | - ret); |
|---|
| 329 | + dev_err_probe(&pdev->dev, ret, "snd_soc_register_card() failed\n"); |
|---|
| 331 | 330 | |
|---|
| 332 | 331 | return ret; |
|---|
| 333 | 332 | } |
|---|