From mboxrd@z Thu Jan 1 00:00:00 1970 From: Heiko Stuebner Subject: [PATCH v4 RESEND] drm/panel: add Kingdisplay kd097d04 panel driver Date: Tue, 30 Oct 2018 10:15:28 +0100 Message-ID: <20181030091528.28211-1-heiko@sntech.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from gloria.sntech.de (gloria.sntech.de [185.11.138.130]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8CA776E157 for ; Tue, 30 Oct 2018 09:15:58 +0000 (UTC) List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: thierry.reding@gmail.com Cc: hl@rock-chips.com, briannorris@chromium.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, nickey.yang@rock-chips.com, seanpaul@chromium.org List-Id: dri-devel@lists.freedesktop.org RnJvbTogTmlja2V5IFlhbmcgPG5pY2tleS55YW5nQHJvY2stY2hpcHMuY29tPgoKU3VwcG9ydCBL aW5nZGlzcGxheSBrZDA5N2QwNCA5LjciIDE1MzZ4MjA0OCBURlQgTENEIHBhbmVsLAppdCBpcyBh IE1JUEkgZHVhbC1EU0kgcGFuZWwuCgp2NC1yZXNlbmQ6Ci0gVGhpZXJyeSBub3RlZCBtaXNzaW5n IGR0LWJpbmRpbmdzIGZvciB2NCBidXQgZm9yZ290IHRoYXQgaGUKICBhbHJlYWR5IGhhZCBhcHBs aWVkIHRoZW0gb25lIGtlcm5lbCByZWxlYXNlIGJhY2sgaW4KICBodHRwczovL2dpdC5rZXJuZWwu b3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC90b3J2YWxkcy9saW51eC5naXQvY29tbWl0Lz9p ZD1lYmM5NTBmZGZmNmQ1ZjkyNTBjZDVhNWEzNDhhZjk3ZjdkODUwOGRmCnY0OgotIGFkZHJlc3Mg UGhpbGlwcCdzIGNvbW1lbnRzCiAgLSByZWFsIHJhbmdlIGZvciB1c2xlZXBfcmFuZ2UgYW5kCiAg LSBwb3dlcm9mZiBvcmRlcmluZyBpbiBraW5nZGlzcGxheV9wYW5lbF9wcmVwYXJlCiAgLSByZXR1 cm4gdmFsdWUgYmVhdXRpZmljYXRpb24gaW4gcGFuZWxfcHJvYmUKLSB1cGRhdGUgYXV0aG9yIG5h bWluZyBmb3IgZnVsbCBuYW1lCnYzOgotIGFkZHJlc3MgVGhpZXJyeSdzIGNvbW1lbnRzCiAgLSBl cnJvciBoYW5kbGluZyBmb3IgaW5pdCBkc2kgd3JpdGVzIGluIGluaXQKICAtIHVuY29uZGl0aW9u YWxseSByZW1vdmUgdGhlIHBhbmVsCiAgLSBkb24ndCB1c2UgZHJtX3BhbmVsX2RldGFjaAogIC0g YSBiaXQgb2YgdmFyaWFibGUgc2lnbmVkbmVzIHdpZ2dsaW5nCi0gSSBkaWQgdGFsayB0byBDaHJv bWVPUyBwZW9wbGUgYW5kIHRoZSBkZWxheXMgcmVhbGx5IHNob3VsZCBiZSBhcyBzaG9ydAogIGFz IHBvc3NpYmxlLCBzbyBkcm9wcGVkIHRoZSAxMDBtcyBmcm9tIHRoZSBkZWxheSBjb21tZW50cwp2 MjoKLSB1cGRhdGUgdGltaW5nICsgY21kcyBmcm9tIGNocm9tZW9zIGtlcm5lbAotIG5ldyBiYWNr bGlnaHQgQVBJIGluY2x1ZGluZyBzd2l0Y2ggdG8gZGV2bV9vZl9maW5kX2JhY2tsaWdodAotIGZp eCBtb3N0IG9mIFNlYW4gUGF1bCdzIGNvbW1lbnRzCiAgZW5hYmxlL3ByZXBhcmUgdHJhY2tpbmcg c2VlbXMgc29tZXRoaW5nIGFsbCBwYW5lbHMgZG8KLSBkb2N1bWVudCBvcmlnaW5zIG9mIHRoZSBp bml0IHNlcXVlbmNlCi0gbGFuZXMgcGVyIGRzaSBpbnRlcmZhY2UgdG8gNCAodHdvIGludGVyZmFj ZXMpLiBNYXRjaGVzIGhvdyB0ZWdyYQogIGFuZCBwZW5kaW5nIHJvY2tjaGlwIGR1YWwtZHNpIGhh bmRsZSAoZHVhbC0pZHNpIGxhbmVzCi0gc3BkeCBoZWFkZXIgaW5zdGVhZCBvZiBsaWNlbnNlIGJv aWxlcnBsYXRlCgpTaWduZWQtb2ZmLWJ5OiBOaWNrZXkgWWFuZyA8bmlja2V5LnlhbmdAcm9jay1j aGlwcy5jb20+ClNpZ25lZC1vZmYtYnk6IEhlaWtvIFN0dWVibmVyIDxoZWlrb0BzbnRlY2guZGU+ Ci0tLQogZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcgICAgICAgICAgICAgICAgIHwgIDEx ICsKIGRyaXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtlZmlsZSAgICAgICAgICAgICAgICB8ICAgMSAr CiAuLi4vZHJtL3BhbmVsL3BhbmVsLWtpbmdkaXNwbGF5LWtkMDk3ZDA0LmMgICAgfCA0NzMgKysr KysrKysrKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDQ4NSBpbnNlcnRpb25zKCspCiBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLWtpbmdkaXNwbGF5LWtk MDk3ZDA0LmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZpZyBiL2Ry aXZlcnMvZ3B1L2RybS9wYW5lbC9LY29uZmlnCmluZGV4IDYwMjBjMzBhMzNiMy4uNDU4MjUzZGMw ODQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZpZworKysgYi9kcml2 ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZpZwpAQCAtNzcsNiArNzcsMTcgQEAgY29uZmlnIERSTV9Q QU5FTF9KRElfTFQwNzBNRTA1MDAwCiAJICBUaGUgcGFuZWwgaGFzIGEgMTIwMChSR0Ipw5cxOTIw IChXVVhHQSkgcmVzb2x1dGlvbiBhbmQgdXNlcwogCSAgMjQgYml0IHBlciBwaXhlbC4KIAorY29u ZmlnIERSTV9QQU5FTF9LSU5HRElTUExBWV9LRDA5N0QwNAorCXRyaXN0YXRlICJLaW5nZGlzcGxh eSBrZDA5N2QwNCBwYW5lbCIKKwlkZXBlbmRzIG9uIE9GCisJZGVwZW5kcyBvbiBEUk1fTUlQSV9E U0kKKwlkZXBlbmRzIG9uIEJBQ0tMSUdIVF9DTEFTU19ERVZJQ0UKKwloZWxwCisJICBTYXkgWSBo ZXJlIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBzdXBwb3J0IGZvciBLaW5nZGlzcGxheSBrZDA5N2Qw NAorCSAgVEZULUxDRCBtb2R1bGVzLiBUaGUgcGFuZWwgaGFzIGEgMTUzNngyMDQ4IHJlc29sdXRp b24gYW5kIHVzZXMKKwkgIDI0IGJpdCBSR0IgcGVyIHBpeGVsLiBJdCBwcm92aWRlcyBhIE1JUEkg RFNJIGludGVyZmFjZSB0bworCSAgdGhlIGhvc3QgYW5kIGhhcyBhIGJ1aWx0LWluIExFRCBiYWNr bGlnaHQuCisKIGNvbmZpZyBEUk1fUEFORUxfU0FNU1VOR19MRDkwNDAKIAl0cmlzdGF0ZSAiU2Ft c3VuZyBMRDkwNDAgUkdCL1NQSSBwYW5lbCIKIAlkZXBlbmRzIG9uIE9GICYmIFNQSQpkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL3Bh bmVsL01ha2VmaWxlCmluZGV4IDVjY2FhYTlkMTNhZi4uZDU5Zjc1Yjg0ZDQ4IDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Bh bmVsL01ha2VmaWxlCkBAIC02LDYgKzYsNyBAQCBvYmotJChDT05GSUdfRFJNX1BBTkVMX0lMSVRF S19JTDkzMjIpICs9IHBhbmVsLWlsaXRlay1pbGk5MzIyLm8KIG9iai0kKENPTkZJR19EUk1fUEFO RUxfSUxJVEVLX0lMSTk4ODFDKSArPSBwYW5lbC1pbGl0ZWstaWxpOTg4MWMubwogb2JqLSQoQ09O RklHX0RSTV9QQU5FTF9JTk5PTFVYX1AwNzlaQ0EpICs9IHBhbmVsLWlubm9sdXgtcDA3OXpjYS5v CiBvYmotJChDT05GSUdfRFJNX1BBTkVMX0pESV9MVDA3ME1FMDUwMDApICs9IHBhbmVsLWpkaS1s dDA3MG1lMDUwMDAubworb2JqLSQoQ09ORklHX0RSTV9QQU5FTF9LSU5HRElTUExBWV9LRDA5N0Qw NCkgKz0gcGFuZWwta2luZ2Rpc3BsYXkta2QwOTdkMDQubwogb2JqLSQoQ09ORklHX0RSTV9QQU5F TF9MR19MRzQ1NzMpICs9IHBhbmVsLWxnLWxnNDU3My5vCiBvYmotJChDT05GSUdfRFJNX1BBTkVM X09SSVNFVEVDSF9PVE04MDA5QSkgKz0gcGFuZWwtb3Jpc2V0ZWNoLW90bTgwMDlhLm8KIG9iai0k KENPTkZJR19EUk1fUEFORUxfUEFOQVNPTklDX1ZWWDEwRjAzNE4wMCkgKz0gcGFuZWwtcGFuYXNv bmljLXZ2eDEwZjAzNG4wMC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFu ZWwta2luZ2Rpc3BsYXkta2QwOTdkMDQuYyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC1r aW5nZGlzcGxheS1rZDA5N2QwNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwMC4uMmEyNWE5MTRkMDllCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Bh bmVsL3BhbmVsLWtpbmdkaXNwbGF5LWtkMDk3ZDA0LmMKQEAgLTAsMCArMSw0NzMgQEAKKy8vIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAx NywgRnV6aG91IFJvY2tjaGlwIEVsZWN0cm9uaWNzIENvLiwgTHRkCisgKi8KKworI2luY2x1ZGUg PGxpbnV4L2JhY2tsaWdodC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8vY29uc3VtZXIuaD4KKyNp bmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUg PGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgorCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNp bmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX21pcGlfZHNpLmg+Cisj aW5jbHVkZSA8ZHJtL2RybV9wYW5lbC5oPgorCisjaW5jbHVkZSA8dmlkZW8vbWlwaV9kaXNwbGF5 Lmg+CisKK3N0cnVjdCBraW5nZGlzcGxheV9wYW5lbCB7CisJc3RydWN0IGRybV9wYW5lbCBiYXNl OworCXN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmxpbms7CisKKwlzdHJ1Y3QgYmFja2xpZ2h0X2Rl dmljZSAqYmFja2xpZ2h0OworCXN0cnVjdCByZWd1bGF0b3IgKnN1cHBseTsKKwlzdHJ1Y3QgZ3Bp b19kZXNjICplbmFibGVfZ3BpbzsKKworCWJvb2wgcHJlcGFyZWQ7CisJYm9vbCBlbmFibGVkOwor fTsKKworc3RydWN0IGtpbmdkaXNwbGF5X3BhbmVsX2NtZCB7CisJY2hhciBjbWQ7CisJY2hhciBk YXRhOworfTsKKworLyoKKyAqIEFjY29yZGluZyB0byB0aGUgZGlzY3Vzc2lvbiBvbgorICogaHR0 cHM6Ly9yZXZpZXcuY29yZWJvb3Qub3JnLyMvYy9jb3JlYm9vdC8rLzIyNDcyLworICogdGhlIHBh bmVsIGluaXQgYXJyYXkgaXMgbm90IHBhcnQgb2YgdGhlIHBhbmVscyBkYXRhc2hlZXQgYnV0IGlu c3RlYWQKKyAqIGp1c3QgY2FtZSBpbiB0aGlzIGZvcm0gZnJvbSB0aGUgcGFuZWwgdmVuZG9yLgor ICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGtpbmdkaXNwbGF5X3BhbmVsX2NtZCBpbml0X2NvZGVb XSA9IHsKKwkvKiB2b2x0YWdlIHNldHRpbmcgKi8KKwl7IDB4QjAsIDB4MDAgfSwKKwl7IDB4QjIs IDB4MDIgfSwKKwl7IDB4QjMsIDB4MTEgfSwKKwl7IDB4QjQsIDB4MDAgfSwKKwl7IDB4QjYsIDB4 ODAgfSwKKwkvKiBWQ09NIGRpc2FibGUgKi8KKwl7IDB4QjcsIDB4MDIgfSwKKwl7IDB4QjgsIDB4 ODAgfSwKKwl7IDB4QkEsIDB4NDMgfSwKKwkvKiBWQ09NIHNldHRpbmcgKi8KKwl7IDB4QkIsIDB4 NTMgfSwKKwkvKiBWU1Agc2V0dGluZyAqLworCXsgMHhCQywgMHgwQSB9LAorCS8qIFZTTiBzZXR0 aW5nICovCisJeyAweEJELCAweDRBIH0sCisJLyogVkdIIHNldHRpbmcgKi8KKwl7IDB4QkUsIDB4 MkYgfSwKKwkvKiBWR0wgc2V0dGluZyAqLworCXsgMHhCRiwgMHgxQSB9LAorCXsgMHhGMCwgMHgz OSB9LAorCXsgMHhGMSwgMHgyMiB9LAorCS8qIEdhbW1hIHNldHRpbmcgKi8KKwl7IDB4QjAsIDB4 MDIgfSwKKwl7IDB4QzAsIDB4MDAgfSwKKwl7IDB4QzEsIDB4MDEgfSwKKwl7IDB4QzIsIDB4MEIg fSwKKwl7IDB4QzMsIDB4MTUgfSwKKwl7IDB4QzQsIDB4MjIgfSwKKwl7IDB4QzUsIDB4MTEgfSwK Kwl7IDB4QzYsIDB4MTUgfSwKKwl7IDB4QzcsIDB4MTkgfSwKKwl7IDB4QzgsIDB4MUEgfSwKKwl7 IDB4QzksIDB4MTYgfSwKKwl7IDB4Q0EsIDB4MTggfSwKKwl7IDB4Q0IsIDB4MTMgfSwKKwl7IDB4 Q0MsIDB4MTggfSwKKwl7IDB4Q0QsIDB4MTMgfSwKKwl7IDB4Q0UsIDB4MUMgfSwKKwl7IDB4Q0Ys IDB4MTkgfSwKKwl7IDB4RDAsIDB4MjEgfSwKKwl7IDB4RDEsIDB4MkMgfSwKKwl7IDB4RDIsIDB4 MkYgfSwKKwl7IDB4RDMsIDB4MzAgfSwKKwl7IDB4RDQsIDB4MTkgfSwKKwl7IDB4RDUsIDB4MUYg fSwKKwl7IDB4RDYsIDB4MDAgfSwKKwl7IDB4RDcsIDB4MDEgfSwKKwl7IDB4RDgsIDB4MEIgfSwK Kwl7IDB4RDksIDB4MTUgfSwKKwl7IDB4REEsIDB4MjIgfSwKKwl7IDB4REIsIDB4MTEgfSwKKwl7 IDB4REMsIDB4MTUgfSwKKwl7IDB4REQsIDB4MTkgfSwKKwl7IDB4REUsIDB4MUEgfSwKKwl7IDB4 REYsIDB4MTYgfSwKKwl7IDB4RTAsIDB4MTggfSwKKwl7IDB4RTEsIDB4MTMgfSwKKwl7IDB4RTIs IDB4MTggfSwKKwl7IDB4RTMsIDB4MTMgfSwKKwl7IDB4RTQsIDB4MUMgfSwKKwl7IDB4RTUsIDB4 MTkgfSwKKwl7IDB4RTYsIDB4MjEgfSwKKwl7IDB4RTcsIDB4MkMgfSwKKwl7IDB4RTgsIDB4MkYg fSwKKwl7IDB4RTksIDB4MzAgfSwKKwl7IDB4RUEsIDB4MTkgfSwKKwl7IDB4RUIsIDB4MUYgfSwK KwkvKiBHT0EgTVVYIHNldHRpbmcgKi8KKwl7IDB4QjAsIDB4MDEgfSwKKwl7IDB4QzAsIDB4MTAg fSwKKwl7IDB4QzEsIDB4MEYgfSwKKwl7IDB4QzIsIDB4MEUgfSwKKwl7IDB4QzMsIDB4MEQgfSwK Kwl7IDB4QzQsIDB4MEMgfSwKKwl7IDB4QzUsIDB4MEIgfSwKKwl7IDB4QzYsIDB4MEEgfSwKKwl7 IDB4QzcsIDB4MDkgfSwKKwl7IDB4QzgsIDB4MDggfSwKKwl7IDB4QzksIDB4MDcgfSwKKwl7IDB4 Q0EsIDB4MDYgfSwKKwl7IDB4Q0IsIDB4MDUgfSwKKwl7IDB4Q0MsIDB4MDAgfSwKKwl7IDB4Q0Qs IDB4MDEgfSwKKwl7IDB4Q0UsIDB4MDIgfSwKKwl7IDB4Q0YsIDB4MDMgfSwKKwl7IDB4RDAsIDB4 MDQgfSwKKwl7IDB4RDYsIDB4MTAgfSwKKwl7IDB4RDcsIDB4MEYgfSwKKwl7IDB4RDgsIDB4MEUg fSwKKwl7IDB4RDksIDB4MEQgfSwKKwl7IDB4REEsIDB4MEMgfSwKKwl7IDB4REIsIDB4MEIgfSwK Kwl7IDB4REMsIDB4MEEgfSwKKwl7IDB4REQsIDB4MDkgfSwKKwl7IDB4REUsIDB4MDggfSwKKwl7 IDB4REYsIDB4MDcgfSwKKwl7IDB4RTAsIDB4MDYgfSwKKwl7IDB4RTEsIDB4MDUgfSwKKwl7IDB4 RTIsIDB4MDAgfSwKKwl7IDB4RTMsIDB4MDEgfSwKKwl7IDB4RTQsIDB4MDIgfSwKKwl7IDB4RTUs IDB4MDMgfSwKKwl7IDB4RTYsIDB4MDQgfSwKKwl7IDB4RTcsIDB4MDAgfSwKKwl7IDB4RUMsIDB4 QzAgfSwKKwkvKiBHT0EgdGltaW5nIHNldHRpbmcgKi8KKwl7IDB4QjAsIDB4MDMgfSwKKwl7IDB4 QzAsIDB4MDEgfSwKKwl7IDB4QzIsIDB4NkYgfSwKKwl7IDB4QzMsIDB4NkYgfSwKKwl7IDB4QzUs IDB4MzYgfSwKKwl7IDB4QzgsIDB4MDggfSwKKwl7IDB4QzksIDB4MDQgfSwKKwl7IDB4Q0EsIDB4 NDEgfSwKKwl7IDB4Q0MsIDB4NDMgfSwKKwl7IDB4Q0YsIDB4NjAgfSwKKwl7IDB4RDIsIDB4MDQg fSwKKwl7IDB4RDMsIDB4MDQgfSwKKwl7IDB4RDQsIDB4MDMgfSwKKwl7IDB4RDUsIDB4MDIgfSwK Kwl7IDB4RDYsIDB4MDEgfSwKKwl7IDB4RDcsIDB4MDAgfSwKKwl7IDB4REIsIDB4MDEgfSwKKwl7 IDB4REUsIDB4MzYgfSwKKwl7IDB4RTYsIDB4NkYgfSwKKwl7IDB4RTcsIDB4NkYgfSwKKwkvKiBH T0Ugc2V0dGluZyAqLworCXsgMHhCMCwgMHgwNiB9LAorCXsgMHhCOCwgMHhBNSB9LAorCXsgMHhD MCwgMHhBNSB9LAorCXsgMHhENSwgMHgzRiB9LAorfTsKKworc3RhdGljIGlubGluZQorc3RydWN0 IGtpbmdkaXNwbGF5X3BhbmVsICp0b19raW5nZGlzcGxheV9wYW5lbChzdHJ1Y3QgZHJtX3BhbmVs ICpwYW5lbCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHBhbmVsLCBzdHJ1Y3Qga2luZ2Rpc3Bs YXlfcGFuZWwsIGJhc2UpOworfQorCitzdGF0aWMgaW50IGtpbmdkaXNwbGF5X3BhbmVsX2Rpc2Fi bGUoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCit7CisJc3RydWN0IGtpbmdkaXNwbGF5X3BhbmVs ICpraW5nZGlzcGxheSA9IHRvX2tpbmdkaXNwbGF5X3BhbmVsKHBhbmVsKTsKKwlpbnQgZXJyOwor CisJaWYgKCFraW5nZGlzcGxheS0+ZW5hYmxlZCkKKwkJcmV0dXJuIDA7CisKKwliYWNrbGlnaHRf ZGlzYWJsZShraW5nZGlzcGxheS0+YmFja2xpZ2h0KTsKKworCWVyciA9IG1pcGlfZHNpX2Rjc19z ZXRfZGlzcGxheV9vZmYoa2luZ2Rpc3BsYXktPmxpbmspOworCWlmIChlcnIgPCAwKQorCQlEUk1f REVWX0VSUk9SKHBhbmVsLT5kZXYsICJmYWlsZWQgdG8gc2V0IGRpc3BsYXkgb2ZmOiAlZFxuIiwK KwkJCSAgICAgIGVycik7CisKKwlraW5nZGlzcGxheS0+ZW5hYmxlZCA9IGZhbHNlOworCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQga2luZ2Rpc3BsYXlfcGFuZWxfdW5wcmVwYXJlKHN0cnVj dCBkcm1fcGFuZWwgKnBhbmVsKQoreworCXN0cnVjdCBraW5nZGlzcGxheV9wYW5lbCAqa2luZ2Rp c3BsYXkgPSB0b19raW5nZGlzcGxheV9wYW5lbChwYW5lbCk7CisJaW50IGVycjsKKworCWlmICgh a2luZ2Rpc3BsYXktPnByZXBhcmVkKQorCQlyZXR1cm4gMDsKKworCWVyciA9IG1pcGlfZHNpX2Rj c19lbnRlcl9zbGVlcF9tb2RlKGtpbmdkaXNwbGF5LT5saW5rKTsKKwlpZiAoZXJyIDwgMCkgewor CQlEUk1fREVWX0VSUk9SKHBhbmVsLT5kZXYsICJmYWlsZWQgdG8gZW50ZXIgc2xlZXAgbW9kZTog JWRcbiIsCisJCQkgICAgICBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIFQxNTogMTIw bXMgKi8KKwltc2xlZXAoMTIwKTsKKworCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChraW5nZGlz cGxheS0+ZW5hYmxlX2dwaW8sIDApOworCisJZXJyID0gcmVndWxhdG9yX2Rpc2FibGUoa2luZ2Rp c3BsYXktPnN1cHBseSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlraW5nZGlz cGxheS0+cHJlcGFyZWQgPSBmYWxzZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGtp bmdkaXNwbGF5X3BhbmVsX3ByZXBhcmUoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCit7CisJc3Ry dWN0IGtpbmdkaXNwbGF5X3BhbmVsICpraW5nZGlzcGxheSA9IHRvX2tpbmdkaXNwbGF5X3BhbmVs KHBhbmVsKTsKKwlpbnQgZXJyLCByZWd1bGF0b3JfZXJyOworCXVuc2lnbmVkIGludCBpOworCisJ aWYgKGtpbmdkaXNwbGF5LT5wcmVwYXJlZCkKKwkJcmV0dXJuIDA7CisKKwlncGlvZF9zZXRfdmFs dWVfY2Fuc2xlZXAoa2luZ2Rpc3BsYXktPmVuYWJsZV9ncGlvLCAwKTsKKworCWVyciA9IHJlZ3Vs YXRvcl9lbmFibGUoa2luZ2Rpc3BsYXktPnN1cHBseSk7CisJaWYgKGVyciA8IDApCisJCXJldHVy biBlcnI7CisKKwkvKiBUMjogMTVtcyAqLworCXVzbGVlcF9yYW5nZSgxNTAwMCwgMTYwMDApOwor CisJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKGtpbmdkaXNwbGF5LT5lbmFibGVfZ3BpbywgMSk7 CisKKwkvKiBUNDogMTVtcyAqLworCXVzbGVlcF9yYW5nZSgxNTAwMCwgMTYwMDApOworCisJZm9y IChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaW5pdF9jb2RlKTsgaSsrKSB7CisJCWVyciA9IG1pcGlf ZHNpX2dlbmVyaWNfd3JpdGUoa2luZ2Rpc3BsYXktPmxpbmssICZpbml0X2NvZGVbaV0sCisJCQkJ CXNpemVvZihzdHJ1Y3Qga2luZ2Rpc3BsYXlfcGFuZWxfY21kKSk7CisJCWlmIChlcnIgPCAwKSB7 CisJCQlEUk1fREVWX0VSUk9SKHBhbmVsLT5kZXYsICJmYWlsZWQgd3JpdGUgaW5pdCBjbWRzOiAl ZFxuIiwKKwkJCQkgICAgICBlcnIpOworCQkJZ290byBwb3dlcm9mZjsKKwkJfQorCX0KKworCWVy ciA9IG1pcGlfZHNpX2Rjc19leGl0X3NsZWVwX21vZGUoa2luZ2Rpc3BsYXktPmxpbmspOworCWlm IChlcnIgPCAwKSB7CisJCURSTV9ERVZfRVJST1IocGFuZWwtPmRldiwgImZhaWxlZCB0byBleGl0 IHNsZWVwIG1vZGU6ICVkXG4iLAorCQkJICAgICAgZXJyKTsKKwkJZ290byBwb3dlcm9mZjsKKwl9 CisKKwkvKiBUNjogMTIwbXMgKi8KKwltc2xlZXAoMTIwKTsKKworCWVyciA9IG1pcGlfZHNpX2Rj c19zZXRfZGlzcGxheV9vbihraW5nZGlzcGxheS0+bGluayk7CisJaWYgKGVyciA8IDApIHsKKwkJ RFJNX0RFVl9FUlJPUihwYW5lbC0+ZGV2LCAiZmFpbGVkIHRvIHNldCBkaXNwbGF5IG9uOiAlZFxu IiwKKwkJCSAgICAgIGVycik7CisJCWdvdG8gcG93ZXJvZmY7CisJfQorCisJLyogVDc6IDEwbXMg Ki8KKwl1c2xlZXBfcmFuZ2UoMTAwMDAsIDExMDAwKTsKKworCWtpbmdkaXNwbGF5LT5wcmVwYXJl ZCA9IHRydWU7CisKKwlyZXR1cm4gMDsKKworcG93ZXJvZmY6CisJZ3Bpb2Rfc2V0X3ZhbHVlX2Nh bnNsZWVwKGtpbmdkaXNwbGF5LT5lbmFibGVfZ3BpbywgMCk7CisKKwlyZWd1bGF0b3JfZXJyID0g cmVndWxhdG9yX2Rpc2FibGUoa2luZ2Rpc3BsYXktPnN1cHBseSk7CisJaWYgKHJlZ3VsYXRvcl9l cnIpCisJCURSTV9ERVZfRVJST1IocGFuZWwtPmRldiwgImZhaWxlZCB0byBkaXNhYmxlIHJlZ3Vs YXRvcjogJWRcbiIsCisJCQkgICAgICByZWd1bGF0b3JfZXJyKTsKKworCXJldHVybiBlcnI7Cit9 CisKK3N0YXRpYyBpbnQga2luZ2Rpc3BsYXlfcGFuZWxfZW5hYmxlKHN0cnVjdCBkcm1fcGFuZWwg KnBhbmVsKQoreworCXN0cnVjdCBraW5nZGlzcGxheV9wYW5lbCAqa2luZ2Rpc3BsYXkgPSB0b19r aW5nZGlzcGxheV9wYW5lbChwYW5lbCk7CisJaW50IHJldDsKKworCWlmIChraW5nZGlzcGxheS0+ ZW5hYmxlZCkKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBiYWNrbGlnaHRfZW5hYmxlKGtpbmdkaXNw bGF5LT5iYWNrbGlnaHQpOworCWlmIChyZXQpIHsKKwkJRFJNX0RFVl9FUlJPUihwYW5lbC0+ZHJt LT5kZXYsCisJCQkgICAgICAiRmFpbGVkIHRvIGVuYWJsZSBiYWNrbGlnaHQgJWRcbiIsIHJldCk7 CisJCXJldHVybiByZXQ7CisJfQorCisJa2luZ2Rpc3BsYXktPmVuYWJsZWQgPSB0cnVlOworCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBkZWZh dWx0X21vZGUgPSB7CisJLmNsb2NrID0gMjI5MDAwLAorCS5oZGlzcGxheSA9IDE1MzYsCisJLmhz eW5jX3N0YXJ0ID0gMTUzNiArIDEwMCwKKwkuaHN5bmNfZW5kID0gMTUzNiArIDEwMCArIDI0LAor CS5odG90YWwgPSAxNTM2ICsgMTAwICsgMjQgKyAxMDAsCisJLnZkaXNwbGF5ID0gMjA0OCwKKwku dnN5bmNfc3RhcnQgPSAyMDQ4ICsgOTUsCisJLnZzeW5jX2VuZCA9IDIwNDggKyA5NSArIDIsCisJ LnZ0b3RhbCA9IDIwNDggKyA5NSArIDIgKyAyMywKKwkudnJlZnJlc2ggPSA2MCwKK307CisKK3N0 YXRpYyBpbnQga2luZ2Rpc3BsYXlfcGFuZWxfZ2V0X21vZGVzKHN0cnVjdCBkcm1fcGFuZWwgKnBh bmVsKQoreworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlOworCisJbW9kZSA9IGRybV9t b2RlX2R1cGxpY2F0ZShwYW5lbC0+ZHJtLCAmZGVmYXVsdF9tb2RlKTsKKwlpZiAoIW1vZGUpIHsK KwkJRFJNX0RFVl9FUlJPUihwYW5lbC0+ZHJtLT5kZXYsICJmYWlsZWQgdG8gYWRkIG1vZGUgJXV4 JXV4QCV1XG4iLAorCQkJICAgICAgZGVmYXVsdF9tb2RlLmhkaXNwbGF5LCBkZWZhdWx0X21vZGUu dmRpc3BsYXksCisJCQkgICAgICBkZWZhdWx0X21vZGUudnJlZnJlc2gpOworCQlyZXR1cm4gLUVO T01FTTsKKwl9CisKKwlkcm1fbW9kZV9zZXRfbmFtZShtb2RlKTsKKworCWRybV9tb2RlX3Byb2Jl ZF9hZGQocGFuZWwtPmNvbm5lY3RvciwgbW9kZSk7CisKKwlwYW5lbC0+Y29ubmVjdG9yLT5kaXNw bGF5X2luZm8ud2lkdGhfbW0gPSAxNDc7CisJcGFuZWwtPmNvbm5lY3Rvci0+ZGlzcGxheV9pbmZv LmhlaWdodF9tbSA9IDE5NjsKKwlwYW5lbC0+Y29ubmVjdG9yLT5kaXNwbGF5X2luZm8uYnBjID0g ODsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wYW5lbF9mdW5j cyBraW5nZGlzcGxheV9wYW5lbF9mdW5jcyA9IHsKKwkuZGlzYWJsZSA9IGtpbmdkaXNwbGF5X3Bh bmVsX2Rpc2FibGUsCisJLnVucHJlcGFyZSA9IGtpbmdkaXNwbGF5X3BhbmVsX3VucHJlcGFyZSwK KwkucHJlcGFyZSA9IGtpbmdkaXNwbGF5X3BhbmVsX3ByZXBhcmUsCisJLmVuYWJsZSA9IGtpbmdk aXNwbGF5X3BhbmVsX2VuYWJsZSwKKwkuZ2V0X21vZGVzID0ga2luZ2Rpc3BsYXlfcGFuZWxfZ2V0 X21vZGVzLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQga2luZ2Rpc3Bs YXlfb2ZfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImtpbmdkaXNwbGF5LGtkMDk3ZDA0 IiwgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBraW5nZGlzcGxheV9vZl9t YXRjaCk7CisKK3N0YXRpYyBpbnQga2luZ2Rpc3BsYXlfcGFuZWxfYWRkKHN0cnVjdCBraW5nZGlz cGxheV9wYW5lbCAqa2luZ2Rpc3BsYXkpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmtpbmdk aXNwbGF5LT5saW5rLT5kZXY7CisJaW50IGVycjsKKworCWtpbmdkaXNwbGF5LT5zdXBwbHkgPSBk ZXZtX3JlZ3VsYXRvcl9nZXQoZGV2LCAicG93ZXIiKTsKKwlpZiAoSVNfRVJSKGtpbmdkaXNwbGF5 LT5zdXBwbHkpKQorCQlyZXR1cm4gUFRSX0VSUihraW5nZGlzcGxheS0+c3VwcGx5KTsKKworCWtp bmdkaXNwbGF5LT5lbmFibGVfZ3BpbyA9IGRldm1fZ3Bpb2RfZ2V0X29wdGlvbmFsKGRldiwgImVu YWJsZSIsCisJCQkJCQkJICAgR1BJT0RfT1VUX0hJR0gpOworCWlmIChJU19FUlIoa2luZ2Rpc3Bs YXktPmVuYWJsZV9ncGlvKSkgeworCQllcnIgPSBQVFJfRVJSKGtpbmdkaXNwbGF5LT5lbmFibGVf Z3Bpbyk7CisJCWRldl9kYmcoZGV2LCAiZmFpbGVkIHRvIGdldCBlbmFibGUgZ3BpbzogJWRcbiIs IGVycik7CisJCWtpbmdkaXNwbGF5LT5lbmFibGVfZ3BpbyA9IE5VTEw7CisJfQorCisJa2luZ2Rp c3BsYXktPmJhY2tsaWdodCA9IGRldm1fb2ZfZmluZF9iYWNrbGlnaHQoZGV2KTsKKwlpZiAoSVNf RVJSKGtpbmdkaXNwbGF5LT5iYWNrbGlnaHQpKQorCQlyZXR1cm4gUFRSX0VSUihraW5nZGlzcGxh eS0+YmFja2xpZ2h0KTsKKworCWRybV9wYW5lbF9pbml0KCZraW5nZGlzcGxheS0+YmFzZSk7CisJ a2luZ2Rpc3BsYXktPmJhc2UuZnVuY3MgPSAma2luZ2Rpc3BsYXlfcGFuZWxfZnVuY3M7CisJa2lu Z2Rpc3BsYXktPmJhc2UuZGV2ID0gJmtpbmdkaXNwbGF5LT5saW5rLT5kZXY7CisKKwlyZXR1cm4g ZHJtX3BhbmVsX2FkZCgma2luZ2Rpc3BsYXktPmJhc2UpOworfQorCitzdGF0aWMgdm9pZCBraW5n ZGlzcGxheV9wYW5lbF9kZWwoc3RydWN0IGtpbmdkaXNwbGF5X3BhbmVsICpraW5nZGlzcGxheSkK K3sKKwlkcm1fcGFuZWxfcmVtb3ZlKCZraW5nZGlzcGxheS0+YmFzZSk7Cit9CisKK3N0YXRpYyBp bnQga2luZ2Rpc3BsYXlfcGFuZWxfcHJvYmUoc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpKQor eworCXN0cnVjdCBraW5nZGlzcGxheV9wYW5lbCAqa2luZ2Rpc3BsYXk7CisJaW50IGVycjsKKwor CWRzaS0+bGFuZXMgPSA0OworCWRzaS0+Zm9ybWF0ID0gTUlQSV9EU0lfRk1UX1JHQjg4ODsKKwlk c2ktPm1vZGVfZmxhZ3MgPSBNSVBJX0RTSV9NT0RFX1ZJREVPIHwgTUlQSV9EU0lfTU9ERV9WSURF T19CVVJTVCB8CisJCQkgIE1JUElfRFNJX01PREVfTFBNOworCisJa2luZ2Rpc3BsYXkgPSBkZXZt X2t6YWxsb2MoJmRzaS0+ZGV2LCBzaXplb2YoKmtpbmdkaXNwbGF5KSwgR0ZQX0tFUk5FTCk7CisJ aWYgKCFraW5nZGlzcGxheSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltaXBpX2RzaV9zZXRfZHJ2 ZGF0YShkc2ksIGtpbmdkaXNwbGF5KTsKKwlraW5nZGlzcGxheS0+bGluayA9IGRzaTsKKworCWVy ciA9IGtpbmdkaXNwbGF5X3BhbmVsX2FkZChraW5nZGlzcGxheSk7CisJaWYgKGVyciA8IDApCisJ CXJldHVybiBlcnI7CisKKwlyZXR1cm4gbWlwaV9kc2lfYXR0YWNoKGRzaSk7Cit9CisKK3N0YXRp YyBpbnQga2luZ2Rpc3BsYXlfcGFuZWxfcmVtb3ZlKHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRz aSkKK3sKKwlzdHJ1Y3Qga2luZ2Rpc3BsYXlfcGFuZWwgKmtpbmdkaXNwbGF5ID0gbWlwaV9kc2lf Z2V0X2RydmRhdGEoZHNpKTsKKwlpbnQgZXJyOworCisJZXJyID0ga2luZ2Rpc3BsYXlfcGFuZWxf dW5wcmVwYXJlKCZraW5nZGlzcGxheS0+YmFzZSk7CisJaWYgKGVyciA8IDApCisJCURSTV9ERVZf RVJST1IoJmRzaS0+ZGV2LCAiZmFpbGVkIHRvIHVucHJlcGFyZSBwYW5lbDogJWRcbiIsCisJCQkg ICAgICBlcnIpOworCisJZXJyID0ga2luZ2Rpc3BsYXlfcGFuZWxfZGlzYWJsZSgma2luZ2Rpc3Bs YXktPmJhc2UpOworCWlmIChlcnIgPCAwKQorCQlEUk1fREVWX0VSUk9SKCZkc2ktPmRldiwgImZh aWxlZCB0byBkaXNhYmxlIHBhbmVsOiAlZFxuIiwgZXJyKTsKKworCWVyciA9IG1pcGlfZHNpX2Rl dGFjaChkc2kpOworCWlmIChlcnIgPCAwKQorCQlEUk1fREVWX0VSUk9SKCZkc2ktPmRldiwgImZh aWxlZCB0byBkZXRhY2ggZnJvbSBEU0kgaG9zdDogJWRcbiIsCisJCQkgICAgICBlcnIpOworCisJ a2luZ2Rpc3BsYXlfcGFuZWxfZGVsKGtpbmdkaXNwbGF5KTsKKworCXJldHVybiAwOworfQorCitz dGF0aWMgdm9pZCBraW5nZGlzcGxheV9wYW5lbF9zaHV0ZG93bihzdHJ1Y3QgbWlwaV9kc2lfZGV2 aWNlICpkc2kpCit7CisJc3RydWN0IGtpbmdkaXNwbGF5X3BhbmVsICpraW5nZGlzcGxheSA9IG1p cGlfZHNpX2dldF9kcnZkYXRhKGRzaSk7CisKKwlraW5nZGlzcGxheV9wYW5lbF91bnByZXBhcmUo JmtpbmdkaXNwbGF5LT5iYXNlKTsKKwlraW5nZGlzcGxheV9wYW5lbF9kaXNhYmxlKCZraW5nZGlz cGxheS0+YmFzZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbWlwaV9kc2lfZHJpdmVyIGtpbmdkaXNw bGF5X3BhbmVsX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJwYW5lbC1raW5n ZGlzcGxheS1rZDA5N2QwNCIsCisJCS5vZl9tYXRjaF90YWJsZSA9IGtpbmdkaXNwbGF5X29mX21h dGNoLAorCX0sCisJLnByb2JlID0ga2luZ2Rpc3BsYXlfcGFuZWxfcHJvYmUsCisJLnJlbW92ZSA9 IGtpbmdkaXNwbGF5X3BhbmVsX3JlbW92ZSwKKwkuc2h1dGRvd24gPSBraW5nZGlzcGxheV9wYW5l bF9zaHV0ZG93biwKK307Cittb2R1bGVfbWlwaV9kc2lfZHJpdmVyKGtpbmdkaXNwbGF5X3BhbmVs X2RyaXZlcik7CisKK01PRFVMRV9BVVRIT1IoIkNocmlzIFpob25nIDx6eXdAcm9jay1jaGlwcy5j b20+Iik7CitNT0RVTEVfQVVUSE9SKCJOaWNrZXkgWWFuZyA8bmlja2V5LnlhbmdAcm9jay1jaGlw cy5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oImtpbmdkaXNwbGF5IEtEMDk3RDA0IHBhbmVs IGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwotLSAKMi4xNy4wCgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGlu ZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK