From patchwork Fri Nov 30 02:04:13 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kuninori Morimoto X-Patchwork-Id: 10705635 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id BE0BC13BB for ; Fri, 30 Nov 2018 02:04:22 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id AE0E82F977 for ; Fri, 30 Nov 2018 02:04:22 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id A25F12F97E; Fri, 30 Nov 2018 02:04:22 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.7 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from alsa0.perex.cz (alsa0.perex.cz [77.48.224.243]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0C0FF2F97B for ; Fri, 30 Nov 2018 02:04:22 +0000 (UTC) Received: from alsa0.perex.cz (localhost [127.0.0.1]) by alsa0.perex.cz (Postfix) with ESMTP id D4AC1267B87; Fri, 30 Nov 2018 03:04:20 +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 144EB267B8C; Fri, 30 Nov 2018 03:04:18 +0100 (CET) Received: from JPN01-OS2-obe.outbound.protection.outlook.com (mail-eopbgr1410135.outbound.protection.outlook.com [40.107.141.135]) by alsa0.perex.cz (Postfix) with ESMTP id 72E0D267B85 for ; Fri, 30 Nov 2018 03:04:15 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=renesasgroup.onmicrosoft.com; s=selector1-renesas-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=th9215VzJhX4+76sD90pe3l9Q58Tw8Xtub1NQCQgQ/4=; b=WPAa8Z70Jocxk2g/7sfIekd//3VQjNlKmN3qABxQxiZVdo0CZb9CQ7SJXp58AQpNUBOsMT6uzKkmasoHFMlDpmE+z0NVNv0wGDB7KI86s72dyBvUROkIdyRBWRJlyqxVd/7xwkjZl0PyY5+AR1pAIWJRsVQoNd5siYBbhwXb/fo= Received: from TYAPR01MB3328.jpnprd01.prod.outlook.com (20.178.136.81) by TYAPR01MB4829.jpnprd01.prod.outlook.com (20.179.175.149) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1382.20; Fri, 30 Nov 2018 02:04:13 +0000 Received: from TYAPR01MB3328.jpnprd01.prod.outlook.com ([fe80::8903:38b9:bfa8:89b7]) by TYAPR01MB3328.jpnprd01.prod.outlook.com ([fe80::8903:38b9:bfa8:89b7%2]) with mapi id 15.20.1361.019; Fri, 30 Nov 2018 02:04:13 +0000 From: Kuninori Morimoto To: Mark Brown Thread-Topic: [PATCH v2 1/5] ASoC: simple-card-utils: fixup asoc_simple_card_get_dai_id() counting Thread-Index: AQHUiFD99hd+E0DcAEmdcjdYcssUAw== Date: Fri, 30 Nov 2018 02:04:13 +0000 Message-ID: <87y39bz5wb.wl-kuninori.morimoto.gx@renesas.com> References: <87zhtrz5yt.wl-kuninori.morimoto.gx@renesas.com> In-Reply-To: <87zhtrz5yt.wl-kuninori.morimoto.gx@renesas.com> Accept-Language: ja-JP, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: TY2PR06CA0032.apcprd06.prod.outlook.com (2603:1096:404:2e::20) To TYAPR01MB3328.jpnprd01.prod.outlook.com (2603:1096:404:bb::17) authentication-results: spf=none (sender IP is ) smtp.mailfrom=kuninori.morimoto.gx@renesas.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [211.11.155.130] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; TYAPR01MB4829; 20:esplMUbM2sGmOXJ1e4QGmoctAzc9/T4AEtGpD4ZYjHZgCsMOTAsWxywLwv+jb4aXfDMzw+C9xQnB6k4nrD09hzlb/wK9LN+6P/4kGAAxdu1ih/UuKRnKSrAbjJgXZKXqL0NdG+grKewHZTaY0H9C+NjnIKGLiKW18Elo3wzTaL0= x-ms-office365-filtering-correlation-id: a113ea43-5eef-4263-95eb-08d656681fca x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390098)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(4618075)(2017052603328)(7153060)(7193020); SRVR:TYAPR01MB4829; x-ms-traffictypediagnostic: TYAPR01MB4829: x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(10201501046)(93006095)(93001095)(3231453)(999002)(944501410)(52105112)(6055026)(148016)(149066)(150057)(6041310)(20161123560045)(20161123558120)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(201708071742011)(7699051)(76991095); SRVR:TYAPR01MB4829; BCL:0; PCL:0; RULEID:; SRVR:TYAPR01MB4829; x-forefront-prvs: 087223B4DA x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(366004)(346002)(376002)(39860400002)(396003)(136003)(189003)(199004)(6436002)(2906002)(6486002)(53936002)(316002)(7736002)(305945005)(66066001)(97736004)(6116002)(3846002)(6512007)(14454004)(6916009)(105586002)(106356001)(99286004)(478600001)(256004)(76176011)(4326008)(68736007)(52116002)(186003)(26005)(25786009)(8936002)(102836004)(81166006)(81156014)(8676002)(86362001)(386003)(6506007)(486006)(2616005)(476003)(446003)(11346002)(71200400001)(5660300001)(71190400001)(36756003); DIR:OUT; SFP:1102; SCL:1; SRVR:TYAPR01MB4829; H:TYAPR01MB3328.jpnprd01.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: renesas.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: fO2ONQtg/Xaws2JsK6iUf0SfU0jA9VJGSwAxqMtK8CjAsRnuNbgYDAAbHcQBIFDa5ueu2LyDTn/ppS85ABvjWvEa520W5YpzAggQ5vEmLiTbympO95iQZICbi7wvTQkqz7Dw0Q7RwDpPIGTZ7CDcpapiUBUeGX0Ha4XubKEe8E/lHL0WthOFoKYNJ/rkcZEmV2hcwZu/5nEcchUMYzogGKJxtpSjfyGJ+xxLc4163vrS51tdsQcA0MgRMvu5fUCa7pFvJfHEZMgk2YjBr4jeOuAr32uoVUM4yNAZOEhesMQQMrOL4fCv1utAZEKMYhTJvyWG3q4YexmuY9Xi1hPL2n2xzQQTkgFIIlwHLd6qFd0= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-ID: MIME-Version: 1.0 X-OriginatorOrg: renesas.com X-MS-Exchange-CrossTenant-Network-Message-Id: a113ea43-5eef-4263-95eb-08d656681fca X-MS-Exchange-CrossTenant-originalarrivaltime: 30 Nov 2018 02:04:13.2118 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 53d82571-da19-47e4-9cb4-625a166a4a2a X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYAPR01MB4829 Cc: Linux-ALSA Subject: [alsa-devel] [PATCH v2 1/5] ASoC: simple-card-utils: fixup asoc_simple_card_get_dai_id() counting 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 From: Kuninori Morimoto asoc_simple_card_get_dai_id() returns DAI ID, but it is based on DT node's "endpoint" position. Almost all cases 1 port has 1 endpoint, thus, it was no problem. But in reality, port : endpoint = 1 : N, thus, counting endpoint is BUG, it should based on "port" ID. This patch fixup it. Signed-off-by: Kuninori Morimoto --- v1 -> v2 - new patch sound/soc/generic/simple-card-utils.c | 22 +++------------------- 1 file changed, 3 insertions(+), 19 deletions(-) diff --git a/sound/soc/generic/simple-card-utils.c b/sound/soc/generic/simple-card-utils.c index c69ce1e..6a31d07 100644 --- a/sound/soc/generic/simple-card-utils.c +++ b/sound/soc/generic/simple-card-utils.c @@ -269,35 +269,19 @@ EXPORT_SYMBOL_GPL(asoc_simple_card_parse_dai); static int asoc_simple_card_get_dai_id(struct device_node *ep) { - struct device_node *node; - struct device_node *endpoint; - int i, id; + struct of_endpoint info; int ret; ret = snd_soc_get_dai_id(ep); if (ret != -ENOTSUPP) return ret; - node = of_graph_get_port_parent(ep); - /* * Non HDMI sound case, counting port/endpoint on its DT * is enough. Let's count it. */ - i = 0; - id = -1; - for_each_endpoint_of_node(node, endpoint) { - if (endpoint == ep) - id = i; - i++; - } - - of_node_put(node); - - if (id < 0) - return -ENODEV; - - return id; + of_graph_parse_endpoint(ep, &info); + return info.port; } int asoc_simple_card_parse_graph_dai(struct device_node *ep, From patchwork Fri Nov 30 02:06:51 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kuninori Morimoto X-Patchwork-Id: 10705637 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 470CB17D5 for ; Fri, 30 Nov 2018 02:07:04 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 32CF52FC5D for ; Fri, 30 Nov 2018 02:07:04 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 263EF2FC68; Fri, 30 Nov 2018 02:07:04 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.7 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from alsa0.perex.cz (alsa0.perex.cz [77.48.224.243]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5F2A42FC5D for ; Fri, 30 Nov 2018 02:07:03 +0000 (UTC) Received: from alsa0.perex.cz (localhost [127.0.0.1]) by alsa0.perex.cz (Postfix) with ESMTP id 90A42267B8C; Fri, 30 Nov 2018 03:07:01 +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 BE364267B8E; Fri, 30 Nov 2018 03:06:59 +0100 (CET) Received: from JPN01-TY1-obe.outbound.protection.outlook.com (mail-eopbgr1400129.outbound.protection.outlook.com [40.107.140.129]) by alsa0.perex.cz (Postfix) with ESMTP id 31063267B87 for ; Fri, 30 Nov 2018 03:06:56 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=renesasgroup.onmicrosoft.com; s=selector1-renesas-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=nucqiFMIDXoy6T9tAedJ1LV3nwpNPbxFMhR9XOm7yLY=; b=eU4/Oy+MbrbOimcSkXbG2IH2SwuPtGQ0fKdQGGiOStJph/Oq5SkwfMyjsw4EJ19h5pQmq48E2a7mbwda6ZmK9W/qBdsiuLp4pKoXoKI1UZ02iCmZxtiBOPV9oRW+z+VDlodm5BH+5bifwKFZ6qXRiz7TKYCNX7b6kxWPxB5hcIY= Received: from TYAPR01MB3328.jpnprd01.prod.outlook.com (20.178.136.81) by TYAPR01MB4637.jpnprd01.prod.outlook.com (20.179.174.207) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1382.19; Fri, 30 Nov 2018 02:06:51 +0000 Received: from TYAPR01MB3328.jpnprd01.prod.outlook.com ([fe80::8903:38b9:bfa8:89b7]) by TYAPR01MB3328.jpnprd01.prod.outlook.com ([fe80::8903:38b9:bfa8:89b7%2]) with mapi id 15.20.1361.019; Fri, 30 Nov 2018 02:06:51 +0000 From: Kuninori Morimoto To: Mark Brown Thread-Topic: [PATCH v2 2/5] ASoC: audio-graph-scu-card: care link / dai count Thread-Index: AQHUiFFbrk3uZVTxwEGpmpAjhA4ppw== Date: Fri, 30 Nov 2018 02:06:51 +0000 Message-ID: <87woovz5rx.wl-kuninori.morimoto.gx@renesas.com> References: <87zhtrz5yt.wl-kuninori.morimoto.gx@renesas.com> In-Reply-To: <87zhtrz5yt.wl-kuninori.morimoto.gx@renesas.com> Accept-Language: ja-JP, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: TYAPR01CA0029.jpnprd01.prod.outlook.com (2603:1096:404:28::17) To TYAPR01MB3328.jpnprd01.prod.outlook.com (2603:1096:404:bb::17) authentication-results: spf=none (sender IP is ) smtp.mailfrom=kuninori.morimoto.gx@renesas.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [211.11.155.130] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; TYAPR01MB4637; 20:nCQ/0RtL458KQncxMEX6+bmHl43aXRKGXikNKa6s6xXUGEgYRmFimkZfJyd3G4EJzL0HPB0dOSXytvu+6nCYgd73lzrOeEW/A2IOgDN6/Ve1Y+XwR2jzQsqVXV0b7rMbJ5Bfgud+hJI7XS2zaMX/T0Ct5UtAqo5pIELvzai/mWc= x-ms-office365-filtering-correlation-id: 2d5b8241-ae9d-427e-03e9-08d656687e1e x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390098)(7020095)(4652040)(8989299)(5600074)(711020)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020); SRVR:TYAPR01MB4637; x-ms-traffictypediagnostic: TYAPR01MB4637: x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(10201501046)(93006095)(93001095)(3231453)(999002)(944501410)(52105112)(6055026)(148016)(149066)(150057)(6041310)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123562045)(20161123558120)(201708071742011)(7699051)(76991095); SRVR:TYAPR01MB4637; BCL:0; PCL:0; RULEID:; SRVR:TYAPR01MB4637; x-forefront-prvs: 087223B4DA x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(346002)(39860400002)(376002)(396003)(366004)(136003)(189003)(199004)(36756003)(105586002)(5660300001)(99286004)(2906002)(6916009)(86362001)(575784001)(53936002)(76176011)(97736004)(6512007)(316002)(71190400001)(6506007)(386003)(71200400001)(186003)(102836004)(478600001)(52116002)(3846002)(26005)(6116002)(8936002)(68736007)(14454004)(8676002)(81166006)(81156014)(66066001)(305945005)(2616005)(476003)(446003)(11346002)(256004)(6436002)(486006)(106356001)(25786009)(7736002)(4326008)(6486002); DIR:OUT; SFP:1102; SCL:1; SRVR:TYAPR01MB4637; H:TYAPR01MB3328.jpnprd01.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: renesas.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: OKk3tEyeAfFbj6hORPo19Lb3gIKqqN5j8mRApwXOyKSjUAtxs/fYddWZumMeFDMPEmncijNndBdRqKXYSzktjQyvfnAYzxLOFCZE/uFItutARtinkO3V0RDkWX5h41g6hVzB5xH/npgjUvpiny1ONuGBT24InPekKHuS05jWQRxnAGAw763/NMoM4RammlRu8o3N69JCZFsEQwBnJZgOaCCCr5mVvf0VB3qQos5qHq6rlg9MldVnRMkeAnPEXeq1ElBfvCkzLSL6oQToGtmd5cAFF/WiBnbNjiOFIzSJ5u3xhn569ndHLaW8nw4zyxYxS6rjvQCPpKBUEEMn15ZR+Ig0/Xjj/M7eWaHN7BxImdg= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-ID: <5C809C083A6D6941BE7F84E5D6560EB7@jpnprd01.prod.outlook.com> MIME-Version: 1.0 X-OriginatorOrg: renesas.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2d5b8241-ae9d-427e-03e9-08d656687e1e X-MS-Exchange-CrossTenant-originalarrivaltime: 30 Nov 2018 02:06:51.5737 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 53d82571-da19-47e4-9cb4-625a166a4a2a X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYAPR01MB4637 Cc: Linux-ALSA Subject: [alsa-devel] [PATCH v2 2/5] ASoC: audio-graph-scu-card: care link / dai count 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 From: Kuninori Morimoto In DPCM case, it uses CPU-dummy / dummy-Codec dai links. If sound card is caring only DPCM, link count = dai count, but, if non DPCM case, link count != dai count. Now, we want to merge audio-graph-card and audio-graph-scu-card, then, we need to care both link / dai count more carefly This patch cares it, and prepare for merging audio card Signed-off-by: Kuninori Morimoto --- v1 -> v2 - added counting detail on comment area sound/soc/generic/audio-graph-scu-card.c | 76 ++++++++++++++++++++++++++------ 1 file changed, 62 insertions(+), 14 deletions(-) diff --git a/sound/soc/generic/audio-graph-scu-card.c b/sound/soc/generic/audio-graph-scu-card.c index ce1f108..a0a2867 100644 --- a/sound/soc/generic/audio-graph-scu-card.c +++ b/sound/soc/generic/audio-graph-scu-card.c @@ -277,7 +277,10 @@ static int asoc_graph_card_parse_of(struct graph_card_data *priv) return ret; } -static int asoc_graph_get_dais_count(struct device *dev) +static void asoc_graph_get_dais_count(struct device *dev, + int *link_num, + int *dais_num, + int *ccnf_num) { struct of_phandle_iterator it; struct device_node *node = dev->of_node; @@ -286,10 +289,48 @@ static int asoc_graph_get_dais_count(struct device *dev) struct device_node *codec_ep; struct device_node *codec_port; struct device_node *codec_port_old; - int count = 0; + struct device_node *codec_port_old2; int rc; + /* + * link_num : number of links. + * CPU-Codec / CPU-dummy / dummy-Codec + * dais_num : number of DAIs + * ccnf_num : number of codec_conf + * same number for dummy-Codec + * + * ex1) + * CPU0 --- Codec0 link : 5 + * CPU1 --- Codec1 dais : 7 + * CPU2 -/ ccnf : 1 + * CPU3 --- Codec2 + * + * => 5 links = 2xCPU-Codec + 2xCPU-dummy + 1xdummy-Codec + * => 7 DAIs = 4xCPU + 3xCodec + * => 1 ccnf = 1xdummy-Codec + * + * ex2) + * CPU0 --- Codec0 link : 5 + * CPU1 --- Codec1 dais : 6 + * CPU2 -/ ccnf : 1 + * CPU3 -/ + * + * => 5 links = 1xCPU-Codec + 3xCPU-dummy + 1xdummy-Codec + * => 6 DAIs = 4xCPU + 2xCodec + * => 1 ccnf = 1xdummy-Codec + * + * ex3) + * CPU0 --- Codec0 link : 6 + * CPU1 -/ dais : 6 + * CPU2 --- Codec1 ccnf : 2 + * CPU3 -/ + * + * => 6 links = 0xCPU-Codec + 4xCPU-dummy + 2xdummy-Codec + * => 6 DAIs = 4xCPU + 2xCodec + * => 2 ccnf = 2xdummy-Codec + */ codec_port_old = NULL; + codec_port_old2 = NULL; of_for_each_phandle(&it, rc, node, "dais", NULL, 0) { cpu_port = it.node; cpu_ep = of_get_next_child(cpu_port, NULL); @@ -300,16 +341,22 @@ static int asoc_graph_get_dais_count(struct device *dev) of_node_put(codec_ep); of_node_put(codec_port); - count++; + (*link_num)++; + (*dais_num)++; + + if (codec_port_old == codec_port) { + if (codec_port_old2 != codec_port_old) { + (*link_num)++; + (*ccnf_num)++; + } - if (codec_port_old == codec_port) + codec_port_old2 = codec_port_old; continue; + } - count++; + (*dais_num)++; codec_port_old = codec_port; } - - return count; } static int asoc_graph_card_probe(struct platform_device *pdev) @@ -319,19 +366,20 @@ static int asoc_graph_card_probe(struct platform_device *pdev) struct graph_dai_props *dai_props; struct device *dev = &pdev->dev; struct snd_soc_card *card; - int num, ret, i; + int lnum = 0, dnum = 0, cnum = 0; + int ret, i; /* Allocate the private data and the DAI link array */ priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); if (!priv) return -ENOMEM; - num = asoc_graph_get_dais_count(dev); - if (num == 0) + asoc_graph_get_dais_count(dev, &lnum, &dnum, &cnum); + if (!lnum || !dnum) return -EINVAL; - dai_props = devm_kcalloc(dev, num, sizeof(*dai_props), GFP_KERNEL); - dai_link = devm_kcalloc(dev, num, sizeof(*dai_link), GFP_KERNEL); + dai_props = devm_kcalloc(dev, lnum, sizeof(*dai_props), GFP_KERNEL); + dai_link = devm_kcalloc(dev, lnum, sizeof(*dai_link), GFP_KERNEL); if (!dai_props || !dai_link) return -ENOMEM; @@ -341,7 +389,7 @@ static int asoc_graph_card_probe(struct platform_device *pdev) * see * soc-core.c :: snd_soc_init_multicodec() */ - for (i = 0; i < num; i++) { + for (i = 0; i < lnum; i++) { dai_link[i].codecs = &dai_props[i].codecs; dai_link[i].num_codecs = 1; dai_link[i].platform = &dai_props[i].platform; @@ -355,7 +403,7 @@ static int asoc_graph_card_probe(struct platform_device *pdev) card->owner = THIS_MODULE; card->dev = dev; card->dai_link = priv->dai_link; - card->num_links = num; + card->num_links = lnum; card->codec_conf = &priv->codec_conf; card->num_configs = 1; From patchwork Fri Nov 30 02:07:15 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kuninori Morimoto X-Patchwork-Id: 10705639 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 5491C13BB for ; Fri, 30 Nov 2018 02:07:28 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 42A162FC5D for ; Fri, 30 Nov 2018 02:07:27 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 36F012FC68; Fri, 30 Nov 2018 02:07:27 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.7 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from alsa0.perex.cz (alsa0.perex.cz [77.48.224.243]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 587082FC5D for ; Fri, 30 Nov 2018 02:07:26 +0000 (UTC) Received: from alsa0.perex.cz (localhost [127.0.0.1]) by alsa0.perex.cz (Postfix) with ESMTP id 320C9267B8E; Fri, 30 Nov 2018 03:07:25 +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 E3871267B93; Fri, 30 Nov 2018 03:07:22 +0100 (CET) Received: from JPN01-OS2-obe.outbound.protection.outlook.com (mail-eopbgr1410102.outbound.protection.outlook.com [40.107.141.102]) by alsa0.perex.cz (Postfix) with ESMTP id 479DF267B8E for ; Fri, 30 Nov 2018 03:07:19 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=renesasgroup.onmicrosoft.com; s=selector1-renesas-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=WGYD2Fb1UCkBzfZEk3KLGh0q9uEF/slLiWmrGwmXp6M=; b=Ba7wMWswjUmiaOxIfdgR5O1012ThcAaAXonsQgID3FZuCwUFWBQcKh9/EY/NhDszLCwmjpWrXZMluV17BHFckaxEe9rzc0RajFUgsabkJWwasLB9/AUSfGzncGLjyI5XQEfKLl/32c9o13fEbxxafDljLHjliRvjpqaENvEMXQc= Received: from TYAPR01MB3328.jpnprd01.prod.outlook.com (20.178.136.81) by TYAPR01MB4655.jpnprd01.prod.outlook.com (20.179.174.213) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1382.19; Fri, 30 Nov 2018 02:07:15 +0000 Received: from TYAPR01MB3328.jpnprd01.prod.outlook.com ([fe80::8903:38b9:bfa8:89b7]) by TYAPR01MB3328.jpnprd01.prod.outlook.com ([fe80::8903:38b9:bfa8:89b7%2]) with mapi id 15.20.1361.019; Fri, 30 Nov 2018 02:07:15 +0000 From: Kuninori Morimoto To: Mark Brown Thread-Topic: [PATCH v2 3/5] ASoC: audio-graph-scu-card: use cpu/codec pointer on graph_dai_props Thread-Index: AQHUiFFpAwxaA1S+GUmE7O4pzFHWhA== Date: Fri, 30 Nov 2018 02:07:15 +0000 Message-ID: <87va4fz5ra.wl-kuninori.morimoto.gx@renesas.com> References: <87zhtrz5yt.wl-kuninori.morimoto.gx@renesas.com> In-Reply-To: <87zhtrz5yt.wl-kuninori.morimoto.gx@renesas.com> Accept-Language: ja-JP, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: TYAPR01CA0044.jpnprd01.prod.outlook.com (2603:1096:404:28::32) To TYAPR01MB3328.jpnprd01.prod.outlook.com (2603:1096:404:bb::17) authentication-results: spf=none (sender IP is ) smtp.mailfrom=kuninori.morimoto.gx@renesas.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [211.11.155.130] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; TYAPR01MB4655; 20:Zk6YzsXc4zFGVCUdEOzEXyga9FB71r0vwubU7aqocZKnLq+dZAUFGZhl1ccbQrZLxucyyMea5v9bYtxozbl8KaH4xOVXiIEGqVUFIGLdIZR+NJXB6ie8oLeMMt5OuvxNz9mgTcHbAFNk7zvGyUCm7J7cZZ04W8btLakkRFn2maY= x-ms-office365-filtering-correlation-id: d3d7ce37-1e36-4549-8bae-08d656688c30 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390098)(7020095)(4652040)(8989299)(5600074)(711020)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020); SRVR:TYAPR01MB4655; x-ms-traffictypediagnostic: TYAPR01MB4655: x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(10201501046)(3231453)(999002)(944501457)(52105112)(93006095)(93001095)(6055026)(148016)(149066)(150057)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123558120)(20161123560045)(20161123562045)(201708071742011)(7699051)(76991095); SRVR:TYAPR01MB4655; BCL:0; PCL:0; RULEID:; SRVR:TYAPR01MB4655; x-forefront-prvs: 087223B4DA x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(396003)(346002)(39860400002)(376002)(136003)(366004)(199004)(189003)(68736007)(52116002)(256004)(76176011)(6916009)(6512007)(99286004)(478600001)(106356001)(105586002)(36756003)(476003)(2616005)(446003)(11346002)(71190400001)(5660300001)(71200400001)(8936002)(25786009)(186003)(102836004)(26005)(8676002)(386003)(486006)(86362001)(81166006)(81156014)(575784001)(6506007)(316002)(53936002)(305945005)(6436002)(66066001)(7736002)(6486002)(2906002)(3846002)(6116002)(14454004)(4326008)(97736004); DIR:OUT; SFP:1102; SCL:1; SRVR:TYAPR01MB4655; H:TYAPR01MB3328.jpnprd01.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: renesas.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: 7ox/uurtvEAj7dT75YRIaK42FH0CD6G0iK5Riz++BHe7Ml7R9qP4iKI0uU1Ebv19GrsBpTM7myZhrk+c0Bcj8HNDw1hl1177M1Np8F+WZxl8yWQZM734kZYTKl64kMukAD/Enx8ekjML73h/SMrpiL2RqKJXGaOqfGvOb+Ur3L0G9PCJ541hvlaRP8ETIcg7N3+qA6tFBl/2bYyyZJjc4PqJSN9I/zziLvsrg3tun+ZZIU1BQpmGvNa2kHQt0zDyYFjhRo7IyALqD+wCbCkFaHG6OeQOEG/c09yOHT3oG8hObCZpsz2+cywA9kQiFiesZG12e7r3VHDEnTxVvzzy3R6/a8B9z7rroEItYMWPWfA= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-ID: MIME-Version: 1.0 X-OriginatorOrg: renesas.com X-MS-Exchange-CrossTenant-Network-Message-Id: d3d7ce37-1e36-4549-8bae-08d656688c30 X-MS-Exchange-CrossTenant-originalarrivaltime: 30 Nov 2018 02:07:15.1208 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 53d82571-da19-47e4-9cb4-625a166a4a2a X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYAPR01MB4655 Cc: Linux-ALSA Subject: [alsa-devel] [PATCH v2 3/5] ASoC: audio-graph-scu-card: use cpu/codec pointer on graph_dai_props 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 From: Kuninori Morimoto In DPCM case, it uses CPU-dummy / dummy-Codec dai links, and non DPCM case, it uses CPU-Codec dai links. Now, we want to merge audio-graph-card and audio-graph-scu-card. These sound cards are using silimar but not same logic on each functions. Then, of course we want to share same logic. To compromise, this patch uses cpu/codec pointer on audio-graph-scu-card. It is same logic with audio-graph-card, thus easy merging. This is prepare for merging audio card Signed-off-by: Kuninori Morimoto --- v1 -> v2 - no change sound/soc/generic/audio-graph-scu-card.c | 72 ++++++++++++++++++++++---------- 1 file changed, 49 insertions(+), 23 deletions(-) diff --git a/sound/soc/generic/audio-graph-scu-card.c b/sound/soc/generic/audio-graph-scu-card.c index a0a2867..ed128d4 100644 --- a/sound/soc/generic/audio-graph-scu-card.c +++ b/sound/soc/generic/audio-graph-scu-card.c @@ -26,12 +26,14 @@ struct graph_card_data { struct snd_soc_card snd_card; struct snd_soc_codec_conf codec_conf; struct graph_dai_props { - struct asoc_simple_dai dai; + struct asoc_simple_dai *cpu_dai; + struct asoc_simple_dai *codec_dai; struct snd_soc_dai_link_component codecs; struct snd_soc_dai_link_component platform; struct asoc_simple_card_data adata; } *dai_props; struct snd_soc_dai_link *dai_link; + struct asoc_simple_dai *dais; struct asoc_simple_card_data adata; }; @@ -47,8 +49,17 @@ static int asoc_graph_card_startup(struct snd_pcm_substream *substream) struct snd_soc_pcm_runtime *rtd = substream->private_data; struct graph_card_data *priv = snd_soc_card_get_drvdata(rtd->card); struct graph_dai_props *dai_props = graph_priv_to_props(priv, rtd->num); + int ret = 0; - return asoc_simple_card_clk_enable(&dai_props->dai); + ret = asoc_simple_card_clk_enable(dai_props->cpu_dai); + if (ret) + return ret; + + ret = asoc_simple_card_clk_enable(dai_props->codec_dai); + if (ret) + asoc_simple_card_clk_disable(dai_props->cpu_dai); + + return ret; } static void asoc_graph_card_shutdown(struct snd_pcm_substream *substream) @@ -57,7 +68,9 @@ static void asoc_graph_card_shutdown(struct snd_pcm_substream *substream) struct graph_card_data *priv = snd_soc_card_get_drvdata(rtd->card); struct graph_dai_props *dai_props = graph_priv_to_props(priv, rtd->num); - asoc_simple_card_clk_disable(&dai_props->dai); + asoc_simple_card_clk_disable(dai_props->cpu_dai); + + asoc_simple_card_clk_disable(dai_props->codec_dai); } static const struct snd_soc_ops asoc_graph_card_ops = { @@ -68,18 +81,20 @@ static const struct snd_soc_ops asoc_graph_card_ops = { static int asoc_graph_card_dai_init(struct snd_soc_pcm_runtime *rtd) { struct graph_card_data *priv = snd_soc_card_get_drvdata(rtd->card); - struct snd_soc_dai *dai; - struct snd_soc_dai_link *dai_link; - struct graph_dai_props *dai_props; - int num = rtd->num; + struct graph_dai_props *dai_props = graph_priv_to_props(priv, rtd->num); + int ret = 0; - dai_link = graph_priv_to_link(priv, num); - dai_props = graph_priv_to_props(priv, num); - dai = dai_link->dynamic ? - rtd->cpu_dai : - rtd->codec_dai; + ret = asoc_simple_card_init_dai(rtd->codec_dai, + dai_props->codec_dai); + if (ret < 0) + return ret; - return asoc_simple_card_init_dai(dai, &dai_props->dai); + ret = asoc_simple_card_init_dai(rtd->cpu_dai, + dai_props->cpu_dai); + if (ret < 0) + return ret; + + return 0; } static int asoc_graph_card_be_hw_params_fixup(struct snd_soc_pcm_runtime *rtd, @@ -99,14 +114,15 @@ static int asoc_graph_card_be_hw_params_fixup(struct snd_soc_pcm_runtime *rtd, static int asoc_graph_card_dai_link_of(struct device_node *cpu_ep, struct device_node *codec_ep, struct graph_card_data *priv, - int idx, int is_fe) + int *dai_idx, int link_idx, int is_fe) { struct device *dev = graph_priv_to_dev(priv); - struct snd_soc_dai_link *dai_link = graph_priv_to_link(priv, idx); - struct graph_dai_props *dai_props = graph_priv_to_props(priv, idx); + struct snd_soc_dai_link *dai_link = graph_priv_to_link(priv, link_idx); + struct graph_dai_props *dai_props = graph_priv_to_props(priv, link_idx); struct snd_soc_card *card = graph_priv_to_card(priv); struct device_node *ep = is_fe ? cpu_ep : codec_ep; struct device_node *node = of_graph_get_port_parent(ep); + struct asoc_simple_dai *dai; int ret; if (is_fe) { @@ -122,11 +138,14 @@ static int asoc_graph_card_dai_link_of(struct device_node *cpu_ep, dai_link->dynamic = 1; dai_link->dpcm_merged_format = 1; + dai = + dai_props->cpu_dai = &priv->dais[(*dai_idx)++]; + ret = asoc_simple_card_parse_graph_cpu(ep, dai_link); if (ret) return ret; - ret = asoc_simple_card_parse_clk_cpu(dev, ep, dai_link, &dai_props->dai); + ret = asoc_simple_card_parse_clk_cpu(dev, ep, dai_link, dai); if (ret < 0) return ret; @@ -149,11 +168,14 @@ static int asoc_graph_card_dai_link_of(struct device_node *cpu_ep, dai_link->no_pcm = 1; dai_link->be_hw_params_fixup = asoc_graph_card_be_hw_params_fixup; + dai = + dai_props->codec_dai = &priv->dais[(*dai_idx)++]; + ret = asoc_simple_card_parse_graph_codec(ep, dai_link); if (ret < 0) return ret; - ret = asoc_simple_card_parse_clk_codec(dev, ep, dai_link, &dai_props->dai); + ret = asoc_simple_card_parse_clk_codec(dev, ep, dai_link, dai); if (ret < 0) return ret; @@ -178,7 +200,7 @@ static int asoc_graph_card_dai_link_of(struct device_node *cpu_ep, asoc_simple_card_parse_convert(dev, node, PREFIX, &dai_props->adata); - ret = asoc_simple_card_of_parse_tdm(ep, &dai_props->dai); + ret = asoc_simple_card_of_parse_tdm(ep, dai); if (ret) return ret; @@ -210,7 +232,7 @@ static int asoc_graph_card_parse_of(struct graph_card_data *priv) struct device_node *codec_ep; struct device_node *codec_port; struct device_node *codec_port_old; - int dai_idx, ret; + int dai_idx, link_idx, ret; int rc, codec; if (!node) @@ -232,6 +254,7 @@ static int asoc_graph_card_parse_of(struct graph_card_data *priv) * see asoc_graph_get_dais_count */ + link_idx = 0; dai_idx = 0; codec_port_old = NULL; for (codec = 0; codec < 2; codec++) { @@ -260,8 +283,8 @@ static int asoc_graph_card_parse_of(struct graph_card_data *priv) } ret = asoc_graph_card_dai_link_of(cpu_ep, codec_ep, - priv, dai_idx++, - !codec); + priv, &dai_idx, + link_idx++, !codec); if (ret < 0) goto parse_of_err; } @@ -364,6 +387,7 @@ static int asoc_graph_card_probe(struct platform_device *pdev) struct graph_card_data *priv; struct snd_soc_dai_link *dai_link; struct graph_dai_props *dai_props; + struct asoc_simple_dai *dais; struct device *dev = &pdev->dev; struct snd_soc_card *card; int lnum = 0, dnum = 0, cnum = 0; @@ -380,7 +404,8 @@ static int asoc_graph_card_probe(struct platform_device *pdev) dai_props = devm_kcalloc(dev, lnum, sizeof(*dai_props), GFP_KERNEL); dai_link = devm_kcalloc(dev, lnum, sizeof(*dai_link), GFP_KERNEL); - if (!dai_props || !dai_link) + dais = devm_kcalloc(dev, dnum, sizeof(*dais), GFP_KERNEL); + if (!dai_props || !dai_link || !dais) return -ENOMEM; /* @@ -397,6 +422,7 @@ static int asoc_graph_card_probe(struct platform_device *pdev) priv->dai_props = dai_props; priv->dai_link = dai_link; + priv->dais = dais; /* Init snd_soc_card */ card = graph_priv_to_card(priv); From patchwork Fri Nov 30 02:07:32 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kuninori Morimoto X-Patchwork-Id: 10705641 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 3127517D5 for ; Fri, 30 Nov 2018 02:07:42 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1BD9B2FC5D for ; Fri, 30 Nov 2018 02:07:42 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 102652FC68; Fri, 30 Nov 2018 02:07:42 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.7 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from alsa0.perex.cz (alsa0.perex.cz [77.48.224.243]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 127442FC5D for ; Fri, 30 Nov 2018 02:07:40 +0000 (UTC) Received: from alsa0.perex.cz (localhost [127.0.0.1]) by alsa0.perex.cz (Postfix) with ESMTP id CB0EC267B9A; Fri, 30 Nov 2018 03:07:39 +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 3EA90267B94; Fri, 30 Nov 2018 03:07:37 +0100 (CET) Received: from JPN01-OS2-obe.outbound.protection.outlook.com (mail-eopbgr1410135.outbound.protection.outlook.com [40.107.141.135]) by alsa0.perex.cz (Postfix) with ESMTP id 117E5267B87 for ; Fri, 30 Nov 2018 03:07:34 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=renesasgroup.onmicrosoft.com; s=selector1-renesas-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=9tucrzCfjA5bn6oxkx8MeR8H03963DtcyP6EwWQHcv0=; b=OzHLxL85y5uyHjT0+scI7p3r3XmU01VpcmxK7DB29NMIaeu9PeVPPwbr+mmQtAAJlOqUitpnyFtLxmk/t/+EC+HyMjx2qa0ar+0ul9grDAylE7WkiSihUEdJ7I600VhyTAbV0W8DaVjOmTioFZ5npllL6RioIjdnolNexK0kbmo= Received: from TYAPR01MB3328.jpnprd01.prod.outlook.com (20.178.136.81) by TYAPR01MB4655.jpnprd01.prod.outlook.com (20.179.174.213) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1382.19; Fri, 30 Nov 2018 02:07:32 +0000 Received: from TYAPR01MB3328.jpnprd01.prod.outlook.com ([fe80::8903:38b9:bfa8:89b7]) by TYAPR01MB3328.jpnprd01.prod.outlook.com ([fe80::8903:38b9:bfa8:89b7%2]) with mapi id 15.20.1361.019; Fri, 30 Nov 2018 02:07:32 +0000 From: Kuninori Morimoto To: Mark Brown Thread-Topic: [PATCH v2 4/5] ASoC: audio-graph-scu-card: care multi DPCM codec_conf Thread-Index: AQHUiFF0xmwp2Y05rEOr9mFnyI0ZdA== Date: Fri, 30 Nov 2018 02:07:32 +0000 Message-ID: <87tvjzz5qs.wl-kuninori.morimoto.gx@renesas.com> References: <87zhtrz5yt.wl-kuninori.morimoto.gx@renesas.com> In-Reply-To: <87zhtrz5yt.wl-kuninori.morimoto.gx@renesas.com> Accept-Language: ja-JP, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: KAWPR01CA0098.jpnprd01.prod.outlook.com (2603:1096:402:c::34) To TYAPR01MB3328.jpnprd01.prod.outlook.com (2603:1096:404:bb::17) authentication-results: spf=none (sender IP is ) smtp.mailfrom=kuninori.morimoto.gx@renesas.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [211.11.155.130] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; TYAPR01MB4655; 20:cx1bP3ZylG5Q8raxJWBiNEqYEzXNVXiSCn8bLXWamRro2DnG+BohAWpxJ/LkBlNRxeJSxrMLdYUigcjUm2gxagEoYqumvZmfkLucWmQbR+LEev7XTGSzxLTRG6c8OHPVe51OMkgn/2NfxxnF0uJSLgdermSE9zPhF4tw2Thi0BU= x-ms-office365-filtering-correlation-id: de1945b0-e903-4609-b1e2-08d6566896b6 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390098)(7020095)(4652040)(8989299)(5600074)(711020)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020); SRVR:TYAPR01MB4655; x-ms-traffictypediagnostic: TYAPR01MB4655: x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(10201501046)(3231453)(999002)(944501457)(52105112)(93006095)(93001095)(6055026)(148016)(149066)(150057)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123558120)(20161123560045)(20161123562045)(201708071742011)(7699051)(76991095); SRVR:TYAPR01MB4655; BCL:0; PCL:0; RULEID:; SRVR:TYAPR01MB4655; x-forefront-prvs: 087223B4DA x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(396003)(346002)(39860400002)(376002)(136003)(366004)(199004)(189003)(68736007)(52116002)(256004)(76176011)(6916009)(6512007)(99286004)(478600001)(106356001)(105586002)(36756003)(476003)(2616005)(446003)(11346002)(71190400001)(5660300001)(71200400001)(8936002)(25786009)(186003)(102836004)(26005)(8676002)(386003)(486006)(86362001)(81166006)(81156014)(6506007)(316002)(53936002)(305945005)(6436002)(66066001)(7736002)(6486002)(2906002)(3846002)(6116002)(14454004)(4326008)(97736004); DIR:OUT; SFP:1102; SCL:1; SRVR:TYAPR01MB4655; H:TYAPR01MB3328.jpnprd01.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: renesas.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: Ip6vVArIqbMycoxLavtiHl5pRQB1siwaCvHfPymYfecGVXsO91zXI1qU4ktbhW0vhaMk8zcU5I1pKlL6xZjqtVH3tbTQxGxJTZDy1KE8nDagovFP7Jyjf9Lrs5eXTBMoSk9Rj1RJnFimTsHXUPdi7hMSMrAwOX4YeSTk+sI+8qYed3eyApXnloEbVYlXZfVSXaLJO/6naQQ1PyF4NeuTRQxgM3M1PP9pltvhu8QdxvIZZKxrnOI1VlUsGCv05PAqdyh4OxdSTQl/SBRppXm9PVh8CSdNe6Les7j8KgHQuiOQ0c5IEM3WvgaXJL+roxwrpwVbSj/zO58uY5E1xD5zRfsgwQDZlxtaGG7g0n3IFow= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-ID: MIME-Version: 1.0 X-OriginatorOrg: renesas.com X-MS-Exchange-CrossTenant-Network-Message-Id: de1945b0-e903-4609-b1e2-08d6566896b6 X-MS-Exchange-CrossTenant-originalarrivaltime: 30 Nov 2018 02:07:32.7459 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 53d82571-da19-47e4-9cb4-625a166a4a2a X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYAPR01MB4655 Cc: Linux-ALSA Subject: [alsa-devel] [PATCH v2 4/5] ASoC: audio-graph-scu-card: care multi DPCM codec_conf 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 From: Kuninori Morimoto Current audio-graph-scu-card didn't care about codec_conf for multi DPCM case. This patch cares it. Signed-off-by: Kuninori Morimoto --- v1 -> v2 - no change sound/soc/generic/audio-graph-scu-card.c | 40 +++++++++++++++++++++++--------- 1 file changed, 29 insertions(+), 11 deletions(-) diff --git a/sound/soc/generic/audio-graph-scu-card.c b/sound/soc/generic/audio-graph-scu-card.c index ed128d4..e1b192e 100644 --- a/sound/soc/generic/audio-graph-scu-card.c +++ b/sound/soc/generic/audio-graph-scu-card.c @@ -24,17 +24,18 @@ struct graph_card_data { struct snd_soc_card snd_card; - struct snd_soc_codec_conf codec_conf; struct graph_dai_props { struct asoc_simple_dai *cpu_dai; struct asoc_simple_dai *codec_dai; struct snd_soc_dai_link_component codecs; struct snd_soc_dai_link_component platform; struct asoc_simple_card_data adata; + struct snd_soc_codec_conf *codec_conf; } *dai_props; struct snd_soc_dai_link *dai_link; struct asoc_simple_dai *dais; struct asoc_simple_card_data adata; + struct snd_soc_codec_conf *codec_conf; }; #define graph_priv_to_card(priv) (&(priv)->snd_card) @@ -114,7 +115,8 @@ static int asoc_graph_card_be_hw_params_fixup(struct snd_soc_pcm_runtime *rtd, static int asoc_graph_card_dai_link_of(struct device_node *cpu_ep, struct device_node *codec_ep, struct graph_card_data *priv, - int *dai_idx, int link_idx, int is_fe) + int *dai_idx, int link_idx, + int *conf_idx, int is_fe) { struct device *dev = graph_priv_to_dev(priv); struct snd_soc_dai_link *dai_link = graph_priv_to_link(priv, link_idx); @@ -159,6 +161,8 @@ static int asoc_graph_card_dai_link_of(struct device_node *cpu_ep, asoc_simple_card_canonicalize_cpu(dai_link, of_graph_get_endpoint_count(dai_link->cpu_of_node) == 1); } else { + struct snd_soc_codec_conf *cconf; + /* FE is dummy */ dai_link->cpu_of_node = NULL; dai_link->cpu_dai_name = "snd-soc-dummy-dai"; @@ -171,6 +175,9 @@ static int asoc_graph_card_dai_link_of(struct device_node *cpu_ep, dai = dai_props->codec_dai = &priv->dais[(*dai_idx)++]; + cconf = + dai_props->codec_conf = &priv->codec_conf[(*conf_idx)++]; + ret = asoc_simple_card_parse_graph_codec(ep, dai_link); if (ret < 0) return ret; @@ -186,14 +193,12 @@ static int asoc_graph_card_dai_link_of(struct device_node *cpu_ep, return ret; /* check "prefix" from top node */ - snd_soc_of_parse_audio_prefix(card, - &priv->codec_conf, + snd_soc_of_parse_audio_prefix(card, cconf, dai_link->codecs->of_node, "prefix"); /* check "prefix" from each node if top doesn't have */ - if (!priv->codec_conf.of_node) - snd_soc_of_parse_node_prefix(node, - &priv->codec_conf, + if (!cconf->of_node) + snd_soc_of_parse_node_prefix(node, cconf, dai_link->codecs->of_node, PREFIX "prefix"); } @@ -232,7 +237,7 @@ static int asoc_graph_card_parse_of(struct graph_card_data *priv) struct device_node *codec_ep; struct device_node *codec_port; struct device_node *codec_port_old; - int dai_idx, link_idx, ret; + int dai_idx, link_idx, conf_idx, ret; int rc, codec; if (!node) @@ -256,6 +261,7 @@ static int asoc_graph_card_parse_of(struct graph_card_data *priv) link_idx = 0; dai_idx = 0; + conf_idx = 0; codec_port_old = NULL; for (codec = 0; codec < 2; codec++) { /* @@ -284,7 +290,8 @@ static int asoc_graph_card_parse_of(struct graph_card_data *priv) ret = asoc_graph_card_dai_link_of(cpu_ep, codec_ep, priv, &dai_idx, - link_idx++, !codec); + link_idx++, &conf_idx, + !codec); if (ret < 0) goto parse_of_err; } @@ -294,6 +301,14 @@ static int asoc_graph_card_parse_of(struct graph_card_data *priv) if (ret) goto parse_of_err; + if ((card->num_links != link_idx) || + (card->num_configs != conf_idx)) { + dev_err(dev, "dai_link or codec_config wrong (%d/%d, %d/%d)\n", + card->num_links, link_idx, card->num_configs, conf_idx); + ret = -EINVAL; + goto parse_of_err; + } + ret = 0; parse_of_err: @@ -390,6 +405,7 @@ static int asoc_graph_card_probe(struct platform_device *pdev) struct asoc_simple_dai *dais; struct device *dev = &pdev->dev; struct snd_soc_card *card; + struct snd_soc_codec_conf *cconf; int lnum = 0, dnum = 0, cnum = 0; int ret, i; @@ -405,6 +421,7 @@ static int asoc_graph_card_probe(struct platform_device *pdev) dai_props = devm_kcalloc(dev, lnum, sizeof(*dai_props), GFP_KERNEL); dai_link = devm_kcalloc(dev, lnum, sizeof(*dai_link), GFP_KERNEL); dais = devm_kcalloc(dev, dnum, sizeof(*dais), GFP_KERNEL); + cconf = devm_kcalloc(dev, cnum, sizeof(*cconf), GFP_KERNEL); if (!dai_props || !dai_link || !dais) return -ENOMEM; @@ -423,6 +440,7 @@ static int asoc_graph_card_probe(struct platform_device *pdev) priv->dai_props = dai_props; priv->dai_link = dai_link; priv->dais = dais; + priv->codec_conf = cconf; /* Init snd_soc_card */ card = graph_priv_to_card(priv); @@ -430,8 +448,8 @@ static int asoc_graph_card_probe(struct platform_device *pdev) card->dev = dev; card->dai_link = priv->dai_link; card->num_links = lnum; - card->codec_conf = &priv->codec_conf; - card->num_configs = 1; + card->codec_conf = cconf; + card->num_configs = cnum; ret = asoc_graph_card_parse_of(priv); if (ret < 0) { From patchwork Fri Nov 30 02:07:48 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kuninori Morimoto X-Patchwork-Id: 10705643 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id B4C7F17D5 for ; Fri, 30 Nov 2018 02:07:57 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A35242FC65 for ; Fri, 30 Nov 2018 02:07:57 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 973932FC69; Fri, 30 Nov 2018 02:07:57 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.7 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from alsa0.perex.cz (alsa0.perex.cz [77.48.224.243]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C0E2D2FC65 for ; Fri, 30 Nov 2018 02:07:56 +0000 (UTC) Received: from alsa0.perex.cz (localhost [127.0.0.1]) by alsa0.perex.cz (Postfix) with ESMTP id B36BF267B93; Fri, 30 Nov 2018 03:07:55 +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 DFFDF267B93; Fri, 30 Nov 2018 03:07:52 +0100 (CET) Received: from JPN01-OS2-obe.outbound.protection.outlook.com (mail-eopbgr1410110.outbound.protection.outlook.com [40.107.141.110]) by alsa0.perex.cz (Postfix) with ESMTP id B5F16267B87 for ; Fri, 30 Nov 2018 03:07:50 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=renesasgroup.onmicrosoft.com; s=selector1-renesas-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=wMUV3QZzophbfGlVXQj9w7sKDs9oFD57lQ0FzpqEe8c=; b=nh6TW+oXIX6o0HMRPGx9pHiR7eQyMeIF9O1tA8vf7Qmh8z3w7R6HUy91D65bmNtPA0OH3m3msB3IK+689tuMkICofFEjT3iBEteLnuXYgfHr+X9Yl/jWgKHAy/KFAfkVO80KCNlRhpu5OC7bh/MVaBV+1KXAejTYQUdbe+uAutM= Received: from TYAPR01MB3328.jpnprd01.prod.outlook.com (20.178.136.81) by TYAPR01MB4655.jpnprd01.prod.outlook.com (20.179.174.213) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1382.19; Fri, 30 Nov 2018 02:07:48 +0000 Received: from TYAPR01MB3328.jpnprd01.prod.outlook.com ([fe80::8903:38b9:bfa8:89b7]) by TYAPR01MB3328.jpnprd01.prod.outlook.com ([fe80::8903:38b9:bfa8:89b7%2]) with mapi id 15.20.1361.019; Fri, 30 Nov 2018 02:07:48 +0000 From: Kuninori Morimoto To: Mark Brown Thread-Topic: [PATCH v2 5/5] ASoC: audio-graph-card: use cpu/codec pointer on graph_dai_props Thread-Index: AQHUiFF90z1Psv5ta0Coat/qL74YZA== Date: Fri, 30 Nov 2018 02:07:48 +0000 Message-ID: <87sgzjz5qd.wl-kuninori.morimoto.gx@renesas.com> References: <87zhtrz5yt.wl-kuninori.morimoto.gx@renesas.com> In-Reply-To: <87zhtrz5yt.wl-kuninori.morimoto.gx@renesas.com> Accept-Language: ja-JP, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: TYAPR01CA0086.jpnprd01.prod.outlook.com (2603:1096:404:2c::26) To TYAPR01MB3328.jpnprd01.prod.outlook.com (2603:1096:404:bb::17) authentication-results: spf=none (sender IP is ) smtp.mailfrom=kuninori.morimoto.gx@renesas.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [211.11.155.130] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; TYAPR01MB4655; 20:xAxbOFSH2aw2/UY8Dbomz58Re1M1/pFxlJznsJ+yhQmcB1XwFet4Z/mJKDiQIqS1e9Ig3dTfhiIa33iXy7X2HfNwlfEkCF2TJ3Xng3SZznreNbGdW7vNtC87WqPPqbO53D8bO1fXKvgIW+vky4l3L9w4kt4u+fneLnTruuD9srA= x-ms-office365-filtering-correlation-id: 6bf5c914-1904-4ff3-d2f5-08d656689ff3 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390098)(7020095)(4652040)(8989299)(5600074)(711020)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020); SRVR:TYAPR01MB4655; x-ms-traffictypediagnostic: TYAPR01MB4655: x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(10201501046)(3231453)(999002)(944501457)(52105112)(93006095)(93001095)(6055026)(148016)(149066)(150057)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123558120)(20161123560045)(20161123562045)(201708071742011)(7699051)(76991095); SRVR:TYAPR01MB4655; BCL:0; PCL:0; RULEID:; SRVR:TYAPR01MB4655; x-forefront-prvs: 087223B4DA x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(396003)(346002)(39860400002)(376002)(136003)(366004)(199004)(189003)(68736007)(52116002)(256004)(76176011)(6916009)(6512007)(99286004)(478600001)(106356001)(105586002)(36756003)(476003)(2616005)(446003)(11346002)(71190400001)(5660300001)(71200400001)(8936002)(25786009)(186003)(102836004)(26005)(8676002)(386003)(486006)(86362001)(81166006)(81156014)(6506007)(316002)(53936002)(305945005)(6436002)(66066001)(7736002)(6486002)(2906002)(3846002)(6116002)(14454004)(4326008)(97736004); DIR:OUT; SFP:1102; SCL:1; SRVR:TYAPR01MB4655; H:TYAPR01MB3328.jpnprd01.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: renesas.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: 6JAEJmkZdvOkD8Vdg6SEhjLBaLRuOF9XtmF+W0mIBy2HBVube9MLvn64h5mBtAV7lECdn+MW8xUpijT0VgMHuzZwKIDtcA8lnar9I0qYbm5+bfEp6qmi+QgVYUpedrsaPpRc76ZM+fanzs9z2INwRq0+jtn6J/BEbrjgs4UC2C2U5TQIEh+pUSUwOssjZnTvLRXcg3PL9cNNrPtJJ8pKHQwBWm2B2KdaVTfwkhhxPtWuvNnzW/vyii/S+J4bcVVItHE17oeukRshX5RDw9bsfi6+xG/9BNRx2oLEGNPUi8ffpvuPSzkGiGrDIcd/vgj7xcT6I+lCrnNB/Sot/UK1D5d1bWCgwKhu3x9dOsJ8ZNY= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-ID: MIME-Version: 1.0 X-OriginatorOrg: renesas.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6bf5c914-1904-4ff3-d2f5-08d656689ff3 X-MS-Exchange-CrossTenant-originalarrivaltime: 30 Nov 2018 02:07:48.3554 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 53d82571-da19-47e4-9cb4-625a166a4a2a X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYAPR01MB4655 Cc: Linux-ALSA Subject: [alsa-devel] [PATCH v2 5/5] ASoC: audio-graph-card: use cpu/codec pointer on graph_dai_props 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 From: Kuninori Morimoto In DPCM case, it uses CPU-dummy / dummy-Codec dai links, and non DPCM case, it uses CPU-Codec dai links. Now, we want to merge audio-graph-card and audio-graph-scu-card. These sound cards are using silimar but not same logic on each functions. Then, of course we want to share same logic. To compromise, this patch uses cpu/codec pointer on audio-graph-card. It is same logic with audio-graph-scu-card, thus easy merging. This is prepare for merging audio card Signed-off-by: Kuninori Morimoto --- v1 -> v2 - no change sound/soc/generic/audio-graph-card.c | 57 +++++++++++++++++++++--------------- 1 file changed, 34 insertions(+), 23 deletions(-) diff --git a/sound/soc/generic/audio-graph-card.c b/sound/soc/generic/audio-graph-card.c index 1b158cc..1da9532 100644 --- a/sound/soc/generic/audio-graph-card.c +++ b/sound/soc/generic/audio-graph-card.c @@ -23,8 +23,8 @@ struct graph_card_data { struct snd_soc_card snd_card; struct graph_dai_props { - struct asoc_simple_dai cpu_dai; - struct asoc_simple_dai codec_dai; + struct asoc_simple_dai *cpu_dai; + struct asoc_simple_dai *codec_dai; struct snd_soc_dai_link_component codecs; /* single codec */ struct snd_soc_dai_link_component platform; unsigned int mclk_fs; @@ -33,6 +33,7 @@ struct graph_card_data { struct asoc_simple_jack hp_jack; struct asoc_simple_jack mic_jack; struct snd_soc_dai_link *dai_link; + struct asoc_simple_dai *dais; struct gpio_desc *pa_gpio; }; @@ -75,13 +76,13 @@ static int asoc_graph_card_startup(struct snd_pcm_substream *substream) struct graph_dai_props *dai_props = graph_priv_to_props(priv, rtd->num); int ret; - ret = asoc_simple_card_clk_enable(&dai_props->cpu_dai); + ret = asoc_simple_card_clk_enable(dai_props->cpu_dai); if (ret) return ret; - ret = asoc_simple_card_clk_enable(&dai_props->codec_dai); + ret = asoc_simple_card_clk_enable(dai_props->codec_dai); if (ret) - asoc_simple_card_clk_disable(&dai_props->cpu_dai); + asoc_simple_card_clk_disable(dai_props->cpu_dai); return ret; } @@ -92,9 +93,9 @@ static void asoc_graph_card_shutdown(struct snd_pcm_substream *substream) struct graph_card_data *priv = snd_soc_card_get_drvdata(rtd->card); struct graph_dai_props *dai_props = graph_priv_to_props(priv, rtd->num); - asoc_simple_card_clk_disable(&dai_props->cpu_dai); + asoc_simple_card_clk_disable(dai_props->cpu_dai); - asoc_simple_card_clk_disable(&dai_props->codec_dai); + asoc_simple_card_clk_disable(dai_props->codec_dai); } static int asoc_graph_card_hw_params(struct snd_pcm_substream *substream, @@ -139,17 +140,16 @@ static const struct snd_soc_ops asoc_graph_card_ops = { static int asoc_graph_card_dai_init(struct snd_soc_pcm_runtime *rtd) { struct graph_card_data *priv = snd_soc_card_get_drvdata(rtd->card); - struct snd_soc_dai *codec = rtd->codec_dai; - struct snd_soc_dai *cpu = rtd->cpu_dai; - struct graph_dai_props *dai_props = - graph_priv_to_props(priv, rtd->num); - int ret; + struct graph_dai_props *dai_props = graph_priv_to_props(priv, rtd->num); + int ret = 0; - ret = asoc_simple_card_init_dai(codec, &dai_props->codec_dai); + ret = asoc_simple_card_init_dai(rtd->codec_dai, + dai_props->codec_dai); if (ret < 0) return ret; - ret = asoc_simple_card_init_dai(cpu, &dai_props->cpu_dai); + ret = asoc_simple_card_init_dai(rtd->cpu_dai, + dai_props->cpu_dai); if (ret < 0) return ret; @@ -158,17 +158,22 @@ static int asoc_graph_card_dai_init(struct snd_soc_pcm_runtime *rtd) static int asoc_graph_card_dai_link_of(struct device_node *cpu_port, struct graph_card_data *priv, - int idx) + int *dai_idx, int link_idx) { struct device *dev = graph_priv_to_dev(priv); - struct snd_soc_dai_link *dai_link = graph_priv_to_link(priv, idx); - struct graph_dai_props *dai_props = graph_priv_to_props(priv, idx); - struct asoc_simple_dai *cpu_dai = &dai_props->cpu_dai; - struct asoc_simple_dai *codec_dai = &dai_props->codec_dai; + struct snd_soc_dai_link *dai_link = graph_priv_to_link(priv, link_idx); + struct graph_dai_props *dai_props = graph_priv_to_props(priv, link_idx); + struct asoc_simple_dai *cpu_dai; + struct asoc_simple_dai *codec_dai; struct device_node *cpu_ep = of_get_next_child(cpu_port, NULL); struct device_node *codec_ep = of_graph_get_remote_endpoint(cpu_ep); int ret; + cpu_dai = + dai_props->cpu_dai = &priv->dais[(*dai_idx)++]; + codec_dai = + dai_props->codec_dai = &priv->dais[(*dai_idx)++]; + ret = asoc_simple_card_parse_daifmt(dev, cpu_ep, codec_ep, NULL, &dai_link->dai_fmt); if (ret < 0) @@ -231,8 +236,8 @@ static int asoc_graph_card_parse_of(struct graph_card_data *priv) struct device *dev = graph_priv_to_dev(priv); struct snd_soc_card *card = graph_priv_to_card(priv); struct device_node *node = dev->of_node; - int rc, idx = 0; - int ret; + int rc, ret; + int link_idx, dai_idx; ret = asoc_simple_card_of_parse_widgets(card, NULL); if (ret < 0) @@ -245,8 +250,11 @@ static int asoc_graph_card_parse_of(struct graph_card_data *priv) /* Factor to mclk, used in hw_params() */ of_property_read_u32(node, "mclk-fs", &priv->mclk_fs); + link_idx = 0; + dai_idx = 0; of_for_each_phandle(&it, rc, node, "dais", NULL, 0) { - ret = asoc_graph_card_dai_link_of(it.node, priv, idx++); + ret = asoc_graph_card_dai_link_of(it.node, priv, + &dai_idx, link_idx++); if (ret < 0) { of_node_put(it.node); @@ -291,6 +299,7 @@ static int asoc_graph_card_probe(struct platform_device *pdev) struct graph_card_data *priv; struct snd_soc_dai_link *dai_link; struct graph_dai_props *dai_props; + struct asoc_simple_dai *dais; struct device *dev = &pdev->dev; struct snd_soc_card *card; int num, ret, i; @@ -306,7 +315,8 @@ static int asoc_graph_card_probe(struct platform_device *pdev) dai_props = devm_kcalloc(dev, num, sizeof(*dai_props), GFP_KERNEL); dai_link = devm_kcalloc(dev, num, sizeof(*dai_link), GFP_KERNEL); - if (!dai_props || !dai_link) + dais = devm_kcalloc(dev, num * 2, sizeof(*dais), GFP_KERNEL); + if (!dai_props || !dai_link || !dais) return -ENOMEM; /* @@ -330,6 +340,7 @@ static int asoc_graph_card_probe(struct platform_device *pdev) priv->dai_props = dai_props; priv->dai_link = dai_link; + priv->dais = dais; /* Init snd_soc_card */ card = graph_priv_to_card(priv);