Message ID | 20230801082433.548206-2-daniel.baluta@oss.nxp.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | ASoC: simple-card: Introduce playback-only/capture-only DAI link flags | expand |
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
On Wed, Aug 2, 2023 at 2:31 AM Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> 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.
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;