From: Lars-Peter Clausen <lars@metafoo.de>
To: Russell King - ARM Linux <linux@arm.linux.org.uk>
Cc: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>,
Andrew Lunn <andrew@lunn.ch>,
alsa-devel@alsa-project.org, Jason Cooper <jason@lakedaemon.net>,
Jean-Francois Moine <moinejf@free.fr>,
Takashi Iwai <tiwai@suse.de>, Liam Girdwood <lgirdwood@gmail.com>,
Mark Brown <broonie@kernel.org>,
linux-arm-kernel@lists.infradead.org,
Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
Subject: Re: [PATCH 00/14] SPDIF support
Date: Sun, 01 Sep 2013 12:08:37 +0200 [thread overview]
Message-ID: <52231225.8080704@metafoo.de> (raw)
In-Reply-To: <20130901085121.GO6617@n2100.arm.linux.org.uk>
On 09/01/2013 10:51 AM, Russell King - ARM Linux wrote:
> On Sun, Sep 01, 2013 at 09:42:29AM +0200, Lars-Peter Clausen wrote:
>> Lets try to wrap up the situation:
>>
>> * The hardware has one audio stream, but two DAIs, one for SPDIF one for
>> I2S. The same audio stream is sent to both DAIs at the same time (It is
>> possible though to disable one or both of the DAIs).
>
> More or less. To be more clear: audio DMA commences when either one or
> both outputs are enabled, and stops when both are disabled.
>
> This is why either only one can be enabled, or if both are to be enabled,
> both enable bits must be set in one register write, and when disabled,
> both bits must be cleared in one register write.
>
> So, lets say for argument sake that you wanted to go from disabled to a
> single output, then to dual output, back to single output, and finally
> back to disabled. You would need this sequence:
>
> - enable single output
> ...
> - disable single output
> - wait for audio unit to indicate not busy
> - enable both outputs
> ...
> - disable both outputs
> - wait for audio unit to indicate not busy
> - enable single output
> ...
> - disable single output
> - wait for audio unit to indicate not busy
>
>> * This is something new and not supported by classical ASoC.
>>
>> * DPCM has support for this, but DPCM is still new, unstable,
>> under-documented and apparently has a couple of bugs.
>>
>> * With non-DPCM ASoC it is possible to have two DAIs if they are not used at
>> the same time (which is what I recommend you implement first, before trying
>> to get DPCM running).
>
> If you'd look at my other responses, you'll see that this is what I tried
> back in May, and I was unhappy about that solution because:
>
> 1. there is no guarantee that they couldn't be used at the same time.
> 2. this results in two entirely separate "CPU DAI"s, each with their
> own independent sample rate/format settings, which if they happen
> to be used together will result in fighting over the same register(s).
I know, but you can make it policy that only one of them may be used at a
time. Furthermore you can add a check to the startup() callback to return an
error, if the other DAI is active.
>
> Moreover, this results in a completely different set of changes to the
> driver which are in an opposing direction to the DPCM approach.
>
I think the patch is actually going to be maybe a 100 lines or so and it
gives you something to work with and unlike your current approach is not
trying to work around the framework. Then you can add the other patches
adding the SPDIF controls on top of it. Once that's done you can concentrate
on trying to get DPCM running.
>> I still don't know if you actually need to feature of being able to output
>> the same audio signal to both DAIs, do you have such a board?
>
> This board has the SPDIF connected to a TOSlink and a HDMI transmitter.
> It also has the I2S connected only to the HDMI transmitter, though it's
> common at the moment to only use the SPDIF output to drive them both.
Ok, so things will work fine with the either/or approach for now.
[...]
>> But even then
>> I still recommend to first get the non-DPCM either/or approach implemented
>> and once that's working try to get DPCM running. Which probably involves
>> fixing some of the DPCM issues in the core. As I said sending the same audio
>> streams to two DAIs is something new and if there was no DPCM yet you'd need
>> to add support for sending the same stream to multiple DAIs. So either way
>> you'd have to get your hands dirty.
>
> Could you comment on the patch which creates the two front-end DAIs which
> I sent in a different sub-thread - the one which I indicated was from back
> in May time. It isn't quite suitable for submission because the base it
> applies to has changed since then, but it should be sufficient to give an
> idea of the solution I was trying to implement there.
The patch looks OK, except for maybe the way the names for the DAIs are
created. That probably something that's better handled in the core in a
generic way.
- Lars
next prev parent reply other threads:[~2013-09-01 10:07 UTC|newest]
Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-08-31 12:34 [PATCH 00/14] SPDIF support Russell King - ARM Linux
2013-08-31 12:35 ` [PATCH 01/14] ASoC: kirkwood: merge struct kirkwood_dma_priv with struct kirkwood_dma_data Russell King
2013-08-31 12:36 ` [PATCH 02/14] ASoC: kirkwood: use devm_clk_get() for the external clock Russell King
2013-08-31 12:37 ` [PATCH 03/14] ASoC: avoid duplicated DAI routes Russell King
2013-08-31 12:38 ` [PATCH 04/14] ASoC: kirkwood: provide KIRKWOOD_PLAYCTL_ENABLE_MASK Russell King
2013-08-31 12:39 ` [PATCH 05/14] ASoC: kirkwood: combine kirkwood-i2s and kirkwood-dma drivers Russell King
2013-08-31 12:40 ` [PATCH 06/14] ASoC: kirkwood: move calculation of max buffer size to kirkwood.h Russell King
2013-08-31 12:41 ` [PATCH 07/14] ASoC: spdif_transceiver: add output pin widget Russell King
2013-08-31 12:42 ` [PATCH 08/14] ASoC: kirkwood: prefer external clock over internal clock Russell King
2013-09-01 16:41 ` Jean-Francois Moine
2013-09-02 11:01 ` Mark Brown
2013-09-02 14:17 ` Russell King - ARM Linux
2013-08-31 12:43 ` [PATCH 09/14] ASoC: kirkwood-dma: remove IEC958_SUBFRAME formats Russell King
2013-09-02 11:02 ` Mark Brown
2013-08-31 12:44 ` [PATCH 10/14] ASoC: kirkwood: add DAPM widgets for input and output routing Russell King
2013-08-31 12:45 ` [PATCH 11/14] ASoC: kirkwood-openrd: add DAPM links between codec and cpu DAI Russell King
2013-08-31 12:46 ` [PATCH 12/14] ASoC: kirkwood-t5325: " Russell King
2013-08-31 12:47 ` [PATCH 13/14] ASoC: kirkwood: add SPDIF output support Russell King
2013-09-03 11:17 ` Mark Brown
2013-09-03 11:38 ` Russell King - ARM Linux
2013-09-03 11:59 ` Mark Brown
2013-09-03 13:34 ` Russell King - ARM Linux
2013-09-04 16:34 ` Mark Brown
2013-08-31 12:48 ` [PATCH 14/14] ASoC: kirkwood: add IEC958 channel status support Russell King
2013-08-31 15:28 ` [PATCH 00/14] SPDIF support Lars-Peter Clausen
2013-08-31 17:28 ` Mark Brown
2013-08-31 19:19 ` [alsa-devel] " Russell King - ARM Linux
2013-08-31 20:46 ` Lars-Peter Clausen
2013-08-31 21:05 ` Russell King - ARM Linux
2013-08-31 22:23 ` Russell King - ARM Linux
2013-09-01 12:19 ` Mark Brown
2013-09-01 12:34 ` Russell King - ARM Linux
2013-09-01 13:02 ` Russell King - ARM Linux
2013-09-02 14:06 ` Mark Brown
2013-09-02 14:16 ` Russell King - ARM Linux
2013-09-02 16:27 ` Mark Brown
2013-09-02 16:59 ` Russell King - ARM Linux
2013-09-02 20:44 ` Mark Brown
2013-09-02 21:18 ` Russell King - ARM Linux
2013-09-02 22:35 ` Mark Brown
2013-09-02 23:00 ` Russell King - ARM Linux
2013-09-04 19:33 ` Mark Brown
2013-09-01 6:42 ` Russell King - ARM Linux
2013-09-01 7:42 ` [alsa-devel] " Lars-Peter Clausen
2013-09-01 8:51 ` Russell King - ARM Linux
2013-09-01 10:08 ` Lars-Peter Clausen [this message]
2013-09-01 12:04 ` Russell King - ARM Linux
2013-09-01 17:32 ` Lars-Peter Clausen
2013-09-01 11:51 ` Mark Brown
2013-09-01 12:15 ` Russell King - ARM Linux
2013-09-01 17:05 ` Mark Brown
2013-08-31 19:14 ` Russell King - ARM Linux
2013-08-31 19:34 ` Russell King - ARM Linux
2013-09-02 14:47 ` Mark Brown
2013-09-02 14:52 ` Russell King - ARM Linux
2013-09-02 14:57 ` Russell King - ARM Linux
2013-09-02 16:41 ` Mark Brown
2013-08-31 20:45 ` Lars-Peter Clausen
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=52231225.8080704@metafoo.de \
--to=lars@metafoo.de \
--cc=alsa-devel@alsa-project.org \
--cc=andrew@lunn.ch \
--cc=broonie@kernel.org \
--cc=jason@lakedaemon.net \
--cc=lgirdwood@gmail.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux@arm.linux.org.uk \
--cc=moinejf@free.fr \
--cc=sebastian.hesselbarth@gmail.com \
--cc=thomas.petazzoni@free-electrons.com \
--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: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).