// SPDX-License-Identifier: GPL-2.0+ // // DSP Audio platform driver // // Copyright 2018 NXP #include #include #include #include #include #include #include "fsl_dsp_cpu.h" static int dsp_audio_startup(struct snd_pcm_substream *substream, struct snd_soc_dai *cpu_dai) { return 0; } static void dsp_audio_shutdown(struct snd_pcm_substream *substream, struct snd_soc_dai *cpu_dai) { } static const struct snd_soc_dai_ops dsp_audio_dai_ops = { .startup = dsp_audio_startup, .shutdown = dsp_audio_shutdown, }; static struct snd_soc_dai_driver dsp_audio_dai = { .name = "dsp-audio-cpu-dai", .compress_new = snd_soc_new_compress, .ops = &dsp_audio_dai_ops, .playback = { .stream_name = "Compress Playback", .channels_min = 1, }, }; static const struct snd_soc_component_driver audio_dsp_component = { .name = "audio-dsp", }; static int dsp_audio_probe(struct platform_device *pdev) { struct fsl_dsp_audio *dsp_audio; int ret; dsp_audio = devm_kzalloc(&pdev->dev, sizeof(*dsp_audio), GFP_KERNEL); if (dsp_audio == NULL) return -ENOMEM; dev_dbg(&pdev->dev, "probing DSP device....\n"); /* intialise sof device */ dev_set_drvdata(&pdev->dev, dsp_audio); pm_runtime_enable(&pdev->dev); /* now register audio DSP platform driver */ ret = snd_soc_register_component(&pdev->dev, &audio_dsp_component, &dsp_audio_dai, 1); if (ret < 0) { dev_err(&pdev->dev, "error: failed to register DSP DAI driver %d\n", ret); goto err; } return 0; err: return ret; } static int dsp_audio_remove(struct platform_device *pdev) { snd_soc_unregister_component(&pdev->dev); return 0; } static const struct of_device_id dsp_audio_ids[] = { { .compatible = "fsl,dsp-audio"}, { /* sentinel */ } }; MODULE_DEVICE_TABLE(of, dsp_audio_ids); static struct platform_driver dsp_audio_driver = { .driver = { .name = "dsp-audio", .of_match_table = dsp_audio_ids, }, .probe = dsp_audio_probe, .remove = dsp_audio_remove, }; module_platform_driver(dsp_audio_driver); MODULE_LICENSE("GPL v2");