Commit 5881af77 authored by Mark Brown's avatar Mark Brown

Merge remote-tracking branch 'asoc/topic/kirkwood' into asoc-next

parents 4c11a761 74d04c3e
Device Tree bindings for the Armada 370 DB audio
================================================
These Device Tree bindings are used to describe the audio complex
found on the Armada 370 DB platform.
Mandatory properties:
* compatible: must be "marvell,a370db-audio"
* marvell,audio-controller: a phandle that points to the audio
controller of the Armada 370 SoC.
* marvell,audio-codec: a phandle that points to the analog audio
codec connected to the Armada 370 SoC.
Example:
sound {
compatible = "marvell,a370db-audio";
marvell,audio-controller = <&audio_controller>;
marvell,audio-codec = <&audio_codec>;
status = "okay";
};
...@@ -5,6 +5,7 @@ Required properties: ...@@ -5,6 +5,7 @@ Required properties:
- compatible: - compatible:
"marvell,kirkwood-audio" for Kirkwood platforms "marvell,kirkwood-audio" for Kirkwood platforms
"marvell,dove-audio" for Dove platforms "marvell,dove-audio" for Dove platforms
"marvell,armada370-audio" for Armada 370 platforms
- reg: physical base address of the controller and length of memory mapped - reg: physical base address of the controller and length of memory mapped
region. region.
......
config SND_KIRKWOOD_SOC config SND_KIRKWOOD_SOC
tristate "SoC Audio for the Marvell Kirkwood and Dove chips" tristate "SoC Audio for the Marvell Kirkwood and Dove chips"
depends on ARCH_KIRKWOOD || ARCH_DOVE || COMPILE_TEST depends on ARCH_KIRKWOOD || ARCH_DOVE || ARCH_MVEBU || COMPILE_TEST
help help
Say Y or M if you want to add support for codecs attached to Say Y or M if you want to add support for codecs attached to
the Kirkwood I2S interface. You will also need to select the the Kirkwood I2S interface. You will also need to select the
audio interfaces to support below. audio interfaces to support below.
config SND_KIRKWOOD_SOC_ARMADA370_DB
tristate "SoC Audio support for Armada 370 DB"
depends on SND_KIRKWOOD_SOC && (ARCH_MVEBU || COMPILE_TEST) && I2C
select SND_SOC_CS42L51
help
Say Y if you want to add support for SoC audio on
the Armada 370 Development Board.
config SND_KIRKWOOD_SOC_OPENRD config SND_KIRKWOOD_SOC_OPENRD
tristate "SoC Audio support for Kirkwood Openrd Client" tristate "SoC Audio support for Kirkwood Openrd Client"
depends on SND_KIRKWOOD_SOC && (MACH_OPENRD_CLIENT || MACH_OPENRD_ULTIMATE || COMPILE_TEST) depends on SND_KIRKWOOD_SOC && (MACH_OPENRD_CLIENT || MACH_OPENRD_ULTIMATE || COMPILE_TEST)
......
...@@ -4,6 +4,8 @@ obj-$(CONFIG_SND_KIRKWOOD_SOC) += snd-soc-kirkwood.o ...@@ -4,6 +4,8 @@ obj-$(CONFIG_SND_KIRKWOOD_SOC) += snd-soc-kirkwood.o
snd-soc-openrd-objs := kirkwood-openrd.o snd-soc-openrd-objs := kirkwood-openrd.o
snd-soc-t5325-objs := kirkwood-t5325.o snd-soc-t5325-objs := kirkwood-t5325.o
snd-soc-armada-370-db-objs := armada-370-db.o
obj-$(CONFIG_SND_KIRKWOOD_SOC_ARMADA370_DB) += snd-soc-armada-370-db.o
obj-$(CONFIG_SND_KIRKWOOD_SOC_OPENRD) += snd-soc-openrd.o obj-$(CONFIG_SND_KIRKWOOD_SOC_OPENRD) += snd-soc-openrd.o
obj-$(CONFIG_SND_KIRKWOOD_SOC_T5325) += snd-soc-t5325.o obj-$(CONFIG_SND_KIRKWOOD_SOC_T5325) += snd-soc-t5325.o
/*
* Copyright (C) 2014 Marvell
*
* Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of the
* License, or (at your option) any later version.
*/
#include <linux/module.h>
#include <linux/moduleparam.h>
#include <linux/interrupt.h>
#include <linux/platform_device.h>
#include <linux/slab.h>
#include <sound/soc.h>
#include <linux/of.h>
#include <linux/platform_data/asoc-kirkwood.h>
#include "../codecs/cs42l51.h"
static int a370db_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 *codec_dai = rtd->codec_dai;
unsigned int freq;
switch (params_rate(params)) {
default:
case 44100:
freq = 11289600;
break;
case 48000:
freq = 12288000;
break;
case 96000:
freq = 24576000;
break;
}
return snd_soc_dai_set_sysclk(codec_dai, 0, freq, SND_SOC_CLOCK_IN);
}
static struct snd_soc_ops a370db_ops = {
.hw_params = a370db_hw_params,
};
static const struct snd_soc_dapm_widget a370db_dapm_widgets[] = {
SND_SOC_DAPM_HP("Out Jack", NULL),
SND_SOC_DAPM_LINE("In Jack", NULL),
};
static const struct snd_soc_dapm_route a370db_route[] = {
{ "Out Jack", NULL, "HPL" },
{ "Out Jack", NULL, "HPR" },
{ "AIN1L", NULL, "In Jack" },
{ "AIN1L", NULL, "In Jack" },
};
static struct snd_soc_dai_link a370db_dai[] = {
{
.name = "CS42L51",
.stream_name = "analog",
.cpu_dai_name = "i2s",
.codec_dai_name = "cs42l51-hifi",
.dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_CBS_CFS,
.ops = &a370db_ops,
},
};
static struct snd_soc_card a370db = {
.name = "a370db",
.owner = THIS_MODULE,
.dai_link = a370db_dai,
.num_links = ARRAY_SIZE(a370db_dai),
.dapm_widgets = a370db_dapm_widgets,
.num_dapm_widgets = ARRAY_SIZE(a370db_dapm_widgets),
.dapm_routes = a370db_route,
.num_dapm_routes = ARRAY_SIZE(a370db_route),
};
static int a370db_probe(struct platform_device *pdev)
{
struct snd_soc_card *card = &a370db;
card->dev = &pdev->dev;
a370db_dai[0].cpu_of_node =
of_parse_phandle(pdev->dev.of_node,
"marvell,audio-controller", 0);
a370db_dai[0].platform_of_node = a370db_dai[0].cpu_of_node;
a370db_dai[0].codec_of_node =
of_parse_phandle(pdev->dev.of_node,
"marvell,audio-codec", 0);
return devm_snd_soc_register_card(card->dev, card);
}
static const struct of_device_id a370db_dt_ids[] = {
{ .compatible = "marvell,a370db-audio" },
{ },
};
static struct platform_driver a370db_driver = {
.driver = {
.name = "a370db-audio",
.owner = THIS_MODULE,
.of_match_table = of_match_ptr(a370db_dt_ids),
},
.probe = a370db_probe,
};
module_platform_driver(a370db_driver);
MODULE_AUTHOR("Thomas Petazzoni <thomas.petazzoni@free-electrons.com>");
MODULE_DESCRIPTION("ALSA SoC a370db audio client");
MODULE_LICENSE("GPL");
MODULE_ALIAS("platform:a370db-audio");
...@@ -633,6 +633,7 @@ static int kirkwood_i2s_dev_remove(struct platform_device *pdev) ...@@ -633,6 +633,7 @@ static int kirkwood_i2s_dev_remove(struct platform_device *pdev)
static struct of_device_id mvebu_audio_of_match[] = { static struct of_device_id mvebu_audio_of_match[] = {
{ .compatible = "marvell,kirkwood-audio" }, { .compatible = "marvell,kirkwood-audio" },
{ .compatible = "marvell,dove-audio" }, { .compatible = "marvell,dove-audio" },
{ .compatible = "marvell,armada370-audio" },
{ } { }
}; };
MODULE_DEVICE_TABLE(of, mvebu_audio_of_match); MODULE_DEVICE_TABLE(of, mvebu_audio_of_match);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment