1/* 2 * SoC audio driver for EM-X270, eXeda and CM-X300 3 * 4 * Copyright 2007, 2009 CompuLab, Ltd. 5 * 6 * Author: Mike Rapoport <mike@compulab.co.il> 7 * 8 * Copied from tosa.c: 9 * Copyright 2005 Wolfson Microelectronics PLC. 10 * Copyright 2005 Openedhand Ltd. 11 * 12 * Authors: Liam Girdwood <lrg@slimlogic.co.uk> 13 * Richard Purdie <richard@openedhand.com> 14 * 15 * This program is free software; you can redistribute it and/or modify it 16 * under the terms of the GNU General Public License as published by the 17 * Free Software Foundation; either version 2 of the License, or (at your 18 * option) any later version. 19 * 20 */ 21 22#include <linux/module.h> 23#include <linux/moduleparam.h> 24#include <linux/device.h> 25 26#include <sound/core.h> 27#include <sound/pcm.h> 28#include <sound/soc.h> 29#include <sound/soc-dapm.h> 30 31#include <asm/mach-types.h> 32#include <mach/audio.h> 33 34#include "../codecs/wm9712.h" 35#include "pxa2xx-pcm.h" 36#include "pxa2xx-ac97.h" 37 38static struct snd_soc_dai_link em_x270_dai[] = { 39 { 40 .name = "AC97", 41 .stream_name = "AC97 HiFi", 42 .cpu_dai = &pxa_ac97_dai[PXA2XX_DAI_AC97_HIFI], 43 .codec_dai = &wm9712_dai[WM9712_DAI_AC97_HIFI], 44 }, 45 { 46 .name = "AC97 Aux", 47 .stream_name = "AC97 Aux", 48 .cpu_dai = &pxa_ac97_dai[PXA2XX_DAI_AC97_AUX], 49 .codec_dai = &wm9712_dai[WM9712_DAI_AC97_AUX], 50 }, 51}; 52 53static struct snd_soc_card em_x270 = { 54 .name = "EM-X270", 55 .platform = &pxa2xx_soc_platform, 56 .dai_link = em_x270_dai, 57 .num_links = ARRAY_SIZE(em_x270_dai), 58}; 59 60static struct snd_soc_device em_x270_snd_devdata = { 61 .card = &em_x270, 62 .codec_dev = &soc_codec_dev_wm9712, 63}; 64 65static struct platform_device *em_x270_snd_device; 66 67static int __init em_x270_init(void) 68{ 69 int ret; 70 71 if (!(machine_is_em_x270() || machine_is_exeda() 72 || machine_is_cm_x300())) 73 return -ENODEV; 74 75 em_x270_snd_device = platform_device_alloc("soc-audio", -1); 76 if (!em_x270_snd_device) 77 return -ENOMEM; 78 79 platform_set_drvdata(em_x270_snd_device, &em_x270_snd_devdata); 80 em_x270_snd_devdata.dev = &em_x270_snd_device->dev; 81 ret = platform_device_add(em_x270_snd_device); 82 83 if (ret) 84 platform_device_put(em_x270_snd_device); 85 86 return ret; 87} 88 89static void __exit em_x270_exit(void) 90{ 91 platform_device_unregister(em_x270_snd_device); 92} 93 94module_init(em_x270_init); 95module_exit(em_x270_exit); 96 97/* Module information */ 98MODULE_AUTHOR("Mike Rapoport"); 99MODULE_DESCRIPTION("ALSA SoC EM-X270, eXeda and CM-X300"); 100MODULE_LICENSE("GPL"); 101