Version:  2.6.34 2.6.35 2.6.36 2.6.37 2.6.38 2.6.39 3.0 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11 3.12 3.13 3.14

Linux/sound/soc/pxa/imote2.c

  1 
  2 #include <linux/module.h>
  3 #include <sound/soc.h>
  4 
  5 #include <asm/mach-types.h>
  6 
  7 #include "../codecs/wm8940.h"
  8 #include "pxa2xx-i2s.h"
  9 
 10 static int imote2_asoc_hw_params(struct snd_pcm_substream *substream,
 11                                  struct snd_pcm_hw_params *params)
 12 {
 13         struct snd_soc_pcm_runtime *rtd = substream->private_data;
 14         struct snd_soc_dai *codec_dai = rtd->codec_dai;
 15         struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
 16         unsigned int clk = 0;
 17         int ret;
 18 
 19         switch (params_rate(params)) {
 20         case 8000:
 21         case 16000:
 22         case 48000:
 23         case 96000:
 24                 clk = 12288000;
 25                 break;
 26         case 11025:
 27         case 22050:
 28         case 44100:
 29                 clk = 11289600;
 30                 break;
 31         }
 32 
 33         ret = snd_soc_dai_set_sysclk(codec_dai, 0, clk,
 34                                      SND_SOC_CLOCK_IN);
 35         if (ret < 0)
 36                 return ret;
 37 
 38         /* set the I2S system clock as input (unused) */
 39         ret = snd_soc_dai_set_sysclk(cpu_dai, PXA2XX_I2S_SYSCLK, clk,
 40                 SND_SOC_CLOCK_OUT);
 41 
 42         return ret;
 43 }
 44 
 45 static struct snd_soc_ops imote2_asoc_ops = {
 46         .hw_params = imote2_asoc_hw_params,
 47 };
 48 
 49 static struct snd_soc_dai_link imote2_dai = {
 50         .name = "WM8940",
 51         .stream_name = "WM8940",
 52         .cpu_dai_name = "pxa2xx-i2s",
 53         .codec_dai_name = "wm8940-hifi",
 54         .platform_name = "pxa-pcm-audio",
 55         .codec_name = "wm8940-codec.0-0034",
 56         .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |
 57                    SND_SOC_DAIFMT_CBS_CFS,
 58         .ops = &imote2_asoc_ops,
 59 };
 60 
 61 static struct snd_soc_card imote2 = {
 62         .name = "Imote2",
 63         .owner = THIS_MODULE,
 64         .dai_link = &imote2_dai,
 65         .num_links = 1,
 66 };
 67 
 68 static int imote2_probe(struct platform_device *pdev)
 69 {
 70         struct snd_soc_card *card = &imote2;
 71         int ret;
 72 
 73         card->dev = &pdev->dev;
 74 
 75         ret = snd_soc_register_card(card);
 76         if (ret)
 77                 dev_err(&pdev->dev, "snd_soc_register_card() failed: %d\n",
 78                         ret);
 79         return ret;
 80 }
 81 
 82 static int imote2_remove(struct platform_device *pdev)
 83 {
 84         struct snd_soc_card *card = platform_get_drvdata(pdev);
 85 
 86         snd_soc_unregister_card(card);
 87         return 0;
 88 }
 89 
 90 static struct platform_driver imote2_driver = {
 91         .driver         = {
 92                 .name   = "imote2-audio",
 93                 .owner  = THIS_MODULE,
 94                 .pm     = &snd_soc_pm_ops,
 95         },
 96         .probe          = imote2_probe,
 97         .remove         = imote2_remove,
 98 };
 99 
100 module_platform_driver(imote2_driver);
101 
102 MODULE_AUTHOR("Jonathan Cameron");
103 MODULE_DESCRIPTION("ALSA SoC Imote 2");
104 MODULE_LICENSE("GPL");
105 MODULE_ALIAS("platform:imote2-audio");
106 

This page was automatically generated by LXR 0.3.1 (source).  •  Linux is a registered trademark of Linus Torvalds  •  Contact us