From patchwork Wed Jun 18 11:01:59 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qiao Zhou X-Patchwork-Id: 4375331 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.19.201]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 084219F1C4 for ; Wed, 18 Jun 2014 11:02:43 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 6274B202FE for ; Wed, 18 Jun 2014 11:02:34 +0000 (UTC) Received: from alsa0.perex.cz (alsa0.perex.cz [77.48.224.243]) by mail.kernel.org (Postfix) with ESMTP id 18A4520306 for ; Wed, 18 Jun 2014 11:02:23 +0000 (UTC) Received: by alsa0.perex.cz (Postfix, from userid 1000) id 5F438261AC4; Wed, 18 Jun 2014 13:02:21 +0200 (CEST) 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, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 Received: from alsa0.perex.cz (localhost [IPv6:::1]) by alsa0.perex.cz (Postfix) with ESMTP id B5B5C2619E6; Wed, 18 Jun 2014 13:02:16 +0200 (CEST) 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 651CB261A1B; Wed, 18 Jun 2014 13:02:15 +0200 (CEST) Received: from mx0a-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by alsa0.perex.cz (Postfix) with ESMTP id 065D0261735 for ; Wed, 18 Jun 2014 13:02:06 +0200 (CEST) Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.14.5/8.14.5) with SMTP id s5IB25R2011335; Wed, 18 Jun 2014 04:02:05 -0700 Received: from sc-owa04.marvell.com ([199.233.58.150]) by mx0a-0016f401.pphosted.com with ESMTP id 1mj5g8n0n9-17 (version=TLSv1/SSLv3 cipher=AES128-SHA bits=128 verify=NOT); Wed, 18 Jun 2014 04:02:05 -0700 Received: from maili.marvell.com (10.93.76.43) by sc-owa02.marvell.com (10.93.76.33) with Microsoft SMTP Server id 8.3.327.1; Wed, 18 Jun 2014 04:02:02 -0700 Received: from localhost (unknown [10.38.36.117]) by maili.marvell.com (Postfix) with ESMTP id DBA033F703F; Wed, 18 Jun 2014 04:02:01 -0700 (PDT) From: Qiao Zhou To: Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai , , Date: Wed, 18 Jun 2014 19:01:59 +0800 Message-ID: <1403089319-2555-2-git-send-email-zhouqiao@marvell.com> X-Mailer: git-send-email 1.7.0.4 In-Reply-To: <1403089319-2555-1-git-send-email-zhouqiao@marvell.com> References: <1403089319-2555-1-git-send-email-zhouqiao@marvell.com> MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:5.12.52, 1.0.14, 0.0.0000 definitions=2014-06-18_04:2014-06-17, 2014-06-18, 1970-01-01 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 suspectscore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=7.0.1-1402240000 definitions=main-1406180128 Cc: Qiao Zhou Subject: [alsa-devel] [PATCH] ASoC: core: refine of node id parse of cpu/codec dai 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: , Errors-To: alsa-devel-bounces@alsa-project.org Sender: alsa-devel-bounces@alsa-project.org X-Virus-Scanned: ClamAV using ClamSMTP refine cpu_dai/codec_dai of_node checking by checking either name or dai_id matches. Signed-off-by: Qiao Zhou --- include/sound/soc.h | 2 ++ sound/soc/soc-core.c | 32 +++++++++++++++++++++++--------- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/include/sound/soc.h b/include/sound/soc.h index ed9e2d7..782f7a0 100644 --- a/include/sound/soc.h +++ b/include/sound/soc.h @@ -888,12 +888,14 @@ struct snd_soc_dai_link { * only, which only works well when that device exposes a single DAI. */ const char *cpu_dai_name; + unsigned int cpu_dai_id; /* * You MUST specify the link's codec, either by device name, or by * DT/OF node, but not both. */ const char *codec_name; const struct device_node *codec_of_node; + unsigned int codec_dai_id; /* You MUST specify the DAI name within the codec */ const char *codec_dai_name; /* diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c index b87d7d8..777237d 100644 --- a/sound/soc/soc-core.c +++ b/sound/soc/soc-core.c @@ -868,14 +868,16 @@ static struct snd_soc_codec *soc_find_codec(const struct device_node *codec_of_n } static struct snd_soc_dai *soc_find_codec_dai(struct snd_soc_codec *codec, - const char *codec_dai_name) + struct snd_soc_dai_link *dai_link) { struct snd_soc_dai *codec_dai; list_for_each_entry(codec_dai, &codec->component.dai_list, list) { - if (!strcmp(codec_dai->name, codec_dai_name)) { + if (dai_link->codec_dai_name + && !strcmp(codec_dai->name, dai_link->codec_dai_name)) + return codec_dai; + else if (codec_dai->id == dai_link->codec_dai_id) return codec_dai; - } } return NULL; @@ -904,6 +906,9 @@ static int soc_bind_dai_link(struct snd_soc_card *card, int num) if (dai_link->cpu_dai_name && strcmp(cpu_dai->name, dai_link->cpu_dai_name)) continue; + if (!dai_link->cpu_dai_name && + cpu_dai->id != dai_link->cpu_dai_id) + continue; rtd->cpu_dai = cpu_dai; } @@ -919,17 +924,26 @@ static int soc_bind_dai_link(struct snd_soc_card *card, int num) rtd->codec = soc_find_codec(dai_link->codec_of_node, dai_link->codec_name); if (!rtd->codec) { - dev_err(card->dev, "ASoC: CODEC %s not registered\n", - dai_link->codec_name); + if (dai_link->codec_name) + dev_err(card->dev, "ASoC: CODEC %s not registered\n", + dai_link->codec_name); + else if (dai_link->codec_of_node) + dev_err(card->dev, "ASoC: CODEC %s not registered\n", + dai_link->codec_of_node->name); return -EPROBE_DEFER; } /* Find CODEC DAI from registered list */ - rtd->codec_dai = soc_find_codec_dai(rtd->codec, - dai_link->codec_dai_name); + rtd->codec_dai = soc_find_codec_dai(rtd->codec, dai_link); if (!rtd->codec_dai) { - dev_err(card->dev, "ASoC: CODEC DAI %s not registered\n", - dai_link->codec_dai_name); + if (dai_link->codec_dai_name) + dev_err(card->dev, + "ASoC: CODEC DAI %s not registered\n", + dai_link->codec_dai_name); + else + dev_err(card->dev, + "ASoC: CODEC DAI %d not registered\n", + dai_link->codec_dai_id); return -EPROBE_DEFER; }