1*a710770eSDavid Lambert /* 2*a710770eSDavid Lambert * dmic.c -- SoC audio for Generic Digital MICs 3*a710770eSDavid Lambert * 4*a710770eSDavid Lambert * Author: Liam Girdwood <lrg@slimlogic.co.uk> 5*a710770eSDavid Lambert * 6*a710770eSDavid Lambert * This program is free software; you can redistribute it and/or 7*a710770eSDavid Lambert * modify it under the terms of the GNU General Public License 8*a710770eSDavid Lambert * version 2 as published by the Free Software Foundation. 9*a710770eSDavid Lambert * 10*a710770eSDavid Lambert * This program is distributed in the hope that it will be useful, but 11*a710770eSDavid Lambert * WITHOUT ANY WARRANTY; without even the implied warranty of 12*a710770eSDavid Lambert * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13*a710770eSDavid Lambert * General Public License for more details. 14*a710770eSDavid Lambert * 15*a710770eSDavid Lambert * You should have received a copy of the GNU General Public License 16*a710770eSDavid Lambert * along with this program; if not, write to the Free Software 17*a710770eSDavid Lambert * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 18*a710770eSDavid Lambert * 02110-1301 USA 19*a710770eSDavid Lambert * 20*a710770eSDavid Lambert */ 21*a710770eSDavid Lambert 22*a710770eSDavid Lambert #include <linux/platform_device.h> 23*a710770eSDavid Lambert #include <linux/slab.h> 24*a710770eSDavid Lambert #include <sound/core.h> 25*a710770eSDavid Lambert #include <sound/pcm.h> 26*a710770eSDavid Lambert #include <sound/soc.h> 27*a710770eSDavid Lambert #include <sound/soc-dapm.h> 28*a710770eSDavid Lambert 29*a710770eSDavid Lambert static struct snd_soc_dai_driver dmic_dai = { 30*a710770eSDavid Lambert .name = "dmic-hifi", 31*a710770eSDavid Lambert .capture = { 32*a710770eSDavid Lambert .stream_name = "Capture", 33*a710770eSDavid Lambert .channels_min = 1, 34*a710770eSDavid Lambert .channels_max = 8, 35*a710770eSDavid Lambert .rates = SNDRV_PCM_RATE_CONTINUOUS, 36*a710770eSDavid Lambert .formats = SNDRV_PCM_FMTBIT_S32_LE 37*a710770eSDavid Lambert | SNDRV_PCM_FMTBIT_S24_LE 38*a710770eSDavid Lambert | SNDRV_PCM_FMTBIT_S16_LE, 39*a710770eSDavid Lambert }, 40*a710770eSDavid Lambert }; 41*a710770eSDavid Lambert 42*a710770eSDavid Lambert static struct snd_soc_codec_driver soc_dmic = {}; 43*a710770eSDavid Lambert 44*a710770eSDavid Lambert static int __devinit dmic_dev_probe(struct platform_device *pdev) 45*a710770eSDavid Lambert { 46*a710770eSDavid Lambert return snd_soc_register_codec(&pdev->dev, 47*a710770eSDavid Lambert &soc_dmic, &dmic_dai, 1); 48*a710770eSDavid Lambert } 49*a710770eSDavid Lambert 50*a710770eSDavid Lambert static int __devexit dmic_dev_remove(struct platform_device *pdev) 51*a710770eSDavid Lambert { 52*a710770eSDavid Lambert snd_soc_unregister_codec(&pdev->dev); 53*a710770eSDavid Lambert return 0; 54*a710770eSDavid Lambert } 55*a710770eSDavid Lambert 56*a710770eSDavid Lambert MODULE_ALIAS("platform:dmic-codec"); 57*a710770eSDavid Lambert 58*a710770eSDavid Lambert static struct platform_driver dmic_driver = { 59*a710770eSDavid Lambert .driver = { 60*a710770eSDavid Lambert .name = "dmic-codec", 61*a710770eSDavid Lambert .owner = THIS_MODULE, 62*a710770eSDavid Lambert }, 63*a710770eSDavid Lambert .probe = dmic_dev_probe, 64*a710770eSDavid Lambert .remove = __devexit_p(dmic_dev_remove), 65*a710770eSDavid Lambert }; 66*a710770eSDavid Lambert 67*a710770eSDavid Lambert static int __init dmic_init(void) 68*a710770eSDavid Lambert { 69*a710770eSDavid Lambert return platform_driver_register(&dmic_driver); 70*a710770eSDavid Lambert } 71*a710770eSDavid Lambert module_init(dmic_init); 72*a710770eSDavid Lambert 73*a710770eSDavid Lambert static void __exit dmic_exit(void) 74*a710770eSDavid Lambert { 75*a710770eSDavid Lambert platform_driver_unregister(&dmic_driver); 76*a710770eSDavid Lambert } 77*a710770eSDavid Lambert module_exit(dmic_exit); 78*a710770eSDavid Lambert 79*a710770eSDavid Lambert MODULE_DESCRIPTION("Generic DMIC driver"); 80*a710770eSDavid Lambert MODULE_AUTHOR("Liam Girdwood <lrg@slimlogic.co.uk>"); 81*a710770eSDavid Lambert MODULE_LICENSE("GPL"); 82