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 mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5C718C433EF for ; Fri, 19 Nov 2021 05:42:46 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 1B37061AF0 for ; Fri, 19 Nov 2021 05:42:46 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 1B37061AF0 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=sholland.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.infradead.org 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:References:In-Reply-To: Message-Id:Date: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=+ynWpeog7i7aN5x4ExcweAXqe11dCayFB6VX8qe+dV0=; b=m80vTgn3/LHXta jjAW+f0d1a/yqWzxthqYuydpQi46CtWJByb96tIN+IU+Acf6GxsHUKkLq+uhStJK00wOJNFXGH8G5 FjlIO4sC5Z9EJKACGU611ERM+z5UlqOgdKld/9PaXka7on8bkLeI8muxpY95F0lWfU6nFgnJukTC/ WioAa9MXccB7EOX9MUPjdir9tIMa/H6GQExdwbPdn0pIgOEuWhha8UyPqV+Gy14zLFeMP5CbuqjFd GmlxwjEjgxgunXE48PsPkPDhEjNTGVcNblrsuHXPbj31Fw4RwIqCR81itxVwd4AqVlCZKWF8ZpAcG vhqkFGsXkdZgT7hBQj1A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mnwe2-009Ubh-Cw; Fri, 19 Nov 2021 05:41:06 +0000 Received: from wnew1-smtp.messagingengine.com ([64.147.123.26]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mnwdm-009UZI-Ij for linux-arm-kernel@lists.infradead.org; Fri, 19 Nov 2021 05:40:53 +0000 Received: from compute5.internal (compute5.nyi.internal [10.202.2.45]) by mailnew.west.internal (Postfix) with ESMTP id 764B12B0114A; Fri, 19 Nov 2021 00:40:49 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute5.internal (MEProxy); Fri, 19 Nov 2021 00:40:50 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sholland.org; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-type:content-transfer-encoding; s=fm1; bh= TpRhN1k597TreggN4ZMHc7KjRI56T3DTTx2Ff6AiAB0=; b=MIOOBodsu7T2tt7L 29ugfwDu/l7BjZaZ4tB5JMojoQjJSSzbqId3GAvpNWjMQ4Rnx2h8wJB2LUKOw7JQ 0xWxrCD9gygH/zQm7d0e1MvjvO1+WT0kz97YWEgYg6m9bPk0F+0aOKEQYU1rCwmv NL4AWAzAWQlPfqGQbDTOmvQEs8dx77gCyDr9/X+43+3wqKM0SiV6/OQBPs4CTdDx wRDtFNpeTTnrsJ1UttFFZ7cOIxAWFuLrumo3cROtMeXPvk37ESwu9SPHSg744Lc4 esMK5Ri+Ww9PO5pkKLpS3HlJwgEQumdW8boJgm7uCDSDu5LEWICK5b+IJY7qxQZN w8wn5g== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:content-type :date:from:in-reply-to:message-id:mime-version:references :subject:to:x-me-proxy:x-me-proxy:x-me-sender:x-me-sender :x-sasl-enc; s=fm1; bh=TpRhN1k597TreggN4ZMHc7KjRI56T3DTTx2Ff6AiA B0=; b=g70b/GV6QQeJuM3fQKlVNkobyVfikpL+rtbgJEqlP2dPgNELEIjqMSO3E 4n0kwEdHazq8xslpYX2ef6gcnO2KRrJBuL8lJrfPlBmWBRUfoLwpr6yAscR8HLhI Vvojt9Uf6a0FCqN7sTw1vs6C4KCxjAOqwADEnow5W9lhVprm3snaKMy3cPUWUuO4 DgFt6VfQyqmFj49CmSuuWAK+g6aD+zlafEvGMqr/bB0LYYH8dLrUUwpE5f28R16W Iqh+sIv68p24SxheFwDAGfnkKcmlw1RReuRuXWbLVR9D2U8MPJzeVfSv+SfT10B8 lJgviXzvs7Q2+GFyxLiZbYRvTMvZA== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvuddrfeejgdekgecutefuodetggdotefrodftvf curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu uegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenuc fjughrpefhvffufffkofgjfhggtgfgsehtkeertdertdejnecuhfhrohhmpefurghmuhgv lhcujfholhhlrghnugcuoehsrghmuhgvlhesshhhohhllhgrnhgurdhorhhgqeenucggtf frrghtthgvrhhnpeefvdffteegudeitdffgfelledvhfehkeekudffteduvdegfeefudef hfegheeujeenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhroh hmpehsrghmuhgvlhesshhhohhllhgrnhgurdhorhhg X-ME-Proxy: Received: by mail.messagingengine.com (Postfix) with ESMTPA; Fri, 19 Nov 2021 00:40:48 -0500 (EST) From: Samuel Holland To: Pavel Machek , linux-leds@vger.kernel.org Cc: Maxime Ripard , Chen-Yu Tsai , Jernej Skrabec , linux-sunxi@lists.linux.dev, linux-arm-kernel@lists.infradead.org, Rob Herring , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Samuel Holland Subject: [PATCH v3 2/2] leds: sun50i-r329: New driver for the R329/D1 LED controller Date: Thu, 18 Nov 2021 23:40:43 -0600 Message-Id: <20211119054044.16286-2-samuel@sholland.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20211119054044.16286-1-samuel@sholland.org> References: <20211119054044.16286-1-samuel@sholland.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211118_214050_696549_234628D0 X-CRM114-Status: GOOD ( 27.42 ) 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: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org U29tZSBBbGx3aW5uZXIgc3VueGkgU29Dcywgc3RhcnRpbmcgd2l0aCB0aGUgUjMyOSwgY29udGFp biBhbiBMRUQKY29udHJvbGxlciBkZXNpZ25lZCB0byBkcml2ZSBSR0IgTEVEIHBpeGVscy4gQWRk IGEgZHJpdmVyIGZvciBpdCB1c2luZwp0aGUgbXVsdGljb2xvciBMRUQgZnJhbWV3b3JrLCBhbmQg d2l0aCBMRURzIGRlZmluZWQgaW4gdGhlIGRldmljZSB0cmVlLgoKU2lnbmVkLW9mZi1ieTogU2Ft dWVsIEhvbGxhbmQgPHNhbXVlbEBzaG9sbGFuZC5vcmc+Ci0tLQoKQ2hhbmdlcyBpbiB2MzoKIC0g QWRkZWQgdmVuZG9yIHByZWZpeCB0byB0aW1pbmcvZm9ybWF0IHByb3BlcnRpZXMKIC0gUmVuYW1l ZCAiZm9ybWF0IiBwcm9wZXJ0eSB0byAicGl4ZWwtZm9ybWF0IiBmb3IgY2xhcml0eQogLSBEcm9w cGVkICJ2bGVkLXN1cHBseSIgYXMgaXQgaXMgdW5yZWxhdGVkIHRvIHRoZSBjb250cm9sbGVyIGhh cmR3YXJlCiAtIENoYW5nZWQgIndyaXRlc2wiIHRvICJpb3dyaXRlMzJfcmVwIiBzbyB0aGUgZHJp dmVyIGJ1aWxkcyBvbiBocHBhCgpDaGFuZ2VzIGluIHYyOgogLSBSZW5hbWVkIGZyb20gc3VueGkt bGVkYyB0byBzdW41MGktcjMyOS1sZWRjCiAtIEFkZGVkIG1pc3NpbmcgInN0YXRpYyIgdG8gZnVu Y3Rpb25zL2dsb2JhbHMgYXMgcmVwb3J0ZWQgYnkgMGRheSBib3QKCiBkcml2ZXJzL2xlZHMvS2Nv bmZpZyAgICAgICAgICAgIHwgICA4ICsKIGRyaXZlcnMvbGVkcy9NYWtlZmlsZSAgICAgICAgICAg fCAgIDEgKwogZHJpdmVycy9sZWRzL2xlZHMtc3VuNTBpLXIzMjkuYyB8IDU1MyArKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCA1NjIgaW5zZXJ0aW9ucygr KQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbGVkcy9sZWRzLXN1bjUwaS1yMzI5LmMKCmRp ZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvS2NvbmZpZyBiL2RyaXZlcnMvbGVkcy9LY29uZmlnCmlu ZGV4IGVkODAwZjVkYTdkOC4uZDVjMTM5Njc4OGZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMv S2NvbmZpZworKysgYi9kcml2ZXJzL2xlZHMvS2NvbmZpZwpAQCAtMjk3LDYgKzI5NywxNCBAQCBj b25maWcgTEVEU19TVU5GSVJFCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRo ZSBMZWZ0LCBNaWRkbGUsIGFuZCBSaWdodAogCSAgTEVEcyBvbiB0aGUgSS9PIGFuZCBDUFUgYm9h cmRzIG9mIFN1bkZpcmUgVWx0cmFTUEFSQyBzZXJ2ZXJzLgogCitjb25maWcgTEVEU19TVU41MElf UjMyOQorCXRyaXN0YXRlICJMRUQgc3VwcG9ydCBmb3IgQWxsd2lubmVyIFIzMjkgTEVEIGNvbnRy b2xsZXIiCisJZGVwZW5kcyBvbiBMRURTX0NMQVNTCisJZGVwZW5kcyBvbiBBUkNIX1NVTlhJIHx8 IENPTVBJTEVfVEVTVAorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3Ig dGhlIFJHQiBMRUQgY29udHJvbGxlcgorCSAgcHJvdmlkZWQgaW4gc29tZSBBbGx3aW5uZXIgc3Vu eGkgU29DcywgbGlrZSB0aGUgUjMyOS4KKwogY29uZmlnIExFRFNfSVBBUV9NSUNSTwogCXRyaXN0 YXRlICJMRUQgU3VwcG9ydCBmb3IgdGhlIENvbXBhcSBpUEFRIGgzeHh4IgogCWRlcGVuZHMgb24g TEVEU19DTEFTUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL01ha2VmaWxlIGIvZHJpdmVycy9s ZWRzL01ha2VmaWxlCmluZGV4IGM2MzZlYzA2OTYxMi4uNTA2YjI2MTcwOTlkIDEwMDY0NAotLS0g YS9kcml2ZXJzL2xlZHMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9sZWRzL01ha2VmaWxlCkBAIC03 Nyw2ICs3Nyw3IEBAIG9iai0kKENPTkZJR19MRURTX1BXTSkJCQkrPSBsZWRzLXB3bS5vCiBvYmot JChDT05GSUdfTEVEU19SRUdVTEFUT1IpCQkrPSBsZWRzLXJlZ3VsYXRvci5vCiBvYmotJChDT05G SUdfTEVEU19TM0MyNFhYKQkJKz0gbGVkcy1zM2MyNHh4Lm8KIG9iai0kKENPTkZJR19MRURTX1ND MjdYWF9CTFRDKQkJKz0gbGVkcy1zYzI3eHgtYmx0Yy5vCitvYmotJChDT05GSUdfTEVEU19TVU41 MElfUjMyOSkJCSs9IGxlZHMtc3VuNTBpLXIzMjkubwogb2JqLSQoQ09ORklHX0xFRFNfU1VORklS RSkJCSs9IGxlZHMtc3VuZmlyZS5vCiBvYmotJChDT05GSUdfTEVEU19TWVNDT04pCQkrPSBsZWRz LXN5c2Nvbi5vCiBvYmotJChDT05GSUdfTEVEU19UQ0E2NTA3KQkJKz0gbGVkcy10Y2E2NTA3Lm8K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWRzLXN1bjUwaS1yMzI5LmMgYi9kcml2ZXJzL2xl ZHMvbGVkcy1zdW41MGktcjMyOS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwMC4uYWRhNjYyNWUyYmJjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9sZWRzL2xlZHMt c3VuNTBpLXIzMjkuYwpAQCAtMCwwICsxLDU1MyBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMjEgU2FtdWVsIEhvbGxhbmQgPHNh bXVlbEBzaG9sbGFuZC5vcmc+CisvLworLy8gUGFydGx5IGJhc2VkIG9uIGRyaXZlcnMvbGVkcy9s ZWRzLXR1cnJpcy1vbW5pYS5jLCB3aGljaCBpczoKKy8vICAgICBDb3B5cmlnaHQgKGMpIDIwMjAg YnkgTWFyZWsgQmVow7puIDxrYWJlbEBrZXJuZWwub3JnPgorLy8KKworI2luY2x1ZGUgPGxpbnV4 L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgv ZG1hZW5naW5lLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGlu dXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9sZWQtY2xhc3MtbXVsdGljb2xvci5oPgorI2luY2x1 ZGUgPGxpbnV4L2xlZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxs aW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUg PGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvcmVzZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9z cGlubG9jay5oPgorCisjZGVmaW5lIExFRENfQ1RSTF9SRUcJCQkweDAwMDAKKyNkZWZpbmUgTEVE Q19DVFJMX1JFR19EQVRBX0xFTkdUSAkJKDB4MWZmZiA8PCAxNikKKyNkZWZpbmUgTEVEQ19DVFJM X1JFR19SR0JfTU9ERQkJCSgweDcgPDwgNikKKyNkZWZpbmUgTEVEQ19DVFJMX1JFR19MRURDX0VO CQkJQklUKDApCisjZGVmaW5lIExFRENfVDAxX1RJTUlOR19DVFJMX1JFRwkweDAwMDQKKyNkZWZp bmUgTEVEQ19UMDFfVElNSU5HX0NUUkxfUkVHX1QxSAkJKDB4M2YgPDwgMjEpCisjZGVmaW5lIExF RENfVDAxX1RJTUlOR19DVFJMX1JFR19UMUwJCSgweDFmIDw8IDE2KQorI2RlZmluZSBMRURDX1Qw MV9USU1JTkdfQ1RSTF9SRUdfVDBICQkoMHgxZiA8PCA2KQorI2RlZmluZSBMRURDX1QwMV9USU1J TkdfQ1RSTF9SRUdfVDBMCQkoMHgzZiA8PCAwKQorI2RlZmluZSBMRURDX1JFU0VUX1RJTUlOR19D VFJMX1JFRwkweDAwMGMKKyNkZWZpbmUgTEVEQ19SRVNFVF9USU1JTkdfQ1RSTF9SRUdfTEVEX05V TQkoMHgzZmYgPDwgMCkKKyNkZWZpbmUgTEVEQ19EQVRBX1JFRwkJCTB4MDAxNAorI2RlZmluZSBM RURDX0RNQV9DVFJMX1JFRwkJMHgwMDE4CisjZGVmaW5lIExFRENfRE1BX0NUUkxfUkVHX0ZJRk9f VFJJR19MRVZFTAkoMHgxZiA8PCAwKQorI2RlZmluZSBMRURDX0lOVF9DVFJMX1JFRwkJMHgwMDFj CisjZGVmaW5lIExFRENfSU5UX0NUUkxfUkVHX0dMT0JBTF9JTlRfRU4JCUJJVCg1KQorI2RlZmlu ZSBMRURDX0lOVF9DVFJMX1JFR19GSUZPX0NQVVJFUV9JTlRfRU4JQklUKDEpCisjZGVmaW5lIExF RENfSU5UX0NUUkxfUkVHX1RSQU5TX0ZJTklTSF9JTlRfRU4JQklUKDApCisjZGVmaW5lIExFRENf SU5UX1NUU19SRUcJCTB4MDAyMAorI2RlZmluZSBMRURDX0lOVF9TVFNfUkVHX0ZJRk9fQ1BVUkVR X0lOVAlCSVQoMSkKKyNkZWZpbmUgTEVEQ19JTlRfU1RTX1JFR19UUkFOU19GSU5JU0hfSU5UCUJJ VCgwKQorCisjZGVmaW5lIExFRENfRklGT19ERVBUSAkJCTMyCisjZGVmaW5lIExFRENfTUFYX0xF RFMJCQkxMDI0CisKKyNkZWZpbmUgTEVEU19UT19CWVRFUyhuKQkJKChuKSAqIHNpemVvZih1MzIp KQorCitzdHJ1Y3Qgc3VuNTBpX3IzMjlfbGVkY19sZWQgeworCXN0cnVjdCBsZWRfY2xhc3NkZXZf bWMgbWNfY2RldjsKKwlzdHJ1Y3QgbWNfc3VibGVkIHN1YmxlZF9pbmZvWzNdOworfTsKKyNkZWZp bmUgdG9fbGVkY19sZWQobWMpIGNvbnRhaW5lcl9vZihtYywgc3RydWN0IHN1bjUwaV9yMzI5X2xl ZGNfbGVkLCBtY19jZGV2KQorCitzdHJ1Y3Qgc3VuNTBpX3IzMjlfbGVkY190aW1pbmcgeworCXUz MiB0MGhfbnM7CisJdTMyIHQwbF9uczsKKwl1MzIgdDFoX25zOworCXUzMiB0MWxfbnM7CisJdTMy IHRyZXNldF9uczsKK307CisKK3N0cnVjdCBzdW41MGlfcjMyOV9sZWRjIHsKKwlzdHJ1Y3QgZGV2 aWNlICpkZXY7CisJdm9pZCBfX2lvbWVtICpiYXNlOworCXN0cnVjdCBjbGsgKmJ1c19jbGs7CisJ c3RydWN0IGNsayAqbW9kX2NsazsKKwlzdHJ1Y3QgcmVzZXRfY29udHJvbCAqcmVzZXQ7CisKKwl1 MzIgKmJ1ZmZlcjsKKwlzdHJ1Y3QgZG1hX2NoYW4gKmRtYV9jaGFuOworCWRtYV9hZGRyX3QgZG1h X2hhbmRsZTsKKwlpbnQgcGlvX2xlbmd0aDsKKwlpbnQgcGlvX29mZnNldDsKKworCXNwaW5sb2Nr X3QgbG9jazsKKwlpbnQgbmV4dF9sZW5ndGg7CisJYm9vbCB4ZmVyX2FjdGl2ZTsKKworCXUzMiBm b3JtYXQ7CisJc3RydWN0IHN1bjUwaV9yMzI5X2xlZGNfdGltaW5nIHRpbWluZzsKKworCWludCBu dW1fbGVkczsKKwlzdHJ1Y3Qgc3VuNTBpX3IzMjlfbGVkY19sZWQgbGVkc1tdOworfTsKKworc3Rh dGljIGludCBzdW41MGlfcjMyOV9sZWRjX2RtYV94ZmVyKHN0cnVjdCBzdW41MGlfcjMyOV9sZWRj ICpwcml2LCBpbnQgbGVuZ3RoKQoreworCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAq ZGVzYzsKKwlkbWFfY29va2llX3QgY29va2llOworCisJZGVzYyA9IGRtYWVuZ2luZV9wcmVwX3Ns YXZlX3NpbmdsZShwcml2LT5kbWFfY2hhbiwgcHJpdi0+ZG1hX2hhbmRsZSwKKwkJCQkJICAgTEVE U19UT19CWVRFUyhsZW5ndGgpLAorCQkJCQkgICBETUFfTUVNX1RPX0RFViwgMCk7CisJaWYgKCFk ZXNjKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNvb2tpZSA9IGRtYWVuZ2luZV9zdWJtaXQoZGVz Yyk7CisJaWYgKGRtYV9zdWJtaXRfZXJyb3IoY29va2llKSkKKwkJcmV0dXJuIC1FSU87CisKKwlk bWFfYXN5bmNfaXNzdWVfcGVuZGluZyhwcml2LT5kbWFfY2hhbik7CisKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIHZvaWQgc3VuNTBpX3IzMjlfbGVkY19waW9feGZlcihzdHJ1Y3Qgc3VuNTBpX3Iz MjlfbGVkYyAqcHJpdiwgaW50IGxlbmd0aCkKK3sKKwl1MzIgYnVyc3QsIG9mZnNldCwgdmFsOwor CisJaWYgKGxlbmd0aCkgeworCQkvKiBOZXcgdHJhbnNmZXIgKEZJRk8gaXMgZW1wdHkpLiAqLwor CQlvZmZzZXQgPSAwOworCQlidXJzdCAgPSBtaW4obGVuZ3RoLCBMRURDX0ZJRk9fREVQVEgpOwor CX0gZWxzZSB7CisJCS8qIEV4aXN0aW5nIHRyYW5zZmVyIChGSUZPIGlzIGhhbGYtZnVsbCkuICov CisJCWxlbmd0aCA9IHByaXYtPnBpb19sZW5ndGg7CisJCW9mZnNldCA9IHByaXYtPnBpb19vZmZz ZXQ7CisJCWJ1cnN0ICA9IG1pbihsZW5ndGgsIExFRENfRklGT19ERVBUSCAvIDIpOworCX0KKwor CWlvd3JpdGUzMl9yZXAocHJpdi0+YmFzZSArIExFRENfREFUQV9SRUcsIHByaXYtPmJ1ZmZlciAr IG9mZnNldCwgYnVyc3QpOworCisJaWYgKGJ1cnN0IDwgbGVuZ3RoKSB7CisJCXByaXYtPnBpb19s ZW5ndGggPSBsZW5ndGggLSBidXJzdDsKKwkJcHJpdi0+cGlvX29mZnNldCA9IG9mZnNldCArIGJ1 cnN0OworCisJCWlmICghb2Zmc2V0KSB7CisJCQl2YWwgPSByZWFkbChwcml2LT5iYXNlICsgTEVE Q19JTlRfQ1RSTF9SRUcpOworCQkJdmFsIHw9IExFRENfSU5UX0NUUkxfUkVHX0ZJRk9fQ1BVUkVR X0lOVF9FTjsKKwkJCXdyaXRlbCh2YWwsIHByaXYtPmJhc2UgKyBMRURDX0lOVF9DVFJMX1JFRyk7 CisJCX0KKwl9IGVsc2UgeworCQkvKiBEaXNhYmxlIHRoZSByZXF1ZXN0IElSUSBvbmNlIGFsbCBk YXRhIGlzIHdyaXR0ZW4uICovCisJCXZhbCA9IHJlYWRsKHByaXYtPmJhc2UgKyBMRURDX0lOVF9D VFJMX1JFRyk7CisJCXZhbCAmPSB+TEVEQ19JTlRfQ1RSTF9SRUdfRklGT19DUFVSRVFfSU5UX0VO OworCQl3cml0ZWwodmFsLCBwcml2LT5iYXNlICsgTEVEQ19JTlRfQ1RSTF9SRUcpOworCX0KK30K Kworc3RhdGljIHZvaWQgc3VuNTBpX3IzMjlfbGVkY19zdGFydF94ZmVyKHN0cnVjdCBzdW41MGlf cjMyOV9sZWRjICpwcml2LAorCQkJCQlpbnQgbGVuZ3RoKQoreworCXUzMiB2YWw7CisKKwlkZXZf ZGJnKHByaXYtPmRldiwgIlVwZGF0aW5nICVkIExFRHNcbiIsIGxlbmd0aCk7CisKKwl2YWwgPSBy ZWFkbChwcml2LT5iYXNlICsgTEVEQ19DVFJMX1JFRyk7CisJdmFsICY9IH5MRURDX0NUUkxfUkVH X0RBVEFfTEVOR1RIOworCXZhbCB8PSBsZW5ndGggPDwgMTYgfCBMRURDX0NUUkxfUkVHX0xFRENf RU47CisJd3JpdGVsKHZhbCwgcHJpdi0+YmFzZSArIExFRENfQ1RSTF9SRUcpOworCisJaWYgKGxl bmd0aCA+IExFRENfRklGT19ERVBUSCkgeworCQlpbnQgcmV0ID0gc3VuNTBpX3IzMjlfbGVkY19k bWFfeGZlcihwcml2LCBsZW5ndGgpOworCisJCWlmICghcmV0KQorCQkJcmV0dXJuOworCisJCWRl dl93YXJuKHByaXYtPmRldiwgIkZhaWxlZCB0byBzZXQgdXAgRE1BOiAlZFxuIiwgcmV0KTsKKwl9 CisKKwlzdW41MGlfcjMyOV9sZWRjX3Bpb194ZmVyKHByaXYsIGxlbmd0aCk7Cit9CisKK3N0YXRp YyBpcnFyZXR1cm5fdCBzdW41MGlfcjMyOV9sZWRjX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQp Cit7CisJc3RydWN0IHN1bjUwaV9yMzI5X2xlZGMgKnByaXYgPSBkZXZfaWQ7CisJdTMyIHZhbDsK KworCXZhbCA9IHJlYWRsKHByaXYtPmJhc2UgKyBMRURDX0lOVF9TVFNfUkVHKTsKKworCWlmICh2 YWwgJiBMRURDX0lOVF9TVFNfUkVHX1RSQU5TX0ZJTklTSF9JTlQpIHsKKwkJaW50IG5leHRfbGVu Z3RoOworCisJCS8qIFN0YXJ0IHRoZSBuZXh0IHRyYW5zZmVyIGlmIG5lZWRlZC4gKi8KKwkJc3Bp bl9sb2NrKCZwcml2LT5sb2NrKTsKKwkJbmV4dF9sZW5ndGggPSBwcml2LT5uZXh0X2xlbmd0aDsK KwkJaWYgKG5leHRfbGVuZ3RoKQorCQkJcHJpdi0+bmV4dF9sZW5ndGggPSAwOworCQllbHNlCisJ CQlwcml2LT54ZmVyX2FjdGl2ZSA9IGZhbHNlOworCQlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7 CisKKwkJaWYgKG5leHRfbGVuZ3RoKQorCQkJc3VuNTBpX3IzMjlfbGVkY19zdGFydF94ZmVyKHBy aXYsIG5leHRfbGVuZ3RoKTsKKwl9IGVsc2UgaWYgKHZhbCAmIExFRENfSU5UX1NUU19SRUdfRklG T19DUFVSRVFfSU5UKSB7CisJCS8qIENvbnRpbnVlIHRoZSBjdXJyZW50IHRyYW5zZmVyLiAqLwor CQlzdW41MGlfcjMyOV9sZWRjX3Bpb194ZmVyKHByaXYsIDApOworCX0KKworCXdyaXRlbCh2YWws IHByaXYtPmJhc2UgKyBMRURDX0lOVF9TVFNfUkVHKTsKKworCXJldHVybiBJUlFfSEFORExFRDsK K30KKworc3RhdGljIHZvaWQgc3VuNTBpX3IzMjlfbGVkY19icmlnaHRuZXNzX3NldChzdHJ1Y3Qg bGVkX2NsYXNzZGV2ICpjZGV2LAorCQkJCQkgICAgZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRu ZXNzKQoreworCXN0cnVjdCBzdW41MGlfcjMyOV9sZWRjICpwcml2ID0gZGV2X2dldF9kcnZkYXRh KGNkZXYtPmRldi0+cGFyZW50KTsKKwlzdHJ1Y3QgbGVkX2NsYXNzZGV2X21jICptY19jZGV2ID0g bGNkZXZfdG9fbWNjZGV2KGNkZXYpOworCXN0cnVjdCBzdW41MGlfcjMyOV9sZWRjX2xlZCAqbGVk ID0gdG9fbGVkY19sZWQobWNfY2Rldik7CisJaW50IGFkZHIgPSBsZWQgLSBwcml2LT5sZWRzOwor CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJYm9vbCB4ZmVyX2FjdGl2ZTsKKwlpbnQgbmV4dF9sZW5n dGg7CisKKwlsZWRfbWNfY2FsY19jb2xvcl9jb21wb25lbnRzKG1jX2NkZXYsIGJyaWdodG5lc3Mp OworCisJcHJpdi0+YnVmZmVyW2FkZHJdID0gbGVkLT5zdWJsZWRfaW5mb1swXS5icmlnaHRuZXNz IDw8IDE2IHwKKwkJCSAgICAgbGVkLT5zdWJsZWRfaW5mb1sxXS5icmlnaHRuZXNzIDw8ICA4IHwK KwkJCSAgICAgbGVkLT5zdWJsZWRfaW5mb1syXS5icmlnaHRuZXNzOworCisJZGV2X2RiZyhwcml2 LT5kZXYsICJMRUQgJWQgLT4gIyUwNnhcbiIsIGFkZHIsIHByaXYtPmJ1ZmZlclthZGRyXSk7CisK KwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCW5leHRfbGVuZ3RoID0g bWF4KHByaXYtPm5leHRfbGVuZ3RoLCBhZGRyICsgMSk7CisJeGZlcl9hY3RpdmUgPSBwcml2LT54 ZmVyX2FjdGl2ZTsKKwlpZiAoeGZlcl9hY3RpdmUpCisJCXByaXYtPm5leHRfbGVuZ3RoID0gbmV4 dF9sZW5ndGg7CisJZWxzZQorCQlwcml2LT54ZmVyX2FjdGl2ZSA9IHRydWU7CisJc3Bpbl91bmxv Y2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJaWYgKCF4ZmVyX2FjdGl2ZSkK KwkJc3VuNTBpX3IzMjlfbGVkY19zdGFydF94ZmVyKHByaXYsIG5leHRfbGVuZ3RoKTsKK30KKwor c3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHN1bjUwaV9yMzI5X2xlZGNfZm9ybWF0c1tdID0gewor CSJyZ2IiLAorCSJyYmciLAorCSJncmIiLAorCSJnYnIiLAorCSJicmciLAorCSJiZ3IiLAorfTsK Kworc3RhdGljIGludCBzdW41MGlfcjMyOV9sZWRjX3BhcnNlX2Zvcm1hdChjb25zdCBzdHJ1Y3Qg ZGV2aWNlX25vZGUgKm5wLAorCQkJCQkgc3RydWN0IHN1bjUwaV9yMzI5X2xlZGMgKnByaXYpCit7 CisJY29uc3QgY2hhciAqZm9ybWF0ID0gImdyYiI7CisJdTMyIGk7CisKKwlvZl9wcm9wZXJ0eV9y ZWFkX3N0cmluZyhucCwgImFsbHdpbm5lcixwaXhlbC1mb3JtYXQiLCAmZm9ybWF0KTsKKworCWZv ciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHN1bjUwaV9yMzI5X2xlZGNfZm9ybWF0cyk7ICsraSkg eworCQlpZiAoIXN0cmNtcChmb3JtYXQsIHN1bjUwaV9yMzI5X2xlZGNfZm9ybWF0c1tpXSkpIHsK KwkJCXByaXYtPmZvcm1hdCA9IGk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCWRldl9lcnIo cHJpdi0+ZGV2LCAiQmFkIHBpeGVsIGZvcm1hdCAnJXMnXG4iLCBmb3JtYXQpOworCisJcmV0dXJu IC1FSU5WQUw7Cit9CisKK3N0YXRpYyB2b2lkIHN1bjUwaV9yMzI5X2xlZGNfc2V0X2Zvcm1hdChz dHJ1Y3Qgc3VuNTBpX3IzMjlfbGVkYyAqcHJpdikKK3sKKwl1MzIgdmFsOworCisJdmFsID0gcmVh ZGwocHJpdi0+YmFzZSArIExFRENfQ1RSTF9SRUcpOworCXZhbCAmPSB+TEVEQ19DVFJMX1JFR19S R0JfTU9ERTsKKwl2YWwgfD0gcHJpdi0+Zm9ybWF0IDw8IDY7CisJd3JpdGVsKHZhbCwgcHJpdi0+ YmFzZSArIExFRENfQ1RSTF9SRUcpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHN1bjUwaV9y MzI5X2xlZGNfdGltaW5nIHN1bjUwaV9yMzI5X2xlZGNfZGVmYXVsdF90aW1pbmcgPSB7CisJLnQw aF9ucyA9IDMzNiwKKwkudDBsX25zID0gODQwLAorCS50MWhfbnMgPSA4ODIsCisJLnQxbF9ucyA9 IDI5NCwKKwkudHJlc2V0X25zID0gMzAwMDAwLAorfTsKKworc3RhdGljIGludCBzdW41MGlfcjMy OV9sZWRjX3BhcnNlX3RpbWluZyhjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAorCQkJCQkg c3RydWN0IHN1bjUwaV9yMzI5X2xlZGMgKnByaXYpCit7CisJc3RydWN0IHN1bjUwaV9yMzI5X2xl ZGNfdGltaW5nICp0aW1pbmcgPSAmcHJpdi0+dGltaW5nOworCisJKnRpbWluZyA9IHN1bjUwaV9y MzI5X2xlZGNfZGVmYXVsdF90aW1pbmc7CisKKwlvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgImFs bHdpbm5lcix0MGgtbnMiLCAmdGltaW5nLT50MGhfbnMpOworCW9mX3Byb3BlcnR5X3JlYWRfdTMy KG5wLCAiYWxsd2lubmVyLHQwbC1ucyIsICZ0aW1pbmctPnQwbF9ucyk7CisJb2ZfcHJvcGVydHlf cmVhZF91MzIobnAsICJhbGx3aW5uZXIsdDFoLW5zIiwgJnRpbWluZy0+dDFoX25zKTsKKwlvZl9w cm9wZXJ0eV9yZWFkX3UzMihucCwgImFsbHdpbm5lcix0MWwtbnMiLCAmdGltaW5nLT50MWxfbnMp OworCW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAiYWxsd2lubmVyLHRyZXNldC1ucyIsICZ0aW1p bmctPnRyZXNldF9ucyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc3VuNTBpX3Iz MjlfbGVkY19zZXRfdGltaW5nKHN0cnVjdCBzdW41MGlfcjMyOV9sZWRjICpwcml2KQoreworCWNv bnN0IHN0cnVjdCBzdW41MGlfcjMyOV9sZWRjX3RpbWluZyAqdGltaW5nID0gJnByaXYtPnRpbWlu ZzsKKwl1bnNpZ25lZCBsb25nIG1vZF9mcmVxID0gY2xrX2dldF9yYXRlKHByaXYtPm1vZF9jbGsp OworCXUzMiBjeWNsZV9ucyA9IE5TRUNfUEVSX1NFQyAvIG1vZF9mcmVxOworCXUzMiB2YWw7CisK Kwl2YWwgPSAodGltaW5nLT50MWhfbnMgLyBjeWNsZV9ucykgPDwgMjEgfAorCSAgICAgICh0aW1p bmctPnQxbF9ucyAvIGN5Y2xlX25zKSA8PCAxNiB8CisJICAgICAgKHRpbWluZy0+dDBoX25zIC8g Y3ljbGVfbnMpIDw8ICA2IHwKKwkgICAgICAodGltaW5nLT50MGxfbnMgLyBjeWNsZV9ucyk7CisJ d3JpdGVsKHZhbCwgcHJpdi0+YmFzZSArIExFRENfVDAxX1RJTUlOR19DVFJMX1JFRyk7CisKKwl2 YWwgPSAodGltaW5nLT50cmVzZXRfbnMgLyBjeWNsZV9ucykgPDwgMTYgfAorCSAgICAgIChwcml2 LT5udW1fbGVkcyAtIDEpOworCXdyaXRlbCh2YWwsIHByaXYtPmJhc2UgKyBMRURDX1JFU0VUX1RJ TUlOR19DVFJMX1JFRyk7Cit9CisKK3N0YXRpYyBpbnQgc3VuNTBpX3IzMjlfbGVkY19yZXN1bWUo c3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBzdW41MGlfcjMyOV9sZWRjICpwcml2ID0g ZGV2X2dldF9kcnZkYXRhKGRldik7CisJdTMyIHZhbDsKKwlpbnQgcmV0OworCisJcmV0ID0gcmVz ZXRfY29udHJvbF9kZWFzc2VydChwcml2LT5yZXNldCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJl dDsKKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShwcml2LT5idXNfY2xrKTsKKwlpZiAocmV0 KQorCQlnb3RvIGVycl9hc3NlcnRfcmVzZXQ7CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUo cHJpdi0+bW9kX2Nsayk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZGlzYWJsZV9idXNfY2xrOwor CisJc3VuNTBpX3IzMjlfbGVkY19zZXRfZm9ybWF0KHByaXYpOworCXN1bjUwaV9yMzI5X2xlZGNf c2V0X3RpbWluZyhwcml2KTsKKworCS8qIFRoZSB0cmlnZ2VyIGxldmVsIG11c3QgYmUgYXQgbGVh c3QgdGhlIGJ1cnN0IGxlbmd0aC4gKi8KKwl2YWwgPSByZWFkbChwcml2LT5iYXNlICsgTEVEQ19E TUFfQ1RSTF9SRUcpOworCXZhbCAmPSB+TEVEQ19ETUFfQ1RSTF9SRUdfRklGT19UUklHX0xFVkVM OworCXZhbCB8PSBMRURDX0ZJRk9fREVQVEggLyAyOworCXdyaXRlbCh2YWwsIHByaXYtPmJhc2Ug KyBMRURDX0RNQV9DVFJMX1JFRyk7CisKKwl2YWwgPSBMRURDX0lOVF9DVFJMX1JFR19HTE9CQUxf SU5UX0VOIHwKKwkgICAgICBMRURDX0lOVF9DVFJMX1JFR19UUkFOU19GSU5JU0hfSU5UX0VOOwor CXdyaXRlbCh2YWwsIHByaXYtPmJhc2UgKyBMRURDX0lOVF9DVFJMX1JFRyk7CisKKwlyZXR1cm4g MDsKKworZXJyX2Rpc2FibGVfYnVzX2NsazoKKwljbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi0+ YnVzX2Nsayk7CitlcnJfYXNzZXJ0X3Jlc2V0OgorCXJlc2V0X2NvbnRyb2xfYXNzZXJ0KHByaXYt PnJlc2V0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc3VuNTBpX3IzMjlfbGVk Y19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc3VuNTBpX3IzMjlfbGVk YyAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJl KHByaXYtPm1vZF9jbGspOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2LT5idXNfY2xrKTsK KwlyZXNldF9jb250cm9sX2Fzc2VydChwcml2LT5yZXNldCk7CisKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIHZvaWQgc3VuNTBpX3IzMjlfbGVkY19kbWFfY2xlYW51cCh2b2lkICpkYXRhKQorewor CXN0cnVjdCBzdW41MGlfcjMyOV9sZWRjICpwcml2ID0gZGF0YTsKKwlzdHJ1Y3QgZGV2aWNlICpk bWFfZGV2ID0gZG1hZW5naW5lX2dldF9kbWFfZGV2aWNlKHByaXYtPmRtYV9jaGFuKTsKKworCWlm IChwcml2LT5idWZmZXIpCisJCWRtYV9mcmVlX3djKGRtYV9kZXYsIExFRFNfVE9fQllURVMocHJp di0+bnVtX2xlZHMpLAorCQkJICAgIHByaXYtPmJ1ZmZlciwgcHJpdi0+ZG1hX2hhbmRsZSk7CisJ ZG1hX3JlbGVhc2VfY2hhbm5lbChwcml2LT5kbWFfY2hhbik7Cit9CisKK3N0YXRpYyBpbnQgc3Vu NTBpX3IzMjlfbGVkY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWNv bnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwZGV2LT5kZXYub2Zfbm9kZTsKKwlzdHJ1Y3Qg ZG1hX3NsYXZlX2NvbmZpZyBkbWFfY2ZnID0ge307CisJc3RydWN0IGxlZF9pbml0X2RhdGEgaW5p dF9kYXRhID0ge307CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3Qg ZGV2aWNlX25vZGUgKmNoaWxkOworCXN0cnVjdCBzdW41MGlfcjMyOV9sZWRjICpwcml2OworCXN0 cnVjdCByZXNvdXJjZSAqbWVtOworCWludCBjb3VudCwgaXJxLCByZXQ7CisKKwljb3VudCA9IG9m X2dldF9hdmFpbGFibGVfY2hpbGRfY291bnQobnApOworCWlmICghY291bnQpCisJCXJldHVybiAt RU5PREVWOworCWlmIChjb3VudCA+IExFRENfTUFYX0xFRFMpIHsKKwkJZGV2X2VycihkZXYsICJU b28gbWFueSBMRURzISAobWF4IGlzICVkKVxuIiwgTEVEQ19NQVhfTEVEUyk7CisJCXJldHVybiAt RUlOVkFMOworCX0KKworCXByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzdHJ1Y3Rfc2l6ZShwcml2 LCBsZWRzLCBjb3VudCksIEdGUF9LRVJORUwpOworCWlmICghcHJpdikKKwkJcmV0dXJuIC1FTk9N RU07CisKKwlwcml2LT5kZXYgPSBkZXY7CisJcHJpdi0+bnVtX2xlZHMgPSBjb3VudDsKKwlzcGlu X2xvY2tfaW5pdCgmcHJpdi0+bG9jayk7CisJZGV2X3NldF9kcnZkYXRhKGRldiwgcHJpdik7CisK KwlyZXQgPSBzdW41MGlfcjMyOV9sZWRjX3BhcnNlX2Zvcm1hdChucCwgcHJpdik7CisJaWYgKHJl dCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHN1bjUwaV9yMzI5X2xlZGNfcGFyc2VfdGltaW5n KG5wLCBwcml2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcHJpdi0+YmFzZSA9IGRl dm1fcGxhdGZvcm1fZ2V0X2FuZF9pb3JlbWFwX3Jlc291cmNlKHBkZXYsIDAsICZtZW0pOworCWlm IChJU19FUlIocHJpdi0+YmFzZSkpCisJCXJldHVybiBQVFJfRVJSKHByaXYtPmJhc2UpOworCisJ cHJpdi0+YnVzX2NsayA9IGRldm1fY2xrX2dldChkZXYsICJidXMiKTsKKwlpZiAoSVNfRVJSKHBy aXYtPmJ1c19jbGspKQorCQlyZXR1cm4gUFRSX0VSUihwcml2LT5idXNfY2xrKTsKKworCXByaXYt Pm1vZF9jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCAibW9kIik7CisJaWYgKElTX0VSUihwcml2LT5t b2RfY2xrKSkKKwkJcmV0dXJuIFBUUl9FUlIocHJpdi0+bW9kX2Nsayk7CisKKwlwcml2LT5yZXNl dCA9IGRldm1fcmVzZXRfY29udHJvbF9nZXRfZXhjbHVzaXZlKGRldiwgTlVMTCk7CisJaWYgKElT X0VSUihwcml2LT5yZXNldCkpCisJCXJldHVybiBQVFJfRVJSKHByaXYtPnJlc2V0KTsKKworCXBy aXYtPmRtYV9jaGFuID0gZG1hX3JlcXVlc3RfY2hhbihkZXYsICJ0eCIpOworCWlmIChJU19FUlIo cHJpdi0+ZG1hX2NoYW4pKQorCQlyZXR1cm4gUFRSX0VSUihwcml2LT5kbWFfY2hhbik7CisKKwly ZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoZGV2LCBzdW41MGlfcjMyOV9sZWRjX2RtYV9j bGVhbnVwLCBwcml2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZG1hX2NmZy5kc3Rf YWRkcgk9IG1lbS0+c3RhcnQgKyBMRURDX0RBVEFfUkVHOworCWRtYV9jZmcuZHN0X2FkZHJfd2lk dGgJPSBETUFfU0xBVkVfQlVTV0lEVEhfNF9CWVRFUzsKKwlkbWFfY2ZnLmRzdF9tYXhidXJzdAk9 IExFRENfRklGT19ERVBUSCAvIDI7CisJcmV0ID0gZG1hZW5naW5lX3NsYXZlX2NvbmZpZyhwcml2 LT5kbWFfY2hhbiwgJmRtYV9jZmcpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlwcml2 LT5idWZmZXIgPSBkbWFfYWxsb2Nfd2MoZG1hZW5naW5lX2dldF9kbWFfZGV2aWNlKHByaXYtPmRt YV9jaGFuKSwKKwkJCQkgICAgTEVEU19UT19CWVRFUyhwcml2LT5udW1fbGVkcyksCisJCQkJICAg ICZwcml2LT5kbWFfaGFuZGxlLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYtPmJ1ZmZlcikKKwkJ cmV0dXJuIC1FTk9NRU07CisKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlm IChpcnEgPCAwKQorCQlyZXR1cm4gaXJxOworCisJcmV0ID0gZGV2bV9yZXF1ZXN0X2lycShkZXYs IGlycSwgc3VuNTBpX3IzMjlfbGVkY19pcnEsCisJCQkgICAgICAgMCwgZGV2X25hbWUoZGV2KSwg cHJpdik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHN1bjUwaV9yMzI5X2xl ZGNfcmVzdW1lKGRldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWZvcl9lYWNoX2F2 YWlsYWJsZV9jaGlsZF9vZl9ub2RlKG5wLCBjaGlsZCkgeworCQlzdHJ1Y3Qgc3VuNTBpX3IzMjlf bGVkY19sZWQgKmxlZDsKKwkJc3RydWN0IGxlZF9jbGFzc2RldiAqY2RldjsKKwkJdTMyIGFkZHIs IGNvbG9yOworCisJCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKGNoaWxkLCAicmVnIiwgJmFk ZHIpOworCQlpZiAocmV0IHx8IGFkZHIgPj0gY291bnQpIHsKKwkJCWRldl9lcnIoZGV2LCAiTEVE ICdyZWcnIHZhbHVlcyBtdXN0IGJlIGZyb20gMCB0byAlZFxuIiwKKwkJCQlwcml2LT5udW1fbGVk cyAtIDEpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gZXJyX3B1dF9jaGlsZDsKKwkJfQor CisJCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKGNoaWxkLCAiY29sb3IiLCAmY29sb3IpOwor CQlpZiAocmV0IHx8IGNvbG9yICE9IExFRF9DT0xPUl9JRF9SR0IpIHsKKwkJCWRldl9lcnIoZGV2 LCAiTEVEICdjb2xvcicgbXVzdCBiZSBMRURfQ09MT1JfSURfUkdCXG4iKTsKKwkJCXJldCA9IC1F SU5WQUw7CisJCQlnb3RvIGVycl9wdXRfY2hpbGQ7CisJCX0KKworCQlsZWQgPSAmcHJpdi0+bGVk c1thZGRyXTsKKworCQlsZWQtPnN1YmxlZF9pbmZvWzBdLmNvbG9yX2luZGV4ID0gTEVEX0NPTE9S X0lEX1JFRDsKKwkJbGVkLT5zdWJsZWRfaW5mb1swXS5jaGFubmVsID0gMDsKKwkJbGVkLT5zdWJs ZWRfaW5mb1sxXS5jb2xvcl9pbmRleCA9IExFRF9DT0xPUl9JRF9HUkVFTjsKKwkJbGVkLT5zdWJs ZWRfaW5mb1sxXS5jaGFubmVsID0gMTsKKwkJbGVkLT5zdWJsZWRfaW5mb1syXS5jb2xvcl9pbmRl eCA9IExFRF9DT0xPUl9JRF9CTFVFOworCQlsZWQtPnN1YmxlZF9pbmZvWzJdLmNoYW5uZWwgPSAy OworCisJCWxlZC0+bWNfY2Rldi5udW1fY29sb3JzID0gQVJSQVlfU0laRShsZWQtPnN1YmxlZF9p bmZvKTsKKwkJbGVkLT5tY19jZGV2LnN1YmxlZF9pbmZvID0gbGVkLT5zdWJsZWRfaW5mbzsKKwor CQljZGV2ID0gJmxlZC0+bWNfY2Rldi5sZWRfY2RldjsKKwkJY2Rldi0+bWF4X2JyaWdodG5lc3Mg PSBVOF9NQVg7CisJCWNkZXYtPmJyaWdodG5lc3Nfc2V0ID0gc3VuNTBpX3IzMjlfbGVkY19icmln aHRuZXNzX3NldDsKKworCQlpbml0X2RhdGEuZndub2RlID0gb2ZfZndub2RlX2hhbmRsZShjaGls ZCk7CisKKwkJcmV0ID0gZGV2bV9sZWRfY2xhc3NkZXZfbXVsdGljb2xvcl9yZWdpc3Rlcl9leHQo ZGV2LAorCQkJCQkJCQkmbGVkLT5tY19jZGV2LAorCQkJCQkJCQkmaW5pdF9kYXRhKTsKKwkJaWYg KHJldCkgeworCQkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgTEVEICV1OiAlZFxu IiwKKwkJCQlhZGRyLCByZXQpOworCQkJZ290byBlcnJfcHV0X2NoaWxkOworCQl9CisJfQorCisJ ZGV2X2luZm8oZGV2LCAiUmVnaXN0ZXJlZCAlZCBMRURzXG4iLCBwcml2LT5udW1fbGVkcyk7CisK KwlyZXR1cm4gMDsKKworZXJyX3B1dF9jaGlsZDoKKwlvZl9ub2RlX3B1dChjaGlsZCk7CisJc3Vu NTBpX3IzMjlfbGVkY19zdXNwZW5kKCZwZGV2LT5kZXYpOworCisJcmV0dXJuIHJldDsKK30KKwor c3RhdGljIGludCBzdW41MGlfcjMyOV9sZWRjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICpwZGV2KQoreworCXN1bjUwaV9yMzI5X2xlZGNfc3VzcGVuZCgmcGRldi0+ZGV2KTsKKworCXJl dHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzdW41MGlfcjMyOV9sZWRjX3NodXRkb3duKHN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3VuNTBpX3IzMjlfbGVkY19zdXNwZW5kKCZw ZGV2LT5kZXYpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBzdW41MGlf cjMyOV9sZWRjX29mX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3Vu NTBpLXIzMjktbGVkYyIgfSwKKwl7fQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHN1bjUw aV9yMzI5X2xlZGNfb2ZfbWF0Y2gpOworCitzdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMoc3VuNTBp X3IzMjlfbGVkY19wbSwKKwkJCSBzdW41MGlfcjMyOV9sZWRjX3N1c3BlbmQsIHN1bjUwaV9yMzI5 X2xlZGNfcmVzdW1lKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc3VuNTBpX3Iz MjlfbGVkY19kcml2ZXIgPSB7CisJLnByb2JlCQk9IHN1bjUwaV9yMzI5X2xlZGNfcHJvYmUsCisJ LnJlbW92ZQkJPSBzdW41MGlfcjMyOV9sZWRjX3JlbW92ZSwKKwkuc2h1dGRvd24JPSBzdW41MGlf cjMyOV9sZWRjX3NodXRkb3duLAorCS5kcml2ZXIJCT0geworCQkubmFtZQkJPSAic3VuNTBpLXIz MjktbGVkYyIsCisJCS5vZl9tYXRjaF90YWJsZQk9IHN1bjUwaV9yMzI5X2xlZGNfb2ZfbWF0Y2gs CisJCS5wbQkJPSBwbV9wdHIoJnN1bjUwaV9yMzI5X2xlZGNfcG0pLAorCX0sCit9OworbW9kdWxl X3BsYXRmb3JtX2RyaXZlcihzdW41MGlfcjMyOV9sZWRjX2RyaXZlcik7CisKK01PRFVMRV9BVVRI T1IoIlNhbXVlbCBIb2xsYW5kIDxzYW11ZWxAc2hvbGxhbmQub3JnPiIpOworTU9EVUxFX0RFU0NS SVBUSU9OKCJBbGx3aW5uZXIgUjMyOSBMRUQgY29udHJvbGxlciBkcml2ZXIiKTsKK01PRFVMRV9M SUNFTlNFKCJHUEwiKTsKLS0gCjIuMzIuMAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFy bS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK