~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/sound/soc/cirrus/edb93xx.c

Version: ~ [ linux-5.5-rc7 ] ~ [ linux-5.4.13 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.97 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.166 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.210 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.210 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.19.8 ] ~ [ linux-3.18.140 ] ~ [ linux-3.17.8 ] ~ [ linux-3.16.81 ] ~ [ linux-3.15.10 ] ~ [ linux-3.14.79 ] ~ [ linux-3.13.11 ] ~ [ linux-3.12.74 ] ~ [ linux-3.11.10 ] ~ [ linux-3.10.108 ] ~ [ linux-3.9.11 ] ~ [ linux-3.8.13 ] ~ [ linux-3.7.10 ] ~ [ linux-3.6.11 ] ~ [ linux-3.5.7 ] ~ [ linux-3.4.113 ] ~ [ linux-3.3.8 ] ~ [ linux-3.2.102 ] ~ [ linux-3.1.10 ] ~ [ linux-3.0.101 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /*
  2  * SoC audio for EDB93xx
  3  *
  4  * Copyright (c) 2010 Alexander Sverdlin <subaparts@yandex.ru>
  5  *
  6  * This program is free software; you can redistribute it and/or
  7  * modify it under the terms of the GNU General Public License
  8  * as published by the Free Software Foundation; either version 2
  9  * of the License, or (at your option) any later version.
 10  *
 11  * This program is distributed in the hope that it will be useful,
 12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 14  * GNU General Public License for more details.
 15  *
 16  * This driver support CS4271 codec being master or slave, working
 17  * in control port mode, connected either via SPI or I2C.
 18  * The data format accepted is I2S or left-justified.
 19  * DAPM support not implemented.
 20  */
 21 
 22 #include <linux/platform_device.h>
 23 #include <linux/gpio.h>
 24 #include <linux/module.h>
 25 #include <sound/core.h>
 26 #include <sound/pcm.h>
 27 #include <sound/soc.h>
 28 #include <asm/mach-types.h>
 29 #include <mach/hardware.h>
 30 
 31 static int edb93xx_hw_params(struct snd_pcm_substream *substream,
 32                              struct snd_pcm_hw_params *params)
 33 {
 34         struct snd_soc_pcm_runtime *rtd = substream->private_data;
 35         struct snd_soc_dai *codec_dai = rtd->codec_dai;
 36         struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
 37         int err;
 38         unsigned int mclk_rate;
 39         unsigned int rate = params_rate(params);
 40 
 41         /*
 42          * According to CS4271 datasheet we use MCLK/LRCK=256 for
 43          * rates below 50kHz and 128 for higher sample rates
 44          */
 45         if (rate < 50000)
 46                 mclk_rate = rate * 64 * 4;
 47         else
 48                 mclk_rate = rate * 64 * 2;
 49 
 50         err = snd_soc_dai_set_sysclk(codec_dai, 0, mclk_rate,
 51                                      SND_SOC_CLOCK_IN);
 52         if (err)
 53                 return err;
 54 
 55         return snd_soc_dai_set_sysclk(cpu_dai, 0, mclk_rate,
 56                                       SND_SOC_CLOCK_OUT);
 57 }
 58 
 59 static struct snd_soc_ops edb93xx_ops = {
 60         .hw_params      = edb93xx_hw_params,
 61 };
 62 
 63 static struct snd_soc_dai_link edb93xx_dai = {
 64         .name           = "CS4271",
 65         .stream_name    = "CS4271 HiFi",
 66         .platform_name  = "ep93xx-i2s",
 67         .cpu_dai_name   = "ep93xx-i2s",
 68         .codec_name     = "spi0.0",
 69         .codec_dai_name = "cs4271-hifi",
 70         .dai_fmt        = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_IF |
 71                           SND_SOC_DAIFMT_CBS_CFS,
 72         .ops            = &edb93xx_ops,
 73 };
 74 
 75 static struct snd_soc_card snd_soc_edb93xx = {
 76         .name           = "EDB93XX",
 77         .owner          = THIS_MODULE,
 78         .dai_link       = &edb93xx_dai,
 79         .num_links      = 1,
 80 };
 81 
 82 static int edb93xx_probe(struct platform_device *pdev)
 83 {
 84         struct snd_soc_card *card = &snd_soc_edb93xx;
 85         int ret;
 86 
 87         ret = ep93xx_i2s_acquire();
 88         if (ret)
 89                 return ret;
 90 
 91         card->dev = &pdev->dev;
 92 
 93         ret = snd_soc_register_card(card);
 94         if (ret) {
 95                 dev_err(&pdev->dev, "snd_soc_register_card() failed: %d\n",
 96                         ret);
 97                 ep93xx_i2s_release();
 98         }
 99 
100         return ret;
101 }
102 
103 static int edb93xx_remove(struct platform_device *pdev)
104 {
105         struct snd_soc_card *card = platform_get_drvdata(pdev);
106 
107         snd_soc_unregister_card(card);
108         ep93xx_i2s_release();
109 
110         return 0;
111 }
112 
113 static struct platform_driver edb93xx_driver = {
114         .driver         = {
115                 .name   = "edb93xx-audio",
116         },
117         .probe          = edb93xx_probe,
118         .remove         = edb93xx_remove,
119 };
120 
121 module_platform_driver(edb93xx_driver);
122 
123 MODULE_AUTHOR("Alexander Sverdlin <subaparts@yandex.ru>");
124 MODULE_DESCRIPTION("ALSA SoC EDB93xx");
125 MODULE_LICENSE("GPL");
126 MODULE_ALIAS("platform:edb93xx-audio");
127 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp