diff mbox series

ASoC: snd-soc-dummy: add Device Tree support

Message ID 20210621074152.306362-1-judyhsiao@chromium.org
State New
Headers show
Series ASoC: snd-soc-dummy: add Device Tree support | expand

Commit Message

Judy Hsiao June 21, 2021, 7:41 a.m. UTC
Support for loading the snd-soc-dummy via DeviceTree.
This is useful to create dummy codec devices where we need to have some
DAI links without a real Codec.

Signed-off-by: Judy Hsiao <judyhsiao@chromium.org>
---
 .../devicetree/bindings/sound/snd-soc-dummy.txt  | 16 ++++++++++++++++
 sound/soc/soc-utils.c                            | 11 +++++++++++
 2 files changed, 27 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/sound/snd-soc-dummy.txt

Comments

Mark Brown June 21, 2021, 11:45 a.m. UTC | #1
On Mon, Jun 21, 2021 at 03:41:52PM +0800, Judy Hsiao wrote:

> Support for loading the snd-soc-dummy via DeviceTree.
> This is useful to create dummy codec devices where we need to have some
> DAI links without a real Codec.

Why would it be useful to create DAI links to a dummy device that has
no properties?  If you've got a device with no software control it's
still going to have some limits on things like what formats and sample
rates it can accept so you should describe that in DT.

Please try to keep the CC lists for patches you are submitting relevant
to the patch, people get a lot of mail and reviews for irrelevant
patches add to the noise.
Judy Hsiao June 22, 2021, 4:10 p.m. UTC | #2
On Mon, Jun 21, 2021 at 7:46 PM Mark Brown <broonie@kernel.org> wrote:
>
> On Mon, Jun 21, 2021 at 03:41:52PM +0800, Judy Hsiao wrote:
>
> > Support for loading the snd-soc-dummy via DeviceTree.
> > This is useful to create dummy codec devices where we need to have some
> > DAI links without a real Codec.
>
> Why would it be useful to create DAI links to a dummy device that has
> no properties?  If you've got a device with no software control it's
> still going to have some limits on things like what formats and sample
> rates it can accept so you should describe that in DT.

