From: Russell King <rmk+kernel@arm.linux.org.uk> To: linux-arm-kernel@lists.infradead.org, alsa-devel@alsa-project.org Cc: Takashi Iwai <tiwai@suse.de>, Mark Brown <broonie@kernel.org>, Liam Girdwood <lgirdwood@gmail.com> Subject: [PATCH RFC 08/13] ASoC: kirkwood: add DAPM widgets for input and output routing Date: Sun, 04 Aug 2013 20:29:04 +0100 [thread overview] Message-ID: <E1V63zE-0004li-4f@rmk-PC.arm.linux.org.uk> (raw) In-Reply-To: <20130804192136.GK23006@n2100.arm.linux.org.uk> Add DAPM widgets for the audio unit inputs and outputs. The SPDIF output route must only be used if the hardware actually supports it. Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk> --- sound/soc/kirkwood/kirkwood-i2s.c | 36 +++++++++++++++++++++++++++++++++++- sound/soc/kirkwood/kirkwood.h | 1 + 2 files changed, 36 insertions(+), 1 deletions(-) diff --git a/sound/soc/kirkwood/kirkwood-i2s.c b/sound/soc/kirkwood/kirkwood-i2s.c index 84dd9b0..3d039c3 100644 --- a/sound/soc/kirkwood/kirkwood-i2s.c +++ b/sound/soc/kirkwood/kirkwood-i2s.c @@ -242,7 +242,7 @@ static int kirkwood_i2s_play_trigger(struct snd_pcm_substream *substream, switch (cmd) { case SNDRV_PCM_TRIGGER_START: /* configure */ - ctl = priv->ctl_play; + ctl = priv->ctl_play & priv->ctl_play_mask; value = ctl & ~KIRKWOOD_PLAYCTL_ENABLE_MASK; writel(value, priv->io + KIRKWOOD_PLAYCTL); @@ -360,12 +360,39 @@ static int kirkwood_i2s_trigger(struct snd_pcm_substream *substream, int cmd, return 0; } +static int kirkwood_i2s_play_i2s(struct snd_soc_dapm_widget *w, + struct snd_kcontrol *ctl, int event) +{ + /* This works because the platform and cpu dai are the same dev */ + struct kirkwood_dma_data *priv = snd_soc_platform_get_drvdata(w->platform); + + if (SND_SOC_DAPM_EVENT_ON(event)) + priv->ctl_play_mask |= KIRKWOOD_PLAYCTL_I2S_EN; + else + priv->ctl_play_mask &= ~KIRKWOOD_PLAYCTL_I2S_EN; + + return 0; +} + +static const struct snd_soc_dapm_widget widgets[] = { + /* These widget names come from the names from the functional spec */ + SND_SOC_DAPM_AIF_OUT_E("i2sdo", "dma-tx", + 0, SND_SOC_NOPM, 0, 0, kirkwood_i2s_play_i2s, + SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), + SND_SOC_DAPM_AIF_IN("i2sdi", "dma-rx", + 0, SND_SOC_NOPM, 0, 0), +}; + static int kirkwood_i2s_probe(struct snd_soc_dai *dai) { struct kirkwood_dma_data *priv = snd_soc_dai_get_drvdata(dai); unsigned long value; unsigned int reg_data; + /* It appears that these can't be attached to the CPU DAI */ + snd_soc_dapm_new_controls(&dai->platform->dapm, + widgets, ARRAY_SIZE(widgets)); + /* put system in a "safe" state : */ /* disable audio interrupts */ writel(0xffffffff, priv->io + KIRKWOOD_INT_CAUSE); @@ -383,6 +410,8 @@ static int kirkwood_i2s_probe(struct snd_soc_dai *dai) reg_data |= 0x111D18; writel(reg_data, priv->io + 0x1200); + priv->ctl_play_mask = ~KIRKWOOD_PLAYCTL_ENABLE_MASK; + /* disable playback/record */ value = readl(priv->io + KIRKWOOD_PLAYCTL); value &= ~KIRKWOOD_PLAYCTL_ENABLE_MASK; @@ -413,12 +442,14 @@ static struct snd_soc_dai_driver kirkwood_i2s_dai = { .probe = kirkwood_i2s_probe, .remove = kirkwood_i2s_remove, .playback = { + .stream_name = "dma-tx", .channels_min = 1, .channels_max = 2, .rates = KIRKWOOD_I2S_RATES, .formats = KIRKWOOD_I2S_FORMATS, }, .capture = { + .stream_name = "dma-rx", .channels_min = 1, .channels_max = 2, .rates = KIRKWOOD_I2S_RATES, @@ -431,6 +462,7 @@ static struct snd_soc_dai_driver kirkwood_i2s_dai_extclk = { .probe = kirkwood_i2s_probe, .remove = kirkwood_i2s_remove, .playback = { + .stream_name = "dma-tx", .channels_min = 1, .channels_max = 2, .rates = SNDRV_PCM_RATE_8000_192000 | @@ -439,6 +471,7 @@ static struct snd_soc_dai_driver kirkwood_i2s_dai_extclk = { .formats = KIRKWOOD_I2S_FORMATS, }, .capture = { + .stream_name = "dma-rx", .channels_min = 1, .channels_max = 2, .rates = SNDRV_PCM_RATE_8000_192000 | @@ -534,6 +567,7 @@ static int kirkwood_i2s_dev_probe(struct platform_device *pdev) goto err_platform; } return 0; + err_platform: snd_soc_unregister_component(&pdev->dev); err_component: diff --git a/sound/soc/kirkwood/kirkwood.h b/sound/soc/kirkwood/kirkwood.h index f8e1ccc..3b70876 100644 --- a/sound/soc/kirkwood/kirkwood.h +++ b/sound/soc/kirkwood/kirkwood.h @@ -132,6 +132,7 @@ struct kirkwood_dma_data { void __iomem *io; struct clk *clk; struct clk *extclk; + uint32_t ctl_play_mask; uint32_t ctl_play; uint32_t ctl_rec; struct snd_pcm_substream *substream_play; -- 1.7.4.4
WARNING: multiple messages have this Message-ID (diff)
From: rmk+kernel@arm.linux.org.uk (Russell King) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH RFC 08/13] ASoC: kirkwood: add DAPM widgets for input and output routing Date: Sun, 04 Aug 2013 20:29:04 +0100 [thread overview] Message-ID: <E1V63zE-0004li-4f@rmk-PC.arm.linux.org.uk> (raw) In-Reply-To: <20130804192136.GK23006@n2100.arm.linux.org.uk> Add DAPM widgets for the audio unit inputs and outputs. The SPDIF output route must only be used if the hardware actually supports it. Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk> --- sound/soc/kirkwood/kirkwood-i2s.c | 36 +++++++++++++++++++++++++++++++++++- sound/soc/kirkwood/kirkwood.h | 1 + 2 files changed, 36 insertions(+), 1 deletions(-) diff --git a/sound/soc/kirkwood/kirkwood-i2s.c b/sound/soc/kirkwood/kirkwood-i2s.c index 84dd9b0..3d039c3 100644 --- a/sound/soc/kirkwood/kirkwood-i2s.c +++ b/sound/soc/kirkwood/kirkwood-i2s.c @@ -242,7 +242,7 @@ static int kirkwood_i2s_play_trigger(struct snd_pcm_substream *substream, switch (cmd) { case SNDRV_PCM_TRIGGER_START: /* configure */ - ctl = priv->ctl_play; + ctl = priv->ctl_play & priv->ctl_play_mask; value = ctl & ~KIRKWOOD_PLAYCTL_ENABLE_MASK; writel(value, priv->io + KIRKWOOD_PLAYCTL); @@ -360,12 +360,39 @@ static int kirkwood_i2s_trigger(struct snd_pcm_substream *substream, int cmd, return 0; } +static int kirkwood_i2s_play_i2s(struct snd_soc_dapm_widget *w, + struct snd_kcontrol *ctl, int event) +{ + /* This works because the platform and cpu dai are the same dev */ + struct kirkwood_dma_data *priv = snd_soc_platform_get_drvdata(w->platform); + + if (SND_SOC_DAPM_EVENT_ON(event)) + priv->ctl_play_mask |= KIRKWOOD_PLAYCTL_I2S_EN; + else + priv->ctl_play_mask &= ~KIRKWOOD_PLAYCTL_I2S_EN; + + return 0; +} + +static const struct snd_soc_dapm_widget widgets[] = { + /* These widget names come from the names from the functional spec */ + SND_SOC_DAPM_AIF_OUT_E("i2sdo", "dma-tx", + 0, SND_SOC_NOPM, 0, 0, kirkwood_i2s_play_i2s, + SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), + SND_SOC_DAPM_AIF_IN("i2sdi", "dma-rx", + 0, SND_SOC_NOPM, 0, 0), +}; + static int kirkwood_i2s_probe(struct snd_soc_dai *dai) { struct kirkwood_dma_data *priv = snd_soc_dai_get_drvdata(dai); unsigned long value; unsigned int reg_data; + /* It appears that these can't be attached to the CPU DAI */ + snd_soc_dapm_new_controls(&dai->platform->dapm, + widgets, ARRAY_SIZE(widgets)); + /* put system in a "safe" state : */ /* disable audio interrupts */ writel(0xffffffff, priv->io + KIRKWOOD_INT_CAUSE); @@ -383,6 +410,8 @@ static int kirkwood_i2s_probe(struct snd_soc_dai *dai) reg_data |= 0x111D18; writel(reg_data, priv->io + 0x1200); + priv->ctl_play_mask = ~KIRKWOOD_PLAYCTL_ENABLE_MASK; + /* disable playback/record */ value = readl(priv->io + KIRKWOOD_PLAYCTL); value &= ~KIRKWOOD_PLAYCTL_ENABLE_MASK; @@ -413,12 +442,14 @@ static struct snd_soc_dai_driver kirkwood_i2s_dai = { .probe = kirkwood_i2s_probe, .remove = kirkwood_i2s_remove, .playback = { + .stream_name = "dma-tx", .channels_min = 1, .channels_max = 2, .rates = KIRKWOOD_I2S_RATES, .formats = KIRKWOOD_I2S_FORMATS, }, .capture = { + .stream_name = "dma-rx", .channels_min = 1, .channels_max = 2, .rates = KIRKWOOD_I2S_RATES, @@ -431,6 +462,7 @@ static struct snd_soc_dai_driver kirkwood_i2s_dai_extclk = { .probe = kirkwood_i2s_probe, .remove = kirkwood_i2s_remove, .playback = { + .stream_name = "dma-tx", .channels_min = 1, .channels_max = 2, .rates = SNDRV_PCM_RATE_8000_192000 | @@ -439,6 +471,7 @@ static struct snd_soc_dai_driver kirkwood_i2s_dai_extclk = { .formats = KIRKWOOD_I2S_FORMATS, }, .capture = { + .stream_name = "dma-rx", .channels_min = 1, .channels_max = 2, .rates = SNDRV_PCM_RATE_8000_192000 | @@ -534,6 +567,7 @@ static int kirkwood_i2s_dev_probe(struct platform_device *pdev) goto err_platform; } return 0; + err_platform: snd_soc_unregister_component(&pdev->dev); err_component: diff --git a/sound/soc/kirkwood/kirkwood.h b/sound/soc/kirkwood/kirkwood.h index f8e1ccc..3b70876 100644 --- a/sound/soc/kirkwood/kirkwood.h +++ b/sound/soc/kirkwood/kirkwood.h @@ -132,6 +132,7 @@ struct kirkwood_dma_data { void __iomem *io; struct clk *clk; struct clk *extclk; + uint32_t ctl_play_mask; uint32_t ctl_play; uint32_t ctl_rec; struct snd_pcm_substream *substream_play; -- 1.7.4.4
next prev parent reply other threads:[~2013-08-04 19:29 UTC|newest] Thread overview: 143+ messages / expand[flat|nested] mbox.gz Atom feed top 2013-08-04 19:21 [PATCH RFC 00/13] Adding SPDIF support to kirkwood-i2s Russell King - ARM Linux 2013-08-04 19:21 ` Russell King - ARM Linux 2013-08-04 19:22 ` [PATCH RFC 01/13] ASoC: kirkwood: merge struct kirkwood_dma_priv with struct kirkwood_dma_data Russell King 2013-08-04 19:22 ` Russell King 2013-08-05 14:49 ` Mark Brown 2013-08-05 14:49 ` Mark Brown 2013-08-04 19:23 ` [PATCH RFC 02/13] ASoC: kirkwood: use devm_clk_get() for the external clock Russell King 2013-08-04 19:23 ` Russell King 2013-08-05 16:16 ` Mark Brown 2013-08-05 16:16 ` Mark Brown 2013-08-04 19:24 ` [PATCH RFC 03/13] ASoC: avoid duplicated DAI routes Russell King 2013-08-04 19:24 ` Russell King 2013-08-05 16:18 ` Mark Brown 2013-08-05 16:18 ` Mark Brown 2013-08-04 19:25 ` [PATCH RFC 04/13] ASoC: HACK: avoid creating duplicated widgets Russell King 2013-08-04 19:25 ` Russell King 2013-08-04 19:26 ` [PATCH RFC 05/13] ASoC: kirkwood: provide KIRKWOOD_PLAYCTL_ENABLE_MASK Russell King 2013-08-04 19:26 ` Russell King 2013-08-05 17:03 ` Mark Brown 2013-08-05 17:03 ` Mark Brown 2013-08-04 19:27 ` [PATCH RFC 06/13] ASoC: kirkwood: combine kirkwood-i2s and kirkwood-dma drivers Russell King 2013-08-04 19:27 ` Russell King 2013-08-05 10:13 ` Jean-Francois Moine 2013-08-05 10:13 ` Jean-Francois Moine 2013-08-05 10:20 ` Russell King - ARM Linux 2013-08-05 10:20 ` Russell King - ARM Linux 2013-08-05 17:04 ` Mark Brown 2013-08-05 17:04 ` Mark Brown 2013-08-04 19:28 ` [PATCH RFC 07/13] ASoC: kirkwood: move calculation of max buffer size to kirkwood.h Russell King 2013-08-04 19:28 ` Russell King 2013-08-05 17:07 ` Mark Brown 2013-08-05 17:07 ` Mark Brown 2013-08-04 19:29 ` Russell King [this message] 2013-08-04 19:29 ` [PATCH RFC 08/13] ASoC: kirkwood: add DAPM widgets for input and output routing Russell King 2013-08-04 19:30 ` [PATCH RFC 09/13] ASoC: kirkwood-openrd: add DAPM links between codec and cpu DAI Russell King 2013-08-04 19:30 ` Russell King 2013-08-04 19:31 ` [PATCH RFC 10/13] ASoC: kirkwood-t5325: " Russell King 2013-08-04 19:31 ` Russell King 2013-08-05 11:27 ` Mark Brown 2013-08-05 11:27 ` Mark Brown 2013-08-05 11:33 ` Russell King - ARM Linux 2013-08-05 11:33 ` Russell King - ARM Linux 2013-08-05 14:40 ` Mark Brown 2013-08-05 14:40 ` Mark Brown 2013-08-05 14:56 ` Russell King - ARM Linux 2013-08-05 14:56 ` Russell King - ARM Linux 2013-08-05 20:32 ` Russell King - ARM Linux 2013-08-05 20:32 ` Russell King - ARM Linux 2013-08-05 22:06 ` Mark Brown 2013-08-05 22:06 ` Mark Brown 2013-08-05 23:30 ` Russell King - ARM Linux 2013-08-05 23:30 ` Russell King - ARM Linux 2013-08-06 13:32 ` Mark Brown 2013-08-06 13:32 ` Mark Brown 2013-08-10 16:11 ` Russell King - ARM Linux 2013-08-10 16:11 ` Russell King - ARM Linux 2013-08-10 21:13 ` Russell King - ARM Linux 2013-08-10 21:13 ` Russell King - ARM Linux 2013-08-12 7:40 ` Liam Girdwood 2013-08-12 7:40 ` [alsa-devel] " Liam Girdwood 2013-08-12 8:28 ` Russell King - ARM Linux 2013-08-12 8:28 ` [alsa-devel] " Russell King - ARM Linux 2013-08-13 14:59 ` Liam Girdwood 2013-08-13 14:59 ` [alsa-devel] " Liam Girdwood 2013-08-20 10:25 ` Russell King - ARM Linux 2013-08-20 10:25 ` [alsa-devel] " Russell King - ARM Linux 2013-08-20 11:44 ` Mark Brown 2013-08-20 11:44 ` [alsa-devel] " Mark Brown 2013-08-20 11:49 ` Russell King - ARM Linux 2013-08-20 11:49 ` [alsa-devel] " Russell King - ARM Linux 2013-08-20 13:31 ` Russell King - ARM Linux 2013-08-20 13:31 ` [alsa-devel] " Russell King - ARM Linux 2013-08-20 18:50 ` Mark Brown 2013-08-20 18:50 ` [alsa-devel] " Mark Brown 2013-08-20 20:18 ` Russell King - ARM Linux 2013-08-20 20:18 ` [alsa-devel] " Russell King - ARM Linux 2013-08-22 19:22 ` Liam Girdwood 2013-08-22 19:22 ` [alsa-devel] " Liam Girdwood 2013-08-22 20:16 ` Russell King - ARM Linux 2013-08-22 20:16 ` [alsa-devel] " Russell King - ARM Linux 2013-08-23 12:13 ` Liam Girdwood 2013-08-23 12:13 ` [alsa-devel] " Liam Girdwood 2013-08-23 12:58 ` Russell King - ARM Linux 2013-08-23 12:58 ` [alsa-devel] " Russell King - ARM Linux 2013-08-23 16:58 ` Mark Brown 2013-08-23 16:58 ` [alsa-devel] " Mark Brown 2013-08-23 17:45 ` Russell King - ARM Linux 2013-08-23 17:45 ` [alsa-devel] " Russell King - ARM Linux 2013-08-28 1:22 ` Mark Brown 2013-08-28 1:22 ` [alsa-devel] " Mark Brown 2013-08-29 21:12 ` Liam Girdwood 2013-08-30 11:27 ` Russell King - ARM Linux 2013-08-30 11:27 ` [alsa-devel] " Russell King - ARM Linux 2013-08-30 16:10 ` Russell King - ARM Linux 2013-08-30 16:10 ` [alsa-devel] " Russell King - ARM Linux 2013-08-11 12:36 ` Mark Brown 2013-08-11 12:36 ` Mark Brown 2013-08-04 19:32 ` [PATCH RFC 11/13] ASoC: spdif_transceiver: add output pin widget Russell King 2013-08-04 19:32 ` Russell King 2013-08-05 11:33 ` Mark Brown 2013-08-05 11:33 ` Mark Brown 2013-08-04 19:33 ` [PATCH RFC 12/13] ASoC: kirkwood: add SPDIF output support Russell King 2013-08-04 19:33 ` Russell King 2013-08-04 19:34 ` [PATCH RFC 13/13] ASoC: kirkwood: add IEC958 channel status support Russell King 2013-08-04 19:34 ` Russell King 2013-08-04 21:45 ` [PATCH RFC 00/13] Adding SPDIF support to kirkwood-i2s Sebastian Hesselbarth 2013-08-04 21:45 ` Sebastian Hesselbarth 2013-08-05 8:43 ` Thomas Petazzoni 2013-08-05 8:43 ` Thomas Petazzoni 2013-08-05 8:53 ` Russell King - ARM Linux 2013-08-05 8:53 ` Russell King - ARM Linux 2013-08-05 9:06 ` Thomas Petazzoni 2013-08-05 9:06 ` Thomas Petazzoni 2013-08-05 11:59 ` Mark Brown 2013-08-05 11:59 ` Mark Brown 2013-08-05 13:06 ` Sebastian Hesselbarth 2013-08-05 13:06 ` Sebastian Hesselbarth 2013-08-05 14:07 ` Mark Brown 2013-08-05 14:07 ` Mark Brown 2013-08-05 15:04 ` Sebastian Hesselbarth 2013-08-05 15:04 ` Sebastian Hesselbarth 2013-08-05 16:59 ` Mark Brown 2013-08-05 16:59 ` Mark Brown 2013-08-05 18:14 ` Sebastian Hesselbarth 2013-08-05 18:14 ` Sebastian Hesselbarth 2013-08-05 18:59 ` Mark Brown 2013-08-05 18:59 ` Mark Brown 2013-08-05 22:47 ` Stephen Warren 2013-08-05 22:47 ` [alsa-devel] " Stephen Warren 2013-08-05 14:10 ` Lars-Peter Clausen 2013-08-05 14:10 ` [alsa-devel] " Lars-Peter Clausen 2013-08-05 15:03 ` Mark Brown 2013-08-05 15:03 ` [alsa-devel] " Mark Brown 2013-08-06 0:02 ` Kuninori Morimoto 2013-08-06 0:02 ` [alsa-devel] " Kuninori Morimoto 2013-08-30 7:20 ` Kuninori Morimoto 2013-08-30 7:20 ` [alsa-devel] " Kuninori Morimoto 2013-08-30 8:26 ` Lars-Peter Clausen 2013-08-30 8:26 ` [alsa-devel] " Lars-Peter Clausen 2013-08-30 9:56 ` Mark Brown 2013-08-30 9:56 ` [alsa-devel] " Mark Brown 2013-08-05 14:59 ` Russell King - ARM Linux 2013-08-05 14:59 ` Russell King - ARM Linux
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=E1V63zE-0004li-4f@rmk-PC.arm.linux.org.uk \ --to=rmk+kernel@arm.linux.org.uk \ --cc=alsa-devel@alsa-project.org \ --cc=broonie@kernel.org \ --cc=lgirdwood@gmail.com \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=tiwai@suse.de \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.