Lines Matching +full:audio +full:- +full:cpu
1 // SPDX-License-Identifier: GPL-2.0
33 struct snow_priv *priv = snd_soc_card_get_drvdata(rtd->card);
36 long int freq = -EINVAL;
41 dev_err(rtd->card->dev, "Invalid bit-width: %d\n", bitwidth);
46 dev_err(rtd->card->dev, "Unsupported bit-width: %d\n", bitwidth);
47 return -EINVAL;
72 return -EINVAL;
79 if ((pll_rate[i] - rclk * psr) <= 2) {
86 dev_err(rtd->card->dev, "Unsupported RCLK rate: %lu\n", rclk);
87 return -EINVAL;
90 ret = clk_set_rate(priv->clk_i2s_bus, freq);
92 dev_err(rtd->card->dev, "I2S bus clock rate set failed\n");
108 rtd = snd_soc_get_pcm_runtime(card, &card->dai_link[0]);
110 /* In the multi-codec case codec_dais 0 is MAX98095 and 1 is HDMI. */
119 .name = "Snow-I2S",
126 struct device *dev = &pdev->dev;
128 struct device_node *cpu, *codec;
135 return -ENOMEM;
137 link = &priv->dai_link;
139 link->dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |
142 link->name = "Primary";
143 link->stream_name = link->name;
145 link->cpus = links_cpus;
146 link->num_cpus = ARRAY_SIZE(links_cpus);
147 link->codecs = links_codecs;
148 link->num_codecs = ARRAY_SIZE(links_codecs);
149 link->platforms = links_platforms;
150 link->num_platforms = ARRAY_SIZE(links_platforms);
152 card->dai_link = link;
153 card->num_links = 1;
154 card->dev = dev;
157 cpu = of_get_child_by_name(dev->of_node, "cpu");
159 if (cpu) {
160 link->ops = &snow_card_ops;
162 link->cpus->of_node = of_parse_phandle(cpu, "sound-dai", 0);
163 of_node_put(cpu);
165 if (!link->cpus->of_node) {
166 dev_err(dev, "Failed parsing cpu/sound-dai property\n");
167 return -EINVAL;
170 codec = of_get_child_by_name(dev->of_node, "codec");
175 of_node_put(link->cpus->of_node);
180 priv->clk_i2s_bus = of_clk_get_by_name(link->cpus->of_node,
182 if (IS_ERR(priv->clk_i2s_bus)) {
184 of_node_put(link->cpus->of_node);
185 return PTR_ERR(priv->clk_i2s_bus);
188 link->codecs->dai_name = "HiFi";
190 link->cpus->of_node = of_parse_phandle(dev->of_node,
191 "samsung,i2s-controller", 0);
192 if (!link->cpus->of_node) {
193 dev_err(dev, "i2s-controller property parse error\n");
194 return -EINVAL;
197 link->codecs->of_node = of_parse_phandle(dev->of_node,
198 "samsung,audio-codec", 0);
199 if (!link->codecs->of_node) {
200 of_node_put(link->cpus->of_node);
201 dev_err(dev, "audio-codec property parse error\n");
202 return -EINVAL;
206 link->platforms->of_node = link->cpus->of_node;
208 /* Update card-name if provided through DT, else use default name */
215 return dev_err_probe(&pdev->dev, ret,
224 struct snd_soc_dai_link *link = &priv->dai_link;
226 of_node_put(link->cpus->of_node);
227 of_node_put(link->codecs->of_node);
230 clk_put(priv->clk_i2s_bus);
234 { .compatible = "google,snow-audio-max98090", },
235 { .compatible = "google,snow-audio-max98091", },
236 { .compatible = "google,snow-audio-max98095", },
243 .name = "snow-audio",
253 MODULE_DESCRIPTION("ALSA SoC Audio machine driver for Snow");