From patchwork Fri Mar 21 15:27:26 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Benoit Cousson X-Patchwork-Id: 3875061 Return-Path: X-Original-To: patchwork-alsa-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 1A26ABF540 for ; Fri, 21 Mar 2014 15:30:37 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 416252025B for ; Fri, 21 Mar 2014 15:30:36 +0000 (UTC) Received: from alsa0.perex.cz (alsa0.perex.cz [77.48.224.243]) by mail.kernel.org (Postfix) with ESMTP id 5A65020213 for ; Fri, 21 Mar 2014 15:30:34 +0000 (UTC) Received: by alsa0.perex.cz (Postfix, from userid 1000) id 9C02A265452; Fri, 21 Mar 2014 16:30:31 +0100 (CET) Received: from alsa0.perex.cz (localhost [IPv6:::1]) by alsa0.perex.cz (Postfix) with ESMTP id B97D926537D; Fri, 21 Mar 2014 16:29:00 +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 C855E265379; Fri, 21 Mar 2014 16:28:58 +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,NO_DNS_FOR_FROM, UNPARSEABLE_RELAY autolearn=no version=3.3.1 Received: from mail-wi0-f178.google.com (mail-wi0-f178.google.com [209.85.212.178]) by alsa0.perex.cz (Postfix) with ESMTP id 3D1DA265373 for ; Fri, 21 Mar 2014 16:28:22 +0100 (CET) Received: by mail-wi0-f178.google.com with SMTP id bs8so623469wib.17 for ; Fri, 21 Mar 2014 08:28:22 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=xT3DSBMja/+KoeAt0jzJyL74c9sLEO3e+1HARInLsw8=; b=Ixt9LdrjZbnfThh+53qGNMl6JS7SzGclWr/NVRw/GvM3BsDF30hTCD+KDiv/nwt3l3 PYq/Z4kw72dBBCdgZ9iegAuOlzRkzQ5aNWhnn3sYlHsxhqsSB4C7/DAMUZXCwLdDjyCN 0wUEMI/TgvQylQBPUxDqeG3g8XDph6dCDjhmaQ3kvn9W9b7q1sWZ166xKMSka8/GPW0b 5coadoI5EMwSa5lebWi/b/EHXm6mPjx5ZRCAagn8nbjmxXgzckNpv9KdK+ho6URFHI9A QBt9cc1NEebLLndxxkYjV7mr72LMusr6TDJsyIEzksXCr96lREqBb9C1vnCdflCxawuA husg== X-Gm-Message-State: ALoCoQli83chrn4b5eowE674JKtRAC8Gp10+mROSK7OA/HwdA5yoVHvI/FigMinOEV0lx1Mq6JGD X-Received: by 10.180.78.200 with SMTP id d8mr3215166wix.34.1395415701935; Fri, 21 Mar 2014 08:28:21 -0700 (PDT) Received: from homer.BUSINESSPOLE ([46.218.123.34]) by mx.google.com with ESMTPSA id q15sm14028573wjw.18.2014.03.21.08.28.20 for (version=TLSv1.1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Fri, 21 Mar 2014 08:28:21 -0700 (PDT) From: Benoit Cousson To: broonie@kernel.org, lgirdwood@gmail.com Date: Fri, 21 Mar 2014 16:27:26 +0100 Message-Id: <1395415650-20045-3-git-send-email-bcousson@baylibre.com> X-Mailer: git-send-email 1.8.3.2 In-Reply-To: <1395415650-20045-1-git-send-email-bcousson@baylibre.com> References: <1395415650-20045-1-git-send-email-bcousson@baylibre.com> Cc: Fabien Parent , alsa-devel@alsa-project.org, lars@metafoo.de, Misael Lopez Cruz , Benoit Cousson Subject: [alsa-devel] [RFT v2 2/6] ASoC: core: Add helpers for codec DAI probe & remove 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 From: Misael Lopez Cruz Add helper functions for codec DAI probe and remove in preparation for DAI-multicodec support. No functional change. Signed-off-by: Misael Lopez Cruz [fparent@baylibre.com: Adapt to 3.14+] Signed-off-by: Fabien Parent Signed-off-by: Benoit Cousson --- sound/soc/soc-core.c | 74 +++++++++++++++++++++++++++++++++------------------- 1 file changed, 47 insertions(+), 27 deletions(-) diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c index ab65137..1bcc446 100644 --- a/sound/soc/soc-core.c +++ b/sound/soc/soc-core.c @@ -1010,21 +1010,10 @@ static void soc_remove_codec(struct snd_soc_codec *codec) module_put(codec->dev->driver->owner); } -static void soc_remove_link_dais(struct snd_soc_card *card, int num, int order) +static void soc_remove_codec_dai(struct snd_soc_dai *codec_dai, int order) { - struct snd_soc_pcm_runtime *rtd = &card->rtd[num]; - struct snd_soc_dai *codec_dai = rtd->codec_dai, *cpu_dai = rtd->cpu_dai; int err; - /* unregister the rtd device */ - if (rtd->dev_registered) { - device_remove_file(rtd->dev, &dev_attr_pmdown_time); - device_remove_file(rtd->dev, &dev_attr_codec_reg); - device_unregister(rtd->dev); - rtd->dev_registered = 0; - } - - /* remove the CODEC DAI */ if (codec_dai && codec_dai->probed && codec_dai->driver->remove_order == order) { if (codec_dai->driver->remove) { @@ -1037,6 +1026,24 @@ static void soc_remove_link_dais(struct snd_soc_card *card, int num, int order) codec_dai->probed = 0; list_del(&codec_dai->card_list); } +} + +static void soc_remove_link_dais(struct snd_soc_card *card, int num, int order) +{ + struct snd_soc_pcm_runtime *rtd = &card->rtd[num]; + struct snd_soc_dai *codec_dai = rtd->codec_dai, *cpu_dai = rtd->cpu_dai; + int err; + + /* unregister the rtd device */ + if (rtd->dev_registered) { + device_remove_file(rtd->dev, &dev_attr_pmdown_time); + device_remove_file(rtd->dev, &dev_attr_codec_reg); + device_unregister(rtd->dev); + rtd->dev_registered = 0; + } + + /* remove the CODEC DAI */ + soc_remove_codec_dai(codec_dai, order); /* remove the cpu_dai */ if (cpu_dai && cpu_dai->probed && @@ -1386,6 +1393,31 @@ static int soc_probe_link_components(struct snd_soc_card *card, int num, return 0; } +static int soc_probe_codec_dai(struct snd_soc_card *card, + struct snd_soc_dai *codec_dai, + int order) +{ + int ret; + + if (!codec_dai->probed && codec_dai->driver->probe_order == order) { + if (codec_dai->driver->probe) { + ret = codec_dai->driver->probe(codec_dai); + if (ret < 0) { + dev_err(codec_dai->dev, + "ASoC: failed to probe CODEC DAI %s: %d\n", + codec_dai->name, ret); + return ret; + } + } + + /* mark codec_dai as probed and add to card dai list */ + codec_dai->probed = 1; + list_add(&codec_dai->card_list, &card->dai_dev_list); + } + + return 0; +} + static int soc_probe_link_dais(struct snd_soc_card *card, int num, int order) { struct snd_soc_dai_link *dai_link = &card->dai_link[num]; @@ -1435,21 +1467,9 @@ static int soc_probe_link_dais(struct snd_soc_card *card, int num, int order) } /* probe the CODEC DAI */ - if (!codec_dai->probed && codec_dai->driver->probe_order == order) { - if (codec_dai->driver->probe) { - ret = codec_dai->driver->probe(codec_dai); - if (ret < 0) { - dev_err(codec_dai->dev, - "ASoC: failed to probe CODEC DAI %s: %d\n", - codec_dai->name, ret); - return ret; - } - } - - /* mark codec_dai as probed and add to card dai list */ - codec_dai->probed = 1; - list_add(&codec_dai->card_list, &card->dai_dev_list); - } + ret = soc_probe_codec_dai(card, codec_dai, order); + if (ret) + return ret; /* complete DAI probe during last probe */ if (order != SND_SOC_COMP_ORDER_LAST)