1/* 2 * phycore-ac97.c -- SoC audio for imx_phycore in AC97 mode 3 * 4 * Copyright 2009 Sascha Hauer, Pengutronix <s.hauer@pengutronix.de> 5 * 6 * This program is free software; you can redistribute it and/or modify it 7 * under the terms of the GNU General Public License as published by the 8 * Free Software Foundation; either version 2 of the License, or (at your 9 * option) any later version. 10 * 11 */ 12 13#include <linux/module.h> 14#include <linux/moduleparam.h> 15#include <linux/device.h> 16#include <linux/i2c.h> 17#include <sound/core.h> 18#include <sound/pcm.h> 19#include <sound/soc.h> 20#include <sound/soc-dapm.h> 21#include <asm/mach-types.h> 22 23#include "../codecs/wm9712.h" 24#include "imx-ssi.h" 25 26static struct snd_soc_card imx_phycore; 27 28static struct snd_soc_ops imx_phycore_hifi_ops = { 29}; 30 31static struct snd_soc_dai_link imx_phycore_dai_ac97[] = { 32 { 33 .name = "HiFi", 34 .stream_name = "HiFi", 35 .codec_dai = &wm9712_dai[WM9712_DAI_AC97_HIFI], 36 .ops = &imx_phycore_hifi_ops, 37 }, 38}; 39 40static struct snd_soc_card imx_phycore = { 41 .name = "PhyCORE-audio", 42 .platform = &imx_soc_platform, 43 .dai_link = imx_phycore_dai_ac97, 44 .num_links = ARRAY_SIZE(imx_phycore_dai_ac97), 45}; 46 47static struct snd_soc_device imx_phycore_snd_devdata = { 48 .card = &imx_phycore, 49 .codec_dev = &soc_codec_dev_wm9712, 50}; 51 52static struct platform_device *imx_phycore_snd_device; 53 54static int __init imx_phycore_init(void) 55{ 56 int ret; 57 58 if (!machine_is_pcm043() && !machine_is_pca100()) 59 /* return happy. We might run on a totally different machine */ 60 return 0; 61 62 imx_phycore_snd_device = platform_device_alloc("soc-audio", -1); 63 if (!imx_phycore_snd_device) 64 return -ENOMEM; 65 66 imx_phycore_dai_ac97[0].cpu_dai = &imx_ssi_pcm_dai[0]; 67 68 platform_set_drvdata(imx_phycore_snd_device, &imx_phycore_snd_devdata); 69 imx_phycore_snd_devdata.dev = &imx_phycore_snd_device->dev; 70 ret = platform_device_add(imx_phycore_snd_device); 71 72 if (ret) { 73 printk(KERN_ERR "ASoC: Platform device allocation failed\n"); 74 platform_device_put(imx_phycore_snd_device); 75 } 76 77 return ret; 78} 79 80static void __exit imx_phycore_exit(void) 81{ 82 platform_device_unregister(imx_phycore_snd_device); 83} 84 85late_initcall(imx_phycore_init); 86module_exit(imx_phycore_exit); 87 88MODULE_AUTHOR("Sascha Hauer <s.hauer@pengutronix.de>"); 89MODULE_DESCRIPTION("PhyCORE ALSA SoC driver"); 90MODULE_LICENSE("GPL"); 91