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 55F36E77188 for ; Tue, 14 Jan 2025 11:29:46 +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-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Message-ID:Date:References :In-Reply-To:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=f64dj5K4qRDYVLDzKO8QFYZp8ltb2qfH+BlAehiZxmI=; b=aPsD4q7RTHmGzQ t1TFAwKUwaeSTQLBVsnxQ33haxvg1Y8pmymXxcL2hyEYRIr92P1HJo+HbQaGqoZF0YMU3eX7ld1fy wfhel19fJb7CY4V99ayK38xBfKBuTAUR2Xb/B5conUrUpd5aXgGyDY8PoHOvClY6YNNk+uoKyF42F pcgKPH1MSeqqw0qDBvksVJNYANAwyIOdWNvzDL2DacWqGAjpCvMA6Lr+PWC0BfDqMRnXDn8oY0192 jW7jK8Pxuwz8Cj1aNUKIJe5ryfmqQudUNiFnDtuSQXye/i+OsxmU2akEJM3vSyMBj3h0gd9OfoNBu tCmBNXJZo/csvQ+tMMPQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tXf78-00000008FgO-0Jc2; Tue, 14 Jan 2025 11:29:42 +0000 Received: from mail-wr1-x42f.google.com ([2a00:1450:4864:20::42f]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tXf75-00000008FfX-0bgU for linux-amlogic@lists.infradead.org; Tue, 14 Jan 2025 11:29:41 +0000 Received: by mail-wr1-x42f.google.com with SMTP id ffacd0b85a97d-38be3bfb045so215343f8f.0 for ; Tue, 14 Jan 2025 03:29:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1736854177; x=1737458977; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:message-id:date:user-agent :references:in-reply-to:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=20Yjc/n2Ib6F5lS80pWb9OKE5xBeEql4XyvGsNk67XY=; b=woZ5vT4Ej3Evio+hMmEVyuwrPIahMW+LToSNml/z8NsLuSwc1NY8rWXgAyN44psyco hv5adOSeZV04YJR7Q1eOnzMG6ToacScaxJPpHga8c0bbkDd6Y8XLT7q/luoXs8qpn+7F rt2+zW718aAzRoHzNcfQFakLPLftnmqZS/U77kijfUvKN8kA0EoPUbLwW/mW5X2Ki+yb SG4rPbvylvU59G9VQTMnMHrb15PsBz6FLqRX69lMEVeNnmjCuDQXozBXKnLV7VlXHhsN z9bzPjg02LJDeIDhFiZiv+4SchzGRtYfnRS5MjWZaZnCgPRC2mj26MAhJo+d/8iofQ9X lNVw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736854177; x=1737458977; h=content-transfer-encoding:mime-version:message-id:date:user-agent :references:in-reply-to:subject:cc:to:from:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=20Yjc/n2Ib6F5lS80pWb9OKE5xBeEql4XyvGsNk67XY=; b=S9QvxLyHgcVViplnji+tVZ8j0n/6b8ahz+5UAKwcjWLFF+AfrW0jihnUTedRyi0hsJ bqBv9CkUJ6N0Ph0IOIH+zYhvQ12WIPojtftrWSIexlNT+61evHoGlv+5ai0e1Uy4j8WA N0S4TvLztIfK9dpt5exDGBzMmIt2G0iGOfKfbRFG/zCrtlENoofeXvwdnUPo58YWR0Ez rt99CIgR/g4N4VKJ1QhWcs6/UNW9VPteQKsqiaYG2zOAeIiA/QeYURAa8rxuDcSpakAg Iuv2/d9BjRb2msQEzImPaRCLqVpkf0QTRFr1Fo0BPpUlLubYOKQ4l/tWdiP67/2MBjge K4Bg== X-Forwarded-Encrypted: i=1; AJvYcCXcoguGniaal0La6ZwAYEZUNQIaSc6kwTOT4/p4n8f5OsoIDK/9oz/rXrtlpJHRtrS+zqSwXWpbEa33zK9+@lists.infradead.org X-Gm-Message-State: AOJu0Yy70vwc6B2T3w+w24lFrPFK70lfaGArz1ltQQ7TlUYPSCUMl9m9 pXITMBrgDHyVYV9b0fMG375mYbSZjfsckqaF0A6N9pGPaTI+9NatbPaFY4ydnBM= X-Gm-Gg: ASbGncu9USB3WpYvWVrfkkuM1beRjWaaWFJZ5PJ62t3H3ODWiwJMYyoEw0LZ6n6YPTn TUx1maptJbY/XISQ/rOcgJzHasX6vtDsHwvf3odIzoXSpWOJ7dI0bS5MQO3wJ+LVwx7KU/qDerK zGu07CdAyr2VbMAvrylcSt8dUfPEucqCXblH7uX52x59xLJdpxl74orxYZRPzF6Xa2BFcXPxG+M wvo3czG3UtHVqMjV8JaZSCbPFxsseFcMyXi8gRgWXNsmELsa2xms89v X-Google-Smtp-Source: AGHT+IF7o6knngh+kGBhBymoYYO++0k0fEzVPFzyBMQqlFUvEiupbcgJ6G8Oi1ILWV70iXAFlgrJbg== X-Received: by 2002:a05:6000:4011:b0:386:3d27:b4f0 with SMTP id ffacd0b85a97d-38a8b0d324bmr17534737f8f.14.1736854177449; Tue, 14 Jan 2025 03:29:37 -0800 (PST) Received: from localhost ([2a01:e0a:3c5:5fb1:317c:3d93:b7d4:96cd]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-38a8e4b8116sm14469928f8f.79.2025.01.14.03.29.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Jan 2025 03:29:36 -0800 (PST) From: Jerome Brunet To: Jiebing Chen 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 Subject: Re: [PATCH 2/3] ASoC: meson: s4:support for the on-chip audio In-Reply-To: (Jiebing Chen's message of "Tue, 14 Jan 2025 16:16:39 +0800") References: <20250113-audio_drvier-v1-0-8c14770f38a0@amlogic.com> <20250113-audio_drvier-v1-2-8c14770f38a0@amlogic.com> <1jwmey9451.fsf@starbuckisacylon.baylibre.com> User-Agent: mu4e 1.12.7; emacs 29.4 Date: Tue, 14 Jan 2025 12:29:36 +0100 Message-ID: <1jh6617hwf.fsf@starbuckisacylon.baylibre.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250114_032939_190380_65212DEC X-CRM114-Status: GOOD ( 32.39 ) 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-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-amlogic" Errors-To: linux-amlogic-bounces+linux-amlogic=archiver.kernel.org@lists.infradead.org T24gVHVlIDE0IEphbiAyMDI1IGF0IDE2OjE2LCBKaWViaW5nIENoZW4gPGppZWJpbmcuY2hlbkBh bWxvZ2ljLmNvbT4gd3JvdGU6Cgo+Pj4gK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgczRfdGRt b3V0X3NlbF90ZXh0c1tdID0gewo+Pj4gKyAgICAgIlRETV9EMCIsICJURE1fRDEiLCAiVERNX0Qy IiwgIlRETV9EMyIsICJURE1fRDQiLCAiVERNX0Q1IiwgIlRETV9ENiIsICJURE1fRDciLAo+Pj4g KyAgICAgIlRETV9EOCIsICJURE1fRDkiLCAiVERNX0QxMCIsICJURE1fRDExIiwgIlRETV9EMTIi LCAiVERNX0QxMyIsICJURE1fRDE0IiwgIlRETV9EMTUiLAo+Pj4gKyAgICAgIlRETV9EMTYiLCAi VERNX0QxNyIsICJURE1fRDE4IiwgIlRETV9EMTkiLCAiVERNX0QyMCIsICJURE1fRDIxIiwgIlRE TV9EMjIiLCAiVERNX0QyMyIsCj4+PiArICAgICAiVERNX0QyNCIsICJURE1fRDI1IiwgIlRETV9E MjYiLCAiVERNX0QyNyIsICJURE1fRDI4IiwgIlRETV9EMjkiLCAiVERNX0QzMCIsICJURE1fRDMx Igo+Pj4gK307Cj4+IFRoaXMgdGhpbmcgZG9lcyBub3QgYmVsb25nIGluIEFTb0MuIFRoaXMgaXMg Y2xlYXJseSB5ZXQgYW5vdGhlciBsYXllciBvZgo+PiBwaW5jdHJsLiBQbGVhc2UgZGVhbCB3aXRo IGl0IHRoZXJlLgo+Cj4gVGhhbmtzIGZvciB5b3VyIHN1Z2dlc3Rpb24sIGFkZCBhdWRpbyBwaW5j dHJsIGRyaXZlciB0byBjb250cm9sIHRoZSB3aGljaCB0ZG1fZHggcGluIGNhbiBtYXAgdGhlIHdo aWNoIHRkbSBsYW5lX3gKPiBmb3IgZXhhbXBsZQo+IAl0ZG1fZDZfcGluIHsKPiAJCW11eCB7Cj4g CQkJZ3JvdXBzID0gInRkbV9kNiI7Cj4gCQkJZnVuY3Rpb24gPSAidGRtb3V0Yl9sYW5lMCI7Cj4g CQl9Owo+IAl9Cj4gdGRtX2Q2IHBpbiBtYXAgdGhlIHRkbW91dGIgbGFuZSAwLCByaWdodCA/Cgpw b3NzaWJseQoKPgo+Pj4gKwo+Pj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gdGRtb3V0 X3NlbF9lbnVtID0KPj4+ICsgICAgIFNPQ19FTlVNX1NJTkdMRShTTkRfU09DX05PUE0sIDAsIEFS UkFZX1NJWkUoczRfdGRtb3V0X3NlbF90ZXh0cyksCj4+PiArICAgICAgICAgICAgICAgICAgICAg czRfdGRtb3V0X3NlbF90ZXh0cyk7Cj4+PiArCgpbLi4uXQoKPj4+IGRpZmYgLS1naXQgYS9zb3Vu ZC9zb2MvbWVzb24vczQtdG9jb2RlYy1jb250cm9sLmMgYi9zb3VuZC9zb2MvbWVzb24vczQtdG9j b2RlYy1jb250cm9sLmMKPj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+PiBpbmRleCAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNWQ4MjRmYWUwZWJhNTQ1ZDM4ZGMz NmUyNTY2ZTdjZWU1OTBlN2Y1Cj4+PiAtLS0gL2Rldi9udWxsCj4+PiArKysgYi9zb3VuZC9zb2Mv bWVzb24vczQtdG9jb2RlYy1jb250cm9sLmMKPj4gVGhlcmUgaXMgYWxyZWFkeSBhIHRvLWFjb2Rl YyBkcml2ZXIgYSBub3QgcmVhc29uIGhhcyBiZWVuIHByb3ZpZGVkIGFzIHRvIHdoeSBhCj4+IGNv bXBsZXRseSBuZXcgZHJpdmVyIGlzIHJlcXVpcmVkLgo+Pgo+PiBQbGVhc2UgaGF2ZSBsb29rIGF0 IHRoZSBleGlzdGluZyBkcml2ZXIgYW5kIGRvIHRyeSB0byB1c2UgaXQuCj4+IElmIHlvdSBuZWVk IHRvIGRvIHRoaW5ncyBzbyBkaWZmZXJlbnRseSwgY2xlYXIganVzdGlmaWNhdGlvbiBhcmUgbmVj ZXNzYXJ5Lgo+Cj4gZm9yIGcxMmEtdG9hY29kZWMuYywgd2UgZmluZCB0aGUgdG9jb2RlYyBjbG9j ayBzb3VyY2UgY2FuJ3QgZ2V0IHRoZcKgY2xvY2sKPiBpZCBmcm9tIHRoZSB0ZG0gQmUgZGV2aWNl LAoKVGhpcyBpcyBjbGVhcmx5IGRvY3VtZW50ZWQgbGltaXRhdGlvbiBvZiB0aGUgY3VycmVudCB0 by1hY29kZWMgZHJpdmVyOgpodHRwczovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2Vy bmVsL2dpdC90b3J2YWxkcy9saW51eC5naXQvdHJlZS9zb3VuZC9zb2MvbWVzb24vZzEyYS10b2Fj b2RlYy5jP2g9djYuMTMtcmM3I245MQoKV2hpbGUgaXQgaXMgYSBsaW1pdGF0aW9uLCBpdCBpcyBh IG1hbmFnZWFibGUgb25lIGNvbnNpZGVyaW5nIHRoZSBhbW91bnQKb2YgbWFzdGVyIGNsb2NrcyBh dmFpbGFibGUgYW5kIHRoZSBmYWN0IHRoZSBtYXN0ZXIgc2hvdWxkIGJlIG1hbnVhbGx5CmFzc2lu Z2VkIHRvIHRoZSBvdXRwdXQgcGFkLCB3aGljaCB5b3UgZGlkIG5vdCBkby4KClNlZSB0aGUgdTIw MDoKaHR0cHM6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvdG9ydmFs ZHMvbGludXguZ2l0L3RyZWUvYXJjaC9hcm02NC9ib290L2R0cy9hbWxvZ2ljL21lc29uLWcxMmEt dTIwMC5kdHM/aD12Ni4xMy1yYzcjbjU2OQoKWW91IGFyZSBtb3JlIHRoYW4gd2VsY29tZSB0byBo ZWxwIGZpeCB0aGlzIGxpbWl0YXRpb24gaW4gdGhlIGN1cnJlbnQKZHJpdmVyIGJ1dCBqdXN0IGFk ZGluZyBhIGZvcmsgaXMgbm90IE9LCgpJIHdvdWxkIHN1Z2dlc3QgdG8gc3RhcnQgd2l0aCB3aGF0 IGlzIGN1cnJlbnRseSBhdmFpbGFibGUgYW5kIG1vdmUgb24gdG8KZml4aW5nIHRoaXMgYXMgYSAy bmQgc3RlcCwgaWYgeW91IHdhbnQgdG8uCgo+Cj4gYW5kIHNldCBpdCBieSB0aGUga2NvbnRyb2wg ZnJvbSB1c2VyLMKgIEZvciBkaWZmZXJlbnQgc29jIGNoaXBzLCBUaGUKPiBrY29udHJvbCB2YWx1 ZSBtYXliZSBkaWZmZXJlbnQsIFRoZSBrY29udHJvbCBjb25maWd1cmF0aW9uIGRvZXNuJ3QgbG9v awo+IHZlcnkgZnJpZW5kbHkgZm9yIHVzZXIKPgo+IHNvIHdlIHVzZSBkYXBtIHJvdXRlIHBhdGgg dG8gbWFuYWdlIGl0LAo+IGZlKGZkZHIpLT5iZSh0ZG0pLT4odG9jb2RlYyktPihjb2RlYykswqAg YW5kIHVzZSB0aGUgYXV4LWRldnMgdG8gcmVnaXN0ZXIswqAKPiBhbmQgc291bmQgY2FyZCBvbmx5 IGluY2x1ZGUgdGhlCj4KPiBzb3VuZC1kYWkgPSA8JnRkbWlmX2E+Cj4KPiBjb2RlYy0wIHsKPiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc291bmQtZGFpID0gPCZhY29kZWM+Owo+IMKg fTsKPgo+IGFuZCBub3QgaW5jbHVkZQo+Cj4gY29kZWMtMSB7Cj4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHNvdW5kLWRhaSA9IDwmdG9hY29kZWM+Owo+IMKgfTsKPgo+IHdoZW4gdGRt IHdvcmssIG9ubHkgY29ubmVjdCB0aGUgdG9jb2RlYyBwYXRoCj4KPiDCoCJURE1fQSBQbGF5YmFj ayIgLT4iVE9BQ09ERUMgVERNQSItPiJUT0FDT0RFQyBJTlBVVCBTUkMiCj4KPiBpdGVyYXRlIGl0 IGZpbmQgdGhlIGJlIGRldmljZSAsYW5kIGdldCB0aGUgc3RydWN0IGF4Z190ZG1fc3RyZWFtLCBz byB3ZSBjYW4KPiBnZXQgdGhlIHRkbSBjbG9jayBpZAo+Cj4gVGFrZSBpbnRvIGFjY291bnQgYmVo YXZpb3JhbCBkaWZmZXJlbmNlcywgd2UgYWRkIG5ldyB0b2NvZGVjIGRyaXZlcgo+IGZvciBzNAoK U3RpbGwgbm90IHNlZWluZyBzdWZmaWNpZW50IHJlYXNvbiB0byBtYWtlIGFub3RoZXIgZHJpdmVy LgoKPgo+Pj4gQEAgLTAsMCArMSwzNzYgQEAKPj4+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogKEdQTC0yLjAtb25seSBPUiBNSVQpCj4+PiArLyoKPj4+ICsgKiBDb3B5cmlnaHQgKEMpIDIw MjMgQW1sb2dpYywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkCj4+PiArICovCj4+PiArCj4+PiAr I2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+Pj4gKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9y bS5oPgo+Pj4gKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KPj4+ICsjaW5jbHVkZSA8c291bmQv c29jLmg+Cj4+PiArI2luY2x1ZGUgPHNvdW5kL3NvYy1kYWkuaD4KPj4+ICsjaW5jbHVkZSA8bGlu dXgvaW5pdC5oPgo+Pj4gKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KPj4+ICsjaW5jbHVkZTxs aW51eC9rc3RydG94Lmg+Cj4+PiArI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgo+Pj4g KyNpbmNsdWRlIDxsaW51eC9yZXNldC5oPgo+Pj4gKyNpbmNsdWRlICJheGctdGRtLmgiCj4+PiAr Cj4+PiArI2RlZmluZSBUT0FDT0RFQ19DVFJMMCAgICAgICAgICAgICAgICAgICAgICAgMHgwCj4+ PiArCj4+PiArI2RlZmluZSBDVFJMMF9FTkFCTEVfU0hJRlQgICAgICAgICAgIDMxCj4+PiArI2Rl ZmluZSBDVFJMMF9CQ0xLX0VOQUJMRV9TSElGVCAgICAgICAgICAgICAgMzAKPj4+ICsjZGVmaW5l IENUUkwwX01DTEtfRU5BQkxFX1NISUZUICAgICAgICAgICAgICAyOQo+Pj4gKyNkZWZpbmUgQ1RS TDBfQkxLX0NBUF9JTlZfU0hJRlQgICAgICAgICAgICAgIDkKPj4+ICsKPj4+ICsjZGVmaW5lIFRE TV9JRkFDRSAwCj4+PiArI2RlZmluZSBURE1fQV9QQUQgMAo+Pj4gKyNkZWZpbmUgVERNX0JfUEFE IDEKPj4+ICsjZGVmaW5lIFRETV9DX1BBRCAyCj4+PiArCj4+PiArc3RydWN0IHRvYWNvZGVjIHsK Pj4+ICsgICAgIHN0cnVjdCByZWdtYXBfZmllbGQgKmZpZWxkX2RhdF9zZWw7Cj4+PiArICAgICBz dHJ1Y3QgcmVnbWFwX2ZpZWxkICpmaWVsZF9scmNsa19zZWw7Cj4+PiArICAgICBzdHJ1Y3QgcmVn bWFwX2ZpZWxkICpmaWVsZF9iY2xrX3NlbDsKPj4+ICsgICAgIHN0cnVjdCByZWdtYXBfZmllbGQg KmZpZWxkX21jbGtfc2VsOwo+Pj4gK307Cj4+PiArCj4+PiArc3RydWN0IHRvYWNvZGVjX21hdGNo X2RhdGEgewo+Pj4gKyAgICAgY29uc3Qgc3RydWN0IHNuZF9zb2NfY29tcG9uZW50X2RyaXZlciAq Y29tcG9uZW50X2RydjsKPj4+ICsgICAgIGNvbnN0IHN0cnVjdCByZWdfZmllbGQgZmllbGRfZGF0 X3NlbDsKPj4+ICsgICAgIGNvbnN0IHN0cnVjdCByZWdfZmllbGQgZmllbGRfbHJjbGtfc2VsOwo+ Pj4gKyAgICAgY29uc3Qgc3RydWN0IHJlZ19maWVsZCBmaWVsZF9iY2xrX3NlbDsKPj4+ICsgICAg IGNvbnN0IHN0cnVjdCByZWdfZmllbGQgZmllbGRfbWNsa19zZWw7Cj4+PiArfTsKPj4+ICsKPj4+ ICtzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgdG9jb2RlY19yZWdtYXBfY2ZnID0g ewo+Pj4gKyAgICAgLnJlZ19iaXRzICAgICAgID0gMzIsCj4+PiArICAgICAudmFsX2JpdHMgICAg ICAgPSAzMiwKPj4+ICsgICAgIC5yZWdfc3RyaWRlICAgICA9IDQsCj4+PiArICAgICAubWF4X3Jl Z2lzdGVyICAgPSAweDEsCj4+PiArfTsKPj4+ICsKPj4+ICsjZGVmaW5lIFM0X0xBTkVfT0ZGU0VU IDgKPj4+ICsKPj4+ICtzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHM0X3RvY29kZWNfbGFuZV9z ZWxfdGV4dHNbXSA9IHsKPj4+ICsgICAgICJMYW5lMCIsICJMYW5lMSIsICJMYW5lMiIsICJMYW5l MyIsICJMYW5lNCIsICJMYW5lNSIsICJMYW5lNiIsICJMYW5lNyIKPj4+ICt9Owo+Pj4gKwo+Pj4g K3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gczRfdG9jb2RlY19sYW5lX3NlbF9lbnVtID0K Pj4+ICsgICAgIFNPQ19FTlVNX1NJTkdMRShTTkRfU09DX05PUE0sIDAsIEFSUkFZX1NJWkUoczRf dG9jb2RlY19sYW5lX3NlbF90ZXh0cyksCj4+PiArICAgICAgICAgICAgICAgICAgICAgczRfdG9j b2RlY19sYW5lX3NlbF90ZXh0cyk7Cj4+PiArCj4+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRf a2NvbnRyb2xfbmV3IHM0X3RvY29kZWNfbGFuZV9zZWwgPQo+Pj4gKyAgICAgU09DX0RBUE1fRU5V TSgiVE9DT0RFQyBMQU5FIFNFTCIsIHM0X3RvY29kZWNfbGFuZV9zZWxfZW51bSk7Cj4+PiArCj4+ PiArc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzNF90b2NvZGVjX3NyY19zZWxfdGV4dHNbXSA9 IHsKPj4+ICsgICAgICJURE1BIiwgIlRETUIiLCAiVERNQyIKPj4+ICt9Owo+Pj4gKwo+Pj4gK3N0 YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2VudW0gczRfdG9jb2RlY19zcmNfc2VsX2VudW0gPQo+Pj4g KyAgICAgU09DX0VOVU1fU0lOR0xFKFNORF9TT0NfTk9QTSwgMCwgQVJSQVlfU0laRShzNF90b2Nv ZGVjX3NyY19zZWxfdGV4dHMpLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgIHM0X3RvY29kZWNf c3JjX3NlbF90ZXh0cyk7Cj4+PiArCj4+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRy b2xfbmV3IHM0X3RvY29kZWNfc3JjX3NlbCA9Cj4+PiArICAgICBTT0NfREFQTV9FTlVNKCJUT0NP REVDIFNFTCIsIHM0X3RvY29kZWNfc3JjX3NlbF9lbnVtKTsKPj4+ICsKPj4+ICtzdGF0aWMgY29u c3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgczRfdG9hY29kZWNfb3V0X2VuYWJsZSA9Cj4+PiAr ICAgICBTT0NfREFQTV9TSU5HTEVfQVVUT0RJU0FCTEUoIlN3aXRjaCIsIFRPQUNPREVDX0NUUkww LAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENUUkwwX0VOQUJMRV9TSElG VCwgMSwgMCk7Cj4+PiArCj4+PiArc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaSAqdG9jb2RlY190 ZG1fZ2V0X2FoZWFkX2JlKHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3KQo+Pj4gK3sKPj4+ ICsgICAgIHN0cnVjdCBzbmRfc29jX2RhcG1fcGF0aCAqcDsKPj4+ICsgICAgIHN0cnVjdCBzbmRf c29jX2RhaSAqYmU7Cj4+PiArCj4+PiArICAgICBzbmRfc29jX2RhcG1fd2lkZ2V0X2Zvcl9lYWNo X3NvdXJjZV9wYXRoKHcsIHApIHsKPj4+ICsgICAgICAgICAgICAgaWYgKCFwLT5jb25uZWN0KQo+ Pj4gKyAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+Pj4gKyAgICAgICAgICAgICBpZiAo cC0+c291cmNlLT5pZCA9PSBzbmRfc29jX2RhcG1fZGFpX2luKQo+Pj4gKyAgICAgICAgICAgICAg ICAgICAgIHJldHVybiAoc3RydWN0IHNuZF9zb2NfZGFpICopcC0+c291cmNlLT5wcml2Owo+Pj4g KyAgICAgICAgICAgICBiZSA9IHRvY29kZWNfdGRtX2dldF9haGVhZF9iZShwLT5zb3VyY2UpOwo+ Pj4gKyAgICAgICAgICAgICBpZiAoYmUgJiYgYmUtPmlkID09IFRETV9JRkFDRSkKPj4+ICsgICAg ICAgICAgICAgICAgICAgICByZXR1cm4gYmU7Cj4+PiArICAgICB9Cj4+PiArICAgICByZXR1cm4g TlVMTDsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIHVuc2lnbmVkIGludCBhbWxfc2ltcGxlX3N0 cnRvdWxsKGNvbnN0IGNoYXIgKmNwKQo+Pj4gK3sKPj4+ICsgICAgIHVuc2lnbmVkIGludCByZXN1 bHQgPSAwOwo+Pj4gKyAgICAgdW5zaWduZWQgaW50IHZhbHVlID0gMDsKPj4+ICsgICAgIHVuc2ln bmVkIGludCBsZW4gPSBzdHJsZW4oY3ApOwo+Pj4gKwo+Pj4gKyAgICAgd2hpbGUgKGxlbiAhPSAw KSB7Cj4+PiArICAgICAgICAgICAgIGxlbi0tOwo+Pj4gKyAgICAgICAgICAgICB2YWx1ZSA9IGlz ZGlnaXQoKmNwKTsKPj4+ICsgICAgICAgICAgICAgaWYgKHZhbHVlKSB7Cj4+PiArICAgICAgICAg ICAgICAgICAgICAgdmFsdWUgPSAqY3AgLSAnMCc7Cj4+PiArICAgICAgICAgICAgIH0gZWxzZSB7 Cj4+PiArICAgICAgICAgICAgICAgICAgICAgY3ArKzsKPj4+ICsgICAgICAgICAgICAgICAgICAg ICBjb250aW51ZTsKPj4+ICsgICAgICAgICAgICAgfQo+Pj4gKyAgICAgICAgICAgICBjcCsrOwo+ Pj4gKyAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQgKiAxMCArIHZhbHVlOwo+Pj4gKyAgICAg fQo+Pj4gKyAgICAgcmV0dXJuIHJlc3VsdDsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGludCBh bWxfZ2V0X2Nsa19pZChjb25zdCBjaGFyICpuYW1lKQo+Pj4gK3sKPj4+ICsgICAgIGludCBjbGtf aWQgPSAwOwo+Pj4gKwo+Pj4gKyAgICAgaWYgKHN0cnN0cihuYW1lLCAibXN0X2EiKSkKPj4+ICsg ICAgICAgICAgICAgY2xrX2lkID0gMDsKPj4+ICsgICAgIGVsc2UgaWYgKHN0cnN0cihuYW1lLCAi bXN0X2IiKSkKPj4+ICsgICAgICAgICAgICAgY2xrX2lkID0gMTsKPj4+ICsgICAgIGVsc2UgaWYg KHN0cnN0cihuYW1lLCAibXN0X2MiKSkKPj4+ICsgICAgICAgICAgICAgY2xrX2lkID0gMjsKPj4+ ICsgICAgIGVsc2UgaWYgKHN0cnN0cihuYW1lLCAibXN0X2QiKSkKPj4+ICsgICAgICAgICAgICAg Y2xrX2lkID0gMzsKPj4+ICsgICAgIGVsc2UgaWYgKHN0cnN0cihuYW1lLCAibXN0X2UiKSkKPj4+ ICsgICAgICAgICAgICAgY2xrX2lkID0gNDsKPj4+ICsgICAgIGVsc2UgaWYgKHN0cnN0cihuYW1l LCAibXN0X2YiKSkKPj4+ICsgICAgICAgICAgICAgY2xrX2lkID0gNTsKPj4+ICsKPj4+ICsgICAg IHJldHVybiBjbGtfaWQ7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQgYW1sX3RvY29kZWNf c2VsX3NldChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdykKPj4+ICt7Cj4+PiArICAgICBz dHJ1Y3Qgc25kX3NvY19kYWkgKmJlOwo+Pj4gKyAgICAgc3RydWN0IGF4Z190ZG1fc3RyZWFtICpz dHJlYW07Cj4+PiArICAgICBzdHJ1Y3QgYXhnX3RkbV9pZmFjZSAqaWZhY2U7Cj4+PiArICAgICBz dHJ1Y3Qgc25kX3NvY19jb21wb25lbnQgKmNvbXBvbmVudCA9IHNuZF9zb2NfZGFwbV90b19jb21w b25lbnQody0+ZGFwbSk7Cj4+PiArICAgICBzdHJ1Y3QgdG9hY29kZWMgKnByaXYgPSBzbmRfc29j X2NvbXBvbmVudF9nZXRfZHJ2ZGF0YShjb21wb25lbnQpOwo+Pj4gKyAgICAgdW5zaWduZWQgaW50 IHRkbV9pZCA9IFRETV9BX1BBRDsKPj4+ICsgICAgIGNvbnN0IGNoYXIgKmRhaV93aWRnZXRfbmFt ZTsKPj4+ICsgICAgIHN0cnVjdCBzbmRfc29jX2RhcG1fcGF0aCAqcDsKPj4+ICsgICAgIHVuc2ln bmVkIGludCBsYW5lID0gMDsKPj4+ICsgICAgIHVuc2lnbmVkIGludCB2YWwgPSAwOwo+Pj4gKyAg ICAgc3RydWN0IGNsayAqc2NsaywgKm1jbGs7Cj4+PiArICAgICBjaGFyICpjbGtfbmFtZTsKPj4+ ICsgICAgIGludCBtY2xrX2lkLCBzY2xrX2lkOwo+Pj4gKwo+Pj4gKyAgICAgYmUgPSB0b2NvZGVj X3RkbV9nZXRfYWhlYWRfYmUodyk7Cj4+PiArICAgICBpZiAoIWJlKSB7Cj4+PiArICAgICAgICAg ICAgIGRldl9lcnIoY29tcG9uZW50LT5kZXYsICIlcyBub3QgZmluZCB0aGUgYmVcbiIsIF9fZnVu Y19fKTsKPj4+ICsgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4+PiArICAgICB9Cj4+PiAr ICAgICBzdHJlYW0gPSBzbmRfc29jX2RhaV9kbWFfZGF0YV9nZXRfcGxheWJhY2soYmUpOwo+Pj4g KyAgICAgaWYgKCFzdHJlYW0pIHsKPj4+ICsgICAgICAgICAgICAgZGV2X2Vycihjb21wb25lbnQt PmRldiwgIiVzIG5vdCBmaW5kIHRoZSBzdHJlYW1cbiIsIF9fZnVuY19fKTsKPj4+ICsgICAgICAg ICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4+PiArICAgICB9Cj4+PiArICAgICAvKndlIGxpa2UgdG8g dXNlIGRhaSBpZCwgYnV0IGl0IGlzIGZpeGVkIHZhbCovCj4+PiArICAgICBkYWlfd2lkZ2V0X25h bWUgPSBiZS0+c3RyZWFtW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdLndpZGdldC0+bmFtZTsK Pj4+ICsgICAgIGlmIChzdHJzdHIoZGFpX3dpZGdldF9uYW1lLCAiVERNX0EiKSkKPj4+ICsgICAg ICAgICAgICAgdGRtX2lkID0gVERNX0FfUEFEOwo+Pj4gKyAgICAgZWxzZSBpZiAoc3Ryc3RyKGRh aV93aWRnZXRfbmFtZSwgIlRETV9CIikpCj4+PiArICAgICAgICAgICAgIHRkbV9pZCA9IFRETV9C X1BBRDsKPj4+ICsgICAgIGVsc2UgaWYgKHN0cnN0cihkYWlfd2lkZ2V0X25hbWUsICJURE1fQyIp KQo+Pj4gKyAgICAgICAgICAgICB0ZG1faWQgPSBURE1fQ19QQUQ7Cj4+PiArICAgICBzbmRfc29j X2RhcG1fd2lkZ2V0X2Zvcl9lYWNoX3NvdXJjZV9wYXRoKHcsIHApIHsKPj4+ICsgICAgICAgICAg ICAgaWYgKHAtPmNvbm5lY3QgJiYgcC0+bmFtZSkgewo+Pj4gKyAgICAgICAgICAgICAgICAgICAg IGxhbmUgPSBhbWxfc2ltcGxlX3N0cnRvdWxsKHAtPm5hbWUpOwo+Pj4gKyAgICAgICAgICAgICAg ICAgICAgIHZhbCA9IGxhbmUgKyB0ZG1faWQgKiBTNF9MQU5FX09GRlNFVDsKPj4+ICsgICAgICAg ICAgICAgICAgICAgICByZWdtYXBfZmllbGRfd3JpdGUocHJpdi0+ZmllbGRfZGF0X3NlbCwgdmFs KTsKPj4+ICsgICAgICAgICAgICAgfQo+Pj4gKyAgICAgfQo+Pj4gKyAgICAgaWZhY2UgPSBzdHJl YW0tPmlmYWNlOwo+Pj4gKyAgICAgbWNsayA9IGlmYWNlLT5tY2xrOwo+Pj4gKyAgICAgc2NsayA9 IGlmYWNlLT5zY2xrOwo+Pj4gKyAgICAgbWNsa19pZCA9IGFtbF9nZXRfY2xrX2lkKF9fY2xrX2dl dF9uYW1lKG1jbGspKTsKPj4+ICsgICAgIHNjbGtfaWQgPSBhbWxfZ2V0X2Nsa19pZChfX2Nsa19n ZXRfbmFtZShzY2xrKSk7Cj4+PiArICAgICByZWdtYXBfZmllbGRfd3JpdGUocHJpdi0+ZmllbGRf bWNsa19zZWwsIG1jbGtfaWQpOwo+Pj4gKyAgICAgcmVnbWFwX2ZpZWxkX3dyaXRlKHByaXYtPmZp ZWxkX2JjbGtfc2VsLCBzY2xrX2lkKTsKPj4+ICsgICAgIHJlZ21hcF9maWVsZF93cml0ZShwcml2 LT5maWVsZF9scmNsa19zZWwsIHNjbGtfaWQpOwo+Pj4gKwo+Pj4gKyAgICAgcmV0dXJuIDA7Cj4+ PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQgdG9jb2RlY19zZWxfZXZlbnQoc3RydWN0IHNuZF9z b2NfZGFwbV93aWRnZXQgKncsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg c25kX2tjb250cm9sICpjb250cm9sLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 IGV2ZW50KQo+Pj4gK3sKPj4+ICsgICAgIHN0cnVjdCBzbmRfc29jX2NvbXBvbmVudCAqY29tcG9u ZW50ID0gc25kX3NvY19kYXBtX3RvX2NvbXBvbmVudCh3LT5kYXBtKTsKPj4+ICsgICAgIGludCBy ZXQgPSAwOwo+Pj4gKwo+Pj4gKyAgICAgc3dpdGNoIChldmVudCkgewo+Pj4gKyAgICAgY2FzZSBT TkRfU09DX0RBUE1fUFJFX1BNVToKPj4+ICsgICAgICAgICAgICAgcmV0ID0gYW1sX3RvY29kZWNf c2VsX3NldCh3KTsKPj4+ICsgICAgICAgICAgICAgYnJlYWs7Cj4+PiArCj4+PiArICAgICBjYXNl IFNORF9TT0NfREFQTV9QUkVfUE1EOgo+Pj4gKyAgICAgICAgICAgICBicmVhazsKPj4+ICsKPj4+ ICsgICAgIGRlZmF1bHQ6Cj4+PiArICAgICAgICAgICAgIGRldl9lcnIoY29tcG9uZW50LT5kZXYs ICJVbmV4cGVjdGVkIGV2ZW50ICVkXG4iLCBldmVudCk7Cj4+PiArICAgICAgICAgICAgIHJldHVy biAtRUlOVkFMOwo+Pj4gKyAgICAgfQo+Pj4gKwo+Pj4gKyAgICAgcmV0dXJuIHJldDsKPj4+ICt9 Cj4+PiArCj4+PiArc3RhdGljIGludCB0b2NvZGVjX2Nsa19lbmFibGUoc3RydWN0IHNuZF9zb2Nf ZGFwbV93aWRnZXQgKncsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNu ZF9rY29udHJvbCAqY29udHJvbCwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg ZXZlbnQpCj4+PiArewo+Pj4gKyAgICAgaW50IHJldCA9IDA7Cj4+PiArICAgICB1bnNpZ25lZCBp bnQgbWFzayA9IDAsIHZhbCA9IDA7Cj4+PiArICAgICBzdHJ1Y3Qgc25kX3NvY19jb21wb25lbnQg KmNvbXBvbmVudCA9IHNuZF9zb2NfZGFwbV90b19jb21wb25lbnQody0+ZGFwbSk7Cj4+PiArCj4+ PiArICAgICBzbmRfc29jX2NvbXBvbmVudF91cGRhdGVfYml0cyhjb21wb25lbnQsIFRPQUNPREVD X0NUUkwwLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSA8PCBDVFJM MF9CTEtfQ0FQX0lOVl9TSElGVCwgMSA8PCBDVFJMMF9CTEtfQ0FQX0lOVl9TSElGVCk7Cj4+PiAr ICAgICBzd2l0Y2ggKGV2ZW50KSB7Cj4+PiArICAgICBjYXNlIFNORF9TT0NfREFQTV9QUkVfUE1V Ogo+Pj4gKyAgICAgICAgICAgICBtYXNrID0gMSA8PCBDVFJMMF9NQ0xLX0VOQUJMRV9TSElGVCB8 IDEgPDwgQ1RSTDBfQkNMS19FTkFCTEVfU0hJRlQ7Cj4+PiArICAgICAgICAgICAgIHZhbCA9IDEg PDwgQ1RSTDBfTUNMS19FTkFCTEVfU0hJRlQgfCAxIDw8IENUUkwwX0JDTEtfRU5BQkxFX1NISUZU Owo+Pj4gKyAgICAgICAgICAgICBzbmRfc29jX2NvbXBvbmVudF91cGRhdGVfYml0cyhjb21wb25l bnQsIFRPQUNPREVDX0NUUkwwLCBtYXNrLCB2YWwpOwo+Pj4gKyAgICAgICAgICAgICBicmVhazsK Pj4+ICsgICAgIGNhc2UgU05EX1NPQ19EQVBNX1BSRV9QTUQ6Cj4+PiArICAgICAgICAgICAgIG1h c2sgPSAxIDw8IENUUkwwX01DTEtfRU5BQkxFX1NISUZUIHwgMSA8PCBDVFJMMF9CQ0xLX0VOQUJM RV9TSElGVDsKPj4+ICsgICAgICAgICAgICAgdmFsID0gMCA8PCBDVFJMMF9NQ0xLX0VOQUJMRV9T SElGVCB8IDAgPDwgQ1RSTDBfQkNMS19FTkFCTEVfU0hJRlQ7Cj4+PiArICAgICAgICAgICAgIHNu ZF9zb2NfY29tcG9uZW50X3VwZGF0ZV9iaXRzKGNvbXBvbmVudCwgVE9BQ09ERUNfQ1RSTDAsIG1h c2ssIHZhbCk7Cj4+PiArICAgICAgICAgICAgIGJyZWFrOwo+Pj4gKyAgICAgZGVmYXVsdDoKPj4+ ICsgICAgICAgICAgICAgZGV2X2Vycihjb21wb25lbnQtPmRldiwgIlVuZXhwZWN0ZWQgZXZlbnQg JWRcbiIsIGV2ZW50KTsKPj4+ICsgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4+PiArICAg ICB9Cj4+PiArCj4+PiArICAgICByZXR1cm4gcmV0Owo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMg Y29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgczRfdG9hY29kZWNfd2lkZ2V0c1tdID0g ewo+Pj4gKyAgICAgU05EX1NPQ19EQVBNX01VWF9FKCJMYW5lIFNSQyIsIFNORF9TT0NfTk9QTSwg MCwgMCwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAmczRfdG9jb2RlY19sYW5lX3NlbCwg dG9jb2RlY19zZWxfZXZlbnQsCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgKFNORF9TT0Nf REFQTV9QUkVfUE1VIHwgU05EX1NPQ19EQVBNX1BSRV9QTUQpKSwKPj4+ICsgICAgIFNORF9TT0Nf REFQTV9NVVgoIklOUFVUIFNSQyIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJnM0X3RvY29kZWNfc3Jj X3NlbCksCj4+PiArICAgICBTTkRfU09DX0RBUE1fU1dJVENIX0UoIk9VVCBFTiIsIFNORF9TT0Nf Tk9QTSwgMCwgMCwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAmczRfdG9hY29kZWNf b3V0X2VuYWJsZSwgdG9jb2RlY19jbGtfZW5hYmxlLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKFNORF9TT0NfREFQTV9QUkVfUE1VIHwgU05EX1NPQ19EQVBNX1BSRV9QTUQpKSwK Pj4+ICsgICAgIFNORF9TT0NfREFQTV9BSUZfSU4oIlRETUEiLCBOVUxMLCAwLCBTTkRfU09DX05P UE0sIDAsIDApLAo+Pj4gKyAgICAgU05EX1NPQ19EQVBNX0FJRl9JTigiVERNQiIsIE5VTEwsIDAs IFNORF9TT0NfTk9QTSwgMCwgMCksCj4+PiArICAgICBTTkRfU09DX0RBUE1fQUlGX0lOKCJURE1D IiwgTlVMTCwgMCwgU05EX1NPQ19OT1BNLCAwLCAwKSwKPj4+ICsgICAgIFNORF9TT0NfREFQTV9P VVRfRFJWKCJMYW5lMCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCj4+PiArICAgICBT TkRfU09DX0RBUE1fT1VUX0RSVigiTGFuZTEiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDAp LAo+Pj4gKyAgICAgU05EX1NPQ19EQVBNX09VVF9EUlYoIkxhbmUyIiwgU05EX1NPQ19OT1BNLCAw LCAwLCBOVUxMLCAwKSwKPj4+ICsgICAgIFNORF9TT0NfREFQTV9PVVRfRFJWKCJMYW5lMyIsIFNO RF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCksCj4+PiArICAgICBTTkRfU09DX0RBUE1fT1VUX0RS VigiTGFuZTQiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDApLAo+Pj4gKyAgICAgU05EX1NP Q19EQVBNX09VVF9EUlYoIkxhbmU1IiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwKSwKPj4+ ICsgICAgIFNORF9TT0NfREFQTV9PVVRfRFJWKCJMYW5lNiIsIFNORF9TT0NfTk9QTSwgMCwgMCwg TlVMTCwgMCksCj4+PiArICAgICBTTkRfU09DX0RBUE1fT1VUX0RSVigiTGFuZTciLCBTTkRfU09D X05PUE0sIDAsIDAsIE5VTEwsIDApLAo+Pj4gKyAgICAgU05EX1NPQ19EQVBNX09VVFBVVCgiVERN X1RPX0FDT0RFQyIpLAo+Pj4gK307Cj4+PiArCj4+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRf c29jX2RhcG1fcm91dGUgczRfdG9jb2RlY19kYXBtX3JvdXRlc1tdID0gewo+Pj4gKyAgICAgeyAi SU5QVVQgU1JDIiwgIlRETUEiLCAiVERNQSJ9LAo+Pj4gKyAgICAgeyAiSU5QVVQgU1JDIiwgIlRE TUIiLCAiVERNQiJ9LAo+Pj4gKyAgICAgeyAiSU5QVVQgU1JDIiwgIlRETUMiLCAiVERNQyJ9LAo+ Pj4gKyAgICAgeyAiTGFuZTAiLCBOVUxMLCAiSU5QVVQgU1JDIiB9LAo+Pj4gKyAgICAgeyAiTGFu ZTEiLCBOVUxMLCAiSU5QVVQgU1JDIn0sCj4+PiArICAgICB7ICJMYW5lMiIsIE5VTEwsICJJTlBV VCBTUkMifSwKPj4+ICsgICAgIHsgIkxhbmUzIiwgTlVMTCwgIklOUFVUIFNSQyJ9LAo+Pj4gKyAg ICAgeyAiTGFuZTQiLCBOVUxMLCAiSU5QVVQgU1JDIn0sCj4+PiArICAgICB7ICJMYW5lNSIsIE5V TEwsICJJTlBVVCBTUkMifSwKPj4+ICsgICAgIHsgIkxhbmU2IiwgTlVMTCwgIklOUFVUIFNSQyJ9 LAo+Pj4gKyAgICAgeyAiTGFuZTciLCBOVUxMLCAiSU5QVVQgU1JDIn0sCj4+PiArICAgICB7ICJM YW5lIFNSQyIsICJMYW5lMCIsICJMYW5lMCJ9LAo+Pj4gKyAgICAgeyAiTGFuZSBTUkMiLCAiTGFu ZTEiLCAiTGFuZTEifSwKPj4+ICsgICAgIHsgIkxhbmUgU1JDIiwgIkxhbmUyIiwgIkxhbmUyIn0s Cj4+PiArICAgICB7ICJMYW5lIFNSQyIsICJMYW5lMyIsICJMYW5lMyJ9LAo+Pj4gKyAgICAgeyAi TGFuZSBTUkMiLCAiTGFuZTQiLCAiTGFuZTQifSwKPj4+ICsgICAgIHsgIkxhbmUgU1JDIiwgIkxh bmU1IiwgIkxhbmU1In0sCj4+PiArICAgICB7ICJMYW5lIFNSQyIsICJMYW5lNiIsICJMYW5lNiJ9 LAo+Pj4gKyAgICAgeyAiTGFuZSBTUkMiLCAiTGFuZTciLCAiTGFuZTcifSwKPj4+ICsgICAgIHsg Ik9VVCBFTiIsICJTd2l0Y2giLCAiTGFuZSBTUkMifSwKPj4+ICsgICAgIHsgIlRETV9UT19BQ09E RUMiLCBOVUxMLCAiT1VUIEVOIn0sCj4+PiArCj4+PiArfTsKPj4+ICsKPj4+ICtzdGF0aWMgY29u c3Qgc3RydWN0IHNuZF9zb2NfY29tcG9uZW50X2RyaXZlciBzNF90b2NvZGVjX2NvbXBvbmVudF9k cnYgPSB7Cj4+PiArICAgICAuZGFwbV93aWRnZXRzICAgICAgICAgICA9IHM0X3RvYWNvZGVjX3dp ZGdldHMsCj4+PiArICAgICAubnVtX2RhcG1fd2lkZ2V0cyAgICAgICA9IEFSUkFZX1NJWkUoczRf dG9hY29kZWNfd2lkZ2V0cyksCj4+PiArICAgICAuZGFwbV9yb3V0ZXMgICAgICAgICAgICA9IHM0 X3RvY29kZWNfZGFwbV9yb3V0ZXMsCj4+PiArICAgICAubnVtX2RhcG1fcm91dGVzICAgICAgICA9 IEFSUkFZX1NJWkUoczRfdG9jb2RlY19kYXBtX3JvdXRlcyksCj4+PiArfTsKPj4+ICsKPj4+ICtz dGF0aWMgY29uc3Qgc3RydWN0IHRvYWNvZGVjX21hdGNoX2RhdGEgczRfdG9hY29kZWNfbWF0Y2hf ZGF0YSA9IHsKPj4+ICsgICAgIC5jb21wb25lbnRfZHJ2ICA9ICZzNF90b2NvZGVjX2NvbXBvbmVu dF9kcnYsCj4+PiArICAgICAuZmllbGRfZGF0X3NlbCAgPSBSRUdfRklFTEQoVE9BQ09ERUNfQ1RS TDAsIDE2LCAyMCksCj4+PiArICAgICAuZmllbGRfbHJjbGtfc2VsID0gUkVHX0ZJRUxEKFRPQUNP REVDX0NUUkwwLCAxMiwgMTQpLAo+Pj4gKyAgICAgLmZpZWxkX2JjbGtfc2VsID0gUkVHX0ZJRUxE KFRPQUNPREVDX0NUUkwwLCA0LCA2KSwKPj4+ICsgICAgIC5maWVsZF9tY2xrX3NlbCA9IFJFR19G SUVMRChUT0FDT0RFQ19DVFJMMCwgMCwgMiksCj4+PiArfTsKPj4+ICsKPj4+ICtzdGF0aWMgY29u c3Qgc3RydWN0IG9mX2RldmljZV9pZCBzNF90b2NvZGVjX29mX21hdGNoW10gPSB7Cj4+PiArICAg ICB7Cj4+PiArICAgICAgICAgICAgIC5jb21wYXRpYmxlID0gImFtbG9naWMsczQtdG9jb2RlYyIs Cj4+PiArICAgICAgICAgICAgIC5kYXRhID0gJnM0X3RvYWNvZGVjX21hdGNoX2RhdGEsCj4+PiAr ICAgICB9LCB7fQo+Pj4gK307Cj4+PiArCj4+PiArTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgczRf dG9jb2RlY19vZl9tYXRjaCk7Cj4+PiArCj4+PiArc3RhdGljIGludCB0b2NvZGVjX3Byb2JlKHN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4+PiArewo+Pj4gKyAgICAgY29uc3Qgc3RydWN0 IHRvYWNvZGVjX21hdGNoX2RhdGEgKmRhdGE7Cj4+PiArICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYg PSAmcGRldi0+ZGV2Owo+Pj4gKyAgICAgc3RydWN0IHRvYWNvZGVjICpwcml2Owo+Pj4gKyAgICAg dm9pZCBfX2lvbWVtICpyZWdzOwo+Pj4gKyAgICAgc3RydWN0IHJlZ21hcCAqbWFwOwo+Pj4gKyAg ICAgaW50IHJldDsKPj4+ICsKPj4+ICsgICAgIGRhdGEgPSBkZXZpY2VfZ2V0X21hdGNoX2RhdGEo ZGV2KTsKPj4+ICsgICAgIGlmICghZGF0YSkKPj4+ICsgICAgICAgICAgICAgcmV0dXJuIGRldl9l cnJfcHJvYmUoZGV2LCAtRU5PREVWLCAiZmFpbGVkIHRvIG1hdGNoIGRldmljZVxuIik7Cj4+PiAr ICAgICBwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7 Cj4+PiArICAgICBpZiAoIXByaXYpCj4+PiArICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOwo+ Pj4gKwo+Pj4gKyAgICAgcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHJpdik7Cj4+PiArCj4+ PiArICAgICByZXQgPSBkZXZpY2VfcmVzZXQoZGV2KTsKPj4+ICsgICAgIGlmIChyZXQpCj4+PiAr ICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4+PiArCj4+PiArICAgICByZWdzID0gZGV2bV9wbGF0 Zm9ybV9pb3JlbWFwX3Jlc291cmNlKHBkZXYsIDApOwo+Pj4gKyAgICAgaWYgKElTX0VSUihyZWdz KSkKPj4+ICsgICAgICAgICAgICAgcmV0dXJuIFBUUl9FUlIocmVncyk7Cj4+PiArCj4+PiArICAg ICBtYXAgPSBkZXZtX3JlZ21hcF9pbml0X21taW8oZGV2LCByZWdzLCAmdG9jb2RlY19yZWdtYXBf Y2ZnKTsKPj4+ICsgICAgIGlmIChJU19FUlIobWFwKSkKPj4+ICsgICAgICAgICAgICAgcmV0dXJu IGRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKG1hcCksICJmYWlsZWQgdG8gaW5pdCByZWdtYXBc biIpOwo+Pj4gKwo+Pj4gKyAgICAgcHJpdi0+ZmllbGRfZGF0X3NlbCA9IGRldm1fcmVnbWFwX2Zp ZWxkX2FsbG9jKGRldiwgbWFwLCBkYXRhLT5maWVsZF9kYXRfc2VsKTsKPj4+ICsgICAgIGlmIChJ U19FUlIocHJpdi0+ZmllbGRfZGF0X3NlbCkpCj4+PiArICAgICAgICAgICAgIHJldHVybiBQVFJf RVJSKHByaXYtPmZpZWxkX2RhdF9zZWwpOwo+Pj4gKwo+Pj4gKyAgICAgcHJpdi0+ZmllbGRfbHJj bGtfc2VsID0gZGV2bV9yZWdtYXBfZmllbGRfYWxsb2MoZGV2LCBtYXAsIGRhdGEtPmZpZWxkX2xy Y2xrX3NlbCk7Cj4+PiArICAgICBpZiAoSVNfRVJSKHByaXYtPmZpZWxkX2xyY2xrX3NlbCkpCj4+ PiArICAgICAgICAgICAgIHJldHVybiBQVFJfRVJSKHByaXYtPmZpZWxkX2xyY2xrX3NlbCk7Cj4+ PiArCj4+PiArICAgICBwcml2LT5maWVsZF9iY2xrX3NlbCA9IGRldm1fcmVnbWFwX2ZpZWxkX2Fs bG9jKGRldiwgbWFwLCBkYXRhLT5maWVsZF9iY2xrX3NlbCk7Cj4+PiArICAgICBpZiAoSVNfRVJS KHByaXYtPmZpZWxkX2JjbGtfc2VsKSkKPj4+ICsgICAgICAgICAgICAgcmV0dXJuIFBUUl9FUlIo cHJpdi0+ZmllbGRfYmNsa19zZWwpOwo+Pj4gKwo+Pj4gKyAgICAgcHJpdi0+ZmllbGRfbWNsa19z ZWwgPSBkZXZtX3JlZ21hcF9maWVsZF9hbGxvYyhkZXYsIG1hcCwgZGF0YS0+ZmllbGRfbWNsa19z ZWwpOwo+Pj4gKyAgICAgaWYgKElTX0VSUihwcml2LT5maWVsZF9tY2xrX3NlbCkpCj4+PiArICAg ICAgICAgICAgIHJldHVybiBQVFJfRVJSKHByaXYtPmZpZWxkX21jbGtfc2VsKTsKPj4+ICsKPj4+ ICsgICAgIHJldHVybiBkZXZtX3NuZF9zb2NfcmVnaXN0ZXJfY29tcG9uZW50KGRldiwKPj4+ICsg ICAgICAgICAgICAgICAgICAgICBkYXRhLT5jb21wb25lbnRfZHJ2LCBOVUxMLCAwKTsKPj4+ICt9 Cj4+PiArCj4+PiArc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdG9jb2RlY19wZHJ2ID0g ewo+Pj4gKyAgICAgLnByb2JlID0gdG9jb2RlY19wcm9iZSwKPj4+ICsgICAgIC5kcml2ZXIgPSB7 Cj4+PiArICAgICAgICAgICAgIC5uYW1lID0gInM0LXRvY29kZWMiLAo+Pj4gKyAgICAgICAgICAg ICAub2ZfbWF0Y2hfdGFibGUgPSBzNF90b2NvZGVjX29mX21hdGNoLAo+Pj4gKyAgICAgfSwKPj4+ ICt9Owo+Pj4gKwo+Pj4gK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIodG9jb2RlY19wZHJ2KTsKPj4+ ICsKPj4+ICtNT0RVTEVfREVTQ1JJUFRJT04oIkFtbG9naWMgdG8gY29kZWMgZHJpdmVyIik7Cj4+ PiArTU9EVUxFX0FVVEhPUigiamllYmluZy5jaGVuQGFtbG9naWMuY29tIik7Cj4+PiArTU9EVUxF X0xJQ0VOU0UoIkdQTCIpOwo+Pj4gZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9tZXNvbi90OTAxNS5j IGIvc291bmQvc29jL21lc29uL3Q5MDE1LmMKPj4+IGluZGV4IDU3MWY2NTc4OGM1OTIwNTBhYmRj YTI2NGY1NjU2ZDRkMWE5ZDk5ZjYuLjJkYjFjZDE4Y2YyY2VhNTA3ZjNkNzI4MjA1NGUwM2Q5NTM1 ODY2NDggMTAwNjQ0Cj4+PiAtLS0gYS9zb3VuZC9zb2MvbWVzb24vdDkwMTUuYwo+Pj4gKysrIGIv c291bmQvc29jL21lc29uL3Q5MDE1LmMKPj4+IEBAIC04OSwxMCArODksNyBAQCBzdGF0aWMgc3Ry dWN0IHNuZF9zb2NfZGFpX2RyaXZlciB0OTAxNV9kYWkgPSB7Cj4+PiAgICAgICAgICAgICAgICAu Y2hhbm5lbHNfbWluID0gMSwKPj4+ICAgICAgICAgICAgICAgIC5jaGFubmVsc19tYXggPSAyLAo+ Pj4gICAgICAgICAgICAgICAgLnJhdGVzID0gU05EUlZfUENNX1JBVEVfODAwMF85NjAwMCwKPj4+ IC0gICAgICAgICAgICAgLmZvcm1hdHMgPSAoU05EUlZfUENNX0ZNVEJJVF9TOCB8Cj4+PiAtICAg ICAgICAgICAgICAgICAgICAgICAgIFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwKPj4+IC0gICAg ICAgICAgICAgICAgICAgICAgICAgU05EUlZfUENNX0ZNVEJJVF9TMjBfTEUgfAo+Pj4gLSAgICAg ICAgICAgICAgICAgICAgICAgICBTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSksCj4+PiArICAgICAg ICAgICAgIC5mb3JtYXRzID0gKFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwgU05EUlZfUENNX0ZN VEJJVF9TMzJfTEUpLAo+PiBBZ2FpbiwgbWl4ZWQgdXAgY2hhbmdlcyB3aXRoIHplcm8ganVzdGlm aWNhdGlvbi4KPj4KPj4gVGhpcyBkcm9wcyBTOCBhbmQgUzE2IGZvcm1hdCBzdXBwb3J0IGZvciB0 aGUgZXhpc3RpbmcgU29DcyAoc3VjaCBhcyBHWEwpCj4+IHdoaWNoIGlzIGtub3duIHRvIHdvcmsg YW5kIGFkZCBTMzIgc3VwcG9ydCBvbiBhbiBIVyBkb2N1bWVudGVkIGFzIDI0Yml0cwo+PiBvbmx5 LiBDYW4geW91IGV4cGxhaW4gPwo+Pgo+Pj4gICAgICAgIH0sCj4+PiAgICAgICAgLm9wcyA9ICZ0 OTAxNV9kYWlfb3BzLAo+Pj4gICB9Owo+PiAtLQo+PiBKZXJvbWUKCi0tIApKZXJvbWUKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFtbG9naWMg bWFpbGluZyBsaXN0CmxpbnV4LWFtbG9naWNAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlz dHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFtbG9naWMK 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 1CAECC02183 for ; Tue, 14 Jan 2025 11:31:16 +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:Content-Transfer-Encoding: Content-Type:MIME-Version:Message-ID:Date:References:In-Reply-To:Subject:Cc: To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=20Yjc/n2Ib6F5lS80pWb9OKE5xBeEql4XyvGsNk67XY=; b=kIWmw7Aae2qty8IBl3AVF7PBlw Ypd8TnJecvOnRAUSlRgzrMNINAMOgtiOXBKZv71VljHFhPkpAlmUBlYrleyFdcA5WuSpLbFseeFJy 32UAuLlxCirviZH26PQD2UmNkojRS+ydRHHwkEPWyPNpJBzpdajw4QgITtA96eMPzRjfab8rE/A4U V7eiIzUKBa/8hzS8JCR1+6N7X4JoaZpJa9b4fmCXWWstgGl7CpxhDA1VFUmB4cocer8gcVkdwBquc +shG4LrFg46YNFt9Lk/7WnvVXbrTjILpdHu7CiydllcdnhMvsQjzdFUWnB+OfHnC4qTHImur7CRf/ LP230PCg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tXf8M-00000008G0L-2DyA; Tue, 14 Jan 2025 11:30:58 +0000 Received: from mail-wr1-x42e.google.com ([2a00:1450:4864:20::42e]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tXf74-00000008FfW-43zO for linux-arm-kernel@lists.infradead.org; Tue, 14 Jan 2025 11:29:41 +0000 Received: by mail-wr1-x42e.google.com with SMTP id ffacd0b85a97d-38be3bfb045so215341f8f.0 for ; Tue, 14 Jan 2025 03:29:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1736854177; x=1737458977; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:message-id:date:user-agent :references:in-reply-to:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=20Yjc/n2Ib6F5lS80pWb9OKE5xBeEql4XyvGsNk67XY=; b=woZ5vT4Ej3Evio+hMmEVyuwrPIahMW+LToSNml/z8NsLuSwc1NY8rWXgAyN44psyco hv5adOSeZV04YJR7Q1eOnzMG6ToacScaxJPpHga8c0bbkDd6Y8XLT7q/luoXs8qpn+7F rt2+zW718aAzRoHzNcfQFakLPLftnmqZS/U77kijfUvKN8kA0EoPUbLwW/mW5X2Ki+yb SG4rPbvylvU59G9VQTMnMHrb15PsBz6FLqRX69lMEVeNnmjCuDQXozBXKnLV7VlXHhsN z9bzPjg02LJDeIDhFiZiv+4SchzGRtYfnRS5MjWZaZnCgPRC2mj26MAhJo+d/8iofQ9X lNVw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736854177; x=1737458977; h=content-transfer-encoding:mime-version:message-id:date:user-agent :references:in-reply-to:subject:cc:to:from:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=20Yjc/n2Ib6F5lS80pWb9OKE5xBeEql4XyvGsNk67XY=; b=iNpwwt5UWjv54kBlgboL7VYJufvWn8h3MpTw8oS4funvsC6PXd27XeTDytnxvbylbr /2V2OkrOxKh4rKozbBf1xE0nsCiMLzZ7uRSKBdSQ0jIplt+QNzLhlaCmr5bYEAewq8PT M5Vj5gxjqPuuBvdk/IppndWL81d86wFPASexdsMem+JgByc7OJ+VCDNPyBqETnSQbvr0 8nK1hGaJ61EqJvr2jAplNZr9OVJ2uM9MhMaCuNJku2dyO0I4i5GZ3+25JEYKiCSCzTKd nqbajwkkfQeKwX2cYzgVmtFgRZkaUD4IVG5+QOajd3xU4rY18BWBbcqjlvOa+fIJkBNC V2Ug== X-Forwarded-Encrypted: i=1; AJvYcCV1WC4nqUlAMV0xedjI174yiE8sgEGDhTpJyFORnZHXGd84VMkwbgwkRHGmUxnEsuv3L446xRRhv+fLJQb2/+d8@lists.infradead.org X-Gm-Message-State: AOJu0YwT9lPAcmI6J1AyYnGbM8hGj1bDotOPeoZvCybGpo6EuKCyCYd0 UuVEOwekyxd2GNS85uFR0yo3h7Z1jstDUBe2ewXERFzk12j/Pn+KgitpDANOt80= X-Gm-Gg: ASbGnctTCyiqPj8hK0WpWrU3ELMAwRJB66CulfCNDSVDF4AMNl5wVJSjsG8UoD8ZYT8 tZhg1PBa2OGwYhgiQ+LWEs/YLYqQnA+K677nZ0EunCcukrYjPHGDfdHKvxuVqEgeg7wZFHz6ydB vhxW8laaryX3CfCMkmLSs8wSdhZLYdVQ0N4DRWkSxLiv4dBb7ItcB9upfyEB2wygSu0Cz0GnUjY OL0QCRHrhiFnZmqw6yFXX0xb1d+k6SFQlnlgTngQDcGUshyMBscsHDg X-Google-Smtp-Source: AGHT+IF7o6knngh+kGBhBymoYYO++0k0fEzVPFzyBMQqlFUvEiupbcgJ6G8Oi1ILWV70iXAFlgrJbg== X-Received: by 2002:a05:6000:4011:b0:386:3d27:b4f0 with SMTP id ffacd0b85a97d-38a8b0d324bmr17534737f8f.14.1736854177449; Tue, 14 Jan 2025 03:29:37 -0800 (PST) Received: from localhost ([2a01:e0a:3c5:5fb1:317c:3d93:b7d4:96cd]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-38a8e4b8116sm14469928f8f.79.2025.01.14.03.29.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Jan 2025 03:29:36 -0800 (PST) From: Jerome Brunet To: Jiebing Chen 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 Subject: Re: [PATCH 2/3] ASoC: meson: s4:support for the on-chip audio In-Reply-To: (Jiebing Chen's message of "Tue, 14 Jan 2025 16:16:39 +0800") References: <20250113-audio_drvier-v1-0-8c14770f38a0@amlogic.com> <20250113-audio_drvier-v1-2-8c14770f38a0@amlogic.com> <1jwmey9451.fsf@starbuckisacylon.baylibre.com> User-Agent: mu4e 1.12.7; emacs 29.4 Date: Tue, 14 Jan 2025 12:29:36 +0100 Message-ID: <1jh6617hwf.fsf@starbuckisacylon.baylibre.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250114_032939_061745_878BBDC8 X-CRM114-Status: GOOD ( 33.95 ) 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 On Tue 14 Jan 2025 at 16:16, Jiebing Chen wrote: >>> +static const char * const s4_tdmout_sel_texts[] =3D { >>> + "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 =3D "tdm_d6"; > function =3D "tdmoutb_lane0"; > }; > } > tdm_d6 pin map the tdmoutb lane 0, right ? possibly > >>> + >>> +static const struct soc_enum tdmout_sel_enum =3D >>> + 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..e5d824fae0eba545d38dc36= e2566e7cee590e7f5 >>> --- /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 necessa= ry. > > for g12a-toacodec.c, we find the tocodec clock source can't get the=C2=A0= 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/sou= nd/soc/meson/g12a-toacodec.c?h=3Dv6.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/arc= h/arm64/boot/dts/amlogic/meson-g12a-u200.dts?h=3Dv6.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,=C2=A0 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),=C2=A0 and use the aux-devs to regi= ster,=C2=A0 > and sound card only include the > > sound-dai =3D <&tdmif_a> > > codec-0 { > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 sound-dai =3D <&acodec>; > =C2=A0}; > > and not include > > codec-1 { > =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0 sound-dai =3D <&toacodec>; > =C2=A0}; > > when tdm work, only connect the tocodec path > > =C2=A0"TDM_A Playback" ->"TOACODEC TDMA"->"TOACODEC INPUT SRC" > > iterate it find the be device ,and get the struct axg_tdm_stream, so we c= an > 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. > >>> @@ -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 =3D { >>> + .reg_bits =3D 32, >>> + .val_bits =3D 32, >>> + .reg_stride =3D 4, >>> + .max_register =3D 0x1, >>> +}; >>> + >>> +#define S4_LANE_OFFSET 8 >>> + >>> +static const char * const s4_tocodec_lane_sel_texts[] =3D { >>> + "Lane0", "Lane1", "Lane2", "Lane3", "Lane4", "Lane5", "Lane6", "L= ane7" >>> +}; >>> + >>> +static const struct soc_enum s4_tocodec_lane_sel_enum =3D >>> + SOC_ENUM_SINGLE(SND_SOC_NOPM, 0, ARRAY_SIZE(s4_tocodec_lane_sel_t= exts), >>> + s4_tocodec_lane_sel_texts); >>> + >>> +static const struct snd_kcontrol_new s4_tocodec_lane_sel =3D >>> + SOC_DAPM_ENUM("TOCODEC LANE SEL", s4_tocodec_lane_sel_enum); >>> + >>> +static const char * const s4_tocodec_src_sel_texts[] =3D { >>> + "TDMA", "TDMB", "TDMC" >>> +}; >>> + >>> +static const struct soc_enum s4_tocodec_src_sel_enum =3D >>> + SOC_ENUM_SINGLE(SND_SOC_NOPM, 0, ARRAY_SIZE(s4_tocodec_src_sel_te= xts), >>> + s4_tocodec_src_sel_texts); >>> + >>> +static const struct snd_kcontrol_new s4_tocodec_src_sel =3D >>> + SOC_DAPM_ENUM("TOCODEC SEL", s4_tocodec_src_sel_enum); >>> + >>> +static const struct snd_kcontrol_new s4_toacodec_out_enable =3D >>> + 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_dap= m_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 =3D=3D snd_soc_dapm_dai_in) >>> + return (struct snd_soc_dai *)p->source->priv; >>> + be =3D tocodec_tdm_get_ahead_be(p->source); >>> + if (be && be->id =3D=3D TDM_IFACE) >>> + return be; >>> + } >>> + return NULL; >>> +} >>> + >>> +static unsigned int aml_simple_strtoull(const char *cp) >>> +{ >>> + unsigned int result =3D 0; >>> + unsigned int value =3D 0; >>> + unsigned int len =3D strlen(cp); >>> + >>> + while (len !=3D 0) { >>> + len--; >>> + value =3D isdigit(*cp); >>> + if (value) { >>> + value =3D *cp - '0'; >>> + } else { >>> + cp++; >>> + continue; >>> + } >>> + cp++; >>> + result =3D result * 10 + value; >>> + } >>> + return result; >>> +} >>> + >>> +static int aml_get_clk_id(const char *name) >>> +{ >>> + int clk_id =3D 0; >>> + >>> + if (strstr(name, "mst_a")) >>> + clk_id =3D 0; >>> + else if (strstr(name, "mst_b")) >>> + clk_id =3D 1; >>> + else if (strstr(name, "mst_c")) >>> + clk_id =3D 2; >>> + else if (strstr(name, "mst_d")) >>> + clk_id =3D 3; >>> + else if (strstr(name, "mst_e")) >>> + clk_id =3D 4; >>> + else if (strstr(name, "mst_f")) >>> + clk_id =3D 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 =3D snd_soc_dapm_to_component= (w->dapm); >>> + struct toacodec *priv =3D snd_soc_component_get_drvdata(component= ); >>> + unsigned int tdm_id =3D TDM_A_PAD; >>> + const char *dai_widget_name; >>> + struct snd_soc_dapm_path *p; >>> + unsigned int lane =3D 0; >>> + unsigned int val =3D 0; >>> + struct clk *sclk, *mclk; >>> + char *clk_name; >>> + int mclk_id, sclk_id; >>> + >>> + be =3D tocodec_tdm_get_ahead_be(w); >>> + if (!be) { >>> + dev_err(component->dev, "%s not find the be\n", __func__); >>> + return -EINVAL; >>> + } >>> + stream =3D snd_soc_dai_dma_data_get_playback(be); >>> + if (!stream) { >>> + dev_err(component->dev, "%s not find the stream\n", __fun= c__); >>> + return -EINVAL; >>> + } >>> + /*we like to use dai id, but it is fixed val*/ >>> + dai_widget_name =3D be->stream[SNDRV_PCM_STREAM_PLAYBACK].widget-= >name; >>> + if (strstr(dai_widget_name, "TDM_A")) >>> + tdm_id =3D TDM_A_PAD; >>> + else if (strstr(dai_widget_name, "TDM_B")) >>> + tdm_id =3D TDM_B_PAD; >>> + else if (strstr(dai_widget_name, "TDM_C")) >>> + tdm_id =3D TDM_C_PAD; >>> + snd_soc_dapm_widget_for_each_source_path(w, p) { >>> + if (p->connect && p->name) { >>> + lane =3D aml_simple_strtoull(p->name); >>> + val =3D lane + tdm_id * S4_LANE_OFFSET; >>> + regmap_field_write(priv->field_dat_sel, val); >>> + } >>> + } >>> + iface =3D stream->iface; >>> + mclk =3D iface->mclk; >>> + sclk =3D iface->sclk; >>> + mclk_id =3D aml_get_clk_id(__clk_get_name(mclk)); >>> + sclk_id =3D 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 =3D snd_soc_dapm_to_component= (w->dapm); >>> + int ret =3D 0; >>> + >>> + switch (event) { >>> + case SND_SOC_DAPM_PRE_PMU: >>> + ret =3D 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 =3D 0; >>> + unsigned int mask =3D 0, val =3D 0; >>> + struct snd_soc_component *component =3D 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 =3D 1 << CTRL0_MCLK_ENABLE_SHIFT | 1 << CTRL0_BCLK_E= NABLE_SHIFT; >>> + val =3D 1 << CTRL0_MCLK_ENABLE_SHIFT | 1 << CTRL0_BCLK_EN= ABLE_SHIFT; >>> + snd_soc_component_update_bits(component, TOACODEC_CTRL0, = mask, val); >>> + break; >>> + case SND_SOC_DAPM_PRE_PMD: >>> + mask =3D 1 << CTRL0_MCLK_ENABLE_SHIFT | 1 << CTRL0_BCLK_E= NABLE_SHIFT; >>> + val =3D 0 << CTRL0_MCLK_ENABLE_SHIFT | 0 << CTRL0_BCLK_EN= ABLE_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[] =3D { >>> + 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[] =3D { >>> + { "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 = =3D { >>> + .dapm_widgets =3D s4_toacodec_widgets, >>> + .num_dapm_widgets =3D ARRAY_SIZE(s4_toacodec_widgets), >>> + .dapm_routes =3D s4_tocodec_dapm_routes, >>> + .num_dapm_routes =3D ARRAY_SIZE(s4_tocodec_dapm_routes), >>> +}; >>> + >>> +static const struct toacodec_match_data s4_toacodec_match_data =3D { >>> + .component_drv =3D &s4_tocodec_component_drv, >>> + .field_dat_sel =3D REG_FIELD(TOACODEC_CTRL0, 16, 20), >>> + .field_lrclk_sel =3D REG_FIELD(TOACODEC_CTRL0, 12, 14), >>> + .field_bclk_sel =3D REG_FIELD(TOACODEC_CTRL0, 4, 6), >>> + .field_mclk_sel =3D REG_FIELD(TOACODEC_CTRL0, 0, 2), >>> +}; >>> + >>> +static const struct of_device_id s4_tocodec_of_match[] =3D { >>> + { >>> + .compatible =3D "amlogic,s4-tocodec", >>> + .data =3D &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 =3D &pdev->dev; >>> + struct toacodec *priv; >>> + void __iomem *regs; >>> + struct regmap *map; >>> + int ret; >>> + >>> + data =3D device_get_match_data(dev); >>> + if (!data) >>> + return dev_err_probe(dev, -ENODEV, "failed to match devic= e\n"); >>> + priv =3D devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); >>> + if (!priv) >>> + return -ENOMEM; >>> + >>> + platform_set_drvdata(pdev, priv); >>> + >>> + ret =3D device_reset(dev); >>> + if (ret) >>> + return ret; >>> + >>> + regs =3D devm_platform_ioremap_resource(pdev, 0); >>> + if (IS_ERR(regs)) >>> + return PTR_ERR(regs); >>> + >>> + map =3D devm_regmap_init_mmio(dev, regs, &tocodec_regmap_cfg); >>> + if (IS_ERR(map)) >>> + return dev_err_probe(dev, PTR_ERR(map), "failed to init r= egmap\n"); >>> + >>> + priv->field_dat_sel =3D devm_regmap_field_alloc(dev, map, data->f= ield_dat_sel); >>> + if (IS_ERR(priv->field_dat_sel)) >>> + return PTR_ERR(priv->field_dat_sel); >>> + >>> + priv->field_lrclk_sel =3D 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 =3D 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 =3D 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 =3D { >>> + .probe =3D tocodec_probe, >>> + .driver =3D { >>> + .name =3D "s4-tocodec", >>> + .of_match_table =3D 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..2db1cd18cf2cea507f3d728= 2054e03d953586648 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 =3D { >>> .channels_min =3D 1, >>> .channels_max =3D 2, >>> .rates =3D SNDRV_PCM_RATE_8000_96000, >>> - .formats =3D (SNDRV_PCM_FMTBIT_S8 | >>> - SNDRV_PCM_FMTBIT_S16_LE | >>> - SNDRV_PCM_FMTBIT_S20_LE | >>> - SNDRV_PCM_FMTBIT_S24_LE), >>> + .formats =3D (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 =3D &t9015_dai_ops, >>> }; >> -- >> Jerome --=20 Jerome