Lines Matching +full:data +full:- +full:rates

1 // SPDX-License-Identifier: GPL-2.0+
2 // Copyright 2018-2021 NXP
5 #include <linux/clk-provider.h>
19 #include "imx-pcm.h"
45 struct clk *p = rpmsg->mclk, *pll = NULL, *npll = NULL; in fsl_rpmsg_hw_params()
50 while (p && rpmsg->pll8k && rpmsg->pll11k) { in fsl_rpmsg_hw_params()
53 if (clk_is_match(pp, rpmsg->pll8k) || in fsl_rpmsg_hw_params()
54 clk_is_match(pp, rpmsg->pll11k)) { in fsl_rpmsg_hw_params()
63 npll = (do_div(rate, 8000) ? rpmsg->pll11k : rpmsg->pll8k); in fsl_rpmsg_hw_params()
67 dev_warn(dai->dev, "failed to set parent %s: %d\n", in fsl_rpmsg_hw_params()
72 if (!(rpmsg->mclk_streams & BIT(substream->stream))) { in fsl_rpmsg_hw_params()
73 ret = clk_prepare_enable(rpmsg->mclk); in fsl_rpmsg_hw_params()
75 dev_err(dai->dev, "failed to enable mclk: %d\n", ret); in fsl_rpmsg_hw_params()
79 rpmsg->mclk_streams |= BIT(substream->stream); in fsl_rpmsg_hw_params()
90 if (rpmsg->mclk_streams & BIT(substream->stream)) { in fsl_rpmsg_hw_free()
91 clk_disable_unprepare(rpmsg->mclk); in fsl_rpmsg_hw_free()
92 rpmsg->mclk_streams &= ~BIT(substream->stream); in fsl_rpmsg_hw_free()
103 ret = snd_pcm_hw_constraint_list(substream->runtime, 0, in fsl_rpmsg_startup()
118 .stream_name = "CPU-Playback",
121 .rates = SNDRV_PCM_RATE_KNOT,
125 .stream_name = "CPU-Capture",
128 .rates = SNDRV_PCM_RATE_KNOT,
138 .name = "fsl-rpmsg",
143 .rates = SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000 |
149 .rates = SNDRV_PCM_RATE_KNOT,
156 .rates = SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 |
165 .rates = SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 |
174 .rates = SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_32000 |
181 { .compatible = "fsl,imx7ulp-rpmsg-audio", .data = &imx7ulp_data},
182 { .compatible = "fsl,imx8mm-rpmsg-audio", .data = &imx8mm_data},
183 { .compatible = "fsl,imx8mn-rpmsg-audio", .data = &imx8mn_data},
184 { .compatible = "fsl,imx8mp-rpmsg-audio", .data = &imx8mp_data},
185 { .compatible = "fsl,imx8ulp-rpmsg-audio", .data = &imx7ulp_data},
186 { .compatible = "fsl,imx93-rpmsg-audio", .data = &imx93_data},
193 struct device_node *np = pdev->dev.of_node; in fsl_rpmsg_probe()
197 rpmsg = devm_kzalloc(&pdev->dev, sizeof(struct fsl_rpmsg), GFP_KERNEL); in fsl_rpmsg_probe()
199 return -ENOMEM; in fsl_rpmsg_probe()
201 rpmsg->soc_data = of_device_get_match_data(&pdev->dev); in fsl_rpmsg_probe()
203 fsl_rpmsg_dai.playback.rates = rpmsg->soc_data->rates; in fsl_rpmsg_probe()
204 fsl_rpmsg_dai.capture.rates = rpmsg->soc_data->rates; in fsl_rpmsg_probe()
205 fsl_rpmsg_dai.playback.formats = rpmsg->soc_data->formats; in fsl_rpmsg_probe()
206 fsl_rpmsg_dai.capture.formats = rpmsg->soc_data->formats; in fsl_rpmsg_probe()
208 if (of_property_read_bool(np, "fsl,enable-lpa")) { in fsl_rpmsg_probe()
209 rpmsg->enable_lpa = 1; in fsl_rpmsg_probe()
210 rpmsg->buffer_size = LPA_LARGE_BUFFER_SIZE; in fsl_rpmsg_probe()
212 rpmsg->buffer_size = IMX_DEFAULT_DMABUF_SIZE; in fsl_rpmsg_probe()
216 rpmsg->ipg = devm_clk_get_optional(&pdev->dev, "ipg"); in fsl_rpmsg_probe()
217 if (IS_ERR(rpmsg->ipg)) in fsl_rpmsg_probe()
218 return PTR_ERR(rpmsg->ipg); in fsl_rpmsg_probe()
220 rpmsg->mclk = devm_clk_get_optional(&pdev->dev, "mclk"); in fsl_rpmsg_probe()
221 if (IS_ERR(rpmsg->mclk)) in fsl_rpmsg_probe()
222 return PTR_ERR(rpmsg->mclk); in fsl_rpmsg_probe()
224 rpmsg->dma = devm_clk_get_optional(&pdev->dev, "dma"); in fsl_rpmsg_probe()
225 if (IS_ERR(rpmsg->dma)) in fsl_rpmsg_probe()
226 return PTR_ERR(rpmsg->dma); in fsl_rpmsg_probe()
228 rpmsg->pll8k = devm_clk_get_optional(&pdev->dev, "pll8k"); in fsl_rpmsg_probe()
229 if (IS_ERR(rpmsg->pll8k)) in fsl_rpmsg_probe()
230 return PTR_ERR(rpmsg->pll8k); in fsl_rpmsg_probe()
232 rpmsg->pll11k = devm_clk_get_optional(&pdev->dev, "pll11k"); in fsl_rpmsg_probe()
233 if (IS_ERR(rpmsg->pll11k)) in fsl_rpmsg_probe()
234 return PTR_ERR(rpmsg->pll11k); in fsl_rpmsg_probe()
237 pm_runtime_enable(&pdev->dev); in fsl_rpmsg_probe()
239 ret = devm_snd_soc_register_component(&pdev->dev, &fsl_component, in fsl_rpmsg_probe()
244 rpmsg->card_pdev = platform_device_register_data(&pdev->dev, in fsl_rpmsg_probe()
245 "imx-audio-rpmsg", in fsl_rpmsg_probe()
249 if (IS_ERR(rpmsg->card_pdev)) { in fsl_rpmsg_probe()
250 dev_err(&pdev->dev, "failed to register rpmsg card\n"); in fsl_rpmsg_probe()
251 ret = PTR_ERR(rpmsg->card_pdev); in fsl_rpmsg_probe()
258 pm_runtime_disable(&pdev->dev); in fsl_rpmsg_probe()
266 pm_runtime_disable(&pdev->dev); in fsl_rpmsg_remove()
268 if (rpmsg->card_pdev) in fsl_rpmsg_remove()
269 platform_device_unregister(rpmsg->card_pdev); in fsl_rpmsg_remove()
278 ret = clk_prepare_enable(rpmsg->ipg); in fsl_rpmsg_runtime_resume()
284 ret = clk_prepare_enable(rpmsg->dma); in fsl_rpmsg_runtime_resume()
293 clk_disable_unprepare(rpmsg->ipg); in fsl_rpmsg_runtime_resume()
302 clk_disable_unprepare(rpmsg->dma); in fsl_rpmsg_runtime_suspend()
303 clk_disable_unprepare(rpmsg->ipg); in fsl_rpmsg_runtime_suspend()