From patchwork Thu Dec 15 08:41:38 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kuninori Morimoto X-Patchwork-Id: 9475663 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 205D760571 for ; Thu, 15 Dec 2016 08:44:26 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 17C3128668 for ; Thu, 15 Dec 2016 08:44:26 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0CB992873F; Thu, 15 Dec 2016 08:44:26 +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=-1.8 required=2.0 tests=BAD_ENC_HEADER,BAYES_00, DKIM_SIGNED, RCVD_IN_DNSWL_NONE, T_DKIM_INVALID autolearn=no 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 1764B28668 for ; Thu, 15 Dec 2016 08:44:24 +0000 (UTC) Received: by alsa0.perex.cz (Postfix, from userid 1000) id 07DEB26719C; Thu, 15 Dec 2016 09:44:23 +0100 (CET) Received: from alsa0.perex.cz (localhost [127.0.0.1]) by alsa0.perex.cz (Postfix) with ESMTP id DE9A7267193; Thu, 15 Dec 2016 09:42:02 +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 26B8326719A; Thu, 15 Dec 2016 09:41:54 +0100 (CET) Received: from relmlie2.idc.renesas.com (relmlor3.renesas.com [210.160.252.173]) by alsa0.perex.cz (Postfix) with ESMTP id 03222267172 for ; Thu, 15 Dec 2016 09:41:43 +0100 (CET) Received: from unknown (HELO relmlir2.idc.renesas.com) ([10.200.68.152]) by relmlie2.idc.renesas.com with ESMTP; 15 Dec 2016 17:41:40 +0900 Received: from relmlac2.idc.renesas.com (relmlac2.idc.renesas.com [10.200.69.22]) by relmlir2.idc.renesas.com (Postfix) with ESMTP id CEA6369B3D; Thu, 15 Dec 2016 17:41:40 +0900 (JST) Received: by relmlac2.idc.renesas.com (Postfix, from userid 0) id BACF928070; Thu, 15 Dec 2016 17:41:40 +0900 (JST) Received: from relmlac2.idc.renesas.com (localhost [127.0.0.1]) by relmlac2.idc.renesas.com (Postfix) with ESMTP id B26002806F; Thu, 15 Dec 2016 17:41:40 +0900 (JST) Received: from relmlii1.idc.renesas.com [10.200.68.65] by relmlac2.idc.renesas.com with ESMTP id TAB24680; Thu, 15 Dec 2016 17:41:40 +0900 X-IronPort-AV: E=Sophos;i="5.33,351,1477926000"; d="scan'208";a="228049741" Received: from mail-hk2apc01lp0213.outbound.protection.outlook.com (HELO APC01-HK2-obe.outbound.protection.outlook.com) ([65.55.88.213]) by relmlii1.idc.renesas.com with ESMTP/TLS/AES256-SHA256; 15 Dec 2016 17:41:40 +0900 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; bh=HcYP6HqpkaeE1uInp25CYp/GaYHPXwIap5OhkAVMqB0=; b=IomyX8hiNMQxnp3L7/gDoL3Yx5uT7ROmnQDjzVV5REc2FShmkF+fOfdD5R2zXHam6kBFyL3UnFN4pRMkW4Fo/bIts+zstd63vU8L8A6OgDwYkX4IS//RK0XeCsMezO+PNbOWT2PC/s9Udry+l15/5KnEbRi0rJErEa/flDeP/cc= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=kuninori.morimoto.gx@renesas.com; Received: from morimoto-PC.renesas.com (211.11.155.144) by KL1PR0601MB1448.apcprd06.prod.outlook.com (10.169.69.26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.771.8; Thu, 15 Dec 2016 08:41:38 +0000 Message-ID: <87oa0dh9gb.wl%kuninori.morimoto.gx@renesas.com> From: Kuninori Morimoto To: Mark Brown , Lars-Peter User-Agent: Wanderlust/2.15.9 Emacs/24.3 Mule/6.0 MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") Date: Thu, 15 Dec 2016 08:41:38 +0000 X-Originating-IP: [211.11.155.144] X-ClientProxiedBy: TY1PR01CA0127.jpnprd01.prod.outlook.com (10.167.154.45) To KL1PR0601MB1448.apcprd06.prod.outlook.com (10.169.69.26) X-MS-Office365-Filtering-Correlation-Id: 990415aa-09ee-4d31-88bb-08d424c62f97 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:KL1PR0601MB1448; X-Microsoft-Exchange-Diagnostics: 1; KL1PR0601MB1448; 3:CfG46S3jSlK3B1IlXV01B1hrBSo263+CXEd+y86NdVUcMOdKHYs7kKLiQaeLsQHfMPRBRGm9niv6pFkH1BPN0BZXmJnfRQlBx3CD97BJqHJ9XZwMQ1Y81zvKmBuTD5Ce3BHtzUQMA6p2CAAFlX04vJoeemrGOsG/YQScmtByM8OhAz6EBXhP+VFOoyNFu0tQGCSCfM9P2rvssiw7oajKGgs4rIjxoSM4epck2jjM6WzEbjS1dJbBmB34PNvXiEUkSB8iXXEWhcy6nQ9KtBSRUw==; 25:OQl3Jv/2xedF0rGHASHaHrKfruECCNTxtaz9AWFi2rpRxk1vNyOk4leROU3RjFj963jwUuXGVQqoinyjzU8QkTaMTv7hosMeyJfhJud0pQB5Z6w41zs/pQDx6hjBAcakWrVPxkRG1b3M7nQtZ78w5QvpqvtwHmcRTsQaWCiL3etwyl01b/anPncmrAYCJxfojK9gJAmUtfO100zv8naKuGiz0iMGk1OWTLjdoOF03aNqws94DqNfchVlNgi2SO7l2G1Db07o0Od+lOo/ZadgRKVMujuj6JI+lOrt/1fg8VMf9S5ChDRHVzopBAtXlg4rjKaRDamOTESTmFvYmsOiSn2RGfkR+C0t7zpFDcRtE8Wp4UGnjb1OMRkjTTXsUlIZZBAi42kQQxmSwXBfflniN1sZlJn+PvcEprhjl2Zbwv3PYC1AtgjnBEaElSNUsXT6DpIx/lloB+MLq+8OX+wjaQ== X-Microsoft-Exchange-Diagnostics: 1; KL1PR0601MB1448; 31:mJyrmqkKpzwOw1lr4J3woo7JV98JBO3PFz1UcUwhmJaGF0O1krOMjsJWyCTXfDIYKx/N7QAaAz6M54EQRCBj5WI71hajugILFRcWvXiO8frX/pNwUxwjwjc7d7z3WjaoGHu89OMXoLk8EW1KYkm3WQ0hPsKr/K0+6OKeGhqN12TFIevukLzY5DK3H01dlL4jywK/4lI7F97eOG/832Y4ELaBGHbMH5jVvbRdYzce4WdOw5QaW7ziGx7aQG/UKFWjaIFaDm1hA6FIo6MbNzIKx1uXoAz2id5VrI7l9BH73to=; 20:jk8upRdwTzFFJ8SIiRKnAitrDUzQ+1/T9kxyrLjcQHflCsNHHnUGyLm5y4Cy6fZvuIq7+PLZjgG3ewJ5kHZR3YOhDkh+8WZ79ODGL1uNfJdfcg7fVYlAwElQDHs5YeGd+uOAfNrzo+98EvlZaacw5LbQ7r4DNcHP/Gy/TNQmzx1dCRE7sC5ZSJDlKyTrBTyW0k1IOMyBsGfqSHa5/e5zpD5T9DK4eQeEIKV6sENXNFdYVrHLp59ejuNDubR1WZLPrlgUOKiBFOJvtyp6/1m8sqD11o9YMkDDjMsZkvp2sgxqPxHMvn/DSHmEOCMzFV8anUGbKS9Ek8tS0IjxdHeeCkuni0L94cEuQEleLkQjNm/34TCp/pOgMTjphuDlRtv2bnHQa+Z7Vy5lI+xOzaIDMkPXCkTR+exFcO8QvQy3nP7EX50PgdXDBhU+a/fr9yryde/k2uPZXfnQcKNizxdBULihR78g5UmwdLY02puTLHj7ty1f1TXDHB+Vl9rxL/7j X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040375)(601004)(2401047)(5005006)(8121501046)(10201501046)(3002001)(6055026)(6041248)(20161123560025)(20161123555025)(20161123562025)(20161123564025)(6072148); SRVR:KL1PR0601MB1448; BCL:0; PCL:0; RULEID:; SRVR:KL1PR0601MB1448; X-Microsoft-Exchange-Diagnostics: 1; KL1PR0601MB1448; 4:e7ab/03DjekZ32dGXXSSAqxfS9GuRjmCmY4rvaX14j7Q/nfaN2cfcIE182D4MJUDNmNXZrvNr3ueBZwwVPGwb4pQjhauIoYfgE8BcQ8zb0ebz4bLARcW0YpeDR6GmY2nuIT7xuvp5RQNKdYhuAaHd3iQmMMxSCaiwYO1+mV/SXcZx1yv8VJWiA43jNERshvLmS6WK9jCnyTnF+dCEpiO/1Wg4PLN0Jpkh9wv4Y+Ps2GYOkdwXC/2EfEmjeX6xvUDtQQVwKlTeMn37i4j4QFSG1/eAn+9yo2yrP2bBOguEtAjmmaaFPQ+RoeuqkcZtiAdLT2xSD9el0La8BZg9nb4FjlTbMzFzCnVs0u2Xysi0kIIy2TmToS22vUF+WJtgxCYNZS75xq86Jlkm82OrNSAHuOeDOs4vnwLj/i2eIiaty3I3CEbVKWCzANmSx5YEKzvIW+9w15zrYAo/qZbCiF05soIYmuXzeDEn5f3rpa1sTWgfjgGwTpUobUt9y5C+gx3pQ6uW4k+VU+0w24IQzAiDqCxwqjBAClplgntcoVlBwPpwY4ex/aaUGGAaRx0obOSXvSkZdWb1KjBZ1OZDMA3HQ== X-Forefront-PRVS: 0157DEB61B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4630300001)(6009001)(7916002)(39840400002)(39860400002)(39450400003)(39410400002)(39850400002)(199003)(189002)(2906002)(50986999)(5660300001)(54356999)(101416001)(81156014)(81166006)(33646002)(8676002)(3846002)(4326007)(69596002)(42186005)(86362001)(6486002)(53416004)(6116002)(106356001)(105586002)(68736007)(36756003)(97736004)(305945005)(38730400001)(50466002)(4001350100001)(5001770100001)(23726003)(189998001)(47776003)(92566002)(83506001)(7736002)(25786008)(66066001)(46406003)(16060500001); DIR:OUT; SFP:1102; SCL:1; SRVR:KL1PR0601MB1448; H:morimoto-PC.renesas.com; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: renesas.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; KL1PR0601MB1448; 23:38aIg/WR9Q/KnPjwPwX0xh2LfT5b4uy7RD3rZRh?= =?us-ascii?Q?XHHaASfuUEKP7xQkSwoEdotXa8GYTZpnHA0qGvhPWz0d0I1NHbLRKA4o6lwo?= =?us-ascii?Q?5zQQRLqnAqp+1stN3KrzPm1zyL8rCldMeoiC/Xv2uaH/OMpZizABGKCp+zKl?= =?us-ascii?Q?1u5Ikz4/dI+BYh47QhDH3IdTS9gh259UL4WpSlnGgLGy1WXNjccVgDcqiS9V?= =?us-ascii?Q?RkwpUGJPK5GvfvN5CspESeQ/pLYjQtLZ3/d9aWAYta+dIQzaxnJO5tYwGdxn?= =?us-ascii?Q?yGmImtJ+WsTchbcOtidbA0mW7gHEiT8YgK99ydButUbvk7Pi3goGi23xTeFi?= =?us-ascii?Q?5qKhVREmARWSDjVhGle+UiqVEwm94dDKrlLng2f58CIKgUqrxlIUtPCmX7kk?= =?us-ascii?Q?iG691LvtyiYsba65ctCOld96DCIddKo0Dgx39/pNE9PXXtw+TgTd5wtBiAnq?= =?us-ascii?Q?OoOSVpo9DOidAUKxg23fjKezjewyILRwLBDGrP4ZP57T7EzvFC/6WotkRs1+?= =?us-ascii?Q?YKya8ftuZwj1OsXMsoH5hNdXWTwBlELC0CNYBsfGVaCwOvjLrXdgOZiiky/v?= =?us-ascii?Q?PslxYjM+2QCRwiFnVcKMSZcrw9oWjjpCbSZV8R242hoNlrubw7qEUCdx73qL?= =?us-ascii?Q?Rv35a2ytNXSiGsSe9iiTBcfzjbqSoXy+vCkHJzv6JGXDgpBJFMUzOvQaI89z?= =?us-ascii?Q?KJCOSFnF20rxA6268VVh7C1FesQpSudbSdPoBqKkq7QNrCa41NXExbGv94SS?= =?us-ascii?Q?ha07azq3/4OXT5ojLuZHD8x6AnXF52Tswz2PcM1z5pUF4MSoiHfp5+lpZnqi?= =?us-ascii?Q?jw5S1y1GLUDuGGXMvxGgyK0RILwc3gVKtHDIkIHhW8ODgS7dA0ZtPjeofUQf?= =?us-ascii?Q?VpVS4hlrw+ENGecsVJldZ8cezXaNKEJGsliJAStvJSnpKY28Zv3cXumVkWbY?= =?us-ascii?Q?6NNcDKPDCbhEd6gzIDc1v2Rg6OutMTUkEX4S+SzxzD4VjAGeB6ol2eOsqTs3?= =?us-ascii?Q?cw9fx0ykV8LndCSqKmk45IqlfOvgiBMVJcensaV8lF8CZFBE5bxOBBIxLiGa?= =?us-ascii?Q?FSeeutk9I8tCSIM/frbjA3b2xj0lK03vM0g7rHYxXzVwg1RfVPIb1rSIieJ0?= =?us-ascii?Q?3TOmgLLUdKEZUxDtqZSWf8mAvWQCPVx8Z4Z8qydkUuqaJyzh+q+yfH7lpYJZ?= =?us-ascii?Q?5fnJmg5r+D723yBg=3D?= X-Microsoft-Exchange-Diagnostics: 1; KL1PR0601MB1448; 6:T7KYh+dvHlY805PdxKGzv9C0LAZhC9aKTiHPxZVbNLhPm6Y7T57pCAjvzs2Zj5TGpUm6jS75Zt3f8Ew2JeHYo2/V98ckCHNCpwda2k04+lTV7nCPXcxgmRNdC51RqvztqgsMgElWYIaT9g0OL04dUrQQffLi2klJLa5rWyJz6ROdN0V/WwTMS88nN72k+b0DyIBQNKBw/XQ3soMPHZvsCNdhrYoBc/m4QG2y5msuxoMhzp16EaOWs9zVDk6CvrxPxKkiGvtLV1l3IyIcr2o2JcZz/+FP1FSFLLgqH47BIHZRot0xnMw9nVH7CLv3+5BGFURVaSRf0+GOVYlXZNNxm0Px6fLQ9ho68YUB30EwisQMs0mo4MoE5rLKt6SaIdD43gAmVqNSSW7D20qeCJc0JR+deKQV3aJRBvh12H21hCT6yQN4I9Mxo5lty2QoEKIRMqNCCO6aIr3jtNqjQo7yEg==; 5:GzJQfsNhy6SYLfeG9irmS05eA1RjPev2k/CJ0LSLg0JePZAO4gdqVlRaVgcwad17uS7hqWwN5J080Y1gPLvnGr6bBO05znM/rvMfcKBY5hWobZnDvFAoAdAVCNGIGagRHlbSg/dy9MtZXJX7rVIDMw==; 24:0XbE9IAtBzVhn/GR9OWO8QlZUv0ebslYxpHzluNl4F3ybRykYP6qr6Jic4w1z5tq37EwTeegjdoKTqx5bdDhUbdUqOg3XLHCvMJQdEoRqXY= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; KL1PR0601MB1448; 7:E0Q3k+OBk2uaT24068tMVvDhUtEkLPheS6a6eV5SkuDzq9f4+uPhJs3yYGYyj45lEqdvLnx2k7gAHSkLM39M+GlXOdejFsTC85BLWZRS12CFGm2dcqMomn2rkEUVDDDrBcgb3eZf6UofVDVFVI+XNUXNhnwtpZvN5WZR2qNczO/A2uTB2dZ9RkAFaXgzRuIMER+XtFL0z1UNgoDjLDD9Zmw+PUfU4vO+1acrwh74UAAyKoFDIEKktUuzzOA0juLrZB5yzhl+HKWtSpWg+u8POEqlf3NfOkKiB99/VJ7xtUj4/kMnlpiiDXf5nRRP6TPgWk8reFfH7Ld+u61YoDtPhqNwMyFdSolzXKj15l0W+z3HLtZp18KfTQsMvbdllgqOWLdJV6jRyiU+LFjo6ahHB6oXRQ5qTs8HeFDpKZQ9VV/neoFYHKaGXciWvdUImmFIzWMa2d/PxB7WQqdkesDwuQ==; 20:U/jqmOYLegk9L2qTdNrNRxVUIA+y44nGkbe2lqYZhkwSBkFx8xsKjc2lg/wcnb/5gNxWEnD7OVTqXpEB08Pq43qk5uw6XT8KJmYgHFFfRdFnKJE6Iuf1nYYH2SGVV/pIse+3JL1vQc7/IBeSVUWEEOJ1BECIPLxSBG6+brFJiWE= X-OriginatorOrg: renesas.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Dec 2016 08:41:38.1422 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: KL1PR0601MB1448 Cc: Linux-ALSA , Simon Subject: [alsa-devel] [PATCH] ASoC: add Component level pcm_new/pcm_free 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 current ALSA SoC, Platform only has pcm_new/pcm_free feature, but it should be supported on Component level. This patch adds it. Signed-off-by: Kuninori Morimoto --- include/sound/soc.h | 6 ++++++ sound/soc/soc-core.c | 21 +++++++++++++++++++++ sound/soc/soc-pcm.c | 32 +++++++++++++++++++++++--------- 3 files changed, 50 insertions(+), 9 deletions(-) diff --git a/include/sound/soc.h b/include/sound/soc.h index 2b502f6..e580a67 100644 --- a/include/sound/soc.h +++ b/include/sound/soc.h @@ -785,6 +785,10 @@ struct snd_soc_component_driver { int (*suspend)(struct snd_soc_component *); int (*resume)(struct snd_soc_component *); + /* pcm creation and destruction */ + int (*pcm_new)(struct snd_soc_pcm_runtime *); + void (*pcm_free)(struct snd_pcm *); + /* DT */ int (*of_xlate_dai_name)(struct snd_soc_component *component, struct of_phandle_args *args, @@ -858,6 +862,8 @@ struct snd_soc_component { void (*remove)(struct snd_soc_component *); int (*suspend)(struct snd_soc_component *); int (*resume)(struct snd_soc_component *); + int (*pcm_new)(struct snd_soc_pcm_runtime *); + void (*pcm_free)(struct snd_pcm *); /* machine specific init */ int (*init)(struct snd_soc_component *component); diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c index f1901bb..981443e 100644 --- a/sound/soc/soc-core.c +++ b/sound/soc/soc-core.c @@ -2976,6 +2976,8 @@ static int snd_soc_component_initialize(struct snd_soc_component *component, component->remove = component->driver->remove; component->suspend = component->driver->suspend; component->resume = component->driver->resume; + component->pcm_new = component->driver->pcm_new; + component->pcm_free= component->driver->pcm_free; dapm = &component->dapm; dapm->dev = dev; @@ -3158,6 +3160,21 @@ static void snd_soc_platform_drv_remove(struct snd_soc_component *component) platform->driver->remove(platform); } +static int snd_soc_platform_drv_pcm_new(struct snd_soc_pcm_runtime *rtd) +{ + struct snd_soc_platform *platform = rtd->platform; + + return platform->driver->pcm_new(rtd); +} + +static void snd_soc_platform_drv_pcm_free(struct snd_pcm *pcm) +{ + struct snd_soc_pcm_runtime *rtd = pcm->private_data; + struct snd_soc_platform *platform = rtd->platform; + + platform->driver->pcm_free(pcm); +} + /** * snd_soc_add_platform - Add a platform to the ASoC core * @dev: The parent device for the platform @@ -3181,6 +3198,10 @@ int snd_soc_add_platform(struct device *dev, struct snd_soc_platform *platform, platform->component.probe = snd_soc_platform_drv_probe; if (platform_drv->remove) platform->component.remove = snd_soc_platform_drv_remove; + if (platform_drv->pcm_new) + platform->component.pcm_new = snd_soc_platform_drv_pcm_new; + if (platform_drv->pcm_free) + platform->component.pcm_free = snd_soc_platform_drv_pcm_free; #ifdef CONFIG_DEBUG_FS platform->component.debugfs_prefix = "platform"; diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c index e7a1eaa..a9ef8ae 100644 --- a/sound/soc/soc-pcm.c +++ b/sound/soc/soc-pcm.c @@ -2640,12 +2640,25 @@ static int dpcm_fe_dai_close(struct snd_pcm_substream *fe_substream) return ret; } +static void soc_pcm_free(struct snd_pcm *pcm) +{ + struct snd_soc_pcm_runtime *rtd = pcm->private_data; + struct snd_soc_component *component; + + list_for_each_entry(component, &rtd->card->component_dev_list, + card_list) { + if (component->pcm_free) + component->pcm_free(pcm); + } +} + /* create a new pcm */ int soc_new_pcm(struct snd_soc_pcm_runtime *rtd, int num) { struct snd_soc_platform *platform = rtd->platform; struct snd_soc_dai *codec_dai; struct snd_soc_dai *cpu_dai = rtd->cpu_dai; + struct snd_soc_component *component; struct snd_pcm *pcm; char new_name[64]; int ret = 0, playback = 0, capture = 0; @@ -2754,17 +2767,18 @@ int soc_new_pcm(struct snd_soc_pcm_runtime *rtd, int num) if (capture) snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &rtd->ops); - if (platform->driver->pcm_new) { - ret = platform->driver->pcm_new(rtd); - if (ret < 0) { - dev_err(platform->dev, - "ASoC: pcm constructor failed: %d\n", - ret); - return ret; + list_for_each_entry(component, &rtd->card->component_dev_list, card_list) { + if (component->pcm_new) { + ret = component->pcm_new(rtd); + if (ret < 0) { + dev_err(component->dev, + "ASoC: pcm constructor failed: %d\n", + ret); + return ret; + } } } - - pcm->private_free = platform->driver->pcm_free; + pcm->private_free = soc_pcm_free; out: dev_info(rtd->card->dev, "%s <-> %s mapping ok\n", (rtd->num_codecs > 1) ? "multicodec" : rtd->codec_dai->name,