lkml.org 
[lkml]   [2022]   [Mar]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[RFC PATCH 4/5] ASoC: Introduce snd_soc_of_get_dai_link_cpus
    Date
    This function is an analogue of snd_soc_of_get_dai_link_codecs to help
    machine drivers read CPU DAI lists from devicetrees.

    Signed-off-by: Martin Povišer <povik+lin@cutebit.org>
    ---
    include/sound/soc.h | 4 +++
    sound/soc/soc-core.c | 80 ++++++++++++++++++++++++++++++++++++++++++++
    2 files changed, 84 insertions(+)

    diff --git a/include/sound/soc.h b/include/sound/soc.h
    index 0ab664500b8f..0bf9d1d0768c 100644
    --- a/include/sound/soc.h
    +++ b/include/sound/soc.h
    @@ -1266,6 +1266,10 @@ int snd_soc_of_get_dai_link_codecs(struct device *dev,
    struct device_node *of_node,
    struct snd_soc_dai_link *dai_link);
    void snd_soc_of_put_dai_link_codecs(struct snd_soc_dai_link *dai_link);
    +int snd_soc_of_get_dai_link_cpus(struct device *dev,
    + struct device_node *of_node,
    + struct snd_soc_dai_link *dai_link);
    +void snd_soc_of_put_dai_link_cpus(struct snd_soc_dai_link *dai_link);

    int snd_soc_add_pcm_runtime(struct snd_soc_card *card,
    struct snd_soc_dai_link *dai_link);
    diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
    index 0bf05d98ec0d..a97476ec01ab 100644
    --- a/sound/soc/soc-core.c
    +++ b/sound/soc/soc-core.c
    @@ -3400,6 +3400,86 @@ int snd_soc_of_get_dai_link_codecs(struct device *dev,
    }
    EXPORT_SYMBOL_GPL(snd_soc_of_get_dai_link_codecs);

    +/*
    + * snd_soc_of_put_dai_link_cpus - Dereference device nodes in the codecs array
    + * @dai_link: DAI link
    + *
    + * Dereference device nodes acquired by snd_soc_of_get_dai_link_cpus().
    + */
    +void snd_soc_of_put_dai_link_cpus(struct snd_soc_dai_link *dai_link)
    +{
    + struct snd_soc_dai_link_component *component;
    + int index;
    +
    + for_each_link_cpus(dai_link, index, component) {
    + if (!component->of_node)
    + break;
    + of_node_put(component->of_node);
    + component->of_node = NULL;
    + }
    +}
    +EXPORT_SYMBOL_GPL(snd_soc_of_put_dai_link_cpus);
    +
    +/*
    + * snd_soc_of_get_dai_link_cpus - Parse a list of CPU DAIs in the devicetree
    + * @dev: Card device
    + * @of_node: Device node
    + * @dai_link: DAI link
    + *
    + * Is analogous to snd_soc_of_get_dai_link_codecs but parses a list of CPU DAIs
    + * instead.
    + *
    + * Returns 0 for success
    + */
    +int snd_soc_of_get_dai_link_cpus(struct device *dev,
    + struct device_node *of_node,
    + struct snd_soc_dai_link *dai_link)
    +{
    + struct of_phandle_args args;
    + struct snd_soc_dai_link_component *component;
    + char *name;
    + int index, num_codecs, ret;
    +
    + /* Count the number of CODECs */
    + name = "sound-dai";
    + num_codecs = of_count_phandle_with_args(of_node, name,
    + "#sound-dai-cells");
    + if (num_codecs <= 0) {
    + if (num_codecs == -ENOENT)
    + dev_err(dev, "No 'sound-dai' property\n");
    + else
    + dev_err(dev, "Bad phandle in 'sound-dai'\n");
    + return num_codecs;
    + }
    + component = devm_kcalloc(dev,
    + num_codecs, sizeof(*component),
    + GFP_KERNEL);
    + if (!component)
    + return -ENOMEM;
    + dai_link->cpus = component;
    + dai_link->num_cpus = num_codecs;
    +
    + /* Parse the list */
    + for_each_link_cpus(dai_link, index, component) {
    + ret = of_parse_phandle_with_args(of_node, name,
    + "#sound-dai-cells",
    + index, &args);
    + if (ret)
    + goto err;
    + component->of_node = args.np;
    + ret = snd_soc_get_dai_name(&args, &component->dai_name);
    + if (ret < 0)
    + goto err;
    + }
    + return 0;
    +err:
    + snd_soc_of_put_dai_link_codecs(dai_link);
    + dai_link->cpus = NULL;
    + dai_link->num_cpus = 0;
    + return ret;
    +}
    +EXPORT_SYMBOL_GPL(snd_soc_of_get_dai_link_cpus);
    +
    static int __init snd_soc_init(void)
    {
    snd_soc_debugfs_init();
    --
    2.33.0
    \
     
     \ /
      Last update: 2022-03-31 02:07    [W:4.112 / U:0.024 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site