ASoC: meson: axg-toddr: add sm1 support
On sm1, the maximum number TODDR inputs is extended to 16. Signed-off-by: Jerome Brunet <jbrunet@baylibre.com> Link: https://lore.kernel.org/r/20190905120120.31752-8-jbrunet@baylibre.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
52dd80d8f7
commit
5ac825c3d8
|
@ -25,6 +25,7 @@
|
||||||
#define CTRL0_TODDR_LSB_POS_MASK GENMASK(7, 3)
|
#define CTRL0_TODDR_LSB_POS_MASK GENMASK(7, 3)
|
||||||
#define CTRL0_TODDR_LSB_POS(x) ((x) << 3)
|
#define CTRL0_TODDR_LSB_POS(x) ((x) << 3)
|
||||||
#define CTRL1_TODDR_FORCE_FINISH BIT(25)
|
#define CTRL1_TODDR_FORCE_FINISH BIT(25)
|
||||||
|
#define CTRL1_SEL_SHIFT 28
|
||||||
|
|
||||||
#define TODDR_MSB_POS 31
|
#define TODDR_MSB_POS 31
|
||||||
|
|
||||||
|
@ -221,6 +222,70 @@ static const struct axg_fifo_match_data g12a_toddr_match_data = {
|
||||||
.dai_drv = &g12a_toddr_dai_drv
|
.dai_drv = &g12a_toddr_dai_drv
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const char * const sm1_toddr_sel_texts[] = {
|
||||||
|
"IN 0", "IN 1", "IN 2", "IN 3", "IN 4", "IN 5", "IN 6", "IN 7",
|
||||||
|
"IN 8", "IN 9", "IN 10", "IN 11", "IN 12", "IN 13", "IN 14", "IN 15"
|
||||||
|
};
|
||||||
|
|
||||||
|
static SOC_ENUM_SINGLE_DECL(sm1_toddr_sel_enum, FIFO_CTRL1, CTRL1_SEL_SHIFT,
|
||||||
|
sm1_toddr_sel_texts);
|
||||||
|
|
||||||
|
static const struct snd_kcontrol_new sm1_toddr_in_mux =
|
||||||
|
SOC_DAPM_ENUM("Input Source", sm1_toddr_sel_enum);
|
||||||
|
|
||||||
|
static const struct snd_soc_dapm_widget sm1_toddr_dapm_widgets[] = {
|
||||||
|
SND_SOC_DAPM_MUX("SRC SEL", SND_SOC_NOPM, 0, 0, &sm1_toddr_in_mux),
|
||||||
|
SND_SOC_DAPM_AIF_IN("IN 0", NULL, 0, SND_SOC_NOPM, 0, 0),
|
||||||
|
SND_SOC_DAPM_AIF_IN("IN 1", NULL, 0, SND_SOC_NOPM, 0, 0),
|
||||||
|
SND_SOC_DAPM_AIF_IN("IN 2", NULL, 0, SND_SOC_NOPM, 0, 0),
|
||||||
|
SND_SOC_DAPM_AIF_IN("IN 3", NULL, 0, SND_SOC_NOPM, 0, 0),
|
||||||
|
SND_SOC_DAPM_AIF_IN("IN 4", NULL, 0, SND_SOC_NOPM, 0, 0),
|
||||||
|
SND_SOC_DAPM_AIF_IN("IN 5", NULL, 0, SND_SOC_NOPM, 0, 0),
|
||||||
|
SND_SOC_DAPM_AIF_IN("IN 6", NULL, 0, SND_SOC_NOPM, 0, 0),
|
||||||
|
SND_SOC_DAPM_AIF_IN("IN 7", NULL, 0, SND_SOC_NOPM, 0, 0),
|
||||||
|
SND_SOC_DAPM_AIF_IN("IN 8", NULL, 0, SND_SOC_NOPM, 0, 0),
|
||||||
|
SND_SOC_DAPM_AIF_IN("IN 9", NULL, 0, SND_SOC_NOPM, 0, 0),
|
||||||
|
SND_SOC_DAPM_AIF_IN("IN 10", NULL, 0, SND_SOC_NOPM, 0, 0),
|
||||||
|
SND_SOC_DAPM_AIF_IN("IN 11", NULL, 0, SND_SOC_NOPM, 0, 0),
|
||||||
|
SND_SOC_DAPM_AIF_IN("IN 12", NULL, 0, SND_SOC_NOPM, 0, 0),
|
||||||
|
SND_SOC_DAPM_AIF_IN("IN 13", NULL, 0, SND_SOC_NOPM, 0, 0),
|
||||||
|
SND_SOC_DAPM_AIF_IN("IN 14", NULL, 0, SND_SOC_NOPM, 0, 0),
|
||||||
|
SND_SOC_DAPM_AIF_IN("IN 15", NULL, 0, SND_SOC_NOPM, 0, 0),
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct snd_soc_dapm_route sm1_toddr_dapm_routes[] = {
|
||||||
|
{ "Capture", NULL, "SRC SEL" },
|
||||||
|
{ "SRC SEL", "IN 0", "IN 0" },
|
||||||
|
{ "SRC SEL", "IN 1", "IN 1" },
|
||||||
|
{ "SRC SEL", "IN 2", "IN 2" },
|
||||||
|
{ "SRC SEL", "IN 3", "IN 3" },
|
||||||
|
{ "SRC SEL", "IN 4", "IN 4" },
|
||||||
|
{ "SRC SEL", "IN 5", "IN 5" },
|
||||||
|
{ "SRC SEL", "IN 6", "IN 6" },
|
||||||
|
{ "SRC SEL", "IN 7", "IN 7" },
|
||||||
|
{ "SRC SEL", "IN 8", "IN 8" },
|
||||||
|
{ "SRC SEL", "IN 9", "IN 9" },
|
||||||
|
{ "SRC SEL", "IN 10", "IN 10" },
|
||||||
|
{ "SRC SEL", "IN 11", "IN 11" },
|
||||||
|
{ "SRC SEL", "IN 12", "IN 12" },
|
||||||
|
{ "SRC SEL", "IN 13", "IN 13" },
|
||||||
|
{ "SRC SEL", "IN 14", "IN 14" },
|
||||||
|
{ "SRC SEL", "IN 15", "IN 15" },
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct snd_soc_component_driver sm1_toddr_component_drv = {
|
||||||
|
.dapm_widgets = sm1_toddr_dapm_widgets,
|
||||||
|
.num_dapm_widgets = ARRAY_SIZE(sm1_toddr_dapm_widgets),
|
||||||
|
.dapm_routes = sm1_toddr_dapm_routes,
|
||||||
|
.num_dapm_routes = ARRAY_SIZE(sm1_toddr_dapm_routes),
|
||||||
|
.ops = &g12a_fifo_pcm_ops
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct axg_fifo_match_data sm1_toddr_match_data = {
|
||||||
|
.component_drv = &sm1_toddr_component_drv,
|
||||||
|
.dai_drv = &g12a_toddr_dai_drv
|
||||||
|
};
|
||||||
|
|
||||||
static const struct of_device_id axg_toddr_of_match[] = {
|
static const struct of_device_id axg_toddr_of_match[] = {
|
||||||
{
|
{
|
||||||
.compatible = "amlogic,axg-toddr",
|
.compatible = "amlogic,axg-toddr",
|
||||||
|
@ -228,6 +293,9 @@ static const struct of_device_id axg_toddr_of_match[] = {
|
||||||
}, {
|
}, {
|
||||||
.compatible = "amlogic,g12a-toddr",
|
.compatible = "amlogic,g12a-toddr",
|
||||||
.data = &g12a_toddr_match_data,
|
.data = &g12a_toddr_match_data,
|
||||||
|
}, {
|
||||||
|
.compatible = "amlogic,sm1-toddr",
|
||||||
|
.data = &sm1_toddr_match_data,
|
||||||
}, {}
|
}, {}
|
||||||
};
|
};
|
||||||
MODULE_DEVICE_TABLE(of, axg_toddr_of_match);
|
MODULE_DEVICE_TABLE(of, axg_toddr_of_match);
|
||||||
|
|
Loading…
Reference in New Issue