-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
ASoC: Blackfin: Add bf5xx-adau1701 machine driver
Add a machine driver to support the ADAU1701 SigmaDSP processors on Analog Devices BF5XX evaluation boards. Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> Acked-by: Liam Girdwood <lrg@ti.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
- Loading branch information
Lars-Peter Clausen
authored and
Mark Brown
committed
Jun 16, 2011
1 parent
631ed8a
commit 53a93d5
Showing
3 changed files
with
152 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,139 @@ | ||
/* | ||
* Machine driver for EVAL-ADAU1701MINIZ on Analog Devices bfin | ||
* evaluation boards. | ||
* | ||
* Copyright 2011 Analog Devices Inc. | ||
* Author: Lars-Peter Clausen <lars@metafoo.de> | ||
* | ||
* Licensed under the GPL-2 or later. | ||
*/ | ||
|
||
#include <linux/module.h> | ||
#include <linux/device.h> | ||
#include <sound/core.h> | ||
#include <sound/pcm.h> | ||
#include <sound/soc.h> | ||
#include <sound/pcm_params.h> | ||
|
||
#include "../codecs/adau1701.h" | ||
|
||
static const struct snd_soc_dapm_widget bfin_eval_adau1701_dapm_widgets[] = { | ||
SND_SOC_DAPM_SPK("Speaker", NULL), | ||
SND_SOC_DAPM_LINE("Line Out", NULL), | ||
SND_SOC_DAPM_LINE("Line In", NULL), | ||
}; | ||
|
||
static const struct snd_soc_dapm_route bfin_eval_adau1701_dapm_routes[] = { | ||
{ "Speaker", NULL, "OUT0" }, | ||
{ "Speaker", NULL, "OUT1" }, | ||
{ "Line Out", NULL, "OUT2" }, | ||
{ "Line Out", NULL, "OUT3" }, | ||
|
||
{ "IN0", NULL, "Line In" }, | ||
{ "IN1", NULL, "Line In" }, | ||
}; | ||
|
||
static int bfin_eval_adau1701_hw_params(struct snd_pcm_substream *substream, | ||
struct snd_pcm_hw_params *params) | ||
{ | ||
struct snd_soc_pcm_runtime *rtd = substream->private_data; | ||
struct snd_soc_dai *cpu_dai = rtd->cpu_dai; | ||
struct snd_soc_dai *codec_dai = rtd->codec_dai; | ||
int ret; | ||
|
||
ret = snd_soc_dai_set_fmt(cpu_dai, SND_SOC_DAIFMT_I2S | | ||
SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBM_CFM); | ||
if (ret) | ||
return ret; | ||
|
||
ret = snd_soc_dai_set_fmt(codec_dai, SND_SOC_DAIFMT_I2S | | ||
SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBM_CFM); | ||
if (ret) | ||
return ret; | ||
|
||
ret = snd_soc_dai_set_sysclk(codec_dai, ADAU1701_CLK_SRC_OSC, 12288000, | ||
SND_SOC_CLOCK_IN); | ||
|
||
return ret; | ||
} | ||
|
||
static struct snd_soc_ops bfin_eval_adau1701_ops = { | ||
.hw_params = bfin_eval_adau1701_hw_params, | ||
}; | ||
|
||
static struct snd_soc_dai_link bfin_eval_adau1701_dai[] = { | ||
{ | ||
.name = "adau1701", | ||
.stream_name = "adau1701", | ||
.cpu_dai_name = "bfin-i2s.0", | ||
.codec_dai_name = "adau1701", | ||
.platform_name = "bfin-i2s-pcm-audio", | ||
.codec_name = "adau1701.0-0034", | ||
.ops = &bfin_eval_adau1701_ops, | ||
}, | ||
{ | ||
.name = "adau1701", | ||
.stream_name = "adau1701", | ||
.cpu_dai_name = "bfin-i2s.1", | ||
.codec_dai_name = "adau1701", | ||
.platform_name = "bfin-i2s-pcm-audio", | ||
.codec_name = "adau1701.0-0034", | ||
.ops = &bfin_eval_adau1701_ops, | ||
}, | ||
}; | ||
|
||
static struct snd_soc_card bfin_eval_adau1701 = { | ||
.name = "bfin-eval-adau1701", | ||
.dai_link = &bfin_eval_adau1701_dai[CONFIG_SND_BF5XX_SPORT_NUM], | ||
.num_links = 1, | ||
|
||
.dapm_widgets = bfin_eval_adau1701_dapm_widgets, | ||
.num_dapm_widgets = ARRAY_SIZE(bfin_eval_adau1701_dapm_widgets), | ||
.dapm_routes = bfin_eval_adau1701_dapm_routes, | ||
.num_dapm_routes = ARRAY_SIZE(bfin_eval_adau1701_dapm_routes), | ||
}; | ||
|
||
static int bfin_eval_adau1701_probe(struct platform_device *pdev) | ||
{ | ||
struct snd_soc_card *card = &bfin_eval_adau1701; | ||
|
||
card->dev = &pdev->dev; | ||
|
||
return snd_soc_register_card(&bfin_eval_adau1701); | ||
} | ||
|
||
static int __devexit bfin_eval_adau1701_remove(struct platform_device *pdev) | ||
{ | ||
struct snd_soc_card *card = platform_get_drvdata(pdev); | ||
|
||
snd_soc_unregister_card(card); | ||
|
||
return 0; | ||
} | ||
|
||
static struct platform_driver bfin_eval_adau1701_driver = { | ||
.driver = { | ||
.name = "bfin-eval-adau1701", | ||
.owner = THIS_MODULE, | ||
.pm = &snd_soc_pm_ops, | ||
}, | ||
.probe = bfin_eval_adau1701_probe, | ||
.remove = __devexit_p(bfin_eval_adau1701_remove), | ||
}; | ||
|
||
static int __init bfin_eval_adau1701_init(void) | ||
{ | ||
return platform_driver_register(&bfin_eval_adau1701_driver); | ||
} | ||
module_init(bfin_eval_adau1701_init); | ||
|
||
static void __exit bfin_eval_adau1701_exit(void) | ||
{ | ||
platform_driver_unregister(&bfin_eval_adau1701_driver); | ||
} | ||
module_exit(bfin_eval_adau1701_exit); | ||
|
||
MODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>"); | ||
MODULE_DESCRIPTION("ALSA SoC bfin ADAU1701 driver"); | ||
MODULE_LICENSE("GPL"); | ||
MODULE_ALIAS("platform:bfin-eval-adau1701"); |