Lines Matching refs:audio

94 static void zynqmp_dp_audio_write(struct zynqmp_dpsub_audio *audio, int reg,  in zynqmp_dp_audio_write()  argument
97 writel(val, audio->base + reg); in zynqmp_dp_audio_write()
107 struct zynqmp_dpsub_audio *audio = dpsub->audio; in dp_dai_hw_params() local
118 guard(mutex)(&audio->enable_lock); in dp_dai_hw_params()
120 if (audio->enabled_streams && audio->current_rate != sample_rate) { in dp_dai_hw_params()
126 if (audio->enabled_streams > 0) { in dp_dai_hw_params()
128 audio->enabled_streams++; in dp_dai_hw_params()
132 audio->current_rate = sample_rate; in dp_dai_hw_params()
157 zynqmp_dp_audio_write(audio, ZYNQMP_DISP_AUD_MIXER_VOLUME, in dp_dai_hw_params()
158 audio->volumes[0] | (audio->volumes[1] << 16)); in dp_dai_hw_params()
161 zynqmp_dp_audio_write(audio, ZYNQMP_DISP_AUD_SOFT_RESET, 0); in dp_dai_hw_params()
183 zynqmp_dp_audio_write(audio, ZYNQMP_DISP_AUD_CH_STATUS(i), v); in dp_dai_hw_params()
188 audio->enabled_streams++; in dp_dai_hw_params()
199 struct zynqmp_dpsub_audio *audio = dpsub->audio; in dp_dai_hw_free() local
201 guard(mutex)(&audio->enable_lock); in dp_dai_hw_free()
204 if (audio->enabled_streams > 1) { in dp_dai_hw_free()
205 audio->enabled_streams--; in dp_dai_hw_free()
225 audio->current_rate = 0; in dp_dai_hw_free()
226 audio->enabled_streams--; in dp_dai_hw_free()
266 struct zynqmp_dpsub_audio *audio = dpsub->audio; in zynqmp_dp_dai_read() local
268 return audio->volumes[reg]; in zynqmp_dp_dai_read()
275 struct zynqmp_dpsub_audio *audio = dpsub->audio; in zynqmp_dp_dai_write() local
277 guard(mutex)(&audio->enable_lock); in zynqmp_dp_dai_write()
279 audio->volumes[reg] = val; in zynqmp_dp_dai_write()
281 if (audio->enabled_streams) in zynqmp_dp_dai_write()
282 zynqmp_dp_audio_write(audio, ZYNQMP_DISP_AUD_MIXER_VOLUME, in zynqmp_dp_dai_write()
283 audio->volumes[0] | in zynqmp_dp_dai_write()
284 (audio->volumes[1] << 16)); in zynqmp_dp_dai_write()
303 struct zynqmp_dpsub_audio *audio; in zynqmp_audio_init() local
311 audio = devm_kzalloc(dev, sizeof(*audio), GFP_KERNEL); in zynqmp_audio_init()
312 if (!audio) in zynqmp_audio_init()
315 dpsub->audio = audio; in zynqmp_audio_init()
317 mutex_init(&audio->enable_lock); in zynqmp_audio_init()
320 audio->volumes[0] = 0x2000; in zynqmp_audio_init()
321 audio->volumes[1] = 0x2000; in zynqmp_audio_init()
323 audio->dai_name = devm_kasprintf(dev, GFP_KERNEL, in zynqmp_audio_init()
325 if (!audio->dai_name) in zynqmp_audio_init()
329 audio->link_names[i] = devm_kasprintf(dev, GFP_KERNEL, in zynqmp_audio_init()
331 audio->pcm_names[i] = devm_kasprintf(dev, GFP_KERNEL, in zynqmp_audio_init()
333 if (!audio->link_names[i] || !audio->pcm_names[i]) in zynqmp_audio_init()
337 audio->base = devm_platform_ioremap_resource_byname(pdev, "aud"); in zynqmp_audio_init()
338 if (IS_ERR(audio->base)) in zynqmp_audio_init()
339 return PTR_ERR(audio->base); in zynqmp_audio_init()
343 audio->dai_driver = (struct snd_soc_dai_driver) { in zynqmp_audio_init()
344 .name = audio->dai_name, in zynqmp_audio_init()
355 &audio->dai_driver, 1); in zynqmp_audio_init()
365 &audio->pcm_configs[i]; in zynqmp_audio_init()
368 .name = audio->pcm_names[i], in zynqmp_audio_init()
384 card = &audio->card; in zynqmp_audio_init()
391 card->dai_link = audio->links; in zynqmp_audio_init()
398 link->name = audio->link_names[i]; in zynqmp_audio_init()
399 link->stream_name = audio->link_names[i]; in zynqmp_audio_init()
401 link->cpus = &audio->components[i].cpu; in zynqmp_audio_init()
403 link->cpus[0].dai_name = audio->dai_name; in zynqmp_audio_init()
408 link->platforms = &audio->components[i].platform; in zynqmp_audio_init()
410 link->platforms[0].name = audio->pcm_names[i]; in zynqmp_audio_init()
428 devm_kfree(dev, audio); in zynqmp_audio_init()
429 dpsub->audio = NULL; in zynqmp_audio_init()
439 struct zynqmp_dpsub_audio *audio = dpsub->audio; in zynqmp_audio_uninit() local
441 if (!audio) in zynqmp_audio_uninit()
447 mutex_destroy(&audio->enable_lock); in zynqmp_audio_uninit()