From patchwork Wed Mar 29 02:45:37 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kuninori Morimoto X-Patchwork-Id: 9650841 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 55091601E9 for ; Wed, 29 Mar 2017 02:46:00 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 4681926D05 for ; Wed, 29 Mar 2017 02:46:00 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 37E9F27B2F; Wed, 29 Mar 2017 02:46:00 +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 1743E26D05 for ; Wed, 29 Mar 2017 02:45:54 +0000 (UTC) Received: from alsa0.perex.cz (localhost [127.0.0.1]) by alsa0.perex.cz (Postfix) with ESMTP id 81A5F266E41; Wed, 29 Mar 2017 04:45:52 +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 7CAB6266E43; Wed, 29 Mar 2017 04:45:50 +0200 (CEST) Received: from relmlie2.idc.renesas.com (relmlor3.renesas.com [210.160.252.173]) by alsa0.perex.cz (Postfix) with ESMTP id 665BF26583C for ; Wed, 29 Mar 2017 04:45:43 +0200 (CEST) Received: from unknown (HELO relmlir3.idc.renesas.com) ([10.200.68.153]) by relmlie2.idc.renesas.com with ESMTP; 29 Mar 2017 11:45:40 +0900 Received: from relmlac4.idc.renesas.com (relmlac4.idc.renesas.com [10.200.69.24]) by relmlir3.idc.renesas.com (Postfix) with ESMTP id 97C11481F7; Wed, 29 Mar 2017 11:45:40 +0900 (JST) Received: by relmlac4.idc.renesas.com (Postfix, from userid 0) id 80333480A5; Wed, 29 Mar 2017 11:45:40 +0900 (JST) Received: from relmlac4.idc.renesas.com (localhost [127.0.0.1]) by relmlac4.idc.renesas.com (Postfix) with ESMTP id 7B36348014; Wed, 29 Mar 2017 11:45:40 +0900 (JST) Received: from relmlii2.idc.renesas.com [10.200.68.66] by relmlac4.idc.renesas.com with ESMTP id MAG16471; Wed, 29 Mar 2017 11:45:40 +0900 X-IronPort-AV: E=Sophos;i="5.36,239,1486393200"; d="scan'208";a="238909094" Received: from mail-sg2apc01lp0245.outbound.protection.outlook.com (HELO APC01-SG2-obe.outbound.protection.outlook.com) ([65.55.88.245]) by relmlii2.idc.renesas.com with ESMTP/TLS/AES256-SHA256; 29 Mar 2017 11:45:39 +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=IbL0+2NeiDcMJs+dbJjp7uqnjJ998KjwIcbkazl7mIs=; b=mxyaUQOib8//y+fMzFaF5NFGdrKHRpTzgOuSrICwBKvm31FfTMEJRCmluBpFBjopCfkRrSoLEzm89EpD2N9SVFj3KdpPPvG656QjAVlqFGDB8u5WbCd59xPrOCvzWziYf3Fo1guL8p9/F+c8bdnUZjHFH4y357+9rBdnzvVzK8M= Authentication-Results: kernel.org; dkim=none (message not signed) header.d=none; kernel.org; dmarc=none action=none header.from=renesas.com; Received: from morimoto-PC.renesas.com (211.11.155.144) by SIXPR06MB0825.apcprd06.prod.outlook.com (10.162.174.147) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1005.10; Wed, 29 Mar 2017 02:45:37 +0000 Message-ID: <87vaqsajo0.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: Wed, 29 Mar 2017 02:45:37 +0000 X-Originating-IP: [211.11.155.144] X-ClientProxiedBy: OSXPR01CA0058.jpnprd01.prod.outlook.com (10.167.144.20) To SIXPR06MB0825.apcprd06.prod.outlook.com (10.162.174.147) X-MS-Office365-Filtering-Correlation-Id: c3f5411e-6e2c-46f5-6044-08d4764daeeb X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(48565401081)(201703131423070)(201703031133076); SRVR:SIXPR06MB0825; X-Microsoft-Exchange-Diagnostics: 1; SIXPR06MB0825; 3:W8+c/DUcdSCbJKqWzcRSqri/KB3p2CyzcCd7t+qgFHY4T23uKJI4bYn9H3W39r8JRMWAy3EQDvwekEeF5XYIxXLIyKxAagpwqbd+jnhHKq/JU3t5c2wFlRRqZwOtfkevFa+/a6XqgW6h/uBe4EP4aSraX0CsSyQQONXDJvdl+DvVpZ0OTGH7h+8uCghiOLdr3DMSsvqVhsnBXTU26a3hRnq27+K37qcIkBTXHgFg+nG2/QOs+wVTsPR1R/1vAXE145kpqh6Vr8bS/PGJ0Vf8y/SH2wFilTZtd9aiOWSowmTF8sAgxObjXUL9NJ+O+6uyKLLPRdt/v/rU6myv4UieL6t2WLOXoMoIDgul0KoDbnU=; 25:E5ysderEVYTkaf2UXt7YYmj7hshy04GAdTqvzh8e9IysRVPZdBtDDgd+e9A5WAPNtUw0o7eXfIJcDUALmqwRZaK0C9KQE/NgpltN5l2KB9VQSgKexw2y/IGiqXplWYvBazGbSOa00CYclhZCMlv9H5wstzrJta9bHDDUj62XFiSVwzzDtHUIgZPwnlSXgc8aKIkltpmLmqRMZRJdJrGomCkUN2TC98zcZchVEptV9DhfrZQAcWRJMjLNXJEKfQNiYRSbg+FcZ9xncQGqcyk/3wqGi8GsLHF+OGBNNqJaCos8NKBFGRbMH4wnTq0unEZVotJxrGnKLhoy4TJaHKtSDqSuUQMezjSt0j50Lx+5SSEq+r2R4hrxr3VAGb5qvN5YEjyVV3ECVDPl0vIadwotl6oOd3Qd95YpvLWfrlFpA+ZzORQGTtWvYA2v+7b3wUNToJ6V4lZlnwM665Sx/MtS4w== X-Microsoft-Exchange-Diagnostics: 1; SIXPR06MB0825; 31:H72XE3rGlNhU3ER32t1OiKXEfwoywY8Ir51Y/lAIicym6Wv1cclI92d4J7nWeuayZUQcRS8qKd4zEk6+lt3OcbF9K3X9t8BVmvp5Xyz/f6MGCN6zds9NuMKZBTjC6NtjM5LmiEDOAJ7tJ5QbeG+utwEpPkIklpbaVUMUQlwpfbqv1kgT9lOTgKi/1WoA32064hBnuJsZG8I/vQYXJJTiVy/oksGXmGKmb4t8lLS3fsQHZ4HQxGOvduR0eFdkSKEFnloXXVHlliF2iwapK6AolA==; 20:a4aKqvw+PARmjvjX9s9Y0R2sg0dvYC4Hhh44GibBuzFQiwFtNUQiGSGVcVOVaStrMHWfTQOmV3kgK/z74c7OJxs3LIn8GL290xaoZ9X/YR6+JVAMGmSn+7h4bM5eWc6XTPIHa9LS//9XertchnBQv0gCzLlNf4vLozY8IuJ1v8ggTST8CdK28PPkm+77Ue+buIqTfdmBYgWb/kG61NVzJDVAWTQEhksYEQ2c1BQ/N2BLQ+g7Iv97Rc3hCpXGQ0QhvkCiCPPfpRIkBBMGzE6w7BVvZDhImYugFoz3Sxvz6HHi8b19rpaepvRLJKRD+hsB77HyO6JDRZgG3QKAhd0EsI/WBpmK/0VKhw3VYKBTUUlip+hVwegUPfGs3rVb/aJxxE5DPLefpuyDkhWkXYKtJDQRXOp5Wu2l6tUpB5Qp19ts8BrJqpQQWzltVQ2X0aDEscV24BFZMtWAkNn0211iEKB8ICdzAlAHLf/iPnr4Qwuvb7L+kAGN/Cnggjr+yHVE X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040444)(601004)(2401047)(5005006)(8121501046)(3002001)(93006040)(93001040)(10201501046)(6055026)(6041248)(20161123555025)(20161123558025)(20161123562025)(20161123560025)(201703131423069)(201702281528069)(201703061421069)(201703061406069)(20161123564025)(6072148); SRVR:SIXPR06MB0825; BCL:0; PCL:0; RULEID:; SRVR:SIXPR06MB0825; X-Microsoft-Exchange-Diagnostics: 1; SIXPR06MB0825; 4:kY+hzRaNm6jxR+9l74M3w9OLmF59Wu9Tc1ij86sjGpdENKuX1D6fbsai29wM1/7IqJD3hUdCUFmYRR5LH+53isej9XfRAsEfxPMCmgvtRZsi0DytsDawxPDjbPsGP1ZiehTzeobOCpOv7DbhuJdz6z9Fh8VydFA0idX0Eu/ey/coWCCk4PKNCIrwfIExqARrQPVOkDoxx6mjvF62iomnsRpXI/eNi1JWQ9DoA1X+gffD7xsxwxm95TTaqkEt1n5q4OeOhKr2gjutQj1jsDiRJdszrxxKWBStfItdT0i0ejugKsxdfmnoPlrz9RnMf0tMz9zbbd6zPeC7bZSXiVmQVLXRBPMxqWwt4ARVJoRlr7ez3di4WvvTNNwp2jgHIvNgpKlgd7yer0oYnhZvXvY3KQdg3nInE+XwyB5KIbm0Lo2EawCcRCxyKi9Q6BjFy2gE2yjt/rSNDeLFoFTVFmZkOxQAB2HFYZHhbAYo/eFaQpUyfNn9ckb4w/oS/LhSoJddVVkbMh3aNORqNOfRL1Fz1ugn/MP39u3qYkhvY1HYVYdgu6T4igQCs0CVl1f9wvN879VI3movQZOLgZ4mb9mBHv84oiEYZdFRVCf/lE8hRNCR5BecjvZQracmdpmOKuy5qrbQuC6JXOYZMyBJE77RuMerckBFmT4Jf0Sb254Neq33KarUVfRxvGJWJ+tFkrfoSmgvm6e4bCEXoJuBqEZYya1bQEStEncd8dx8r+q8a9d1YME0dIuLu9P6RhaYNGlpWjnQFXZx4ibOhJy4zPAfyFkVGbn0/I2WecFP4igAOsGexd3rvPhNXihbLGwi0oiy X-Forefront-PRVS: 0261CCEEDF X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4630300001)(6009001)(39840400002)(39860400002)(39410400002)(39850400002)(39400400002)(39450400003)(46406003)(5660300001)(36756003)(54356999)(50986999)(7736002)(305945005)(50466002)(42186005)(33646002)(8676002)(53416004)(4001350100001)(23726003)(189998001)(6116002)(3846002)(2906002)(38730400002)(25786009)(47776003)(54906002)(86362001)(83506001)(53936002)(4326008)(66066001)(6486002)(16060500001); DIR:OUT; SFP:1102; SCL:1; SRVR:SIXPR06MB0825; H:morimoto-PC.renesas.com; FPR:; SPF:None; MLV:sfv; LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; SIXPR06MB0825; 23:IazUdBlVuWw56yGcX4NZ4ulMXUtWV5oLcPVOnsA0p?= =?us-ascii?Q?4NPpnnUJGuTCJ9U093IERNVKZ4CR7xyBR7FNjmh3pazKc7uMx8+AhWwxorlw?= =?us-ascii?Q?s8yKG+CvXe5+GbYMrTPwhk03DhQ9mx0KSDBzfd0e0+0SAQ3OvdLvYNTbbY8w?= =?us-ascii?Q?MsH8pjMGBYaHFloAS84zxssbkMeIJfSMuHW1uTb4cE+PDtGWUSmDlDVfPkgy?= =?us-ascii?Q?lr7fUigLMO/Ne2n93h3TIXs1XPrMHa7u9lEVvF+7S+YKM8ukQjBwiz/jFCcW?= =?us-ascii?Q?RlV7c6x1E4QCdYo39fzYXawYCBcs/XAsmXa8rwpk61QuHyUdm3UpNAMwRnj8?= =?us-ascii?Q?Hb0T5vdZOL/sV7BI6DB/llJEcuQar24InJB4DXE0StifiZg+BTOp50E+qD0C?= =?us-ascii?Q?vcacqZRrNKLjbKLxpi1Fu3rY2l+ymrK6VhH5q/yN0GkU44G930n708wZMX+4?= =?us-ascii?Q?vXupn6qz2KUrUCUQ03SUn+PMrwAIDVpw9rP4mAGHpMykSFmoMCTyR7dxQo4x?= =?us-ascii?Q?nxYyxFrHFnOKybIafoO6VwsIaKSSJhmXAKWa/1MzUiIkZO179NTC/lagzHlP?= =?us-ascii?Q?jSrP5N7QKoHEsWdLuESzJgio5M4v4pQCu9NQ6d1Y97qvpt7G8MzJPSyCBwkU?= =?us-ascii?Q?rK2jW3n7osfEj1rp3sT2qSpdsT29gbFhOv1oTPYDtcCnruyEqzk3MH+9MP+8?= =?us-ascii?Q?lWPOKlcawNIN3+tGHMx7JtdEF0TMFo9TeqzoXRIklMVrGjtAf9p486rybn5G?= =?us-ascii?Q?J9/cXH/z9JBkDjD/zab4jz5lbjoxwZhLJQTSzNBb/Xk9mI/hbsP+e0NX6r6Y?= =?us-ascii?Q?fHEz3CI41K//9kzVxcBL98WOtkn3jpO1zvM+aaontDrzHGmR6/UJ7ji6sIW5?= =?us-ascii?Q?dQANvCF07THBhYuVu00A/7xZ2YVtHQAvheGqwaHELNis7DitdiAMMc1GJEzb?= =?us-ascii?Q?LTNUbRMgwuASB6SitEntZd9AFxAkCCAMm4+DMX5nA=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; SIXPR06MB0825; 6:+IqxNw0SoiWy3r9yW1fYmIOoXUTQBF8g35DaZdhiA2ft1ECbCOTwFaStBGJM1DLGlTV//9pUve5/dWKtxt1JoqOLSHo3ymV6D2DTo0h6iDU2bU2uSZGAQ5KSCuYFAA/ODmaR2jbHcj8vAdwBUJ0kB5PJTsHdCM3FICpAy7EVNJJ9QuKyKrXhORdGfuLP+EtuZAn00qIZnMVh+FgeHHtYTm7ljvDxUFvN0IGmaV0P0/CECDEOBWd28vOnB2YhfxItsVh+Wy4ehvoUE7w2VygZFABrHzdaSumfKRytJp8tWDwtWFlbDhV/FMlekBKUVekf2QnQFgpB79XLE+2ltSXyP5HdcusijTp/JbSCvuYM4nsBFmtSry/bUFcrE+JaCE6nyeJmQIDAwxOXX2CqQCPzpaUyntKDt6IsbLJ3XTyP42o=; 5:pjbcI+B5xmxkMScpxOVAHI53SyXuYvLkaLjYSYaxtn0bUlTNkK1QI0KDTXQcaKYckSg7Jt0XepB8Ygu3bnlRWMN3OzDlZszxyopUuxKrJ7VayqjSYQ8G6sdqTr1h1cmmOnxzjZFD28sTGs66LjGYGA==; 24:y4EtIbz+gVlDQPuW+GzxpPf0EFFnSOcmOsWi+A/vPrKU/Rgf/9L23RsJ01v33L53xdn6QDIoa9mwUVWprt1W+e1ssLJRPMMvAq+DX/vnWIo= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; SIXPR06MB0825; 7:HiVxOkjtWvNMZQEXc2FhVwK4rwHi6eitQK2SZbgMGBwfmCF0Q3hZfboCeDujXX8QPxXOuMHpW10G9PbWXe8nCyy+PfANlHNivH54/PReUukP5v7wEE8RjPsoIMB31VEcIU/SnNhmYPAFpwB53H7rZeDeCh0hQegIbbS2V22IR6fJeI0SZR60BoQFtjurLhQpP+pYCVLM0suHpNTJe9ie9gy/b6tLxwEAupxsJJsVeEe2z3ZjLObYSPATuls+UTdRx3Jmz0UzlMd/JdGmVrEdeemGec23Pf5E6FNSdz5R8YBUr+n3pyMh+3pT3taThBjBOO6aSro/aDid2fOMeIMSJg==; 20:v7VJlM9KSZuPg2tqibKz6L5DqOV/AjSXE872oSp6TkCZGnXCFHHetwrqHuTzewPfjLXnapt7tKF/Myn8sbemg+y6IB12yVSqlikXpa0ljAhxvHVLCO3Oze4tiwYbeNLTie8JJrkNkaLYaPq5Mkp8cfny/lznfCwTHYzIKdfUsQE= X-OriginatorOrg: renesas.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Mar 2017 02:45:37.9052 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: SIXPR06MB0825 Cc: Linux-Renesas , Linux-ALSA , Simon Subject: [alsa-devel] [RFC][PATCH] ASoC: soc-core: verify Sound Card normality 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 Current ALSA SoC Sound Card basically consists of CPU/Codec/Platform drivers. If system uses Kernel modules, we can disable these drivers by using rmmod command. In such case, we can't disable CPU/Codec/Platform driver without disabling Sound Card driver. But on the other hand, we can disable these drivers by using unbind command. In such case, we can disable these drivers randomly. In this case, we can create dirty Sound Card which is missing necessary components. (1) If user disabled Sound Card first, but did nothing to other drivers, user can't use Sound because Sound Card is no longer exists. (2) If user disabled CPU/Codec/Platform driver randomly, but did nothing to Sound Card, user still be able to use Sound Card, because dirty Sound Card which is missing necessary components still exists. In this case, Sound system will be crashed if user started sound playback/capture. But we can't block such random unbind now. To avoid Sound Card crash in (2) case, what we can do now is, add dirty flag on Sound Card, and avoid to open Sound Card. This patch solved this issue. Signed-off-by: Kuninori Morimoto --- Mark, Lars-Peter This is still RFC, but I think we need to consider about this issue. I tested this patch on my system, and it can block to sound card crash for me include/sound/soc.h | 6 ++++-- sound/soc/soc-core.c | 12 +++++++++++- sound/soc/soc-pcm.c | 20 ++++++++++++++++++++ 3 files changed, 35 insertions(+), 3 deletions(-) diff --git a/include/sound/soc.h b/include/sound/soc.h index 316fdce..4813fc5 100644 --- a/include/sound/soc.h +++ b/include/sound/soc.h @@ -1106,8 +1106,6 @@ struct snd_soc_card { struct mutex mutex; struct mutex dapm_mutex; - bool instantiated; - int (*probe)(struct snd_soc_card *card); int (*late_probe)(struct snd_soc_card *card); int (*remove)(struct snd_soc_card *card); @@ -1197,6 +1195,10 @@ struct snd_soc_card { u32 pop_time; void *drvdata; + + /* bit field */ + u32 instantiated:1; + u32 dirty:1; }; /* SoC machine DAI configuration, glues a codec and cpu DAI together */ diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c index 07e4eec..a18e106 100644 --- a/sound/soc/soc-core.c +++ b/sound/soc/soc-core.c @@ -2882,7 +2882,15 @@ int snd_soc_unregister_card(struct snd_soc_card *card) { if (card->instantiated) { card->instantiated = false; - snd_soc_dapm_shutdown(card); + if (!card->dirty) { + /* + * In case of unbind, CPU/Codec/Platform component can + * be unbinded *before* Card unbind. In such case + * (= card->dirty) Card connected DAPMs are already + * doesn't exist. + */ + snd_soc_dapm_shutdown(card); + } soc_cleanup_card_resources(card); dev_dbg(card->dev, "ASoC: Unregistered card '%s'\n", card->name); } @@ -3236,6 +3244,8 @@ static void snd_soc_component_cleanup(struct snd_soc_component *component) static void snd_soc_component_del_unlocked(struct snd_soc_component *component) { + if (component->card) + component->card->dirty = 1; list_del(&component->list); } diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c index efc5831..c861aba 100644 --- a/sound/soc/soc-pcm.c +++ b/sound/soc/soc-pcm.c @@ -455,6 +455,16 @@ static int soc_pcm_open(struct snd_pcm_substream *substream) const char *codec_dai_name = "multicodec"; int i, ret = 0; + if (rtd->card->dirty) { + /* + * In case of unbind, each CPU/Codec/Platform component can + * be unbinded randomly. In such case (= card->dirty) + * Sound Card is no longer safety. Don't open it. + */ + dev_warn(cpu_dai->dev, "Sound SoC Card is dirty, Recheck your system\n"); + return -ENXIO; + } + pinctrl_pm_select_default_state(cpu_dai->dev); for (i = 0; i < rtd->num_codecs; i++) pinctrl_pm_select_default_state(rtd->codec_dais[i]->dev); @@ -2577,6 +2587,16 @@ static int dpcm_fe_dai_open(struct snd_pcm_substream *fe_substream) int ret; int stream = fe_substream->stream; + if (fe->card->dirty) { + /* + * In case of unbind, each CPU/Codec/Platform component can + * be unbinded randomly. In such case (= card->dirty) + * Sound Card is no longer safety. Don't open it. + */ + dev_warn(fe->dev, "Sound SoC Card is dirty, Recheck your system\n"); + return -ENXIO; + } + mutex_lock_nested(&fe->card->mutex, SND_SOC_CARD_CLASS_RUNTIME); fe->dpcm[stream].runtime = fe_substream->runtime;