Thanks for your review comment.
This patch is used to support multi-channel where we want one codec to
control the only GPIO shared by 4 amps.
(Please refer to
:https://patchwork.kernel.org/project/alsa-devel/patch/20210526154704.114957-1-judyhsiao@chromium.org/)

In snd_soc_runtime_calc_hw(), by creating dummy codecs that share a
DAI link with a real codec:
  1. The min/ max channel of  CPU DAI will be directly adopted.
  2. The formats and sample rates of the DAI link will be determined
by the real codec unless the real codec supports the rate
      and format that do not intersect with the rate and format of
snd-soc-dummy.
That is the reason why we don’t specify the format and sample rates of
the dummy codec with the real codec determining the properties .

Does reposting a new patch with  a more clear commit message to
describe the use case sound good to you?
>
> Please try to keep the CC lists for patches you are submitting relevant
> to the patch, people get a lot of mail and reviews for irrelevant
> patches add to the noise.
Sorry about that. I have adjusted the CC lists.
Mark Brown June 22, 2021, 4:23 p.m. UTC | #3
On Wed, Jun 23, 2021 at 12:10:53AM +0800, Judy Hsiao wrote:

> Thanks for your review comment.
> This patch is used to support multi-channel where we want one codec to
> control the only GPIO shared by 4 amps.

So you've got 4 instances of the same CODEC?  Then I'd expect to see
those all individually represented in DT.  Or if there's a single
physical CODEC then I'm not sure what the dummies are for?

> In snd_soc_runtime_calc_hw(), by creating dummy codecs that share a
> DAI link with a real codec:
>   1. The min/ max channel of  CPU DAI will be directly adopted.
>   2. The formats and sample rates of the DAI link will be determined
> by the real codec unless the real codec supports the rate
>       and format that do not intersect with the rate and format of
> snd-soc-dummy.
> That is the reason why we don’t specify the format and sample rates of
> the dummy codec with the real codec determining the properties .

It's not clear to me why you'd not just describe the actual CODECs here
rather than using a dummy CODEC, the fact that the dummy CODEC is doing
what you want is just an accident of the implementation rather than a
description of the hardware.
Judy Hsiao June 23, 2021, 2:29 p.m. UTC | #4
On Wed, Jun 23, 2021 at 12:23 AM Mark Brown <broonie@kernel.org> wrote:
>
> On Wed, Jun 23, 2021 at 12:10:53AM +0800, Judy Hsiao wrote:
>
> > Thanks for your review comment.
> > This patch is used to support multi-channel where we want one codec to
> > control the only GPIO shared by 4 amps.
>
> So you've got 4 instances of the same CODEC?  Then I'd expect to see
> those all individually represented in DT.  Or if there's a single
> physical CODEC then I'm not sure what the dummies are for?
>
> > In snd_soc_runtime_calc_hw(), by creating dummy codecs that share a
> > DAI link with a real codec:
> >   1. The min/ max channel of  CPU DAI will be directly adopted.
> >   2. The formats and sample rates of the DAI link will be determined
> > by the real codec unless the real codec supports the rate
> >       and format that do not intersect with the rate and format of
> > snd-soc-dummy.
> > That is the reason why we don’t specify the format and sample rates of
> > the dummy codec with the real codec determining the properties .
>
> It's not clear to me why you'd not just describe the actual CODECs here
> rather than using a dummy CODEC, the fact that the dummy CODEC is doing
> what you want is just an accident of the implementation rather than a
> description of the hardware.

Thanks for your inputs. Specifying four codes for the multi-channel works fine.
We have not thought of specifying four codes before as we want to avoid loading
the codec driver multiple times, but actually loading the
snd-soc-dummy just has the
similar cost. By specifying four codes, the dtsi file describes the
real hardware schematic.
I will specify four codec in the dtsi file to support the four channel
use case and this
snd-soc-dummy patch is not needed. Thanks for the discussion!
diff mbox series

Patch

diff --git a/Documentation/devicetree/bindings/sound/snd-soc-dummy.txt b/Documentation/devicetree/bindings/sound/snd-soc-dummy.txt
new file mode 100644
index 000000000000..7fa8c5751e62
--- /dev/null
+++ b/Documentation/devicetree/bindings/sound/snd-soc-dummy.txt
@@ -0,0 +1,16 @@ 
+* snd-soc-dummy
+
+This node models the snd-soc-dummy.
+This is useful to create dummy codec devices where we need to have
+some DAI links without a real Codec.
+
+Required properties:
+- compatible   : "asoc,snd-soc-dummy"
+
+
+Example:
+
+dummy_codec {
+	compatible = "asoc,snd-soc-dummy";
+	#sound-dai-cells = <0>;
+};
diff --git a/sound/soc/soc-utils.c b/sound/soc/soc-utils.c
index 299b5d6ebfd1..def2cc687415 100644
--- a/sound/soc/soc-utils.c
+++ b/sound/soc/soc-utils.c
@@ -7,6 +7,8 @@ 
 // Author: Mark Brown <broonie@opensource.wolfsonmicro.com>
 //         Liam Girdwood <lrg@slimlogic.co.uk>
 
+#include <linux/module.h>
+#include <linux/of.h>
 #include <linux/platform_device.h>
 #include <linux/export.h>
 #include <sound/core.h>
@@ -181,9 +183,18 @@  static int snd_soc_dummy_probe(struct platform_device *pdev)
 	return ret;
 }
 
+#ifdef CONFIG_OF
+static const struct of_device_id soc_dummy_device_id[] = {
+	{ .compatible = "asoc,snd-soc-dummy" },
+	{}
+};
+MODULE_DEVICE_TABLE(of, soc_dummy_device_id);
+#endif
+
 static struct platform_driver soc_dummy_driver = {
 	.driver = {
 		.name = "snd-soc-dummy",
+		.of_match_table = of_match_ptr(soc_dummy_device_id),
 	},
 	.probe = snd_soc_dummy_probe,
 };