From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id CFF55E77188 for ; Tue, 14 Jan 2025 12:43:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Content-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:In-Reply-To:From:References:Cc:To: Subject:Date:Message-ID:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=G+61Xqq+Grjt4WoCGd4fmC3h1gYZ/Hc6EOL9x3lt4GY=; b=bbcB0CMVdA74F5Cs6tQB6YLgQe bHukPQvFtGb7d0ZuH34Svuy7nsEVeTm36n0te5jjSZDnH+MoVd3WSyG5G918x+7zyTnr08jEkgBTq 4qyuKWKYqx+Zhl8CKravT+ha+ujAQGNTUz392/lfx8PUrH1gn104f3XUL8vOulQgcgDGS3aTslX6b /0fya0NHgzxTqz/jk5rlLLaMzHkahrgWfLOe+NxkJiVBue5i6ftNC/1nqP99zSOqgLlQkeqjS+EW3 dGSCLNUJjLyR2GPLNQCuhw9UuitF8d4CMQq3C5+jlnpmwkr7ktPapffmZh7RZR0u7bjXaAqdCr+dG A/joEnYA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tXgGJ-00000008RDr-2Yxg; Tue, 14 Jan 2025 12:43:15 +0000 Received: from mail-eastasiaazlp170100000.outbound.protection.outlook.com ([2a01:111:f403:c400::] helo=HK2PR02CU002.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tXgF2-00000008QyH-30hi; Tue, 14 Jan 2025 12:41:58 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=nKREVpWlMmubI/LSzBx9QkPeW3UViRRUNpYO843C2Q8ya2heKGdG2nVG4Yi78aHoCLUDyI+fv69hFesZQqy1bKtDGVp6MneHnp/SNKodEsH/z68Unz6oi2Mgax9mW4/qCFKZkdUYYHfSSshXZVY9k6ZMcd1zJFKR38LGdK1k2KGsTiwXVMsbyjM6KYQhw42swYS9KTknjk/kliLO6qIKgT1LCGB4HItYhuXCZ0Yv+sDTih1lXz0Gu6ol77sOAv10QPfIh/ufPcA/PnotZn3L7nkWsQnITm3dqf7B1dJtob2/8IO6N1jaB2jF3RB6sAFl73GeGlul26uJxSBIpboN4g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=e6M+Aq3iD1iSZwtU7ci0QHqNGElyK7JiLBPkduGAzfw=; b=OTZISEWn6mPK0i5VNN621JLcrcPSHxiqKVk3NEJZXEOZ9RUV3WUAvnY7G8H4FIXkM/eGvHkM1ace1z7ZOZMVREL6ya2PkTx5SMedQ+agQMqjVLVCu/hhofnvG5AZzknn85CYSzV0ovUmJFnbgVo8ukIEHvx8xPj0KSYku+55f1hE//vLUoH24J6B5Dc9y8d8nCqVgC9TlCcL4ZhFKOEa9LiLjGwa2rn19Zaul9kn3ek9ZZrV9nBsxrnUcnEgz2c0iKXmL0BP8NRtRYmN+64Huh6ROjPJlUBNAj+2i8T1EVAyN4NZASXzgwMGQLC6WwDf6DXMRr2CFQuzghj3hHKm9w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amlogic.com; dmarc=pass action=none header.from=amlogic.com; dkim=pass header.d=amlogic.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amlogic.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=e6M+Aq3iD1iSZwtU7ci0QHqNGElyK7JiLBPkduGAzfw=; b=nKab9X285hh3e87prpOmniOL2n4dSuhSVgo+L/RE6Qe6PrFS5Gzb54GjRaZvm008axmvDwaUsbDSrqOCRDT2VC+u0H6HbcdnBPRi4rSoeYAvmi+EGH4q7U2Mj8G482aza0kzhM8IqNbNvEqroYwXADGcaMpEzF6zfQicioRlUCkUWpSi/zu9TJVxgmBHJvuWzQxmwJSmR6KxS31u6mSvJrEofG1TKeMVuWz5IHEeKjYS9mDtXnN1EIxSWa/1o7GtkWpnE0Pym5KPmzG/80vXOXR9XcOTDRzAnQe5UPQgAMzKq5O5auYPgC9DW0mfMmiRhs8KmB/ogTDZj89b0Sk9kQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=amlogic.com; Received: from PUZPR03MB7135.apcprd03.prod.outlook.com (2603:1096:301:113::15) by SI6PR03MB8707.apcprd03.prod.outlook.com (2603:1096:4:253::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8335.18; Tue, 14 Jan 2025 12:41:50 +0000 Received: from PUZPR03MB7135.apcprd03.prod.outlook.com ([fe80::ecac:a387:36d8:144d]) by PUZPR03MB7135.apcprd03.prod.outlook.com ([fe80::ecac:a387:36d8:144d%3]) with mapi id 15.20.8335.017; Tue, 14 Jan 2025 12:41:50 +0000 Message-ID: <31ce586b-a7d9-4f69-8ca4-4f98cfbeee1d@amlogic.com> Date: Tue, 14 Jan 2025 20:41:35 +0800 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH 2/3] ASoC: meson: s4:support for the on-chip audio To: Jerome Brunet Cc: jiebing chen via B4 Relay , Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Jaroslav Kysela , Takashi Iwai , Neil Armstrong , Kevin Hilman , Martin Blumenstingl , linux-sound@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-amlogic@lists.infradead.org References: <20250113-audio_drvier-v1-0-8c14770f38a0@amlogic.com> <20250113-audio_drvier-v1-2-8c14770f38a0@amlogic.com> <1jwmey9451.fsf@starbuckisacylon.baylibre.com> <1jh6617hwf.fsf@starbuckisacylon.baylibre.com> From: Jiebing Chen In-Reply-To: <1jh6617hwf.fsf@starbuckisacylon.baylibre.com> X-ClientProxiedBy: SG2PR01CA0182.apcprd01.prod.exchangelabs.com (2603:1096:4:189::20) To PUZPR03MB7135.apcprd03.prod.outlook.com (2603:1096:301:113::15) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PUZPR03MB7135:EE_|SI6PR03MB8707:EE_ X-MS-Office365-Filtering-Correlation-Id: e5b4172e-79ec-4530-1837-08dd3498d128 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|1800799024|7416014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?dWQ2OTM3LzNmU0xPUHNHZ0VRTUhDMlQxUXhWRkNqNzhlbTlLWTZXM3NBYnJN?= =?utf-8?B?MWZpN3dkbDhyN1BLWHlKQ28rZERncXFYZ3dCS3FTN1grOXp6VWtObC91bUV3?= =?utf-8?B?M3BNbkRSN0FDZXBiQm9PTUJueDR6NWYwOEs3SVdBa0dEbll3NzBkSGRVV1Bi?= =?utf-8?B?MXNaWm1CaDFrbDJlelkvVHMyVVd0dGV1cjNsbEpzdmJyUlpsNmEzeWlXREE4?= =?utf-8?B?TS9BZS9CWVhrYzFyU1hSOUUrQXNxUjN3dHNBUjRUeEluQXNUTW8xbW9PSVFN?= =?utf-8?B?SjVyekxrTmUrcU1abFBuRjdyRWtGVndjN1pieGdJdUZmYkhvQVhyREkyREYw?= =?utf-8?B?M0NRU2FYdTRYODdRcUkrbCtEVmVWWkFPWFljaTZmNm5ZazJabWVVNWhOQW9X?= =?utf-8?B?QUVocUpua1NXS1R0Z0FsS3hKUGNDbzd2MnQzb0Yxb3M5cHNtMlR6eHlheTdp?= =?utf-8?B?bnI0Tnc2UjNhVVBXb2NzZFV4Qlg4clpyT0xWQUpjNXVHVzFYK1p5SHU2SFRn?= =?utf-8?B?MmljYWZjd0JCZDNJTHFVZGpzb1BySTZlY0ZsNlBzeXJuVDBic0FYOVZteTdG?= =?utf-8?B?RjFuUERISERCdnVnMjRBT3l3NHZabkM0ajBmbytoUVlXUnZTOGFkalpOWGEy?= =?utf-8?B?Z3lQQjhqbHlGYmlnWW1iejlOYjBoay9FZUtDdUpxbVhxUEZ2UHhDUzFaRkxH?= =?utf-8?B?ZVUzY3pvK1dRWHZsYkRrbzhPU2NpQ255MjYwYmdlK3crQkR2cERGRFZMYklM?= =?utf-8?B?ZThZQW5QSHFpd00zaEcxN21pZGtGQkJnRDhieVpVQWE2UFdDWG1lR295SCt3?= =?utf-8?B?aWhmdHIrNjFBYjl6bTEvUXkzSlJ3NXcxd041M3hCcTQ5K2ZlSWhqV0xCQW1n?= =?utf-8?B?dzV5VENoN0x5WEVUYjJOcE16YytPKzNMS0xIS2QxMDJqL0ZXWVVacnBQdG11?= =?utf-8?B?Zy9pbmQ0OWZRb2dVV3NLV09XYkl5Y3lEQU9UdE5mMWtNSm5wNVFyTTZqWWdZ?= =?utf-8?B?cTdES3B6QVppVzNiQTVWanUyNGlqNjliTlRDWFp6MXhFRkQzUHhnUlpSb1FZ?= =?utf-8?B?WDluV0dWdnFnTXREM2NHM0xOajdOcjRGbm5ieGRMamdyeU1Qdys0dXFzN3BY?= =?utf-8?B?SE9MZHBRU2ZBOWwzZXRCT2c4ajBaVEx1bm9uVXFXZkI4clZuZk1DdVdGYzhW?= =?utf-8?B?SzBOanpWR2VrTEJrVVRDVFowT3pCUkt3MWtENnFHSzh4c09WekY3OG1QakVX?= =?utf-8?B?am1ZdTlhQStGemtlQTUyeVE3TGNMTDlsUUU3RUorSHVrM1VuNC9zbzB3cVNL?= =?utf-8?B?Wmord3pRN3R3MXhJTllNbC9DOVQ4cUlWeWZKS04wampNMXcxckJTODE5L0ky?= =?utf-8?B?U0lySjFLQ3BlMzBicFpjaXBiZUpxaHNQZnMxdUN1YWJiTUFLQjkrTG5iNWpl?= =?utf-8?B?eXgzajNOM3Y1TWJzRThuNW5zdFBYSkhGbmVMTEhNeUx1SXQwNE1FSlp6RDhU?= =?utf-8?B?bjVadHVTaDE4TkFjZTB4c3UrRXpNQ0ZBWndBM0tuM2lzcXZ1amxXWURDQWg0?= =?utf-8?B?RlhBeXZUbjhWbWoxRW1RcWR1ZTFpZXloRU9vc1F0RWFZNUlaMElRcEl6aDJT?= =?utf-8?B?bHNJTmVhSFJsUW43STYvbWhhU0lXZGRJZ0UwaTZWd0FMN01Bc094U0p6UDVx?= =?utf-8?B?V0RmZ0tDZm5VNmJVU2RET0RFcjY4MFA1U2F2Qnk2NDJMTmRXRFNSc0c2UGsy?= =?utf-8?B?aTI3aDVTN1N3ZW1kNEduOFh4UzdSTmpqL2hLandXTTU0UE56d1ZsMDZUTVFC?= =?utf-8?B?bFdwOTVPRFF3V2tqa0d1Zz09?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PUZPR03MB7135.apcprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(1800799024)(7416014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?OUltU2hGZjVqa2dTcEtaVEFiRHNXVUdlNTRYbkRxV1hKRmkzV1J6d0RrRHhY?= =?utf-8?B?R00vK2pNcmFpTFVYbVJCZGNHa2RXR2Zodi9ERVJIQUY1NUNZSE5tbWRoSHFC?= =?utf-8?B?Z1g0cGh0YU12Qk1pWlpaUFA3VlZob3BoY2lwamI1V0lCNnZoNjdHQUV6Q3BZ?= =?utf-8?B?Vyt1WUdkNGxXU1RLbWtvMlFxK1ZrbkkrSERrblZQTXo0VXpBMUVCNkV2VEFN?= =?utf-8?B?TmYzTEVBbk9VKzdqeXhNVEc3cXc1bjlTbHkxSllMVVIrNEtwT1k0TVhGSDBv?= =?utf-8?B?YkhOdjdpcW9ycmpoTzB2dzRpc3VoMDBPQVhCbWcyZkVIa2xZUHUvcWVnbC9C?= =?utf-8?B?QkRoVFplM211QzdZc1BKWDBHdTdFbG8xMEd3TWRnUVArNkd5MG9KZHhOQkVj?= =?utf-8?B?bVZha1dHU3VZM0JBSFhrWVlkdzhjUU51ZWdjd3hVWXBXWE1ocEQvdEJmMnl0?= =?utf-8?B?K295MXMzSFltazdhYi94K29WOEJVc1dMR0N6ZWthMk53elM3N3hEUFpZK2RE?= =?utf-8?B?R0k4aE1tMlFVTnUvWG83d29oNEN4K3doamw5RnMySWhvb1NEd2NrSmg3ZGNo?= =?utf-8?B?dk5MYTkvb29NcHJhdkI3UDZSL2k2bDJPOEVaZEtUNEc2WVlJYnRqb0k0SjE1?= =?utf-8?B?emhaNTBVbUk2Y0xwdmlKVlZ3UXVEZHltWGNESHZxVHpiK05Rbnp5RldiWmw1?= =?utf-8?B?c0hSY2t2ZjYwbzMwcDZGby9HVUtxMXpZbXJ4eGVLV0VSTEpsV2FrWnlacHZy?= =?utf-8?B?QWUzSnlNVEhDZnppVUczNWtkUlJXNU10MnR4dzAwRDVVQmF3ZGFSSUNiSGpQ?= =?utf-8?B?TnJVYklHVUs5QnpoMjlEZkhBWEkvZE15cWtmN2hZWm5hWGgwci9aVmZDa21E?= =?utf-8?B?R3ZuWmRPWWhqVEpvQ1lJME1Zck1nTDh1MWRSYStNZlpGMWswWHNVR1drTXIy?= =?utf-8?B?Y1FJSWNzUzJNdEFXNnVWN0dWa1Q3VnZPZmpnTWd2eHZFUEZLeEdSaTM2d0Fp?= =?utf-8?B?QlQ2UUNidm5WTTZ2VVRMRkRtZkk4am1iYjRhU1k2Z3ZEWGx2RXFmZjQwZkpx?= =?utf-8?B?Tmt2aHo1dlkva09UWUNpdzlXeTBHeVlGdmZPam00U1RiWHhYKzBpZ3BxSFd5?= =?utf-8?B?MnVXUW11ejRISy80cEUzcE51SlBEMU9NQTNZbW9mVXRTK25ZK01naU1xL251?= =?utf-8?B?VzlIMXFRT05KemR6VzZrakhacTZXU01qRjR3Y09NekVKbnpuYjRoQTZWN2V0?= =?utf-8?B?TWpnOXU0UVBGblY5NXloaVA5aW9BVzBWM1lWbmx6OFZRVTJPemF6dmgwc3px?= =?utf-8?B?MHF0RVdsOGxUL2hIRFgyUXhIcXRXTFJTZ0ZnUDZrd3pKcGF3MGtnY2dFVENm?= =?utf-8?B?YXRFQzN3eXZxdHVyMlFPUWFPN25JR05LMUJmOEQ3aEMzd3pPYVBxYjBqV2dF?= =?utf-8?B?ME9oc1YxTWxHcDFDQy9CQXJtNDdGVE9GMkFRVHozNzNBMUNmcjFtOGtTdW1a?= =?utf-8?B?N3pwMk5sdWVxeVliaWtwUm5aMS9UaVpHOWtMZzhlNWRaRUtMYkpTNjN0enVB?= =?utf-8?B?WHRyUDdsNW8xSFpGMy9jMmxoM1B5YVNxUlRDamQ5TEdTdnF3M2MwNVZ0R2pG?= =?utf-8?B?Y3FKMGV2TTRGbVNHeEw1azNxRWYyME8xaTFQaXpaYkc5MExJWUpqNVhXMjlF?= =?utf-8?B?VDVIVEd6aW9qRTB1VWgydzFLbzNscGM1SHRaMlJqWHJFMzgvbG1FOHVQR25R?= =?utf-8?B?M0xmSVBOUklHRlJtRjZYbVlZajdsaXBwTFY2ZHZRWE9JRFh5NUtkTUpkdi9S?= =?utf-8?B?d1g2aTZ6cm92NDBCd2JMOG5GV3hqdllta21taHNiclRta2N2RDBZZUJRMWZk?= =?utf-8?B?OHk1dW1USVZNRDdmL0VSQkpKV1RIcFBjM3Y0RitHbmdqYklpc1hFTkE2WlFG?= =?utf-8?B?ZVVFVHJuR3lCRXVhaitqUmFvSlpnZVJuaUxnZm54N1pUVHArbnZZanpEQWxu?= =?utf-8?B?azc1YmpzOEtkbklsMTN1TTRreS9mLzFqZ1VtYzIwZVgwS3dyUFpuQVN0NFhJ?= =?utf-8?B?aG5Gd3hHd01sZ3ZNdXRqZVdLdzY3SVFZMGg2K1Y5QkNuMTMzTmlCTUtDOVRZ?= =?utf-8?B?bmJNOCt3MWY1SVNhMDkwTG5HSTNGODdXWU5uV0RaK21vQm9Vbk5MVXJXdVNJ?= =?utf-8?B?cEE9PQ==?= X-OriginatorOrg: amlogic.com X-MS-Exchange-CrossTenant-Network-Message-Id: e5b4172e-79ec-4530-1837-08dd3498d128 X-MS-Exchange-CrossTenant-AuthSource: PUZPR03MB7135.apcprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Jan 2025 12:41:50.7004 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0df2add9-25ca-4b3a-acb4-c99ddf0b1114 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: rC64f7SNku7Jc+RSqW9tHVxcA29FdSHtQbktpihh0CVJ2EYHJfAF/YPoXnu3hy5KOj5JaWSENirF2n5MexFoB2ie80hVHPqZV1ASOp24eEk= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SI6PR03MB8707 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250114_044156_920727_5BA05E4B X-CRM114-Status: GOOD ( 28.60 ) X-BeenThere: linux-amlogic@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-amlogic" Errors-To: linux-amlogic-bounces+linux-amlogic=archiver.kernel.org@lists.infradead.org CuWcqCAyMDI1LzEvMTQgMTk6MjksIEplcm9tZSBCcnVuZXQg5YaZ6YGTOgo+IFsgRVhURVJOQUwg RU1BSUwgXQo+Cj4gT24gVHVlIDE0IEphbiAyMDI1IGF0IDE2OjE2LCBKaWViaW5nIENoZW4gPGpp ZWJpbmcuY2hlbkBhbWxvZ2ljLmNvbT4gd3JvdGU6Cj4KPj4+PiArc3RhdGljIGNvbnN0IGNoYXIg KiBjb25zdCBzNF90ZG1vdXRfc2VsX3RleHRzW10gPSB7Cj4+Pj4gKyAgICAgIlRETV9EMCIsICJU RE1fRDEiLCAiVERNX0QyIiwgIlRETV9EMyIsICJURE1fRDQiLCAiVERNX0Q1IiwgIlRETV9ENiIs ICJURE1fRDciLAo+Pj4+ICsgICAgICJURE1fRDgiLCAiVERNX0Q5IiwgIlRETV9EMTAiLCAiVERN X0QxMSIsICJURE1fRDEyIiwgIlRETV9EMTMiLCAiVERNX0QxNCIsICJURE1fRDE1IiwKPj4+PiAr ICAgICAiVERNX0QxNiIsICJURE1fRDE3IiwgIlRETV9EMTgiLCAiVERNX0QxOSIsICJURE1fRDIw IiwgIlRETV9EMjEiLCAiVERNX0QyMiIsICJURE1fRDIzIiwKPj4+PiArICAgICAiVERNX0QyNCIs ICJURE1fRDI1IiwgIlRETV9EMjYiLCAiVERNX0QyNyIsICJURE1fRDI4IiwgIlRETV9EMjkiLCAi VERNX0QzMCIsICJURE1fRDMxIgo+Pj4+ICt9Owo+Pj4gVGhpcyB0aGluZyBkb2VzIG5vdCBiZWxv bmcgaW4gQVNvQy4gVGhpcyBpcyBjbGVhcmx5IHlldCBhbm90aGVyIGxheWVyIG9mCj4+PiBwaW5j dHJsLiBQbGVhc2UgZGVhbCB3aXRoIGl0IHRoZXJlLgo+PiBUaGFua3MgZm9yIHlvdXIgc3VnZ2Vz dGlvbiwgYWRkIGF1ZGlvIHBpbmN0cmwgZHJpdmVyIHRvIGNvbnRyb2wgdGhlIHdoaWNoIHRkbV9k eCBwaW4gY2FuIG1hcCB0aGUgd2hpY2ggdGRtIGxhbmVfeAo+PiBmb3IgZXhhbXBsZQo+PiAgICAg ICAgdGRtX2Q2X3BpbiB7Cj4+ICAgICAgICAgICAgICAgIG11eCB7Cj4+ICAgICAgICAgICAgICAg ICAgICAgICAgZ3JvdXBzID0gInRkbV9kNiI7Cj4+ICAgICAgICAgICAgICAgICAgICAgICAgZnVu Y3Rpb24gPSAidGRtb3V0Yl9sYW5lMCI7Cj4+ICAgICAgICAgICAgICAgIH07Cj4+ICAgICAgICB9 Cj4+IHRkbV9kNiBwaW4gbWFwIHRoZSB0ZG1vdXRiIGxhbmUgMCwgcmlnaHQgPwo+IHBvc3NpYmx5 Cj4KPj4+PiArCj4+Pj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gdGRtb3V0X3NlbF9l bnVtID0KPj4+PiArICAgICBTT0NfRU5VTV9TSU5HTEUoU05EX1NPQ19OT1BNLCAwLCBBUlJBWV9T SVpFKHM0X3RkbW91dF9zZWxfdGV4dHMpLAo+Pj4+ICsgICAgICAgICAgICAgICAgICAgICBzNF90 ZG1vdXRfc2VsX3RleHRzKTsKPj4+PiArCj4gWy4uLl0KPgo+Pj4+IGRpZmYgLS1naXQgYS9zb3Vu ZC9zb2MvbWVzb24vczQtdG9jb2RlYy1jb250cm9sLmMgYi9zb3VuZC9zb2MvbWVzb24vczQtdG9j b2RlYy1jb250cm9sLmMKPj4+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+Pj4+IGluZGV4IDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU1ZDgyNGZhZTBlYmE1NDVkMzhk YzM2ZTI1NjZlN2NlZTU5MGU3ZjUKPj4+PiAtLS0gL2Rldi9udWxsCj4+Pj4gKysrIGIvc291bmQv c29jL21lc29uL3M0LXRvY29kZWMtY29udHJvbC5jCj4+PiBUaGVyZSBpcyBhbHJlYWR5IGEgdG8t YWNvZGVjIGRyaXZlciBhIG5vdCByZWFzb24gaGFzIGJlZW4gcHJvdmlkZWQgYXMgdG8gd2h5IGEK Pj4+IGNvbXBsZXRseSBuZXcgZHJpdmVyIGlzIHJlcXVpcmVkLgo+Pj4KPj4+IFBsZWFzZSBoYXZl IGxvb2sgYXQgdGhlIGV4aXN0aW5nIGRyaXZlciBhbmQgZG8gdHJ5IHRvIHVzZSBpdC4KPj4+IElm IHlvdSBuZWVkIHRvIGRvIHRoaW5ncyBzbyBkaWZmZXJlbnRseSwgY2xlYXIganVzdGlmaWNhdGlv biBhcmUgbmVjZXNzYXJ5Lgo+PiBmb3IgZzEyYS10b2Fjb2RlYy5jLCB3ZSBmaW5kIHRoZSB0b2Nv ZGVjIGNsb2NrIHNvdXJjZSBjYW4ndCBnZXQgdGhlIGNsb2NrCj4+IGlkIGZyb20gdGhlIHRkbSBC ZSBkZXZpY2UsCj4gVGhpcyBpcyBjbGVhcmx5IGRvY3VtZW50ZWQgbGltaXRhdGlvbiBvZiB0aGUg Y3VycmVudCB0by1hY29kZWMgZHJpdmVyOgo+IGh0dHBzOi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3Nj bS9saW51eC9rZXJuZWwvZ2l0L3RvcnZhbGRzL2xpbnV4LmdpdC90cmVlL3NvdW5kL3NvYy9tZXNv bi9nMTJhLXRvYWNvZGVjLmM/aD12Ni4xMy1yYzcjbjkxCj4KPiBXaGlsZSBpdCBpcyBhIGxpbWl0 YXRpb24sIGl0IGlzIGEgbWFuYWdlYWJsZSBvbmUgY29uc2lkZXJpbmcgdGhlIGFtb3VudAo+IG9m IG1hc3RlciBjbG9ja3MgYXZhaWxhYmxlIGFuZCB0aGUgZmFjdCB0aGUgbWFzdGVyIHNob3VsZCBi ZSBtYW51YWxseQo+IGFzc2luZ2VkIHRvIHRoZSBvdXRwdXQgcGFkLCB3aGljaCB5b3UgZGlkIG5v dCBkby4KPgo+IFNlZSB0aGUgdTIwMDoKPiBodHRwczovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20v bGludXgva2VybmVsL2dpdC90b3J2YWxkcy9saW51eC5naXQvdHJlZS9hcmNoL2FybTY0L2Jvb3Qv ZHRzL2FtbG9naWMvbWVzb24tZzEyYS11MjAwLmR0cz9oPXY2LjEzLXJjNyNuNTY5Cj4KPiBZb3Ug YXJlIG1vcmUgdGhhbiB3ZWxjb21lIHRvIGhlbHAgZml4IHRoaXMgbGltaXRhdGlvbiBpbiB0aGUg Y3VycmVudAo+IGRyaXZlciBidXQganVzdCBhZGRpbmcgYSBmb3JrIGlzIG5vdCBPSwo+Cj4gSSB3 b3VsZCBzdWdnZXN0IHRvIHN0YXJ0IHdpdGggd2hhdCBpcyBjdXJyZW50bHkgYXZhaWxhYmxlIGFu ZCBtb3ZlIG9uIHRvCj4gZml4aW5nIHRoaXMgYXMgYSAybmQgc3RlcCwgaWYgeW91IHdhbnQgdG8u Cj4KPj4gYW5kIHNldCBpdCBieSB0aGUga2NvbnRyb2wgZnJvbSB1c2VyLCAgRm9yIGRpZmZlcmVu dCBzb2MgY2hpcHMsIFRoZQo+PiBrY29udHJvbCB2YWx1ZSBtYXliZSBkaWZmZXJlbnQsIFRoZSBr Y29udHJvbCBjb25maWd1cmF0aW9uIGRvZXNuJ3QgbG9vawo+PiB2ZXJ5IGZyaWVuZGx5IGZvciB1 c2VyCj4+Cj4+IHNvIHdlIHVzZSBkYXBtIHJvdXRlIHBhdGggdG8gbWFuYWdlIGl0LAo+PiBmZShm ZGRyKS0+YmUodGRtKS0+KHRvY29kZWMpLT4oY29kZWMpLCAgYW5kIHVzZSB0aGUgYXV4LWRldnMg dG8gcmVnaXN0ZXIsCj4+IGFuZCBzb3VuZCBjYXJkIG9ubHkgaW5jbHVkZSB0aGUKPj4KPj4gc291 bmQtZGFpID0gPCZ0ZG1pZl9hPgo+Pgo+PiBjb2RlYy0wIHsKPj4gICAgICAgICAgICAgICAgICBz b3VuZC1kYWkgPSA8JmFjb2RlYz47Cj4+ICAgfTsKPj4KPj4gYW5kIG5vdCBpbmNsdWRlCj4+Cj4+ IGNvZGVjLTEgewo+PiAgICAgICAgICAgICAgICAgIHNvdW5kLWRhaSA9IDwmdG9hY29kZWM+Owo+ PiAgIH07Cj4+Cj4+IHdoZW4gdGRtIHdvcmssIG9ubHkgY29ubmVjdCB0aGUgdG9jb2RlYyBwYXRo Cj4+Cj4+ICAgIlRETV9BIFBsYXliYWNrIiAtPiJUT0FDT0RFQyBURE1BIi0+IlRPQUNPREVDIElO UFVUIFNSQyIKPj4KPj4gaXRlcmF0ZSBpdCBmaW5kIHRoZSBiZSBkZXZpY2UgLGFuZCBnZXQgdGhl IHN0cnVjdCBheGdfdGRtX3N0cmVhbSwgc28gd2UgY2FuCj4+IGdldCB0aGUgdGRtIGNsb2NrIGlk Cj4+Cj4+IFRha2UgaW50byBhY2NvdW50IGJlaGF2aW9yYWwgZGlmZmVyZW5jZXMsIHdlIGFkZCBu ZXcgdG9jb2RlYyBkcml2ZXIKPj4gZm9yIHM0Cj4gU3RpbGwgbm90IHNlZWluZyBzdWZmaWNpZW50 IHJlYXNvbiB0byBtYWtlIGFub3RoZXIgZHJpdmVyLgppdCBpcyBhIGdvb2QgaWRlYSwgaSB3aWxs IGFkZCB0aGUgY2hhbmdlIGZvciBzNCBiYXNlIG9uIGcxMmEtdG9hY29kZWMuYwo+Cj4+Pj4gQEAg LTAsMCArMSwzNzYgQEAKPj4+PiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4w LW9ubHkgT1IgTUlUKQo+Pj4+ICsvKgo+Pj4+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMjMgQW1sb2dp YywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkCj4+Pj4gKyAqLwo+Pj4+ICsKPj4+PiArI2luY2x1 ZGUgPGxpbnV4L21vZHVsZS5oPgo+Pj4+ICsjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4K Pj4+PiArI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgo+Pj4+ICsjaW5jbHVkZSA8c291bmQvc29j Lmg+Cj4+Pj4gKyNpbmNsdWRlIDxzb3VuZC9zb2MtZGFpLmg+Cj4+Pj4gKyNpbmNsdWRlIDxsaW51 eC9pbml0Lmg+Cj4+Pj4gKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KPj4+PiArI2luY2x1ZGU8 bGludXgva3N0cnRveC5oPgo+Pj4+ICsjaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+Cj4+ Pj4gKyNpbmNsdWRlIDxsaW51eC9yZXNldC5oPgo+Pj4+ICsjaW5jbHVkZSAiYXhnLXRkbS5oIgo+ Pj4+ICsKPj4+PiArI2RlZmluZSBUT0FDT0RFQ19DVFJMMCAgICAgICAgICAgICAgICAgICAgICAg MHgwCj4+Pj4gKwo+Pj4+ICsjZGVmaW5lIENUUkwwX0VOQUJMRV9TSElGVCAgICAgICAgICAgMzEK Pj4+PiArI2RlZmluZSBDVFJMMF9CQ0xLX0VOQUJMRV9TSElGVCAgICAgICAgICAgICAgMzAKPj4+ PiArI2RlZmluZSBDVFJMMF9NQ0xLX0VOQUJMRV9TSElGVCAgICAgICAgICAgICAgMjkKPj4+PiAr I2RlZmluZSBDVFJMMF9CTEtfQ0FQX0lOVl9TSElGVCAgICAgICAgICAgICAgOQo+Pj4+ICsKPj4+ PiArI2RlZmluZSBURE1fSUZBQ0UgMAo+Pj4+ICsjZGVmaW5lIFRETV9BX1BBRCAwCj4+Pj4gKyNk ZWZpbmUgVERNX0JfUEFEIDEKPj4+PiArI2RlZmluZSBURE1fQ19QQUQgMgo+Pj4+ICsKPj4+PiAr c3RydWN0IHRvYWNvZGVjIHsKPj4+PiArICAgICBzdHJ1Y3QgcmVnbWFwX2ZpZWxkICpmaWVsZF9k YXRfc2VsOwo+Pj4+ICsgICAgIHN0cnVjdCByZWdtYXBfZmllbGQgKmZpZWxkX2xyY2xrX3NlbDsK Pj4+PiArICAgICBzdHJ1Y3QgcmVnbWFwX2ZpZWxkICpmaWVsZF9iY2xrX3NlbDsKPj4+PiArICAg ICBzdHJ1Y3QgcmVnbWFwX2ZpZWxkICpmaWVsZF9tY2xrX3NlbDsKPj4+PiArfTsKPj4+PiArCj4+ Pj4gK3N0cnVjdCB0b2Fjb2RlY19tYXRjaF9kYXRhIHsKPj4+PiArICAgICBjb25zdCBzdHJ1Y3Qg c25kX3NvY19jb21wb25lbnRfZHJpdmVyICpjb21wb25lbnRfZHJ2Owo+Pj4+ICsgICAgIGNvbnN0 IHN0cnVjdCByZWdfZmllbGQgZmllbGRfZGF0X3NlbDsKPj4+PiArICAgICBjb25zdCBzdHJ1Y3Qg cmVnX2ZpZWxkIGZpZWxkX2xyY2xrX3NlbDsKPj4+PiArICAgICBjb25zdCBzdHJ1Y3QgcmVnX2Zp ZWxkIGZpZWxkX2JjbGtfc2VsOwo+Pj4+ICsgICAgIGNvbnN0IHN0cnVjdCByZWdfZmllbGQgZmll bGRfbWNsa19zZWw7Cj4+Pj4gK307Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHJl Z21hcF9jb25maWcgdG9jb2RlY19yZWdtYXBfY2ZnID0gewo+Pj4+ICsgICAgIC5yZWdfYml0cyAg ICAgICA9IDMyLAo+Pj4+ICsgICAgIC52YWxfYml0cyAgICAgICA9IDMyLAo+Pj4+ICsgICAgIC5y ZWdfc3RyaWRlICAgICA9IDQsCj4+Pj4gKyAgICAgLm1heF9yZWdpc3RlciAgID0gMHgxLAo+Pj4+ ICt9Owo+Pj4+ICsKPj4+PiArI2RlZmluZSBTNF9MQU5FX09GRlNFVCA4Cj4+Pj4gKwo+Pj4+ICtz dGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHM0X3RvY29kZWNfbGFuZV9zZWxfdGV4dHNbXSA9IHsK Pj4+PiArICAgICAiTGFuZTAiLCAiTGFuZTEiLCAiTGFuZTIiLCAiTGFuZTMiLCAiTGFuZTQiLCAi TGFuZTUiLCAiTGFuZTYiLCAiTGFuZTciCj4+Pj4gK307Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMgY29u c3Qgc3RydWN0IHNvY19lbnVtIHM0X3RvY29kZWNfbGFuZV9zZWxfZW51bSA9Cj4+Pj4gKyAgICAg U09DX0VOVU1fU0lOR0xFKFNORF9TT0NfTk9QTSwgMCwgQVJSQVlfU0laRShzNF90b2NvZGVjX2xh bmVfc2VsX3RleHRzKSwKPj4+PiArICAgICAgICAgICAgICAgICAgICAgczRfdG9jb2RlY19sYW5l X3NlbF90ZXh0cyk7Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJv bF9uZXcgczRfdG9jb2RlY19sYW5lX3NlbCA9Cj4+Pj4gKyAgICAgU09DX0RBUE1fRU5VTSgiVE9D T0RFQyBMQU5FIFNFTCIsIHM0X3RvY29kZWNfbGFuZV9zZWxfZW51bSk7Cj4+Pj4gKwo+Pj4+ICtz dGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHM0X3RvY29kZWNfc3JjX3NlbF90ZXh0c1tdID0gewo+ Pj4+ICsgICAgICJURE1BIiwgIlRETUIiLCAiVERNQyIKPj4+PiArfTsKPj4+PiArCj4+Pj4gK3N0 YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gczRfdG9jb2RlY19zcmNfc2VsX2VudW0gPQo+Pj4+ ICsgICAgIFNPQ19FTlVNX1NJTkdMRShTTkRfU09DX05PUE0sIDAsIEFSUkFZX1NJWkUoczRfdG9j b2RlY19zcmNfc2VsX3RleHRzKSwKPj4+PiArICAgICAgICAgICAgICAgICAgICAgczRfdG9jb2Rl Y19zcmNfc2VsX3RleHRzKTsKPj4+PiArCj4+Pj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tj b250cm9sX25ldyBzNF90b2NvZGVjX3NyY19zZWwgPQo+Pj4+ICsgICAgIFNPQ19EQVBNX0VOVU0o IlRPQ09ERUMgU0VMIiwgczRfdG9jb2RlY19zcmNfc2VsX2VudW0pOwo+Pj4+ICsKPj4+PiArc3Rh dGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHM0X3RvYWNvZGVjX291dF9lbmFibGUg PQo+Pj4+ICsgICAgIFNPQ19EQVBNX1NJTkdMRV9BVVRPRElTQUJMRSgiU3dpdGNoIiwgVE9BQ09E RUNfQ1RSTDAsCj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENUUkwwX0VO QUJMRV9TSElGVCwgMSwgMCk7Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFp ICp0b2NvZGVjX3RkbV9nZXRfYWhlYWRfYmUoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncp Cj4+Pj4gK3sKPj4+PiArICAgICBzdHJ1Y3Qgc25kX3NvY19kYXBtX3BhdGggKnA7Cj4+Pj4gKyAg ICAgc3RydWN0IHNuZF9zb2NfZGFpICpiZTsKPj4+PiArCj4+Pj4gKyAgICAgc25kX3NvY19kYXBt X3dpZGdldF9mb3JfZWFjaF9zb3VyY2VfcGF0aCh3LCBwKSB7Cj4+Pj4gKyAgICAgICAgICAgICBp ZiAoIXAtPmNvbm5lY3QpCj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+Pj4+ ICsgICAgICAgICAgICAgaWYgKHAtPnNvdXJjZS0+aWQgPT0gc25kX3NvY19kYXBtX2RhaV9pbikK Pj4+PiArICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChzdHJ1Y3Qgc25kX3NvY19kYWkgKilw LT5zb3VyY2UtPnByaXY7Cj4+Pj4gKyAgICAgICAgICAgICBiZSA9IHRvY29kZWNfdGRtX2dldF9h aGVhZF9iZShwLT5zb3VyY2UpOwo+Pj4+ICsgICAgICAgICAgICAgaWYgKGJlICYmIGJlLT5pZCA9 PSBURE1fSUZBQ0UpCj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgIHJldHVybiBiZTsKPj4+PiAr ICAgICB9Cj4+Pj4gKyAgICAgcmV0dXJuIE5VTEw7Cj4+Pj4gK30KPj4+PiArCj4+Pj4gK3N0YXRp YyB1bnNpZ25lZCBpbnQgYW1sX3NpbXBsZV9zdHJ0b3VsbChjb25zdCBjaGFyICpjcCkKPj4+PiAr ewo+Pj4+ICsgICAgIHVuc2lnbmVkIGludCByZXN1bHQgPSAwOwo+Pj4+ICsgICAgIHVuc2lnbmVk IGludCB2YWx1ZSA9IDA7Cj4+Pj4gKyAgICAgdW5zaWduZWQgaW50IGxlbiA9IHN0cmxlbihjcCk7 Cj4+Pj4gKwo+Pj4+ICsgICAgIHdoaWxlIChsZW4gIT0gMCkgewo+Pj4+ICsgICAgICAgICAgICAg bGVuLS07Cj4+Pj4gKyAgICAgICAgICAgICB2YWx1ZSA9IGlzZGlnaXQoKmNwKTsKPj4+PiArICAg ICAgICAgICAgIGlmICh2YWx1ZSkgewo+Pj4+ICsgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9 ICpjcCAtICcwJzsKPj4+PiArICAgICAgICAgICAgIH0gZWxzZSB7Cj4+Pj4gKyAgICAgICAgICAg ICAgICAgICAgIGNwKys7Cj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+Pj4+ ICsgICAgICAgICAgICAgfQo+Pj4+ICsgICAgICAgICAgICAgY3ArKzsKPj4+PiArICAgICAgICAg ICAgIHJlc3VsdCA9IHJlc3VsdCAqIDEwICsgdmFsdWU7Cj4+Pj4gKyAgICAgfQo+Pj4+ICsgICAg IHJldHVybiByZXN1bHQ7Cj4+Pj4gK30KPj4+PiArCj4+Pj4gK3N0YXRpYyBpbnQgYW1sX2dldF9j bGtfaWQoY29uc3QgY2hhciAqbmFtZSkKPj4+PiArewo+Pj4+ICsgICAgIGludCBjbGtfaWQgPSAw Owo+Pj4+ICsKPj4+PiArICAgICBpZiAoc3Ryc3RyKG5hbWUsICJtc3RfYSIpKQo+Pj4+ICsgICAg ICAgICAgICAgY2xrX2lkID0gMDsKPj4+PiArICAgICBlbHNlIGlmIChzdHJzdHIobmFtZSwgIm1z dF9iIikpCj4+Pj4gKyAgICAgICAgICAgICBjbGtfaWQgPSAxOwo+Pj4+ICsgICAgIGVsc2UgaWYg KHN0cnN0cihuYW1lLCAibXN0X2MiKSkKPj4+PiArICAgICAgICAgICAgIGNsa19pZCA9IDI7Cj4+ Pj4gKyAgICAgZWxzZSBpZiAoc3Ryc3RyKG5hbWUsICJtc3RfZCIpKQo+Pj4+ICsgICAgICAgICAg ICAgY2xrX2lkID0gMzsKPj4+PiArICAgICBlbHNlIGlmIChzdHJzdHIobmFtZSwgIm1zdF9lIikp Cj4+Pj4gKyAgICAgICAgICAgICBjbGtfaWQgPSA0Owo+Pj4+ICsgICAgIGVsc2UgaWYgKHN0cnN0 cihuYW1lLCAibXN0X2YiKSkKPj4+PiArICAgICAgICAgICAgIGNsa19pZCA9IDU7Cj4+Pj4gKwo+ Pj4+ICsgICAgIHJldHVybiBjbGtfaWQ7Cj4+Pj4gK30KPj4+PiArCj4+Pj4gK3N0YXRpYyBpbnQg YW1sX3RvY29kZWNfc2VsX3NldChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdykKPj4+PiAr ewo+Pj4+ICsgICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqYmU7Cj4+Pj4gKyAgICAgc3RydWN0IGF4 Z190ZG1fc3RyZWFtICpzdHJlYW07Cj4+Pj4gKyAgICAgc3RydWN0IGF4Z190ZG1faWZhY2UgKmlm YWNlOwo+Pj4+ICsgICAgIHN0cnVjdCBzbmRfc29jX2NvbXBvbmVudCAqY29tcG9uZW50ID0gc25k X3NvY19kYXBtX3RvX2NvbXBvbmVudCh3LT5kYXBtKTsKPj4+PiArICAgICBzdHJ1Y3QgdG9hY29k ZWMgKnByaXYgPSBzbmRfc29jX2NvbXBvbmVudF9nZXRfZHJ2ZGF0YShjb21wb25lbnQpOwo+Pj4+ ICsgICAgIHVuc2lnbmVkIGludCB0ZG1faWQgPSBURE1fQV9QQUQ7Cj4+Pj4gKyAgICAgY29uc3Qg Y2hhciAqZGFpX3dpZGdldF9uYW1lOwo+Pj4+ICsgICAgIHN0cnVjdCBzbmRfc29jX2RhcG1fcGF0 aCAqcDsKPj4+PiArICAgICB1bnNpZ25lZCBpbnQgbGFuZSA9IDA7Cj4+Pj4gKyAgICAgdW5zaWdu ZWQgaW50IHZhbCA9IDA7Cj4+Pj4gKyAgICAgc3RydWN0IGNsayAqc2NsaywgKm1jbGs7Cj4+Pj4g KyAgICAgY2hhciAqY2xrX25hbWU7Cj4+Pj4gKyAgICAgaW50IG1jbGtfaWQsIHNjbGtfaWQ7Cj4+ Pj4gKwo+Pj4+ICsgICAgIGJlID0gdG9jb2RlY190ZG1fZ2V0X2FoZWFkX2JlKHcpOwo+Pj4+ICsg ICAgIGlmICghYmUpIHsKPj4+PiArICAgICAgICAgICAgIGRldl9lcnIoY29tcG9uZW50LT5kZXYs ICIlcyBub3QgZmluZCB0aGUgYmVcbiIsIF9fZnVuY19fKTsKPj4+PiArICAgICAgICAgICAgIHJl dHVybiAtRUlOVkFMOwo+Pj4+ICsgICAgIH0KPj4+PiArICAgICBzdHJlYW0gPSBzbmRfc29jX2Rh aV9kbWFfZGF0YV9nZXRfcGxheWJhY2soYmUpOwo+Pj4+ICsgICAgIGlmICghc3RyZWFtKSB7Cj4+ Pj4gKyAgICAgICAgICAgICBkZXZfZXJyKGNvbXBvbmVudC0+ZGV2LCAiJXMgbm90IGZpbmQgdGhl IHN0cmVhbVxuIiwgX19mdW5jX18pOwo+Pj4+ICsgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7 Cj4+Pj4gKyAgICAgfQo+Pj4+ICsgICAgIC8qd2UgbGlrZSB0byB1c2UgZGFpIGlkLCBidXQgaXQg aXMgZml4ZWQgdmFsKi8KPj4+PiArICAgICBkYWlfd2lkZ2V0X25hbWUgPSBiZS0+c3RyZWFtW1NO RFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdLndpZGdldC0+bmFtZTsKPj4+PiArICAgICBpZiAoc3Ry c3RyKGRhaV93aWRnZXRfbmFtZSwgIlRETV9BIikpCj4+Pj4gKyAgICAgICAgICAgICB0ZG1faWQg PSBURE1fQV9QQUQ7Cj4+Pj4gKyAgICAgZWxzZSBpZiAoc3Ryc3RyKGRhaV93aWRnZXRfbmFtZSwg IlRETV9CIikpCj4+Pj4gKyAgICAgICAgICAgICB0ZG1faWQgPSBURE1fQl9QQUQ7Cj4+Pj4gKyAg ICAgZWxzZSBpZiAoc3Ryc3RyKGRhaV93aWRnZXRfbmFtZSwgIlRETV9DIikpCj4+Pj4gKyAgICAg ICAgICAgICB0ZG1faWQgPSBURE1fQ19QQUQ7Cj4+Pj4gKyAgICAgc25kX3NvY19kYXBtX3dpZGdl dF9mb3JfZWFjaF9zb3VyY2VfcGF0aCh3LCBwKSB7Cj4+Pj4gKyAgICAgICAgICAgICBpZiAocC0+ Y29ubmVjdCAmJiBwLT5uYW1lKSB7Cj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgIGxhbmUgPSBh bWxfc2ltcGxlX3N0cnRvdWxsKHAtPm5hbWUpOwo+Pj4+ICsgICAgICAgICAgICAgICAgICAgICB2 YWwgPSBsYW5lICsgdGRtX2lkICogUzRfTEFORV9PRkZTRVQ7Cj4+Pj4gKyAgICAgICAgICAgICAg ICAgICAgIHJlZ21hcF9maWVsZF93cml0ZShwcml2LT5maWVsZF9kYXRfc2VsLCB2YWwpOwo+Pj4+ ICsgICAgICAgICAgICAgfQo+Pj4+ICsgICAgIH0KPj4+PiArICAgICBpZmFjZSA9IHN0cmVhbS0+ aWZhY2U7Cj4+Pj4gKyAgICAgbWNsayA9IGlmYWNlLT5tY2xrOwo+Pj4+ICsgICAgIHNjbGsgPSBp ZmFjZS0+c2NsazsKPj4+PiArICAgICBtY2xrX2lkID0gYW1sX2dldF9jbGtfaWQoX19jbGtfZ2V0 X25hbWUobWNsaykpOwo+Pj4+ICsgICAgIHNjbGtfaWQgPSBhbWxfZ2V0X2Nsa19pZChfX2Nsa19n ZXRfbmFtZShzY2xrKSk7Cj4+Pj4gKyAgICAgcmVnbWFwX2ZpZWxkX3dyaXRlKHByaXYtPmZpZWxk X21jbGtfc2VsLCBtY2xrX2lkKTsKPj4+PiArICAgICByZWdtYXBfZmllbGRfd3JpdGUocHJpdi0+ ZmllbGRfYmNsa19zZWwsIHNjbGtfaWQpOwo+Pj4+ICsgICAgIHJlZ21hcF9maWVsZF93cml0ZShw cml2LT5maWVsZF9scmNsa19zZWwsIHNjbGtfaWQpOwo+Pj4+ICsKPj4+PiArICAgICByZXR1cm4g MDsKPj4+PiArfQo+Pj4+ICsKPj4+PiArc3RhdGljIGludCB0b2NvZGVjX3NlbF9ldmVudChzdHJ1 Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKPj4+PiArICAgICAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3Qgc25kX2tjb250cm9sICpjb250cm9sLAo+Pj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgIGludCBldmVudCkKPj4+PiArewo+Pj4+ICsgICAgIHN0cnVjdCBzbmRfc29jX2NvbXBv bmVudCAqY29tcG9uZW50ID0gc25kX3NvY19kYXBtX3RvX2NvbXBvbmVudCh3LT5kYXBtKTsKPj4+ PiArICAgICBpbnQgcmV0ID0gMDsKPj4+PiArCj4+Pj4gKyAgICAgc3dpdGNoIChldmVudCkgewo+ Pj4+ICsgICAgIGNhc2UgU05EX1NPQ19EQVBNX1BSRV9QTVU6Cj4+Pj4gKyAgICAgICAgICAgICBy ZXQgPSBhbWxfdG9jb2RlY19zZWxfc2V0KHcpOwo+Pj4+ICsgICAgICAgICAgICAgYnJlYWs7Cj4+ Pj4gKwo+Pj4+ICsgICAgIGNhc2UgU05EX1NPQ19EQVBNX1BSRV9QTUQ6Cj4+Pj4gKyAgICAgICAg ICAgICBicmVhazsKPj4+PiArCj4+Pj4gKyAgICAgZGVmYXVsdDoKPj4+PiArICAgICAgICAgICAg IGRldl9lcnIoY29tcG9uZW50LT5kZXYsICJVbmV4cGVjdGVkIGV2ZW50ICVkXG4iLCBldmVudCk7 Cj4+Pj4gKyAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPj4+PiArICAgICB9Cj4+Pj4gKwo+ Pj4+ICsgICAgIHJldHVybiByZXQ7Cj4+Pj4gK30KPj4+PiArCj4+Pj4gK3N0YXRpYyBpbnQgdG9j b2RlY19jbGtfZW5hYmxlKHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAo+Pj4+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc25kX2tjb250cm9sICpjb250cm9sLAo+Pj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZXZlbnQpCj4+Pj4gK3sKPj4+PiArICAg ICBpbnQgcmV0ID0gMDsKPj4+PiArICAgICB1bnNpZ25lZCBpbnQgbWFzayA9IDAsIHZhbCA9IDA7 Cj4+Pj4gKyAgICAgc3RydWN0IHNuZF9zb2NfY29tcG9uZW50ICpjb21wb25lbnQgPSBzbmRfc29j X2RhcG1fdG9fY29tcG9uZW50KHctPmRhcG0pOwo+Pj4+ICsKPj4+PiArICAgICBzbmRfc29jX2Nv bXBvbmVudF91cGRhdGVfYml0cyhjb21wb25lbnQsIFRPQUNPREVDX0NUUkwwLAo+Pj4+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPDwgQ1RSTDBfQkxLX0NBUF9JTlZfU0hJ RlQsIDEgPDwgQ1RSTDBfQkxLX0NBUF9JTlZfU0hJRlQpOwo+Pj4+ICsgICAgIHN3aXRjaCAoZXZl bnQpIHsKPj4+PiArICAgICBjYXNlIFNORF9TT0NfREFQTV9QUkVfUE1VOgo+Pj4+ICsgICAgICAg ICAgICAgbWFzayA9IDEgPDwgQ1RSTDBfTUNMS19FTkFCTEVfU0hJRlQgfCAxIDw8IENUUkwwX0JD TEtfRU5BQkxFX1NISUZUOwo+Pj4+ICsgICAgICAgICAgICAgdmFsID0gMSA8PCBDVFJMMF9NQ0xL X0VOQUJMRV9TSElGVCB8IDEgPDwgQ1RSTDBfQkNMS19FTkFCTEVfU0hJRlQ7Cj4+Pj4gKyAgICAg ICAgICAgICBzbmRfc29jX2NvbXBvbmVudF91cGRhdGVfYml0cyhjb21wb25lbnQsIFRPQUNPREVD X0NUUkwwLCBtYXNrLCB2YWwpOwo+Pj4+ICsgICAgICAgICAgICAgYnJlYWs7Cj4+Pj4gKyAgICAg Y2FzZSBTTkRfU09DX0RBUE1fUFJFX1BNRDoKPj4+PiArICAgICAgICAgICAgIG1hc2sgPSAxIDw8 IENUUkwwX01DTEtfRU5BQkxFX1NISUZUIHwgMSA8PCBDVFJMMF9CQ0xLX0VOQUJMRV9TSElGVDsK Pj4+PiArICAgICAgICAgICAgIHZhbCA9IDAgPDwgQ1RSTDBfTUNMS19FTkFCTEVfU0hJRlQgfCAw IDw8IENUUkwwX0JDTEtfRU5BQkxFX1NISUZUOwo+Pj4+ICsgICAgICAgICAgICAgc25kX3NvY19j b21wb25lbnRfdXBkYXRlX2JpdHMoY29tcG9uZW50LCBUT0FDT0RFQ19DVFJMMCwgbWFzaywgdmFs KTsKPj4+PiArICAgICAgICAgICAgIGJyZWFrOwo+Pj4+ICsgICAgIGRlZmF1bHQ6Cj4+Pj4gKyAg ICAgICAgICAgICBkZXZfZXJyKGNvbXBvbmVudC0+ZGV2LCAiVW5leHBlY3RlZCBldmVudCAlZFxu IiwgZXZlbnQpOwo+Pj4+ICsgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4+Pj4gKyAgICAg fQo+Pj4+ICsKPj4+PiArICAgICByZXR1cm4gcmV0Owo+Pj4+ICt9Cj4+Pj4gKwo+Pj4+ICtzdGF0 aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgczRfdG9hY29kZWNfd2lkZ2V0c1td ID0gewo+Pj4+ICsgICAgIFNORF9TT0NfREFQTV9NVVhfRSgiTGFuZSBTUkMiLCBTTkRfU09DX05P UE0sIDAsIDAsCj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICZzNF90b2NvZGVjX2xhbmVf c2VsLCB0b2NvZGVjX3NlbF9ldmVudCwKPj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgKFNO RF9TT0NfREFQTV9QUkVfUE1VIHwgU05EX1NPQ19EQVBNX1BSRV9QTUQpKSwKPj4+PiArICAgICBT TkRfU09DX0RBUE1fTVVYKCJJTlBVVCBTUkMiLCBTTkRfU09DX05PUE0sIDAsIDAsICZzNF90b2Nv ZGVjX3NyY19zZWwpLAo+Pj4+ICsgICAgIFNORF9TT0NfREFQTV9TV0lUQ0hfRSgiT1VUIEVOIiwg U05EX1NPQ19OT1BNLCAwLCAwLAo+Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAmczRf dG9hY29kZWNfb3V0X2VuYWJsZSwgdG9jb2RlY19jbGtfZW5hYmxlLAo+Pj4+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChTTkRfU09DX0RBUE1fUFJFX1BNVSB8IFNORF9TT0NfREFQTV9Q UkVfUE1EKSksCj4+Pj4gKyAgICAgU05EX1NPQ19EQVBNX0FJRl9JTigiVERNQSIsIE5VTEwsIDAs IFNORF9TT0NfTk9QTSwgMCwgMCksCj4+Pj4gKyAgICAgU05EX1NPQ19EQVBNX0FJRl9JTigiVERN QiIsIE5VTEwsIDAsIFNORF9TT0NfTk9QTSwgMCwgMCksCj4+Pj4gKyAgICAgU05EX1NPQ19EQVBN X0FJRl9JTigiVERNQyIsIE5VTEwsIDAsIFNORF9TT0NfTk9QTSwgMCwgMCksCj4+Pj4gKyAgICAg U05EX1NPQ19EQVBNX09VVF9EUlYoIkxhbmUwIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAw KSwKPj4+PiArICAgICBTTkRfU09DX0RBUE1fT1VUX0RSVigiTGFuZTEiLCBTTkRfU09DX05PUE0s IDAsIDAsIE5VTEwsIDApLAo+Pj4+ICsgICAgIFNORF9TT0NfREFQTV9PVVRfRFJWKCJMYW5lMiIs IFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCj4+Pj4gKyAgICAgU05EX1NPQ19EQVBNX09V VF9EUlYoIkxhbmUzIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwKSwKPj4+PiArICAgICBT TkRfU09DX0RBUE1fT1VUX0RSVigiTGFuZTQiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDAp LAo+Pj4+ICsgICAgIFNORF9TT0NfREFQTV9PVVRfRFJWKCJMYW5lNSIsIFNORF9TT0NfTk9QTSwg MCwgMCwgTlVMTCwgMCksCj4+Pj4gKyAgICAgU05EX1NPQ19EQVBNX09VVF9EUlYoIkxhbmU2Iiwg U05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwKSwKPj4+PiArICAgICBTTkRfU09DX0RBUE1fT1VU X0RSVigiTGFuZTciLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDApLAo+Pj4+ICsgICAgIFNO RF9TT0NfREFQTV9PVVRQVVQoIlRETV9UT19BQ09ERUMiKSwKPj4+PiArfTsKPj4+PiArCj4+Pj4g K3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIHM0X3RvY29kZWNfZGFwbV9y b3V0ZXNbXSA9IHsKPj4+PiArICAgICB7ICJJTlBVVCBTUkMiLCAiVERNQSIsICJURE1BIn0sCj4+ Pj4gKyAgICAgeyAiSU5QVVQgU1JDIiwgIlRETUIiLCAiVERNQiJ9LAo+Pj4+ICsgICAgIHsgIklO UFVUIFNSQyIsICJURE1DIiwgIlRETUMifSwKPj4+PiArICAgICB7ICJMYW5lMCIsIE5VTEwsICJJ TlBVVCBTUkMiIH0sCj4+Pj4gKyAgICAgeyAiTGFuZTEiLCBOVUxMLCAiSU5QVVQgU1JDIn0sCj4+ Pj4gKyAgICAgeyAiTGFuZTIiLCBOVUxMLCAiSU5QVVQgU1JDIn0sCj4+Pj4gKyAgICAgeyAiTGFu ZTMiLCBOVUxMLCAiSU5QVVQgU1JDIn0sCj4+Pj4gKyAgICAgeyAiTGFuZTQiLCBOVUxMLCAiSU5Q VVQgU1JDIn0sCj4+Pj4gKyAgICAgeyAiTGFuZTUiLCBOVUxMLCAiSU5QVVQgU1JDIn0sCj4+Pj4g KyAgICAgeyAiTGFuZTYiLCBOVUxMLCAiSU5QVVQgU1JDIn0sCj4+Pj4gKyAgICAgeyAiTGFuZTci LCBOVUxMLCAiSU5QVVQgU1JDIn0sCj4+Pj4gKyAgICAgeyAiTGFuZSBTUkMiLCAiTGFuZTAiLCAi TGFuZTAifSwKPj4+PiArICAgICB7ICJMYW5lIFNSQyIsICJMYW5lMSIsICJMYW5lMSJ9LAo+Pj4+ ICsgICAgIHsgIkxhbmUgU1JDIiwgIkxhbmUyIiwgIkxhbmUyIn0sCj4+Pj4gKyAgICAgeyAiTGFu ZSBTUkMiLCAiTGFuZTMiLCAiTGFuZTMifSwKPj4+PiArICAgICB7ICJMYW5lIFNSQyIsICJMYW5l NCIsICJMYW5lNCJ9LAo+Pj4+ICsgICAgIHsgIkxhbmUgU1JDIiwgIkxhbmU1IiwgIkxhbmU1In0s Cj4+Pj4gKyAgICAgeyAiTGFuZSBTUkMiLCAiTGFuZTYiLCAiTGFuZTYifSwKPj4+PiArICAgICB7 ICJMYW5lIFNSQyIsICJMYW5lNyIsICJMYW5lNyJ9LAo+Pj4+ICsgICAgIHsgIk9VVCBFTiIsICJT d2l0Y2giLCAiTGFuZSBTUkMifSwKPj4+PiArICAgICB7ICJURE1fVE9fQUNPREVDIiwgTlVMTCwg Ik9VVCBFTiJ9LAo+Pj4+ICsKPj4+PiArfTsKPj4+PiArCj4+Pj4gK3N0YXRpYyBjb25zdCBzdHJ1 Y3Qgc25kX3NvY19jb21wb25lbnRfZHJpdmVyIHM0X3RvY29kZWNfY29tcG9uZW50X2RydiA9IHsK Pj4+PiArICAgICAuZGFwbV93aWRnZXRzICAgICAgICAgICA9IHM0X3RvYWNvZGVjX3dpZGdldHMs Cj4+Pj4gKyAgICAgLm51bV9kYXBtX3dpZGdldHMgICAgICAgPSBBUlJBWV9TSVpFKHM0X3RvYWNv ZGVjX3dpZGdldHMpLAo+Pj4+ICsgICAgIC5kYXBtX3JvdXRlcyAgICAgICAgICAgID0gczRfdG9j b2RlY19kYXBtX3JvdXRlcywKPj4+PiArICAgICAubnVtX2RhcG1fcm91dGVzICAgICAgICA9IEFS UkFZX1NJWkUoczRfdG9jb2RlY19kYXBtX3JvdXRlcyksCj4+Pj4gK307Cj4+Pj4gKwo+Pj4+ICtz dGF0aWMgY29uc3Qgc3RydWN0IHRvYWNvZGVjX21hdGNoX2RhdGEgczRfdG9hY29kZWNfbWF0Y2hf ZGF0YSA9IHsKPj4+PiArICAgICAuY29tcG9uZW50X2RydiAgPSAmczRfdG9jb2RlY19jb21wb25l bnRfZHJ2LAo+Pj4+ICsgICAgIC5maWVsZF9kYXRfc2VsICA9IFJFR19GSUVMRChUT0FDT0RFQ19D VFJMMCwgMTYsIDIwKSwKPj4+PiArICAgICAuZmllbGRfbHJjbGtfc2VsID0gUkVHX0ZJRUxEKFRP QUNPREVDX0NUUkwwLCAxMiwgMTQpLAo+Pj4+ICsgICAgIC5maWVsZF9iY2xrX3NlbCA9IFJFR19G SUVMRChUT0FDT0RFQ19DVFJMMCwgNCwgNiksCj4+Pj4gKyAgICAgLmZpZWxkX21jbGtfc2VsID0g UkVHX0ZJRUxEKFRPQUNPREVDX0NUUkwwLCAwLCAyKSwKPj4+PiArfTsKPj4+PiArCj4+Pj4gK3N0 YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHM0X3RvY29kZWNfb2ZfbWF0Y2hbXSA9IHsK Pj4+PiArICAgICB7Cj4+Pj4gKyAgICAgICAgICAgICAuY29tcGF0aWJsZSA9ICJhbWxvZ2ljLHM0 LXRvY29kZWMiLAo+Pj4+ICsgICAgICAgICAgICAgLmRhdGEgPSAmczRfdG9hY29kZWNfbWF0Y2hf ZGF0YSwKPj4+PiArICAgICB9LCB7fQo+Pj4+ICt9Owo+Pj4+ICsKPj4+PiArTU9EVUxFX0RFVklD RV9UQUJMRShvZiwgczRfdG9jb2RlY19vZl9tYXRjaCk7Cj4+Pj4gKwo+Pj4+ICtzdGF0aWMgaW50 IHRvY29kZWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPj4+PiArewo+Pj4+ ICsgICAgIGNvbnN0IHN0cnVjdCB0b2Fjb2RlY19tYXRjaF9kYXRhICpkYXRhOwo+Pj4+ICsgICAg IHN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7Cj4+Pj4gKyAgICAgc3RydWN0IHRvYWNv ZGVjICpwcml2Owo+Pj4+ICsgICAgIHZvaWQgX19pb21lbSAqcmVnczsKPj4+PiArICAgICBzdHJ1 Y3QgcmVnbWFwICptYXA7Cj4+Pj4gKyAgICAgaW50IHJldDsKPj4+PiArCj4+Pj4gKyAgICAgZGF0 YSA9IGRldmljZV9nZXRfbWF0Y2hfZGF0YShkZXYpOwo+Pj4+ICsgICAgIGlmICghZGF0YSkKPj4+ PiArICAgICAgICAgICAgIHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgLUVOT0RFViwgImZhaWxl ZCB0byBtYXRjaCBkZXZpY2VcbiIpOwo+Pj4+ICsgICAgIHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2 LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKPj4+PiArICAgICBpZiAoIXByaXYpCj4+Pj4g KyAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKPj4+PiArCj4+Pj4gKyAgICAgcGxhdGZvcm1f c2V0X2RydmRhdGEocGRldiwgcHJpdik7Cj4+Pj4gKwo+Pj4+ICsgICAgIHJldCA9IGRldmljZV9y ZXNldChkZXYpOwo+Pj4+ICsgICAgIGlmIChyZXQpCj4+Pj4gKyAgICAgICAgICAgICByZXR1cm4g cmV0Owo+Pj4+ICsKPj4+PiArICAgICByZWdzID0gZGV2bV9wbGF0Zm9ybV9pb3JlbWFwX3Jlc291 cmNlKHBkZXYsIDApOwo+Pj4+ICsgICAgIGlmIChJU19FUlIocmVncykpCj4+Pj4gKyAgICAgICAg ICAgICByZXR1cm4gUFRSX0VSUihyZWdzKTsKPj4+PiArCj4+Pj4gKyAgICAgbWFwID0gZGV2bV9y ZWdtYXBfaW5pdF9tbWlvKGRldiwgcmVncywgJnRvY29kZWNfcmVnbWFwX2NmZyk7Cj4+Pj4gKyAg ICAgaWYgKElTX0VSUihtYXApKQo+Pj4+ICsgICAgICAgICAgICAgcmV0dXJuIGRldl9lcnJfcHJv YmUoZGV2LCBQVFJfRVJSKG1hcCksICJmYWlsZWQgdG8gaW5pdCByZWdtYXBcbiIpOwo+Pj4+ICsK Pj4+PiArICAgICBwcml2LT5maWVsZF9kYXRfc2VsID0gZGV2bV9yZWdtYXBfZmllbGRfYWxsb2Mo ZGV2LCBtYXAsIGRhdGEtPmZpZWxkX2RhdF9zZWwpOwo+Pj4+ICsgICAgIGlmIChJU19FUlIocHJp di0+ZmllbGRfZGF0X3NlbCkpCj4+Pj4gKyAgICAgICAgICAgICByZXR1cm4gUFRSX0VSUihwcml2 LT5maWVsZF9kYXRfc2VsKTsKPj4+PiArCj4+Pj4gKyAgICAgcHJpdi0+ZmllbGRfbHJjbGtfc2Vs ID0gZGV2bV9yZWdtYXBfZmllbGRfYWxsb2MoZGV2LCBtYXAsIGRhdGEtPmZpZWxkX2xyY2xrX3Nl bCk7Cj4+Pj4gKyAgICAgaWYgKElTX0VSUihwcml2LT5maWVsZF9scmNsa19zZWwpKQo+Pj4+ICsg ICAgICAgICAgICAgcmV0dXJuIFBUUl9FUlIocHJpdi0+ZmllbGRfbHJjbGtfc2VsKTsKPj4+PiAr Cj4+Pj4gKyAgICAgcHJpdi0+ZmllbGRfYmNsa19zZWwgPSBkZXZtX3JlZ21hcF9maWVsZF9hbGxv YyhkZXYsIG1hcCwgZGF0YS0+ZmllbGRfYmNsa19zZWwpOwo+Pj4+ICsgICAgIGlmIChJU19FUlIo cHJpdi0+ZmllbGRfYmNsa19zZWwpKQo+Pj4+ICsgICAgICAgICAgICAgcmV0dXJuIFBUUl9FUlIo cHJpdi0+ZmllbGRfYmNsa19zZWwpOwo+Pj4+ICsKPj4+PiArICAgICBwcml2LT5maWVsZF9tY2xr X3NlbCA9IGRldm1fcmVnbWFwX2ZpZWxkX2FsbG9jKGRldiwgbWFwLCBkYXRhLT5maWVsZF9tY2xr X3NlbCk7Cj4+Pj4gKyAgICAgaWYgKElTX0VSUihwcml2LT5maWVsZF9tY2xrX3NlbCkpCj4+Pj4g KyAgICAgICAgICAgICByZXR1cm4gUFRSX0VSUihwcml2LT5maWVsZF9tY2xrX3NlbCk7Cj4+Pj4g Kwo+Pj4+ICsgICAgIHJldHVybiBkZXZtX3NuZF9zb2NfcmVnaXN0ZXJfY29tcG9uZW50KGRldiwK Pj4+PiArICAgICAgICAgICAgICAgICAgICAgZGF0YS0+Y29tcG9uZW50X2RydiwgTlVMTCwgMCk7 Cj4+Pj4gK30KPj4+PiArCj4+Pj4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHRvY29k ZWNfcGRydiA9IHsKPj4+PiArICAgICAucHJvYmUgPSB0b2NvZGVjX3Byb2JlLAo+Pj4+ICsgICAg IC5kcml2ZXIgPSB7Cj4+Pj4gKyAgICAgICAgICAgICAubmFtZSA9ICJzNC10b2NvZGVjIiwKPj4+ PiArICAgICAgICAgICAgIC5vZl9tYXRjaF90YWJsZSA9IHM0X3RvY29kZWNfb2ZfbWF0Y2gsCj4+ Pj4gKyAgICAgfSwKPj4+PiArfTsKPj4+PiArCj4+Pj4gK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIo dG9jb2RlY19wZHJ2KTsKPj4+PiArCj4+Pj4gK01PRFVMRV9ERVNDUklQVElPTigiQW1sb2dpYyB0 byBjb2RlYyBkcml2ZXIiKTsKPj4+PiArTU9EVUxFX0FVVEhPUigiamllYmluZy5jaGVuQGFtbG9n aWMuY29tIik7Cj4+Pj4gK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKPj4+PiBkaWZmIC0tZ2l0IGEv c291bmQvc29jL21lc29uL3Q5MDE1LmMgYi9zb3VuZC9zb2MvbWVzb24vdDkwMTUuYwo+Pj4+IGlu ZGV4IDU3MWY2NTc4OGM1OTIwNTBhYmRjYTI2NGY1NjU2ZDRkMWE5ZDk5ZjYuLjJkYjFjZDE4Y2Yy Y2VhNTA3ZjNkNzI4MjA1NGUwM2Q5NTM1ODY2NDggMTAwNjQ0Cj4+Pj4gLS0tIGEvc291bmQvc29j L21lc29uL3Q5MDE1LmMKPj4+PiArKysgYi9zb3VuZC9zb2MvbWVzb24vdDkwMTUuYwo+Pj4+IEBA IC04OSwxMCArODksNyBAQCBzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2RyaXZlciB0OTAxNV9k YWkgPSB7Cj4+Pj4gICAgICAgICAgICAgICAgIC5jaGFubmVsc19taW4gPSAxLAo+Pj4+ICAgICAg ICAgICAgICAgICAuY2hhbm5lbHNfbWF4ID0gMiwKPj4+PiAgICAgICAgICAgICAgICAgLnJhdGVz ID0gU05EUlZfUENNX1JBVEVfODAwMF85NjAwMCwKPj4+PiAtICAgICAgICAgICAgIC5mb3JtYXRz ID0gKFNORFJWX1BDTV9GTVRCSVRfUzggfAo+Pj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAg U05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfAo+Pj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAg U05EUlZfUENNX0ZNVEJJVF9TMjBfTEUgfAo+Pj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAg U05EUlZfUENNX0ZNVEJJVF9TMjRfTEUpLAo+Pj4+ICsgICAgICAgICAgICAgLmZvcm1hdHMgPSAo U05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfCBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSksCj4+PiBB Z2FpbiwgbWl4ZWQgdXAgY2hhbmdlcyB3aXRoIHplcm8ganVzdGlmaWNhdGlvbi4KPj4+Cj4+PiBU aGlzIGRyb3BzIFM4IGFuZCBTMTYgZm9ybWF0IHN1cHBvcnQgZm9yIHRoZSBleGlzdGluZyBTb0Nz IChzdWNoIGFzIEdYTCkKPj4+IHdoaWNoIGlzIGtub3duIHRvIHdvcmsgYW5kIGFkZCBTMzIgc3Vw cG9ydCBvbiBhbiBIVyBkb2N1bWVudGVkIGFzIDI0Yml0cwo+Pj4gb25seS4gQ2FuIHlvdSBleHBs YWluID8KPj4+Cj4+Pj4gICAgICAgICB9LAo+Pj4+ICAgICAgICAgLm9wcyA9ICZ0OTAxNV9kYWlf b3BzLAo+Pj4+ICAgIH07Cj4+PiAtLQo+Pj4gSmVyb21lCj4gLS0KPiBKZXJvbWUKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFtbG9naWMgbWFp bGluZyBsaXN0CmxpbnV4LWFtbG9naWNAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMu aW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFtbG9naWMK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 63877C02183 for ; Tue, 14 Jan 2025 12:43:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:MIME-Version: Content-Transfer-Encoding:Content-Type:In-Reply-To:From:References:Cc:To: Subject:Date:Message-ID:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=e6M+Aq3iD1iSZwtU7ci0QHqNGElyK7JiLBPkduGAzfw=; b=o+uaDSHsJnEG36nH/YWGvw92pJ 6Vp9UzSU3wKauirh3fZSekCcdLJSnXh1RxZZKM4Ln2WkdzfEuLkueKcT19Qi71L5n5eJHdVnT58Bv howePLIBh3Is+wyOEvzrVgJjdaS6Z36ifn8f/7ZP6SPp8s2AYSBZQosWOtQj/riWuDmuNJwkhNGxa 2JJiODwwfH4tojyGXOXjpyalapik8eD3JapuQMAgsOg1ahvIaqZd/gqQQ18QilMa7xoRJdBwI0ERa eOrgFCyKjVT4vnhcmC7HD683EH0N3T6ZIWt4lsaV8bWamYdOKy97vtULSmjH6fAxZhryElIRTvKf2 EXbLHdcQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tXgGJ-00000008RDO-0UfK; Tue, 14 Jan 2025 12:43:15 +0000 Received: from mail-eastasiaazlp170100000.outbound.protection.outlook.com ([2a01:111:f403:c400::] helo=HK2PR02CU002.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tXgF2-00000008QyH-30hi; Tue, 14 Jan 2025 12:41:58 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=nKREVpWlMmubI/LSzBx9QkPeW3UViRRUNpYO843C2Q8ya2heKGdG2nVG4Yi78aHoCLUDyI+fv69hFesZQqy1bKtDGVp6MneHnp/SNKodEsH/z68Unz6oi2Mgax9mW4/qCFKZkdUYYHfSSshXZVY9k6ZMcd1zJFKR38LGdK1k2KGsTiwXVMsbyjM6KYQhw42swYS9KTknjk/kliLO6qIKgT1LCGB4HItYhuXCZ0Yv+sDTih1lXz0Gu6ol77sOAv10QPfIh/ufPcA/PnotZn3L7nkWsQnITm3dqf7B1dJtob2/8IO6N1jaB2jF3RB6sAFl73GeGlul26uJxSBIpboN4g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=e6M+Aq3iD1iSZwtU7ci0QHqNGElyK7JiLBPkduGAzfw=; b=OTZISEWn6mPK0i5VNN621JLcrcPSHxiqKVk3NEJZXEOZ9RUV3WUAvnY7G8H4FIXkM/eGvHkM1ace1z7ZOZMVREL6ya2PkTx5SMedQ+agQMqjVLVCu/hhofnvG5AZzknn85CYSzV0ovUmJFnbgVo8ukIEHvx8xPj0KSYku+55f1hE//vLUoH24J6B5Dc9y8d8nCqVgC9TlCcL4ZhFKOEa9LiLjGwa2rn19Zaul9kn3ek9ZZrV9nBsxrnUcnEgz2c0iKXmL0BP8NRtRYmN+64Huh6ROjPJlUBNAj+2i8T1EVAyN4NZASXzgwMGQLC6WwDf6DXMRr2CFQuzghj3hHKm9w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amlogic.com; dmarc=pass action=none header.from=amlogic.com; dkim=pass header.d=amlogic.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amlogic.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=e6M+Aq3iD1iSZwtU7ci0QHqNGElyK7JiLBPkduGAzfw=; b=nKab9X285hh3e87prpOmniOL2n4dSuhSVgo+L/RE6Qe6PrFS5Gzb54GjRaZvm008axmvDwaUsbDSrqOCRDT2VC+u0H6HbcdnBPRi4rSoeYAvmi+EGH4q7U2Mj8G482aza0kzhM8IqNbNvEqroYwXADGcaMpEzF6zfQicioRlUCkUWpSi/zu9TJVxgmBHJvuWzQxmwJSmR6KxS31u6mSvJrEofG1TKeMVuWz5IHEeKjYS9mDtXnN1EIxSWa/1o7GtkWpnE0Pym5KPmzG/80vXOXR9XcOTDRzAnQe5UPQgAMzKq5O5auYPgC9DW0mfMmiRhs8KmB/ogTDZj89b0Sk9kQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=amlogic.com; Received: from PUZPR03MB7135.apcprd03.prod.outlook.com (2603:1096:301:113::15) by SI6PR03MB8707.apcprd03.prod.outlook.com (2603:1096:4:253::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8335.18; Tue, 14 Jan 2025 12:41:50 +0000 Received: from PUZPR03MB7135.apcprd03.prod.outlook.com ([fe80::ecac:a387:36d8:144d]) by PUZPR03MB7135.apcprd03.prod.outlook.com ([fe80::ecac:a387:36d8:144d%3]) with mapi id 15.20.8335.017; Tue, 14 Jan 2025 12:41:50 +0000 Message-ID: <31ce586b-a7d9-4f69-8ca4-4f98cfbeee1d@amlogic.com> Date: Tue, 14 Jan 2025 20:41:35 +0800 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH 2/3] ASoC: meson: s4:support for the on-chip audio To: Jerome Brunet Cc: jiebing chen via B4 Relay , Liam Girdwood , Mark Brown , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Jaroslav Kysela , Takashi Iwai , Neil Armstrong , Kevin Hilman , Martin Blumenstingl , linux-sound@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-amlogic@lists.infradead.org References: <20250113-audio_drvier-v1-0-8c14770f38a0@amlogic.com> <20250113-audio_drvier-v1-2-8c14770f38a0@amlogic.com> <1jwmey9451.fsf@starbuckisacylon.baylibre.com> <1jh6617hwf.fsf@starbuckisacylon.baylibre.com> From: Jiebing Chen In-Reply-To: <1jh6617hwf.fsf@starbuckisacylon.baylibre.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-ClientProxiedBy: SG2PR01CA0182.apcprd01.prod.exchangelabs.com (2603:1096:4:189::20) To PUZPR03MB7135.apcprd03.prod.outlook.com (2603:1096:301:113::15) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PUZPR03MB7135:EE_|SI6PR03MB8707:EE_ X-MS-Office365-Filtering-Correlation-Id: e5b4172e-79ec-4530-1837-08dd3498d128 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|1800799024|7416014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?dWQ2OTM3LzNmU0xPUHNHZ0VRTUhDMlQxUXhWRkNqNzhlbTlLWTZXM3NBYnJN?= =?utf-8?B?MWZpN3dkbDhyN1BLWHlKQ28rZERncXFYZ3dCS3FTN1grOXp6VWtObC91bUV3?= =?utf-8?B?M3BNbkRSN0FDZXBiQm9PTUJueDR6NWYwOEs3SVdBa0dEbll3NzBkSGRVV1Bi?= =?utf-8?B?MXNaWm1CaDFrbDJlelkvVHMyVVd0dGV1cjNsbEpzdmJyUlpsNmEzeWlXREE4?= =?utf-8?B?TS9BZS9CWVhrYzFyU1hSOUUrQXNxUjN3dHNBUjRUeEluQXNUTW8xbW9PSVFN?= =?utf-8?B?SjVyekxrTmUrcU1abFBuRjdyRWtGVndjN1pieGdJdUZmYkhvQVhyREkyREYw?= =?utf-8?B?M0NRU2FYdTRYODdRcUkrbCtEVmVWWkFPWFljaTZmNm5ZazJabWVVNWhOQW9X?= =?utf-8?B?QUVocUpua1NXS1R0Z0FsS3hKUGNDbzd2MnQzb0Yxb3M5cHNtMlR6eHlheTdp?= =?utf-8?B?bnI0Tnc2UjNhVVBXb2NzZFV4Qlg4clpyT0xWQUpjNXVHVzFYK1p5SHU2SFRn?= =?utf-8?B?MmljYWZjd0JCZDNJTHFVZGpzb1BySTZlY0ZsNlBzeXJuVDBic0FYOVZteTdG?= =?utf-8?B?RjFuUERISERCdnVnMjRBT3l3NHZabkM0ajBmbytoUVlXUnZTOGFkalpOWGEy?= =?utf-8?B?Z3lQQjhqbHlGYmlnWW1iejlOYjBoay9FZUtDdUpxbVhxUEZ2UHhDUzFaRkxH?= =?utf-8?B?ZVUzY3pvK1dRWHZsYkRrbzhPU2NpQ255MjYwYmdlK3crQkR2cERGRFZMYklM?= =?utf-8?B?ZThZQW5QSHFpd00zaEcxN21pZGtGQkJnRDhieVpVQWE2UFdDWG1lR295SCt3?= =?utf-8?B?aWhmdHIrNjFBYjl6bTEvUXkzSlJ3NXcxd041M3hCcTQ5K2ZlSWhqV0xCQW1n?= =?utf-8?B?dzV5VENoN0x5WEVUYjJOcE16YytPKzNMS0xIS2QxMDJqL0ZXWVVacnBQdG11?= =?utf-8?B?Zy9pbmQ0OWZRb2dVV3NLV09XYkl5Y3lEQU9UdE5mMWtNSm5wNVFyTTZqWWdZ?= =?utf-8?B?cTdES3B6QVppVzNiQTVWanUyNGlqNjliTlRDWFp6MXhFRkQzUHhnUlpSb1FZ?= =?utf-8?B?WDluV0dWdnFnTXREM2NHM0xOajdOcjRGbm5ieGRMamdyeU1Qdys0dXFzN3BY?= =?utf-8?B?SE9MZHBRU2ZBOWwzZXRCT2c4ajBaVEx1bm9uVXFXZkI4clZuZk1DdVdGYzhW?= =?utf-8?B?SzBOanpWR2VrTEJrVVRDVFowT3pCUkt3MWtENnFHSzh4c09WekY3OG1QakVX?= =?utf-8?B?am1ZdTlhQStGemtlQTUyeVE3TGNMTDlsUUU3RUorSHVrM1VuNC9zbzB3cVNL?= =?utf-8?B?Wmord3pRN3R3MXhJTllNbC9DOVQ4cUlWeWZKS04wampNMXcxckJTODE5L0ky?= =?utf-8?B?U0lySjFLQ3BlMzBicFpjaXBiZUpxaHNQZnMxdUN1YWJiTUFLQjkrTG5iNWpl?= =?utf-8?B?eXgzajNOM3Y1TWJzRThuNW5zdFBYSkhGbmVMTEhNeUx1SXQwNE1FSlp6RDhU?= =?utf-8?B?bjVadHVTaDE4TkFjZTB4c3UrRXpNQ0ZBWndBM0tuM2lzcXZ1amxXWURDQWg0?= =?utf-8?B?RlhBeXZUbjhWbWoxRW1RcWR1ZTFpZXloRU9vc1F0RWFZNUlaMElRcEl6aDJT?= =?utf-8?B?bHNJTmVhSFJsUW43STYvbWhhU0lXZGRJZ0UwaTZWd0FMN01Bc094U0p6UDVx?= =?utf-8?B?V0RmZ0tDZm5VNmJVU2RET0RFcjY4MFA1U2F2Qnk2NDJMTmRXRFNSc0c2UGsy?= =?utf-8?B?aTI3aDVTN1N3ZW1kNEduOFh4UzdSTmpqL2hLandXTTU0UE56d1ZsMDZUTVFC?= =?utf-8?B?bFdwOTVPRFF3V2tqa0d1Zz09?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PUZPR03MB7135.apcprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(1800799024)(7416014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?OUltU2hGZjVqa2dTcEtaVEFiRHNXVUdlNTRYbkRxV1hKRmkzV1J6d0RrRHhY?= =?utf-8?B?R00vK2pNcmFpTFVYbVJCZGNHa2RXR2Zodi9ERVJIQUY1NUNZSE5tbWRoSHFC?= =?utf-8?B?Z1g0cGh0YU12Qk1pWlpaUFA3VlZob3BoY2lwamI1V0lCNnZoNjdHQUV6Q3BZ?= =?utf-8?B?Vyt1WUdkNGxXU1RLbWtvMlFxK1ZrbkkrSERrblZQTXo0VXpBMUVCNkV2VEFN?= =?utf-8?B?TmYzTEVBbk9VKzdqeXhNVEc3cXc1bjlTbHkxSllMVVIrNEtwT1k0TVhGSDBv?= =?utf-8?B?YkhOdjdpcW9ycmpoTzB2dzRpc3VoMDBPQVhCbWcyZkVIa2xZUHUvcWVnbC9C?= =?utf-8?B?QkRoVFplM211QzdZc1BKWDBHdTdFbG8xMEd3TWRnUVArNkd5MG9KZHhOQkVj?= =?utf-8?B?bVZha1dHU3VZM0JBSFhrWVlkdzhjUU51ZWdjd3hVWXBXWE1ocEQvdEJmMnl0?= =?utf-8?B?K295MXMzSFltazdhYi94K29WOEJVc1dMR0N6ZWthMk53elM3N3hEUFpZK2RE?= =?utf-8?B?R0k4aE1tMlFVTnUvWG83d29oNEN4K3doamw5RnMySWhvb1NEd2NrSmg3ZGNo?= =?utf-8?B?dk5MYTkvb29NcHJhdkI3UDZSL2k2bDJPOEVaZEtUNEc2WVlJYnRqb0k0SjE1?= =?utf-8?B?emhaNTBVbUk2Y0xwdmlKVlZ3UXVEZHltWGNESHZxVHpiK05Rbnp5RldiWmw1?= =?utf-8?B?c0hSY2t2ZjYwbzMwcDZGby9HVUtxMXpZbXJ4eGVLV0VSTEpsV2FrWnlacHZy?= =?utf-8?B?QWUzSnlNVEhDZnppVUczNWtkUlJXNU10MnR4dzAwRDVVQmF3ZGFSSUNiSGpQ?= =?utf-8?B?TnJVYklHVUs5QnpoMjlEZkhBWEkvZE15cWtmN2hZWm5hWGgwci9aVmZDa21E?= =?utf-8?B?R3ZuWmRPWWhqVEpvQ1lJME1Zck1nTDh1MWRSYStNZlpGMWswWHNVR1drTXIy?= =?utf-8?B?Y1FJSWNzUzJNdEFXNnVWN0dWa1Q3VnZPZmpnTWd2eHZFUEZLeEdSaTM2d0Fp?= =?utf-8?B?QlQ2UUNidm5WTTZ2VVRMRkRtZkk4am1iYjRhU1k2Z3ZEWGx2RXFmZjQwZkpx?= =?utf-8?B?Tmt2aHo1dlkva09UWUNpdzlXeTBHeVlGdmZPam00U1RiWHhYKzBpZ3BxSFd5?= =?utf-8?B?MnVXUW11ejRISy80cEUzcE51SlBEMU9NQTNZbW9mVXRTK25ZK01naU1xL251?= =?utf-8?B?VzlIMXFRT05KemR6VzZrakhacTZXU01qRjR3Y09NekVKbnpuYjRoQTZWN2V0?= =?utf-8?B?TWpnOXU0UVBGblY5NXloaVA5aW9BVzBWM1lWbmx6OFZRVTJPemF6dmgwc3px?= =?utf-8?B?MHF0RVdsOGxUL2hIRFgyUXhIcXRXTFJTZ0ZnUDZrd3pKcGF3MGtnY2dFVENm?= =?utf-8?B?YXRFQzN3eXZxdHVyMlFPUWFPN25JR05LMUJmOEQ3aEMzd3pPYVBxYjBqV2dF?= =?utf-8?B?ME9oc1YxTWxHcDFDQy9CQXJtNDdGVE9GMkFRVHozNzNBMUNmcjFtOGtTdW1a?= =?utf-8?B?N3pwMk5sdWVxeVliaWtwUm5aMS9UaVpHOWtMZzhlNWRaRUtMYkpTNjN0enVB?= =?utf-8?B?WHRyUDdsNW8xSFpGMy9jMmxoM1B5YVNxUlRDamQ5TEdTdnF3M2MwNVZ0R2pG?= =?utf-8?B?Y3FKMGV2TTRGbVNHeEw1azNxRWYyME8xaTFQaXpaYkc5MExJWUpqNVhXMjlF?= =?utf-8?B?VDVIVEd6aW9qRTB1VWgydzFLbzNscGM1SHRaMlJqWHJFMzgvbG1FOHVQR25R?= =?utf-8?B?M0xmSVBOUklHRlJtRjZYbVlZajdsaXBwTFY2ZHZRWE9JRFh5NUtkTUpkdi9S?= =?utf-8?B?d1g2aTZ6cm92NDBCd2JMOG5GV3hqdllta21taHNiclRta2N2RDBZZUJRMWZk?= =?utf-8?B?OHk1dW1USVZNRDdmL0VSQkpKV1RIcFBjM3Y0RitHbmdqYklpc1hFTkE2WlFG?= =?utf-8?B?ZVVFVHJuR3lCRXVhaitqUmFvSlpnZVJuaUxnZm54N1pUVHArbnZZanpEQWxu?= =?utf-8?B?azc1YmpzOEtkbklsMTN1TTRreS9mLzFqZ1VtYzIwZVgwS3dyUFpuQVN0NFhJ?= =?utf-8?B?aG5Gd3hHd01sZ3ZNdXRqZVdLdzY3SVFZMGg2K1Y5QkNuMTMzTmlCTUtDOVRZ?= =?utf-8?B?bmJNOCt3MWY1SVNhMDkwTG5HSTNGODdXWU5uV0RaK21vQm9Vbk5MVXJXdVNJ?= =?utf-8?B?cEE9PQ==?= X-OriginatorOrg: amlogic.com X-MS-Exchange-CrossTenant-Network-Message-Id: e5b4172e-79ec-4530-1837-08dd3498d128 X-MS-Exchange-CrossTenant-AuthSource: PUZPR03MB7135.apcprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Jan 2025 12:41:50.7004 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0df2add9-25ca-4b3a-acb4-c99ddf0b1114 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: rC64f7SNku7Jc+RSqW9tHVxcA29FdSHtQbktpihh0CVJ2EYHJfAF/YPoXnu3hy5KOj5JaWSENirF2n5MexFoB2ie80hVHPqZV1ASOp24eEk= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SI6PR03MB8707 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250114_044156_920727_5BA05E4B X-CRM114-Status: GOOD ( 28.60 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org 在 2025/1/14 19:29, Jerome Brunet 写道: > [ EXTERNAL EMAIL ] > > On Tue 14 Jan 2025 at 16:16, Jiebing Chen wrote: > >>>> +static const char * const s4_tdmout_sel_texts[] = { >>>> + "TDM_D0", "TDM_D1", "TDM_D2", "TDM_D3", "TDM_D4", "TDM_D5", "TDM_D6", "TDM_D7", >>>> + "TDM_D8", "TDM_D9", "TDM_D10", "TDM_D11", "TDM_D12", "TDM_D13", "TDM_D14", "TDM_D15", >>>> + "TDM_D16", "TDM_D17", "TDM_D18", "TDM_D19", "TDM_D20", "TDM_D21", "TDM_D22", "TDM_D23", >>>> + "TDM_D24", "TDM_D25", "TDM_D26", "TDM_D27", "TDM_D28", "TDM_D29", "TDM_D30", "TDM_D31" >>>> +}; >>> This thing does not belong in ASoC. This is clearly yet another layer of >>> pinctrl. Please deal with it there. >> Thanks for your suggestion, add audio pinctrl driver to control the which tdm_dx pin can map the which tdm lane_x >> for example >> tdm_d6_pin { >> mux { >> groups = "tdm_d6"; >> function = "tdmoutb_lane0"; >> }; >> } >> tdm_d6 pin map the tdmoutb lane 0, right ? > possibly > >>>> + >>>> +static const struct soc_enum tdmout_sel_enum = >>>> + SOC_ENUM_SINGLE(SND_SOC_NOPM, 0, ARRAY_SIZE(s4_tdmout_sel_texts), >>>> + s4_tdmout_sel_texts); >>>> + > [...] > >>>> diff --git a/sound/soc/meson/s4-tocodec-control.c b/sound/soc/meson/s4-tocodec-control.c >>>> new file mode 100644 >>>> index 0000000000000000000000000000000000000000..e5d824fae0eba545d38dc36e2566e7cee590e7f5 >>>> --- /dev/null >>>> +++ b/sound/soc/meson/s4-tocodec-control.c >>> There is already a to-acodec driver a not reason has been provided as to why a >>> completly new driver is required. >>> >>> Please have look at the existing driver and do try to use it. >>> If you need to do things so differently, clear justification are necessary. >> for g12a-toacodec.c, we find the tocodec clock source can't get the clock >> id from the tdm Be device, > This is clearly documented limitation of the current to-acodec driver: > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/sound/soc/meson/g12a-toacodec.c?h=v6.13-rc7#n91 > > While it is a limitation, it is a manageable one considering the amount > of master clocks available and the fact the master should be manually > assinged to the output pad, which you did not do. > > See the u200: > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/arm64/boot/dts/amlogic/meson-g12a-u200.dts?h=v6.13-rc7#n569 > > You are more than welcome to help fix this limitation in the current > driver but just adding a fork is not OK > > I would suggest to start with what is currently available and move on to > fixing this as a 2nd step, if you want to. > >> and set it by the kcontrol from user, For different soc chips, The >> kcontrol value maybe different, The kcontrol configuration doesn't look >> very friendly for user >> >> so we use dapm route path to manage it, >> fe(fddr)->be(tdm)->(tocodec)->(codec), and use the aux-devs to register, >> and sound card only include the >> >> sound-dai = <&tdmif_a> >> >> codec-0 { >> sound-dai = <&acodec>; >> }; >> >> and not include >> >> codec-1 { >> sound-dai = <&toacodec>; >> }; >> >> when tdm work, only connect the tocodec path >> >> "TDM_A Playback" ->"TOACODEC TDMA"->"TOACODEC INPUT SRC" >> >> iterate it find the be device ,and get the struct axg_tdm_stream, so we can >> get the tdm clock id >> >> Take into account behavioral differences, we add new tocodec driver >> for s4 > Still not seeing sufficient reason to make another driver. it is a good idea, i will add the change for s4 base on g12a-toacodec.c > >>>> @@ -0,0 +1,376 @@ >>>> +// SPDX-License-Identifier: (GPL-2.0-only OR MIT) >>>> +/* >>>> + * Copyright (C) 2023 Amlogic, Inc. All rights reserved >>>> + */ >>>> + >>>> +#include >>>> +#include >>>> +#include >>>> +#include >>>> +#include >>>> +#include >>>> +#include >>>> +#include >>>> +#include >>>> +#include >>>> +#include "axg-tdm.h" >>>> + >>>> +#define TOACODEC_CTRL0 0x0 >>>> + >>>> +#define CTRL0_ENABLE_SHIFT 31 >>>> +#define CTRL0_BCLK_ENABLE_SHIFT 30 >>>> +#define CTRL0_MCLK_ENABLE_SHIFT 29 >>>> +#define CTRL0_BLK_CAP_INV_SHIFT 9 >>>> + >>>> +#define TDM_IFACE 0 >>>> +#define TDM_A_PAD 0 >>>> +#define TDM_B_PAD 1 >>>> +#define TDM_C_PAD 2 >>>> + >>>> +struct toacodec { >>>> + struct regmap_field *field_dat_sel; >>>> + struct regmap_field *field_lrclk_sel; >>>> + struct regmap_field *field_bclk_sel; >>>> + struct regmap_field *field_mclk_sel; >>>> +}; >>>> + >>>> +struct toacodec_match_data { >>>> + const struct snd_soc_component_driver *component_drv; >>>> + const struct reg_field field_dat_sel; >>>> + const struct reg_field field_lrclk_sel; >>>> + const struct reg_field field_bclk_sel; >>>> + const struct reg_field field_mclk_sel; >>>> +}; >>>> + >>>> +static const struct regmap_config tocodec_regmap_cfg = { >>>> + .reg_bits = 32, >>>> + .val_bits = 32, >>>> + .reg_stride = 4, >>>> + .max_register = 0x1, >>>> +}; >>>> + >>>> +#define S4_LANE_OFFSET 8 >>>> + >>>> +static const char * const s4_tocodec_lane_sel_texts[] = { >>>> + "Lane0", "Lane1", "Lane2", "Lane3", "Lane4", "Lane5", "Lane6", "Lane7" >>>> +}; >>>> + >>>> +static const struct soc_enum s4_tocodec_lane_sel_enum = >>>> + SOC_ENUM_SINGLE(SND_SOC_NOPM, 0, ARRAY_SIZE(s4_tocodec_lane_sel_texts), >>>> + s4_tocodec_lane_sel_texts); >>>> + >>>> +static const struct snd_kcontrol_new s4_tocodec_lane_sel = >>>> + SOC_DAPM_ENUM("TOCODEC LANE SEL", s4_tocodec_lane_sel_enum); >>>> + >>>> +static const char * const s4_tocodec_src_sel_texts[] = { >>>> + "TDMA", "TDMB", "TDMC" >>>> +}; >>>> + >>>> +static const struct soc_enum s4_tocodec_src_sel_enum = >>>> + SOC_ENUM_SINGLE(SND_SOC_NOPM, 0, ARRAY_SIZE(s4_tocodec_src_sel_texts), >>>> + s4_tocodec_src_sel_texts); >>>> + >>>> +static const struct snd_kcontrol_new s4_tocodec_src_sel = >>>> + SOC_DAPM_ENUM("TOCODEC SEL", s4_tocodec_src_sel_enum); >>>> + >>>> +static const struct snd_kcontrol_new s4_toacodec_out_enable = >>>> + SOC_DAPM_SINGLE_AUTODISABLE("Switch", TOACODEC_CTRL0, >>>> + CTRL0_ENABLE_SHIFT, 1, 0); >>>> + >>>> +static struct snd_soc_dai *tocodec_tdm_get_ahead_be(struct snd_soc_dapm_widget *w) >>>> +{ >>>> + struct snd_soc_dapm_path *p; >>>> + struct snd_soc_dai *be; >>>> + >>>> + snd_soc_dapm_widget_for_each_source_path(w, p) { >>>> + if (!p->connect) >>>> + continue; >>>> + if (p->source->id == snd_soc_dapm_dai_in) >>>> + return (struct snd_soc_dai *)p->source->priv; >>>> + be = tocodec_tdm_get_ahead_be(p->source); >>>> + if (be && be->id == TDM_IFACE) >>>> + return be; >>>> + } >>>> + return NULL; >>>> +} >>>> + >>>> +static unsigned int aml_simple_strtoull(const char *cp) >>>> +{ >>>> + unsigned int result = 0; >>>> + unsigned int value = 0; >>>> + unsigned int len = strlen(cp); >>>> + >>>> + while (len != 0) { >>>> + len--; >>>> + value = isdigit(*cp); >>>> + if (value) { >>>> + value = *cp - '0'; >>>> + } else { >>>> + cp++; >>>> + continue; >>>> + } >>>> + cp++; >>>> + result = result * 10 + value; >>>> + } >>>> + return result; >>>> +} >>>> + >>>> +static int aml_get_clk_id(const char *name) >>>> +{ >>>> + int clk_id = 0; >>>> + >>>> + if (strstr(name, "mst_a")) >>>> + clk_id = 0; >>>> + else if (strstr(name, "mst_b")) >>>> + clk_id = 1; >>>> + else if (strstr(name, "mst_c")) >>>> + clk_id = 2; >>>> + else if (strstr(name, "mst_d")) >>>> + clk_id = 3; >>>> + else if (strstr(name, "mst_e")) >>>> + clk_id = 4; >>>> + else if (strstr(name, "mst_f")) >>>> + clk_id = 5; >>>> + >>>> + return clk_id; >>>> +} >>>> + >>>> +static int aml_tocodec_sel_set(struct snd_soc_dapm_widget *w) >>>> +{ >>>> + struct snd_soc_dai *be; >>>> + struct axg_tdm_stream *stream; >>>> + struct axg_tdm_iface *iface; >>>> + struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); >>>> + struct toacodec *priv = snd_soc_component_get_drvdata(component); >>>> + unsigned int tdm_id = TDM_A_PAD; >>>> + const char *dai_widget_name; >>>> + struct snd_soc_dapm_path *p; >>>> + unsigned int lane = 0; >>>> + unsigned int val = 0; >>>> + struct clk *sclk, *mclk; >>>> + char *clk_name; >>>> + int mclk_id, sclk_id; >>>> + >>>> + be = tocodec_tdm_get_ahead_be(w); >>>> + if (!be) { >>>> + dev_err(component->dev, "%s not find the be\n", __func__); >>>> + return -EINVAL; >>>> + } >>>> + stream = snd_soc_dai_dma_data_get_playback(be); >>>> + if (!stream) { >>>> + dev_err(component->dev, "%s not find the stream\n", __func__); >>>> + return -EINVAL; >>>> + } >>>> + /*we like to use dai id, but it is fixed val*/ >>>> + dai_widget_name = be->stream[SNDRV_PCM_STREAM_PLAYBACK].widget->name; >>>> + if (strstr(dai_widget_name, "TDM_A")) >>>> + tdm_id = TDM_A_PAD; >>>> + else if (strstr(dai_widget_name, "TDM_B")) >>>> + tdm_id = TDM_B_PAD; >>>> + else if (strstr(dai_widget_name, "TDM_C")) >>>> + tdm_id = TDM_C_PAD; >>>> + snd_soc_dapm_widget_for_each_source_path(w, p) { >>>> + if (p->connect && p->name) { >>>> + lane = aml_simple_strtoull(p->name); >>>> + val = lane + tdm_id * S4_LANE_OFFSET; >>>> + regmap_field_write(priv->field_dat_sel, val); >>>> + } >>>> + } >>>> + iface = stream->iface; >>>> + mclk = iface->mclk; >>>> + sclk = iface->sclk; >>>> + mclk_id = aml_get_clk_id(__clk_get_name(mclk)); >>>> + sclk_id = aml_get_clk_id(__clk_get_name(sclk)); >>>> + regmap_field_write(priv->field_mclk_sel, mclk_id); >>>> + regmap_field_write(priv->field_bclk_sel, sclk_id); >>>> + regmap_field_write(priv->field_lrclk_sel, sclk_id); >>>> + >>>> + return 0; >>>> +} >>>> + >>>> +static int tocodec_sel_event(struct snd_soc_dapm_widget *w, >>>> + struct snd_kcontrol *control, >>>> + int event) >>>> +{ >>>> + struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); >>>> + int ret = 0; >>>> + >>>> + switch (event) { >>>> + case SND_SOC_DAPM_PRE_PMU: >>>> + ret = aml_tocodec_sel_set(w); >>>> + break; >>>> + >>>> + case SND_SOC_DAPM_PRE_PMD: >>>> + break; >>>> + >>>> + default: >>>> + dev_err(component->dev, "Unexpected event %d\n", event); >>>> + return -EINVAL; >>>> + } >>>> + >>>> + return ret; >>>> +} >>>> + >>>> +static int tocodec_clk_enable(struct snd_soc_dapm_widget *w, >>>> + struct snd_kcontrol *control, >>>> + int event) >>>> +{ >>>> + int ret = 0; >>>> + unsigned int mask = 0, val = 0; >>>> + struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); >>>> + >>>> + snd_soc_component_update_bits(component, TOACODEC_CTRL0, >>>> + 1 << CTRL0_BLK_CAP_INV_SHIFT, 1 << CTRL0_BLK_CAP_INV_SHIFT); >>>> + switch (event) { >>>> + case SND_SOC_DAPM_PRE_PMU: >>>> + mask = 1 << CTRL0_MCLK_ENABLE_SHIFT | 1 << CTRL0_BCLK_ENABLE_SHIFT; >>>> + val = 1 << CTRL0_MCLK_ENABLE_SHIFT | 1 << CTRL0_BCLK_ENABLE_SHIFT; >>>> + snd_soc_component_update_bits(component, TOACODEC_CTRL0, mask, val); >>>> + break; >>>> + case SND_SOC_DAPM_PRE_PMD: >>>> + mask = 1 << CTRL0_MCLK_ENABLE_SHIFT | 1 << CTRL0_BCLK_ENABLE_SHIFT; >>>> + val = 0 << CTRL0_MCLK_ENABLE_SHIFT | 0 << CTRL0_BCLK_ENABLE_SHIFT; >>>> + snd_soc_component_update_bits(component, TOACODEC_CTRL0, mask, val); >>>> + break; >>>> + default: >>>> + dev_err(component->dev, "Unexpected event %d\n", event); >>>> + return -EINVAL; >>>> + } >>>> + >>>> + return ret; >>>> +} >>>> + >>>> +static const struct snd_soc_dapm_widget s4_toacodec_widgets[] = { >>>> + SND_SOC_DAPM_MUX_E("Lane SRC", SND_SOC_NOPM, 0, 0, >>>> + &s4_tocodec_lane_sel, tocodec_sel_event, >>>> + (SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_PRE_PMD)), >>>> + SND_SOC_DAPM_MUX("INPUT SRC", SND_SOC_NOPM, 0, 0, &s4_tocodec_src_sel), >>>> + SND_SOC_DAPM_SWITCH_E("OUT EN", SND_SOC_NOPM, 0, 0, >>>> + &s4_toacodec_out_enable, tocodec_clk_enable, >>>> + (SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_PRE_PMD)), >>>> + SND_SOC_DAPM_AIF_IN("TDMA", NULL, 0, SND_SOC_NOPM, 0, 0), >>>> + SND_SOC_DAPM_AIF_IN("TDMB", NULL, 0, SND_SOC_NOPM, 0, 0), >>>> + SND_SOC_DAPM_AIF_IN("TDMC", NULL, 0, SND_SOC_NOPM, 0, 0), >>>> + SND_SOC_DAPM_OUT_DRV("Lane0", SND_SOC_NOPM, 0, 0, NULL, 0), >>>> + SND_SOC_DAPM_OUT_DRV("Lane1", SND_SOC_NOPM, 0, 0, NULL, 0), >>>> + SND_SOC_DAPM_OUT_DRV("Lane2", SND_SOC_NOPM, 0, 0, NULL, 0), >>>> + SND_SOC_DAPM_OUT_DRV("Lane3", SND_SOC_NOPM, 0, 0, NULL, 0), >>>> + SND_SOC_DAPM_OUT_DRV("Lane4", SND_SOC_NOPM, 0, 0, NULL, 0), >>>> + SND_SOC_DAPM_OUT_DRV("Lane5", SND_SOC_NOPM, 0, 0, NULL, 0), >>>> + SND_SOC_DAPM_OUT_DRV("Lane6", SND_SOC_NOPM, 0, 0, NULL, 0), >>>> + SND_SOC_DAPM_OUT_DRV("Lane7", SND_SOC_NOPM, 0, 0, NULL, 0), >>>> + SND_SOC_DAPM_OUTPUT("TDM_TO_ACODEC"), >>>> +}; >>>> + >>>> +static const struct snd_soc_dapm_route s4_tocodec_dapm_routes[] = { >>>> + { "INPUT SRC", "TDMA", "TDMA"}, >>>> + { "INPUT SRC", "TDMB", "TDMB"}, >>>> + { "INPUT SRC", "TDMC", "TDMC"}, >>>> + { "Lane0", NULL, "INPUT SRC" }, >>>> + { "Lane1", NULL, "INPUT SRC"}, >>>> + { "Lane2", NULL, "INPUT SRC"}, >>>> + { "Lane3", NULL, "INPUT SRC"}, >>>> + { "Lane4", NULL, "INPUT SRC"}, >>>> + { "Lane5", NULL, "INPUT SRC"}, >>>> + { "Lane6", NULL, "INPUT SRC"}, >>>> + { "Lane7", NULL, "INPUT SRC"}, >>>> + { "Lane SRC", "Lane0", "Lane0"}, >>>> + { "Lane SRC", "Lane1", "Lane1"}, >>>> + { "Lane SRC", "Lane2", "Lane2"}, >>>> + { "Lane SRC", "Lane3", "Lane3"}, >>>> + { "Lane SRC", "Lane4", "Lane4"}, >>>> + { "Lane SRC", "Lane5", "Lane5"}, >>>> + { "Lane SRC", "Lane6", "Lane6"}, >>>> + { "Lane SRC", "Lane7", "Lane7"}, >>>> + { "OUT EN", "Switch", "Lane SRC"}, >>>> + { "TDM_TO_ACODEC", NULL, "OUT EN"}, >>>> + >>>> +}; >>>> + >>>> +static const struct snd_soc_component_driver s4_tocodec_component_drv = { >>>> + .dapm_widgets = s4_toacodec_widgets, >>>> + .num_dapm_widgets = ARRAY_SIZE(s4_toacodec_widgets), >>>> + .dapm_routes = s4_tocodec_dapm_routes, >>>> + .num_dapm_routes = ARRAY_SIZE(s4_tocodec_dapm_routes), >>>> +}; >>>> + >>>> +static const struct toacodec_match_data s4_toacodec_match_data = { >>>> + .component_drv = &s4_tocodec_component_drv, >>>> + .field_dat_sel = REG_FIELD(TOACODEC_CTRL0, 16, 20), >>>> + .field_lrclk_sel = REG_FIELD(TOACODEC_CTRL0, 12, 14), >>>> + .field_bclk_sel = REG_FIELD(TOACODEC_CTRL0, 4, 6), >>>> + .field_mclk_sel = REG_FIELD(TOACODEC_CTRL0, 0, 2), >>>> +}; >>>> + >>>> +static const struct of_device_id s4_tocodec_of_match[] = { >>>> + { >>>> + .compatible = "amlogic,s4-tocodec", >>>> + .data = &s4_toacodec_match_data, >>>> + }, {} >>>> +}; >>>> + >>>> +MODULE_DEVICE_TABLE(of, s4_tocodec_of_match); >>>> + >>>> +static int tocodec_probe(struct platform_device *pdev) >>>> +{ >>>> + const struct toacodec_match_data *data; >>>> + struct device *dev = &pdev->dev; >>>> + struct toacodec *priv; >>>> + void __iomem *regs; >>>> + struct regmap *map; >>>> + int ret; >>>> + >>>> + data = device_get_match_data(dev); >>>> + if (!data) >>>> + return dev_err_probe(dev, -ENODEV, "failed to match device\n"); >>>> + priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); >>>> + if (!priv) >>>> + return -ENOMEM; >>>> + >>>> + platform_set_drvdata(pdev, priv); >>>> + >>>> + ret = device_reset(dev); >>>> + if (ret) >>>> + return ret; >>>> + >>>> + regs = devm_platform_ioremap_resource(pdev, 0); >>>> + if (IS_ERR(regs)) >>>> + return PTR_ERR(regs); >>>> + >>>> + map = devm_regmap_init_mmio(dev, regs, &tocodec_regmap_cfg); >>>> + if (IS_ERR(map)) >>>> + return dev_err_probe(dev, PTR_ERR(map), "failed to init regmap\n"); >>>> + >>>> + priv->field_dat_sel = devm_regmap_field_alloc(dev, map, data->field_dat_sel); >>>> + if (IS_ERR(priv->field_dat_sel)) >>>> + return PTR_ERR(priv->field_dat_sel); >>>> + >>>> + priv->field_lrclk_sel = devm_regmap_field_alloc(dev, map, data->field_lrclk_sel); >>>> + if (IS_ERR(priv->field_lrclk_sel)) >>>> + return PTR_ERR(priv->field_lrclk_sel); >>>> + >>>> + priv->field_bclk_sel = devm_regmap_field_alloc(dev, map, data->field_bclk_sel); >>>> + if (IS_ERR(priv->field_bclk_sel)) >>>> + return PTR_ERR(priv->field_bclk_sel); >>>> + >>>> + priv->field_mclk_sel = devm_regmap_field_alloc(dev, map, data->field_mclk_sel); >>>> + if (IS_ERR(priv->field_mclk_sel)) >>>> + return PTR_ERR(priv->field_mclk_sel); >>>> + >>>> + return devm_snd_soc_register_component(dev, >>>> + data->component_drv, NULL, 0); >>>> +} >>>> + >>>> +static struct platform_driver tocodec_pdrv = { >>>> + .probe = tocodec_probe, >>>> + .driver = { >>>> + .name = "s4-tocodec", >>>> + .of_match_table = s4_tocodec_of_match, >>>> + }, >>>> +}; >>>> + >>>> +module_platform_driver(tocodec_pdrv); >>>> + >>>> +MODULE_DESCRIPTION("Amlogic to codec driver"); >>>> +MODULE_AUTHOR("jiebing.chen@amlogic.com"); >>>> +MODULE_LICENSE("GPL"); >>>> diff --git a/sound/soc/meson/t9015.c b/sound/soc/meson/t9015.c >>>> index 571f65788c592050abdca264f5656d4d1a9d99f6..2db1cd18cf2cea507f3d7282054e03d953586648 100644 >>>> --- a/sound/soc/meson/t9015.c >>>> +++ b/sound/soc/meson/t9015.c >>>> @@ -89,10 +89,7 @@ static struct snd_soc_dai_driver t9015_dai = { >>>> .channels_min = 1, >>>> .channels_max = 2, >>>> .rates = SNDRV_PCM_RATE_8000_96000, >>>> - .formats = (SNDRV_PCM_FMTBIT_S8 | >>>> - SNDRV_PCM_FMTBIT_S16_LE | >>>> - SNDRV_PCM_FMTBIT_S20_LE | >>>> - SNDRV_PCM_FMTBIT_S24_LE), >>>> + .formats = (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S32_LE), >>> Again, mixed up changes with zero justification. >>> >>> This drops S8 and S16 format support for the existing SoCs (such as GXL) >>> which is known to work and add S32 support on an HW documented as 24bits >>> only. Can you explain ? >>> >>>> }, >>>> .ops = &t9015_dai_ops, >>>> }; >>> -- >>> Jerome > -- > Jerome