aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLars-Peter Clausen <lars@metafoo.de>2014-05-27 04:53:20 -0400
committerMark Brown <broonie@linaro.org>2014-05-27 15:54:51 -0400
commit5dcdbee9cf9411f0c35c4d52cc127b7a851c852f (patch)
tree5dc40dd6302e85410b01da74f51418d6e4ffea40
parent2923af024681508132881c9e5ddd65cd51b0d8e3 (diff)
ASoC: Blackfin: ADAU1X61 eval board support
This patch adds a ASoC machine driver to support the EVAL-ADAU1X61 board connected to a Analog Devices BF5XX evaluation board. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Signed-off-by: Mark Brown <broonie@linaro.org>
-rw-r--r--sound/soc/blackfin/Kconfig13
-rw-r--r--sound/soc/blackfin/Makefile2
-rw-r--r--sound/soc/blackfin/bfin-eval-adau1x61.c142
3 files changed, 157 insertions, 0 deletions
diff --git a/sound/soc/blackfin/Kconfig b/sound/soc/blackfin/Kconfig
index 6347d5910138..8c3a87bb96dc 100644
--- a/sound/soc/blackfin/Kconfig
+++ b/sound/soc/blackfin/Kconfig
@@ -43,6 +43,19 @@ config SND_SOC_BFIN_EVAL_ADAU1373
43 Note: This driver assumes that first ADAU1373 DAI is connected to the 43 Note: This driver assumes that first ADAU1373 DAI is connected to the
44 first SPORT port on the BF5XX board. 44 first SPORT port on the BF5XX board.
45 45
46config SND_SOC_BFIN_EVAL_ADAU1X61
47 tristate "Support for the EVAL-ADAU1X61 board on Blackfin eval boards"
48 depends on SND_BF5XX_I2S && I2C
49 select SND_BF5XX_SOC_I2S
50 select SND_SOC_ADAU1761_I2C
51 help
52 Say Y if you want to add support for the Analog Devices EVAL-ADAU1X61
53 board connected to one of the Blackfin evaluation boards like the
54 BF5XX-STAMP or BF5XX-EZKIT.
55
56 Note: This driver assumes that the ADAU1X61 is connected to the
57 first SPORT port on the BF5XX board.
58
46config SND_SOC_BFIN_EVAL_ADAV80X 59config SND_SOC_BFIN_EVAL_ADAV80X
47 tristate "Support for the EVAL-ADAV80X boards on Blackfin eval boards" 60 tristate "Support for the EVAL-ADAV80X boards on Blackfin eval boards"
48 depends on SND_BF5XX_I2S && SND_SOC_I2C_AND_SPI 61 depends on SND_BF5XX_I2S && SND_SOC_I2C_AND_SPI
diff --git a/sound/soc/blackfin/Makefile b/sound/soc/blackfin/Makefile
index ad0a6e99bc5d..91eb0e7edff5 100644
--- a/sound/soc/blackfin/Makefile
+++ b/sound/soc/blackfin/Makefile
@@ -22,6 +22,7 @@ snd-ssm2602-objs := bf5xx-ssm2602.o
22snd-ad73311-objs := bf5xx-ad73311.o 22snd-ad73311-objs := bf5xx-ad73311.o
23snd-ad193x-objs := bf5xx-ad193x.o 23snd-ad193x-objs := bf5xx-ad193x.o
24snd-soc-bfin-eval-adau1373-objs := bfin-eval-adau1373.o 24snd-soc-bfin-eval-adau1373-objs := bfin-eval-adau1373.o
25snd-soc-bfin-eval-adau1x61-objs := bfin-eval-adau1x61.o
25snd-soc-bfin-eval-adau1701-objs := bfin-eval-adau1701.o 26snd-soc-bfin-eval-adau1701-objs := bfin-eval-adau1701.o
26snd-soc-bfin-eval-adav80x-objs := bfin-eval-adav80x.o 27snd-soc-bfin-eval-adav80x-objs := bfin-eval-adav80x.o
27 28
@@ -31,5 +32,6 @@ obj-$(CONFIG_SND_BF5XX_SOC_SSM2602) += snd-ssm2602.o
31obj-$(CONFIG_SND_BF5XX_SOC_AD73311) += snd-ad73311.o 32obj-$(CONFIG_SND_BF5XX_SOC_AD73311) += snd-ad73311.o
32obj-$(CONFIG_SND_BF5XX_SOC_AD193X) += snd-ad193x.o 33obj-$(CONFIG_SND_BF5XX_SOC_AD193X) += snd-ad193x.o
33obj-$(CONFIG_SND_SOC_BFIN_EVAL_ADAU1373) += snd-soc-bfin-eval-adau1373.o 34obj-$(CONFIG_SND_SOC_BFIN_EVAL_ADAU1373) += snd-soc-bfin-eval-adau1373.o
35obj-$(CONFIG_SND_SOC_BFIN_EVAL_ADAU1X61) += snd-soc-bfin-eval-adau1x61.o
34obj-$(CONFIG_SND_SOC_BFIN_EVAL_ADAU1701) += snd-soc-bfin-eval-adau1701.o 36obj-$(CONFIG_SND_SOC_BFIN_EVAL_ADAU1701) += snd-soc-bfin-eval-adau1701.o
35obj-$(CONFIG_SND_SOC_BFIN_EVAL_ADAV80X) += snd-soc-bfin-eval-adav80x.o 37obj-$(CONFIG_SND_SOC_BFIN_EVAL_ADAV80X) += snd-soc-bfin-eval-adav80x.o
diff --git a/sound/soc/blackfin/bfin-eval-adau1x61.c b/sound/soc/blackfin/bfin-eval-adau1x61.c
new file mode 100644
index 000000000000..3011906f9d3b
--- /dev/null
+++ b/sound/soc/blackfin/bfin-eval-adau1x61.c
@@ -0,0 +1,142 @@
1/*
2 * Machine driver for EVAL-ADAU1x61MINIZ on Analog Devices bfin
3 * evaluation boards.
4 *
5 * Copyright 2011-2014 Analog Devices Inc.
6 * Author: Lars-Peter Clausen <lars@metafoo.de>
7 *
8 * Licensed under the GPL-2 or later.
9 */
10
11#include <linux/module.h>
12#include <linux/device.h>
13#include <linux/slab.h>
14#include <sound/core.h>
15#include <sound/pcm.h>
16#include <sound/soc.h>
17#include <sound/pcm_params.h>
18
19#include "../codecs/adau17x1.h"
20
21static const struct snd_soc_dapm_widget bfin_eval_adau1x61_dapm_widgets[] = {
22 SND_SOC_DAPM_LINE("In 1", NULL),
23 SND_SOC_DAPM_LINE("In 2", NULL),
24 SND_SOC_DAPM_LINE("In 3-4", NULL),
25
26 SND_SOC_DAPM_LINE("Diff Out L", NULL),
27 SND_SOC_DAPM_LINE("Diff Out R", NULL),
28 SND_SOC_DAPM_LINE("Stereo Out", NULL),
29 SND_SOC_DAPM_HP("Capless HP Out", NULL),
30};
31
32static const struct snd_soc_dapm_route bfin_eval_adau1x61_dapm_routes[] = {
33 { "LAUX", NULL, "In 3-4" },
34 { "RAUX", NULL, "In 3-4" },
35 { "LINP", NULL, "In 1" },
36 { "LINN", NULL, "In 1"},
37 { "RINP", NULL, "In 2" },
38 { "RINN", NULL, "In 2" },
39
40 { "In 1", NULL, "MICBIAS" },
41 { "In 2", NULL, "MICBIAS" },
42
43 { "Capless HP Out", NULL, "LHP" },
44 { "Capless HP Out", NULL, "RHP" },
45 { "Diff Out L", NULL, "LOUT" },
46 { "Diff Out R", NULL, "ROUT" },
47 { "Stereo Out", NULL, "LOUT" },
48 { "Stereo Out", NULL, "ROUT" },
49};
50
51static int bfin_eval_adau1x61_hw_params(struct snd_pcm_substream *substream,
52 struct snd_pcm_hw_params *params)
53{
54 struct snd_soc_pcm_runtime *rtd = substream->private_data;
55 struct snd_soc_dai *codec_dai = rtd->codec_dai;
56 int pll_rate;
57 int ret;
58
59 switch (params_rate(params)) {
60 case 48000:
61 case 8000:
62 case 12000:
63 case 16000:
64 case 24000:
65 case 32000:
66 case 96000:
67 pll_rate = 48000 * 1024;
68 break;
69 case 44100:
70 case 7350:
71 case 11025:
72 case 14700:
73 case 22050:
74 case 29400:
75 case 88200:
76 pll_rate = 44100 * 1024;
77 break;
78 default:
79 return -EINVAL;
80 }
81
82 ret = snd_soc_dai_set_pll(codec_dai, ADAU17X1_PLL,
83 ADAU17X1_PLL_SRC_MCLK, 12288000, pll_rate);
84 if (ret)
85 return ret;
86
87 ret = snd_soc_dai_set_sysclk(codec_dai, ADAU17X1_CLK_SRC_PLL, pll_rate,
88 SND_SOC_CLOCK_IN);
89
90 return ret;
91}
92
93static const struct snd_soc_ops bfin_eval_adau1x61_ops = {
94 .hw_params = bfin_eval_adau1x61_hw_params,
95};
96
97static struct snd_soc_dai_link bfin_eval_adau1x61_dai = {
98 .name = "adau1x61",
99 .stream_name = "adau1x61",
100 .cpu_dai_name = "bfin-i2s.0",
101 .codec_dai_name = "adau-hifi",
102 .platform_name = "bfin-i2s-pcm-audio",
103 .codec_name = "adau1761.0-0038",
104 .ops = &bfin_eval_adau1x61_ops,
105 .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |
106 SND_SOC_DAIFMT_CBM_CFM,
107};
108
109static struct snd_soc_card bfin_eval_adau1x61 = {
110 .name = "bfin-eval-adau1x61",
111 .driver_name = "eval-adau1x61",
112 .dai_link = &bfin_eval_adau1x61_dai,
113 .num_links = 1,
114
115 .dapm_widgets = bfin_eval_adau1x61_dapm_widgets,
116 .num_dapm_widgets = ARRAY_SIZE(bfin_eval_adau1x61_dapm_widgets),
117 .dapm_routes = bfin_eval_adau1x61_dapm_routes,
118 .num_dapm_routes = ARRAY_SIZE(bfin_eval_adau1x61_dapm_routes),
119 .fully_routed = true,
120};
121
122static int bfin_eval_adau1x61_probe(struct platform_device *pdev)
123{
124 bfin_eval_adau1x61.dev = &pdev->dev;
125
126 return devm_snd_soc_register_card(&pdev->dev, &bfin_eval_adau1x61);
127}
128
129static struct platform_driver bfin_eval_adau1x61_driver = {
130 .driver = {
131 .name = "bfin-eval-adau1x61",
132 .owner = THIS_MODULE,
133 .pm = &snd_soc_pm_ops,
134 },
135 .probe = bfin_eval_adau1x61_probe,
136};
137module_platform_driver(bfin_eval_adau1x61_driver);
138
139MODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>");
140MODULE_DESCRIPTION("ALSA SoC bfin adau1x61 driver");
141MODULE_LICENSE("GPL");
142MODULE_ALIAS("platform:bfin-eval-adau1x61");