2023-08-01 09:00:23

by Daniel Baluta (OSS)

[permalink] [raw]
Subject: [PATCH 1/2] ASoC: simple-card: Introduce playback-only/capture only DAI link flags

From: Daniel Baluta <[email protected]>

We need this to signal that DAI link supports only 1 direction that
can only be either playback or capture.

Signed-off-by: Daniel Baluta <[email protected]>
---
include/sound/simple_card_utils.h | 5 +++++
sound/soc/generic/simple-card-utils.c | 27 +++++++++++++++++++++++++++
sound/soc/generic/simple-card.c | 10 ++++++++++
3 files changed, 42 insertions(+)

diff --git a/include/sound/simple_card_utils.h b/include/sound/simple_card_utils.h
index d1a95bc33c56..47d90edaf6fe 100644
--- a/include/sound/simple_card_utils.h
+++ b/include/sound/simple_card_utils.h
@@ -135,6 +135,11 @@ int asoc_simple_parse_daifmt(struct device *dev,
struct device_node *codec,
char *prefix,
unsigned int *retfmt);
+int asoc_simple_parse_link_direction(struct device *dev,
+ struct device_node *node,
+ char *prefix,
+ bool *is_playback_only,
+ bool *is_capture_only);
int asoc_simple_parse_tdm_width_map(struct device *dev, struct device_node *np,
struct asoc_simple_dai *dai);

diff --git a/sound/soc/generic/simple-card-utils.c b/sound/soc/generic/simple-card-utils.c
index 5b18a4af022f..e04d2995cf0b 100644
--- a/sound/soc/generic/simple-card-utils.c
+++ b/sound/soc/generic/simple-card-utils.c
@@ -115,6 +115,33 @@ int asoc_simple_parse_daifmt(struct device *dev,
}
EXPORT_SYMBOL_GPL(asoc_simple_parse_daifmt);

+int asoc_simple_parse_link_direction(struct device *dev, struct device_node *node, char *prefix,
+ bool *playback_only, bool *capture_only)
+{
+ bool is_playback_only = false;
+ bool is_capture_only = false;
+
+ if (!prefix)
+ prefix = "";
+
+ if (of_property_read_bool(node, "playback-only"))
+ is_playback_only = true;
+
+ if (of_property_read_bool(node, "capture-only"))
+ is_capture_only = true;
+
+ if (is_playback_only && is_capture_only) {
+ dev_err(dev, "Invalid configuration, both playback-only / capture-only are set\n");
+ return -EINVAL;
+ }
+
+ *playback_only = is_playback_only;
+ *capture_only = is_capture_only;
+
+ return 0;
+}
+EXPORT_SYMBOL_GPL(asoc_simple_parse_link_direction);
+
int asoc_simple_parse_tdm_width_map(struct device *dev, struct device_node *np,
struct asoc_simple_dai *dai)
{
diff --git a/sound/soc/generic/simple-card.c b/sound/soc/generic/simple-card.c
index 190f11366e84..1fb34a51636d 100644
--- a/sound/soc/generic/simple-card.c
+++ b/sound/soc/generic/simple-card.c
@@ -195,6 +195,7 @@ static int simple_link_init(struct asoc_simple_priv *priv,
{
struct device *dev = simple_priv_to_dev(priv);
struct snd_soc_dai_link *dai_link = simple_priv_to_link(priv, li->link);
+ bool is_playback_only, is_capture_only;
int ret;

ret = asoc_simple_parse_daifmt(dev, node, codec,
@@ -202,6 +203,15 @@ static int simple_link_init(struct asoc_simple_priv *priv,
if (ret < 0)
return 0;

+ ret = asoc_simple_parse_link_direction(dev, node, prefix,
+ &is_playback_only,
+ &is_capture_only);
+ if (ret < 0)
+ return 0;
+
+ dai_link->playback_only = is_playback_only;
+ dai_link->capture_only = is_capture_only;
+
dai_link->init = asoc_simple_dai_init;
dai_link->ops = &simple_ops;

--
2.25.1



2023-08-02 00:49:26

by Kuninori Morimoto

[permalink] [raw]
Subject: Re: [PATCH 1/2] ASoC: simple-card: Introduce playback-only/capture only DAI link flags


Hi Daniel

Thank you for your patch.
This is not a big deal, but...

> We need this to signal that DAI link supports only 1 direction that
> can only be either playback or capture.
(snip)
> + if (of_property_read_bool(node, "playback-only"))
> + is_playback_only = true;
> +
> + if (of_property_read_bool(node, "capture-only"))
> + is_capture_only = true;

More simply

is_playback_only = of_property_read_bool(node, "playback-only");
is_capture_only = of_property_read_bool(node, "capture-only");

> + ret = asoc_simple_parse_link_direction(dev, node, prefix,
> + &is_playback_only,
> + &is_capture_only);
> + if (ret < 0)
> + return 0;
> +
> + dai_link->playback_only = is_playback_only;
> + dai_link->capture_only = is_capture_only;

It doesn't overwrite when error case, so
More simply

ret = asoc_simple_parse_link_direction(dev, node, prefix,
&dai_link->playback_only,
&dai_link->capture_only);


Thank you for your help !!

Best regards
---
Kuninori Morimoto

2023-08-02 09:06:20

by Daniel Baluta

[permalink] [raw]
Subject: Re: [PATCH 1/2] ASoC: simple-card: Introduce playback-only/capture only DAI link flags

On Wed, Aug 2, 2023 at 2:31 AM Kuninori Morimoto
<[email protected]> wrote:
>
>
> Hi Daniel
>
> Thank you for your patch.
> This is not a big deal, but...
>
> > We need this to signal that DAI link supports only 1 direction that
> > can only be either playback or capture.
> (snip)
> > + if (of_property_read_bool(node, "playback-only"))
> > + is_playback_only = true;
> > +
> > + if (of_property_read_bool(node, "capture-only"))
> > + is_capture_only = true;
>
> More simply
>
> is_playback_only = of_property_read_bool(node, "playback-only");
> is_capture_only = of_property_read_bool(node, "capture-only");


Good point. Will fix in v2.

>
> > + ret = asoc_simple_parse_link_direction(dev, node, prefix,
> > + &is_playback_only,
> > + &is_capture_only);
> > + if (ret < 0)
> > + return 0;
> > +
> > + dai_link->playback_only = is_playback_only;
> > + dai_link->capture_only = is_capture_only;
>
> It doesn't overwrite when error case, so
> More simply
>
> ret = asoc_simple_parse_link_direction(dev, node, prefix,
> &dai_link->playback_only,
> &dai_link->capture_only);

Can do this because dai_link->playback_only is a bitfield.