197d3ddd7SFlorian Meier /* 297d3ddd7SFlorian Meier * Driver for the PCM5102A codec 397d3ddd7SFlorian Meier * 497d3ddd7SFlorian Meier * Author: Florian Meier <florian.meier@koalo.de> 597d3ddd7SFlorian Meier * Copyright 2013 697d3ddd7SFlorian Meier * 797d3ddd7SFlorian Meier * This program is free software; you can redistribute it and/or 897d3ddd7SFlorian Meier * modify it under the terms of the GNU General Public License 997d3ddd7SFlorian Meier * version 2 as published by the Free Software Foundation. 1097d3ddd7SFlorian Meier * 1197d3ddd7SFlorian Meier * This program is distributed in the hope that it will be useful, but 1297d3ddd7SFlorian Meier * WITHOUT ANY WARRANTY; without even the implied warranty of 1397d3ddd7SFlorian Meier * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 1497d3ddd7SFlorian Meier * General Public License for more details. 1597d3ddd7SFlorian Meier */ 1697d3ddd7SFlorian Meier 1797d3ddd7SFlorian Meier #include <linux/init.h> 1897d3ddd7SFlorian Meier #include <linux/module.h> 1997d3ddd7SFlorian Meier #include <linux/platform_device.h> 2097d3ddd7SFlorian Meier 2197d3ddd7SFlorian Meier #include <sound/soc.h> 2297d3ddd7SFlorian Meier 2397d3ddd7SFlorian Meier static struct snd_soc_dai_driver pcm5102a_dai = { 2497d3ddd7SFlorian Meier .name = "pcm5102a-hifi", 2597d3ddd7SFlorian Meier .playback = { 2697d3ddd7SFlorian Meier .channels_min = 2, 2797d3ddd7SFlorian Meier .channels_max = 2, 2897d3ddd7SFlorian Meier .rates = SNDRV_PCM_RATE_8000_192000, 2997d3ddd7SFlorian Meier .formats = SNDRV_PCM_FMTBIT_S16_LE | 3097d3ddd7SFlorian Meier SNDRV_PCM_FMTBIT_S24_LE | 3197d3ddd7SFlorian Meier SNDRV_PCM_FMTBIT_S32_LE 3297d3ddd7SFlorian Meier }, 3397d3ddd7SFlorian Meier }; 3497d3ddd7SFlorian Meier 3597d3ddd7SFlorian Meier static struct snd_soc_codec_driver soc_codec_dev_pcm5102a; 3697d3ddd7SFlorian Meier 3797d3ddd7SFlorian Meier static int pcm5102a_probe(struct platform_device *pdev) 3897d3ddd7SFlorian Meier { 3997d3ddd7SFlorian Meier return snd_soc_register_codec(&pdev->dev, &soc_codec_dev_pcm5102a, 4097d3ddd7SFlorian Meier &pcm5102a_dai, 1); 4197d3ddd7SFlorian Meier } 4297d3ddd7SFlorian Meier 4397d3ddd7SFlorian Meier static int pcm5102a_remove(struct platform_device *pdev) 4497d3ddd7SFlorian Meier { 4597d3ddd7SFlorian Meier snd_soc_unregister_codec(&pdev->dev); 4697d3ddd7SFlorian Meier return 0; 4797d3ddd7SFlorian Meier } 4897d3ddd7SFlorian Meier 4997d3ddd7SFlorian Meier static const struct of_device_id pcm5102a_of_match[] = { 5097d3ddd7SFlorian Meier { .compatible = "ti,pcm5102a", }, 5197d3ddd7SFlorian Meier { } 5297d3ddd7SFlorian Meier }; 5397d3ddd7SFlorian Meier MODULE_DEVICE_TABLE(of, pcm5102a_of_match); 5497d3ddd7SFlorian Meier 5597d3ddd7SFlorian Meier static struct platform_driver pcm5102a_codec_driver = { 5697d3ddd7SFlorian Meier .probe = pcm5102a_probe, 5797d3ddd7SFlorian Meier .remove = pcm5102a_remove, 5897d3ddd7SFlorian Meier .driver = { 5997d3ddd7SFlorian Meier .name = "pcm5102a-codec", 6097d3ddd7SFlorian Meier .owner = THIS_MODULE, 6197d3ddd7SFlorian Meier .of_match_table = pcm5102a_of_match, 6297d3ddd7SFlorian Meier }, 6397d3ddd7SFlorian Meier }; 6497d3ddd7SFlorian Meier 6597d3ddd7SFlorian Meier module_platform_driver(pcm5102a_codec_driver); 6697d3ddd7SFlorian Meier 6797d3ddd7SFlorian Meier MODULE_DESCRIPTION("ASoC PCM5102A codec driver"); 6897d3ddd7SFlorian Meier MODULE_AUTHOR("Florian Meier <florian.meier@koalo.de>"); 6997d3ddd7SFlorian Meier MODULE_LICENSE("GPL v2"); 70