Commit | Line | Data |
---|---|---|
c8489c3e | 1 | /* |
698c3756 | 2 | * File: sound/soc/blackfin/bf5xx-ad193x.c |
c8489c3e BS |
3 | * Author: Barry Song <Barry.Song@analog.com> |
4 | * | |
5 | * Created: Thur June 4 2009 | |
698c3756 | 6 | * Description: Board driver for ad193x sound chip |
c8489c3e BS |
7 | * |
8 | * Bugs: Enter bugs at http://blackfin.uclinux.org/ | |
9 | * | |
10 | * This program is free software; you can redistribute it and/or modify | |
11 | * it under the terms of the GNU General Public License as published by | |
12 | * the Free Software Foundation; either version 2 of the License, or | |
13 | * (at your option) any later version. | |
14 | * | |
15 | * This program is distributed in the hope that it will be useful, | |
16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
18 | * GNU General Public License for more details. | |
19 | * | |
20 | * You should have received a copy of the GNU General Public License | |
21 | * along with this program; if not, see the file COPYING, or write | |
22 | * to the Free Software Foundation, Inc., | |
23 | * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | |
24 | */ | |
25 | ||
26 | #include <linux/module.h> | |
27 | #include <linux/moduleparam.h> | |
28 | #include <linux/device.h> | |
29 | #include <sound/core.h> | |
30 | #include <sound/pcm.h> | |
31 | #include <sound/soc.h> | |
c8489c3e BS |
32 | #include <sound/pcm_params.h> |
33 | ||
34 | #include <asm/blackfin.h> | |
35 | #include <asm/cacheflush.h> | |
36 | #include <asm/irq.h> | |
37 | #include <asm/dma.h> | |
38 | #include <asm/portmux.h> | |
39 | ||
698c3756 | 40 | #include "../codecs/ad193x.h" |
c8489c3e | 41 | |
698c3756 | 42 | static struct snd_soc_card bf5xx_ad193x; |
c8489c3e | 43 | |
b8854632 | 44 | static int bf5xx_ad193x_link_init(struct snd_soc_pcm_runtime *rtd) |
c8489c3e | 45 | { |
f0fba2ad LG |
46 | struct snd_soc_dai *cpu_dai = rtd->cpu_dai; |
47 | struct snd_soc_dai *codec_dai = rtd->codec_dai; | |
b8854632 | 48 | int ret; |
f04cd9cb | 49 | |
f04cd9cb | 50 | /* set the codec system clock for DAC and ADC */ |
b8854632 | 51 | ret = snd_soc_dai_set_sysclk(codec_dai, 0, 24576000, SND_SOC_CLOCK_IN); |
f04cd9cb SJ |
52 | if (ret < 0) |
53 | return ret; | |
54 | ||
c8489c3e | 55 | /* set codec DAI slots, 8 channels, all channels are enabled */ |
08db48f1 BS |
56 | ret = snd_soc_dai_set_tdm_slot(codec_dai, 0xFF, 0xFF, 8, 32); |
57 | if (ret < 0) | |
58 | return ret; | |
59 | ||
b8854632 | 60 | ret = snd_soc_dai_set_tdm_slot(cpu_dai, 0xFF, 0xFF, 8, 32); |
c8489c3e BS |
61 | if (ret < 0) |
62 | return ret; | |
63 | ||
64 | return 0; | |
65 | } | |
66 | ||
980b0bc6 LPC |
67 | #define BF5XX_AD193X_DAIFMT (SND_SOC_DAIFMT_DSP_A | SND_SOC_DAIFMT_IB_IF | \ |
68 | SND_SOC_DAIFMT_CBM_CFM) | |
69 | ||
2c66cb99 BS |
70 | static struct snd_soc_dai_link bf5xx_ad193x_dai[] = { |
71 | { | |
72 | .name = "ad193x", | |
73 | .stream_name = "AD193X", | |
b8854632 | 74 | .cpu_dai_name = "bfin-i2s.0", |
2c66cb99 | 75 | .codec_dai_name ="ad193x-hifi", |
b8854632 | 76 | .platform_name = "bfin-i2s-pcm-audio", |
c5d2e650 | 77 | .codec_name = "spi0.5", |
980b0bc6 | 78 | .dai_fmt = BF5XX_AD193X_DAIFMT, |
b8854632 | 79 | .init = bf5xx_ad193x_link_init, |
2c66cb99 BS |
80 | }, |
81 | { | |
82 | .name = "ad193x", | |
83 | .stream_name = "AD193X", | |
b8854632 | 84 | .cpu_dai_name = "bfin-i2s.1", |
2c66cb99 | 85 | .codec_dai_name ="ad193x-hifi", |
b8854632 | 86 | .platform_name = "bfin-i2s-pcm-audio", |
c5d2e650 | 87 | .codec_name = "spi0.5", |
980b0bc6 | 88 | .dai_fmt = BF5XX_AD193X_DAIFMT, |
b8854632 | 89 | .init = bf5xx_ad193x_link_init, |
2c66cb99 | 90 | }, |
c8489c3e BS |
91 | }; |
92 | ||
698c3756 | 93 | static struct snd_soc_card bf5xx_ad193x = { |
bfe4ee0a | 94 | .name = "bfin-ad193x", |
30e49530 | 95 | .owner = THIS_MODULE, |
2c66cb99 | 96 | .dai_link = &bf5xx_ad193x_dai[CONFIG_SND_BF5XX_SPORT_NUM], |
c8489c3e BS |
97 | .num_links = 1, |
98 | }; | |
99 | ||
698c3756 | 100 | static struct platform_device *bfxx_ad193x_snd_device; |
c8489c3e | 101 | |
698c3756 | 102 | static int __init bf5xx_ad193x_init(void) |
c8489c3e BS |
103 | { |
104 | int ret; | |
105 | ||
698c3756 BS |
106 | bfxx_ad193x_snd_device = platform_device_alloc("soc-audio", -1); |
107 | if (!bfxx_ad193x_snd_device) | |
c8489c3e BS |
108 | return -ENOMEM; |
109 | ||
f0fba2ad | 110 | platform_set_drvdata(bfxx_ad193x_snd_device, &bf5xx_ad193x); |
698c3756 | 111 | ret = platform_device_add(bfxx_ad193x_snd_device); |
c8489c3e BS |
112 | |
113 | if (ret) | |
698c3756 | 114 | platform_device_put(bfxx_ad193x_snd_device); |
c8489c3e BS |
115 | |
116 | return ret; | |
117 | } | |
118 | ||
698c3756 | 119 | static void __exit bf5xx_ad193x_exit(void) |
c8489c3e | 120 | { |
698c3756 | 121 | platform_device_unregister(bfxx_ad193x_snd_device); |
c8489c3e BS |
122 | } |
123 | ||
698c3756 BS |
124 | module_init(bf5xx_ad193x_init); |
125 | module_exit(bf5xx_ad193x_exit); | |
c8489c3e BS |
126 | |
127 | /* Module information */ | |
128 | MODULE_AUTHOR("Barry Song"); | |
698c3756 | 129 | MODULE_DESCRIPTION("ALSA SoC AD193X board driver"); |
c8489c3e BS |
130 | MODULE_LICENSE("GPL"); |
131 |