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 30#include <asm/mach-types.h> 31#include <mach/audio.h> 32 33#include "../codecs/wm9712.h" 34#include "pxa2xx-ac97.h" 35 36static struct snd_soc_dai_link em_x270_dai[] = { 37 { 38 .name = "AC97", 39 .stream_name = "AC97 HiFi", 40 .cpu_dai_name = "pxa2xx-ac97", 41 .codec_dai_name = "wm9712-hifi", 42 .platform_name = "pxa-pcm-audio", 43 .codec_name = "wm9712-codec", 44 }, 45 { 46 .name = "AC97 Aux", 47 .stream_name = "AC97 Aux", 48 .cpu_dai_name = "pxa2xx-ac97-aux", 49 .codec_dai_name ="wm9712-aux", 50 .platform_name = "pxa-pcm-audio", 51 .codec_name = "wm9712-codec", 52 }, 53}; 54 55static struct snd_soc_card em_x270 = { 56 .name = "EM-X270", 57 .owner = THIS_MODULE, 58 .dai_link = em_x270_dai, 59 .num_links = ARRAY_SIZE(em_x270_dai), 60}; 61 62static struct platform_device *em_x270_snd_device; 63 64static int __init em_x270_init(void) 65{ 66 int ret; 67 68 if (!(machine_is_em_x270() || machine_is_exeda() 69 || machine_is_cm_x300())) 70 return -ENODEV; 71 72 em_x270_snd_device = platform_device_alloc("soc-audio", -1); 73 if (!em_x270_snd_device) 74 return -ENOMEM; 75 76 platform_set_drvdata(em_x270_snd_device, &em_x270); 77 ret = platform_device_add(em_x270_snd_device); 78 79 if (ret) 80 platform_device_put(em_x270_snd_device); 81 82 return ret; 83} 84 85static void __exit em_x270_exit(void) 86{ 87 platform_device_unregister(em_x270_snd_device); 88} 89 90module_init(em_x270_init); 91module_exit(em_x270_exit); 92 93/* Module information */ 94MODULE_AUTHOR("Mike Rapoport"); 95MODULE_DESCRIPTION("ALSA SoC EM-X270, eXeda and CM-X300"); 96MODULE_LICENSE("GPL"); 97