From patchwork Thu Jan 1 08:15:01 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jean-Francois Moine X-Patchwork-Id: 5556371 Return-Path: X-Original-To: patchwork-alsa-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id DD0D29F2ED for ; Thu, 1 Jan 2015 09:17:28 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id EB98420225 for ; Thu, 1 Jan 2015 09:17:27 +0000 (UTC) Received: from alsa0.perex.cz (alsa0.perex.cz [77.48.224.243]) by mail.kernel.org (Postfix) with ESMTP id C734A20221 for ; Thu, 1 Jan 2015 09:17:26 +0000 (UTC) Received: by alsa0.perex.cz (Postfix, from userid 1000) id F13C12604F9; Thu, 1 Jan 2015 10:17:25 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 Received: from alsa0.perex.cz (localhost [IPv6:::1]) by alsa0.perex.cz (Postfix) with ESMTP id 25DB826048A; Thu, 1 Jan 2015 10:16:50 +0100 (CET) X-Original-To: alsa-devel@alsa-project.org Delivered-To: alsa-devel@alsa-project.org Received: by alsa0.perex.cz (Postfix, from userid 1000) id 24E0A2604AE; Thu, 1 Jan 2015 10:16:49 +0100 (CET) Received: from smtp6-g21.free.fr (smtp6-g21.free.fr [212.27.42.6]) by alsa0.perex.cz (Postfix) with ESMTP id 5EA01260487 for ; Thu, 1 Jan 2015 10:16:43 +0100 (CET) Received: from localhost (unknown [IPv6:2a01:e35:2f5c:9de0:21c:dfff:fe9f:57fb]) by smtp6-g21.free.fr (Postfix) with ESMTP id 8E68B822F8; Thu, 1 Jan 2015 10:15:22 +0100 (CET) X-Mailbox-Line: From 0f9aa2b093f298e09bb50dd7474f45ea95a15da1 Mon Sep 17 00:00:00 2001 Message-Id: <0f9aa2b093f298e09bb50dd7474f45ea95a15da1.1420102454.git.moinejf@free.fr> In-Reply-To: References: From: Jean-Francois Moine Date: Thu, 1 Jan 2015 09:15:01 +0100 To: Liam Girdwood , Mark Brown Cc: devicetree@vger.kernel.org, alsa-devel@alsa-project.org, linux-kernel@vger.kernel.org Subject: [alsa-devel] [PATCH v6 1/3] ASoC: simple-card: prepare multi-CODECs X-BeenThere: alsa-devel@alsa-project.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Alsa-devel mailing list for ALSA developers - http://www.alsa-project.org" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: alsa-devel-bounces@alsa-project.org Sender: alsa-devel-bounces@alsa-project.org X-Virus-Scanned: ClamAV using ClamSMTP The function asoc_simple_card_sub_parse_of() is used to parse either the CPU or CODEC DAI. To prepare support of many CODECs in a DAI link, the parsing of the phandle and DAI name must be moved to the upper function asoc_simple_card_dai_link_of(). Signed-off-by: Jean-Francois Moine --- sound/soc/generic/simple-card.c | 57 ++++++++++++++++++++--------------------- 1 file changed, 28 insertions(+), 29 deletions(-) diff --git a/sound/soc/generic/simple-card.c b/sound/soc/generic/simple-card.c index fb9240f..170de17 100644 --- a/sound/soc/generic/simple-card.c +++ b/sound/soc/generic/simple-card.c @@ -172,34 +172,12 @@ static int asoc_simple_card_dai_init(struct snd_soc_pcm_runtime *rtd) static int asoc_simple_card_sub_parse_of(struct device_node *np, struct asoc_simple_dai *dai, - struct device_node **p_node, - const char **name, - int *args_count) + struct device_node *dai_np) { - struct of_phandle_args args; struct clk *clk; u32 val; int ret; - /* - * Get node via "sound-dai = <&phandle port>" - * it will be used as xxx_of_node on soc_bind_dai_link() - */ - ret = of_parse_phandle_with_args(np, "sound-dai", - "#sound-dai-cells", 0, &args); - if (ret) - return ret; - - *p_node = args.np; - - if (args_count) - *args_count = args.args_count; - - /* Get dai->name */ - ret = snd_soc_of_get_dai_name(np, name); - if (ret < 0) - return ret; - /* Parse TDM slot */ ret = snd_soc_of_parse_tdm_slot(np, &dai->slots, &dai->slot_width); if (ret) @@ -222,7 +200,7 @@ asoc_simple_card_sub_parse_of(struct device_node *np, } else if (!of_property_read_u32(np, "system-clock-frequency", &val)) { dai->sysclk = val; } else { - clk = of_clk_get(args.np, 0); + clk = of_clk_get(dai_np, 0); if (!IS_ERR(clk)) dai->sysclk = clk_get_rate(clk); } @@ -286,6 +264,7 @@ static int asoc_simple_card_dai_link_of(struct device_node *node, struct simple_dai_props *dai_props = simple_priv_to_props(priv, idx); struct device_node *cpu = NULL; struct device_node *codec = NULL; + struct of_phandle_args args; char *name; char prop[128]; char *prefix = ""; @@ -312,16 +291,36 @@ static int asoc_simple_card_dai_link_of(struct device_node *node, if (ret < 0) goto dai_link_of_err; + /* Get the CPU node and name */ + ret = of_parse_phandle_with_args(cpu, "sound-dai", + "#sound-dai-cells", 0, &args); + if (ret) + goto dai_link_of_err; + dai_link->cpu_of_node = args.np; + cpu_args = args.args_count; + + ret = snd_soc_of_get_dai_name(cpu, &dai_link->cpu_dai_name); + if (ret < 0) + goto dai_link_of_err; + ret = asoc_simple_card_sub_parse_of(cpu, &dai_props->cpu_dai, - &dai_link->cpu_of_node, - &dai_link->cpu_dai_name, - &cpu_args); + dai_link->cpu_of_node); if (ret < 0) goto dai_link_of_err; + /* Get the node and name of the CODEC */ + ret = of_parse_phandle_with_args(codec, "sound-dai", + "#sound-dai-cells", 0, &args); + if (ret < 0) + goto dai_link_of_err; + dai_link->codec_of_node = args.np; + + ret = snd_soc_of_get_dai_name(codec, &dai_link->codec_dai_name); + if (ret < 0) + goto dai_link_of_err; + ret = asoc_simple_card_sub_parse_of(codec, &dai_props->codec_dai, - &dai_link->codec_of_node, - &dai_link->codec_dai_name, NULL); + dai_link->codec_of_node); if (ret < 0) goto dai_link_of_err;