From mboxrd@z Thu Jan 1 00:00:00 1970 From: Philippe CORNU Subject: [PATCH v1 3/3] drm/panel: Add support for otm8009a panel driver Date: Tue, 4 Jul 2017 18:30:05 +0200 Message-ID: <1499185805-23354-4-git-send-email-philippe.cornu@st.com> References: <1499185805-23354-1-git-send-email-philippe.cornu@st.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx07-00178001.pphosted.com (mx08-00178001.pphosted.com [91.207.212.93]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8EC6A6E35D for ; Tue, 4 Jul 2017 16:30:39 +0000 (UTC) In-Reply-To: <1499185805-23354-1-git-send-email-philippe.cornu@st.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Alexandre Torgue , Thierry Reding , David Airlie , Maxime Coquelin , Russell King , Mark Rutland , Rob Herring , Arnd Bergmann , Benjamin Gaignard , Yannick Fertre , Archit Taneja Cc: linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, Philippe Cornu , Fabien Dessenne , dri-devel@lists.freedesktop.org, Mickael Reulier , Vincent Abriou , Gabriel Fernandez , Ludovic Barre List-Id: dri-devel@lists.freedesktop.org VGhpcyBwYXRjaCBhZGRzIE9yaXNlIFRlY2ggb3RtODAwOWEgMy45NyIgNDgweDgwMCBURlQgTENE CnBhbmVsIGRyaXZlciAoTUlQSS1EU0kgdmlkZW8gbW9kZSkuIFRoZSBwYW5lbCBiYWNrbGlnaHQg aXMKbWFuYWdlZCB0aHJvdWdoIHRoZSBEU0kgbGluay4gVGhpcyBwYW5lbCBkcml2ZXIgaXMgdXNl ZCBpbgpzZXZlcmFsIFNUTTMyIGJvYXJkcy4KClNpZ25lZC1vZmYtYnk6IFBoaWxpcHBlIENPUk5V IDxwaGlsaXBwZS5jb3JudUBzdC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25m aWcgICAgICAgICAgICAgICAgICAgIHwgICA5ICsKIGRyaXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtl ZmlsZSAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBkcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFu ZWwtb3Jpc2V0ZWNoLW90bTgwMDlhLmMgfCA1MTcgKysrKysrKysrKysrKysrKysrKysrKysKIDMg ZmlsZXMgY2hhbmdlZCwgNTI3IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDc1NSBkcml2 ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwtb3Jpc2V0ZWNoLW90bTgwMDlhLmMKCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9L Y29uZmlnCmluZGV4IGQ4NGEwMzEuLmMxYzkyOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9wYW5lbC9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9LY29uZmlnCkBAIC0x MTcsNCArMTE3LDEzIEBAIGNvbmZpZyBEUk1fUEFORUxfU0lUUk9OSVhfU1Q3Nzg5VgogCSAgU2F5 IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGhlIFNpdHJvbml4CiAJ ICBTVDc3ODlWIGNvbnRyb2xsZXIgZm9yIDI0MHgzMjAgTENEIHBhbmVscwogCitjb25maWcgRFJN X1BBTkVMX09SSVNFVEVDSF9PVE04MDA5QQorCXRyaXN0YXRlICJPcmlzZSBUZWNoIG90bTgwMDlh IDQ4MHAgZHNpIDJkbCB2aWRlbyBtb2RlIHBhbmVsIgorCWRlcGVuZHMgb24gT0YKKwlkZXBlbmRz IG9uIERSTV9NSVBJX0RTSQorCWRlcGVuZHMgb24gQkFDS0xJR0hUX0NMQVNTX0RFVklDRQorCWhl bHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIE9yaXNl IFRlY2ggT1RNODAwOUEKKwkgIDQ4MHg4MDAgRFNJIHBhbmVsCisKIGVuZG1lbnUKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9wYW5l bC9NYWtlZmlsZQppbmRleCA5ZjY2MTBkLi5hYzc5OGYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dw dS9kcm0vcGFuZWwvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL01ha2VmaWxl CkBAIC0xMCwzICsxMCw0IEBAIG9iai0kKENPTkZJR19EUk1fUEFORUxfU0FNU1VOR19TNkU4QUEw KSArPSBwYW5lbC1zYW1zdW5nLXM2ZThhYTAubwogb2JqLSQoQ09ORklHX0RSTV9QQU5FTF9TSEFS UF9MUTEwMVIxU1gwMSkgKz0gcGFuZWwtc2hhcnAtbHExMDFyMXN4MDEubwogb2JqLSQoQ09ORklH X0RSTV9QQU5FTF9TSEFSUF9MUzA0M1QxTEUwMSkgKz0gcGFuZWwtc2hhcnAtbHMwNDN0MWxlMDEu bwogb2JqLSQoQ09ORklHX0RSTV9QQU5FTF9TSVRST05JWF9TVDc3ODlWKSArPSBwYW5lbC1zaXRy b25peC1zdDc3ODl2Lm8KK29iai0kKENPTkZJR19EUk1fUEFORUxfT1JJU0VURUNIX09UTTgwMDlB KSArPSBwYW5lbC1vcmlzZXRlY2gtb3RtODAwOWEubwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp bGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC1vcmlzZXRlY2gtb3Rt ODAwOWEuYyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC1vcmlzZXRlY2gtb3RtODAwOWEu YwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43YWVmYzA5Ci0tLSAvZGV2L251 bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLW9yaXNldGVjaC1vdG04MDA5YS5j CkBAIC0wLDAgKzEsNTE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSBTVE1pY3JvZWxlY3Ryb25p Y3MgU0EgMjAxNworICoKKyAqIEF1dGhvcnM6IFBoaWxpcHBlIENvcm51IDxwaGlsaXBwZS5jb3Ju dUBzdC5jb20+CisgKiAgICAgICAgICBZYW5uaWNrIEZlcnRyZSA8eWFubmljay5mZXJ0cmVAc3Qu Y29tPgorICoKKyAqIExpY2Vuc2UgdGVybXM6ICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAo R1BMKSwgdmVyc2lvbiAyCisgKi8KKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRy bS9kcm1fbWlwaV9kc2kuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3BhbmVsLmg+CisjaW5jbHVkZSA8 bGludXgvYmFja2xpZ2h0Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby9jb25zdW1lci5oPgorI2lu Y2x1ZGUgPHZpZGVvL21pcGlfZGlzcGxheS5oPgorCisjZGVmaW5lIERSVl9OQU1FICJvcmlzZXRl Y2hfb3RtODAwOWEiCisKKyNkZWZpbmUgT1RNODAwOUFfQkFDS0xJR0hUX0RFRkFVTFQJMjQwCisj ZGVmaW5lIE9UTTgwMDlBX0JBQ0tMSUdIVF9NQVgJCTI1NQorCitzdHJ1Y3Qgb3RtODAwOWEgewor CXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgZHJtX3BhbmVsIHBhbmVsOworCXN0cnVjdCBi YWNrbGlnaHRfZGV2aWNlICpibF9kZXY7CisJc3RydWN0IGdwaW9fZGVzYyAqcmVzZXRfZ3BpbzsK Kwlib29sIHByZXBhcmVkOworCWJvb2wgZW5hYmxlZDsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgZHJtX2Rpc3BsYXlfbW9kZSBkZWZhdWx0X21vZGUgPSB7CisJLmNsb2NrID0gMzI3MjksCisJ LmhkaXNwbGF5ID0gNDgwLAorCS5oc3luY19zdGFydCA9IDQ4MCArIDEyMCwKKwkuaHN5bmNfZW5k ID0gNDgwICsgMTIwICsgNjMsCisJLmh0b3RhbCA9IDQ4MCArIDEyMCArIDYzICsgMTIwLAorCS52 ZGlzcGxheSA9IDgwMCwKKwkudnN5bmNfc3RhcnQgPSA4MDAgKyAxMiwKKwkudnN5bmNfZW5kID0g ODAwICsgMTIgKyAxMiwKKwkudnRvdGFsID0gODAwICsgMTIgKyAxMiArIDEyLAorCS52cmVmcmVz aCA9IDUwLAorCS5mbGFncyA9IDAsCisJLndpZHRoX21tID0gNTIsCisJLmhlaWdodF9tbSA9IDg2 LAorfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgb3RtODAwOWEgKnBhbmVsX3RvX290bTgwMDlh KHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQoreworCXJldHVybiBjb250YWluZXJfb2YocGFuZWws IHN0cnVjdCBvdG04MDA5YSwgcGFuZWwpOworfQorCitzdGF0aWMgdm9pZCBvdG04MDA5YV9kY3Nf d3JpdGVfYnVmKHN0cnVjdCBvdG04MDA5YSAqY3R4LCBjb25zdCB2b2lkICpkYXRhLAorCQkJCSAg IHNpemVfdCBsZW4pCit7CisJc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpID0gdG9fbWlwaV9k c2lfZGV2aWNlKGN0eC0+ZGV2KTsKKworCWlmIChtaXBpX2RzaV9kY3Nfd3JpdGVfYnVmZmVyKGRz aSwgZGF0YSwgbGVuKSA8IDApCisJCURSTV9XQVJOKCJtaXBpIGRzaSBkY3Mgd3JpdGUgYnVmZmVy IGZhaWxlZCIpOworfQorCisjZGVmaW5lIGRjc193cml0ZV9zZXEoc2VxLi4uKQkJCQkJXAorCWRv IHsJCQkJCQkJXAorCQlzdGF0aWMgY29uc3QgdTggZFtdID0geyBzZXEgfTsJCQlcCisJCW90bTgw MDlhX2Rjc193cml0ZV9idWYoY3R4LCBkLCBBUlJBWV9TSVpFKGQpKTsJXAorCX0gd2hpbGUgKDAp CisKK3N0YXRpYyBpbnQgb3RtODAwOWFfaW5pdF9zZXF1ZW5jZShzdHJ1Y3Qgb3RtODAwOWEgKmN0 eCkKK3sKKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2kgPSB0b19taXBpX2RzaV9kZXZpY2Uo Y3R4LT5kZXYpOworCWludCByZXQ7CisKKwkvKgorCSAqIENNRDJfRU5BMTogRW50ZXIgaW4gQ29t bWFuZCAyIG1vZGUsIGVuYWJsZSB3cml0ZSBmdW5jdGlvbiBvZgorCSAqIENvbW1hbmQgMiAmIGVu YWJsZSBwYXJhbWV0ZXIgc2hpZnQgZnVuY3Rpb24uCisJICogVGhlIDMgZm9sbG93aW5nIHNlcXVl bmNlcyBhbGxvdyB0byBlbmFibGUgT1JJU0UgY29tbWFuZCBtb2RlLgorCSAqLworCWRjc193cml0 ZV9zZXEoMHhGRiwgMHg4MCwgMHgwOSwgMHgwMSk7CisJZGNzX3dyaXRlX3NlcSgweDAwLCAweDgw KTsKKwlkY3Nfd3JpdGVfc2VxKDB4RkYsIDB4ODAsIDB4MDkpOworCisJLyoKKwkgKiBTdGFydGlu ZyBmcm9tIGhlcmUsIGFkZHJlc3Mgc2hpZnQgbmVlZHMgdG8gYmUgc2V0IGJlZm9yZSBzZW5kaW5n CisJICogYSBuZXcgY29tbWFuZC4gWW91IGNhbiBmaW5kIGFuIGV4YW1wbGUgaW4gdGhlIG5leHQg c2VxdWVuY2UuLi4KKwkgKiBTRF9QQ0hfQ1RSTCAoMHhDNDgwKSBTb3VyY2UgRHJpdmVyIFByZWNo YXJnZSBDb250cm9sIChTRF9QVD1HTkQpCisJICovCisJZGNzX3dyaXRlX3NlcSgweDAwLCAweDgw KTsgLyogYWRkcmVzcyBzaGlmdCBzZXQgdG8gMHg4MCAqLworCWRjc193cml0ZV9zZXEoMHhDNCwg MHgzMCk7IC8qIDB4QzQ4MCBwYXJhbWV0ZXIgMSBpcyAweDMwICovCisJbWRlbGF5KDEwKTsKKwor CS8qIE5vdCBkb2N1bWVudGVkICgweEM0OEEpICovCisJZGNzX3dyaXRlX3NlcSgweDAwLCAweDhB KTsKKwlkY3Nfd3JpdGVfc2VxKDB4QzQsIDB4NDApOworCW1kZWxheSgxMCk7CisKKwkvKiBQV1Jf Q1RSTDQgKDB4QzVCMCkgUG93ZXIgQ29udHJvbCBTZXR0aW5nIDQgZm9yIERDIFZvbHRhZ2UgKi8K KwlkY3Nfd3JpdGVfc2VxKDB4MDAsIDB4QjEpOyAvKiAxNzh0aCBwYXJhbWV0ZXIgKi8KKwlkY3Nf d3JpdGVfc2VxKDB4QzUsIDB4QTkpOworCisJLyogUFdSX0NUUkwyICgweEM1OTApIFBvd2VyIENv bnRyb2wgU2V0dGluZyAyIGZvciBOb3JtYWwgTW9kZSAqLworCWRjc193cml0ZV9zZXEoMHgwMCwg MHg5MSk7IC8qIDE0NnRoIHBhcmFtZXRlciAqLworCWRjc193cml0ZV9zZXEoMHhDNSwgMHgzNCk7 CisKKwkvKiBQX0RSVl9NICgweEMwQjQpIFBhbmVsIERyaXZpbmcgTW9kZSAqLworCWRjc193cml0 ZV9zZXEoMHgwMCwgMHhCNCk7CisJZGNzX3dyaXRlX3NlcSgweEMwLCAweDUwKTsKKworCS8qIFZD T01EQyAoMHhEOTAwKSBWQ09NIFZvbHRhZ2UgU2V0dGluZyAqLworCWRjc193cml0ZV9zZXEoMHgw MCwgMHgwMCk7CisJZGNzX3dyaXRlX3NlcSgweEQ5LCAweDRFKTsKKworCS8qIE9TQ19BREogKDB4 QzE4MSkgT3NjaWxsYXRvciBBZGp1c3RtZW50IGZvciBJZGxlL05vcm1hbCBtb2RlICovCisJZGNz X3dyaXRlX3NlcSgweDAwLCAweDgxKTsKKwlkY3Nfd3JpdGVfc2VxKDB4QzEsIDB4NjYpOyAvKiA2 NUh6ICovCisKKwkvKiBSR0JfVklERU9fU0VUICgweEMxQTEpIFJHQiBWaWRlbyBNb2RlIFNldHRp bmcgKi8KKwlkY3Nfd3JpdGVfc2VxKDB4MDAsIDB4QTEpOworCWRjc193cml0ZV9zZXEoMHhDMSwg MHgwOCk7CisKKwkvKiBQV1JfQ1RSTDIgKDB4QzU5MCkgUG93ZXIgQ29udHJvbCBTZXR0aW5nIDIg Zm9yIE5vcm1hbCBNb2RlICovCisJZGNzX3dyaXRlX3NlcSgweDAwLCAweDkyKTsgLyogMTQ3dGgg cGFyYW1ldGVyICovCisJZGNzX3dyaXRlX3NlcSgweEM1LCAweDAxKTsKKwlkY3Nfd3JpdGVfc2Vx KDB4MDAsIDB4OTUpOyAvKiAxNTB0aCBwYXJhbWV0ZXIgKi8KKwlkY3Nfd3JpdGVfc2VxKDB4QzUs IDB4MzQpOworCWRjc193cml0ZV9zZXEoMHgwMCwgMHg5NCk7IC8qIDE0OXRoIHBhcmFtZXRlciAq LworCWRjc193cml0ZV9zZXEoMHhDNSwgMHgzMyk7CisKKwkvKiBHVkREL05HVkREICgweEQ4MDAp ICovCisJZGNzX3dyaXRlX3NlcSgweDAwLCAweDAwKTsKKwlkY3Nfd3JpdGVfc2VxKDB4RDgsIDB4 NzksIDB4NzkpOworCisJLyogU0RfQ1RSTCAoMHhDMEEyKSBTb3VyY2UgRHJpdmVyIFRpbWluZyBT ZXR0aW5nICovCisJZGNzX3dyaXRlX3NlcSgweDAwLCAweEEzKTsgLyogMTY0dGggcGFyYW1ldGVy ICovCisJZGNzX3dyaXRlX3NlcSgweEMwLCAweDFCKTsKKworCS8qIFBXUl9DVFJMMSAoMHhDNTgw KSBQb3dlciBDb250cm9sIFNldHRpbmcgMSAqLworCWRjc193cml0ZV9zZXEoMHgwMCwgMHg4Mik7 IC8qIDEzMXN0IHBhcmFtZXRlciAqLworCWRjc193cml0ZV9zZXEoMHhDNSwgMHg4Myk7CisKKwkv KiBTRF9QQ0hfQ1RSTCAoMHhDNDgwKSBTb3VyY2UgRHJpdmVyIFByZWNoYXJnZSBDb250cm9sICov CisJZGNzX3dyaXRlX3NlcSgweDAwLCAweDgxKTsgLyogMTMwdGggcGFyYW1ldGVyICovCisJZGNz X3dyaXRlX3NlcSgweEM0LCAweDgzKTsKKworCS8qIFJHQl9WSURFT19TRVQgKDB4QzFBMSkgUkdC IFZpZGVvIE1vZGUgU2V0dGluZyAqLworCWRjc193cml0ZV9zZXEoMHgwMCwgMHhBMSk7CisJZGNz X3dyaXRlX3NlcSgweEMxLCAweDBFKTsgLyogdG9kbyBwcmV2aW91c2x5IHdlIHdyb3RlIDB4MDgu Li4gKi8KKworCS8qIFBBTlNFVCAoMHhCM0E2KSBQYW5lbCBUeXBlIFNldHRpbmcgKi8KKwlkY3Nf d3JpdGVfc2VxKDB4MDAsIDB4QTYpOworCWRjc193cml0ZV9zZXEoMHhCMywgMHgwMCwgMHgwMSk7 CisKKwkvKiBHT0FWU1QgKDB4Q0U4MCkgR09BIFZTVCBTZXR0aW5nICovCisJZGNzX3dyaXRlX3Nl cSgweDAwLCAweDgwKTsKKwlkY3Nfd3JpdGVfc2VxKDB4Q0UsIDB4ODUsIDB4MDEsIDB4MDAsIDB4 ODQsIDB4MDEsIDB4MDApOworCisJLyogR09BQ0xLQTEgKDB4Q0VBMCkgR09BIENMS0ExIFNldHRp bmcgKi8KKwlkY3Nfd3JpdGVfc2VxKDB4MDAsIDB4QTApOworCWRjc193cml0ZV9zZXEoMHhDRSwg MHgxOCwgMHgwNCwgMHgwMywgMHgzOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxOCwKKwkJICAgICAg MHgwMywgMHgwMywgMHgzQSwgMHgwMCwgMHgwMCwgMHgwMCk7CisKKwkvKiBHT0FDTEtBMyAoMHhD RUIwKSBHT0EgQ0xLQTMgU2V0dGluZyAqLworCWRjc193cml0ZV9zZXEoMHgwMCwgMHhCMCk7CisJ ZGNzX3dyaXRlX3NlcSgweENFLCAweDE4LCAweDAyLCAweDAzLCAweDNCLCAweDAwLCAweDAwLCAw eDAwLCAweDE4LAorCQkgICAgICAweDAxLCAweDAzLCAweDNDLCAweDAwLCAweDAwLCAweDAwKTsK KworCS8qIEdPQUVDTEsgKDB4Q0ZDMCkgR09BIEVDTEsgU2V0dGluZyAqLworCWRjc193cml0ZV9z ZXEoMHgwMCwgMHhDMCk7CisJZGNzX3dyaXRlX3NlcSgweENGLCAweDAxLCAweDAxLCAweDIwLCAw eDIwLCAweDAwLCAweDAwLCAweDAxLCAweDAyLAorCQkgICAgICAweDAwLCAweDAwKTsKKworCS8q IE5vdCBkb2N1bWVudGVkICovCisJZGNzX3dyaXRlX3NlcSgweDAwLCAweEQwKTsKKwlkY3Nfd3Jp dGVfc2VxKDB4Q0YsIDB4MDApOworCisJLyogUEFOQ1RSTFNFVDEtOCAoMHhDQjgwLTB4Q0JGMCkg UGFuZWwgQ29udHJvbCBTZXR0aW5nIDEtOCAqLworCWRjc193cml0ZV9zZXEoMHgwMCwgMHg4MCk7 CisJZGNzX3dyaXRlX3NlcSgweENCLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw LCAweDAwLCAweDAwLAorCQkgICAgICAweDAwLCAweDAwKTsKKwlkY3Nfd3JpdGVfc2VxKDB4MDAs IDB4OTApOworCWRjc193cml0ZV9zZXEoMHhDQiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw MCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw MCwgMHgwMCwgMHgwMCk7CisJZGNzX3dyaXRlX3NlcSgweDAwLCAweEEwKTsKKwlkY3Nfd3JpdGVf c2VxKDB4Q0IsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs CisJCSAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDApOworCWRj c193cml0ZV9zZXEoMHgwMCwgMHhCMCk7CisJZGNzX3dyaXRlX3NlcSgweENCLCAweDAwLCAweDAw LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkgICAgICAweDAwLCAweDAw KTsKKwlkY3Nfd3JpdGVfc2VxKDB4MDAsIDB4QzApOworCWRjc193cml0ZV9zZXEoMHhDQiwgMHgw MCwgMHgwNCwgMHgwNCwgMHgwNCwgMHgwNCwgMHgwNCwgMHgwMCwgMHgwMCwKKwkJICAgICAgMHgw MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCk7CisJZGNzX3dyaXRlX3NlcSgw eDAwLCAweEQwKTsKKwlkY3Nfd3JpdGVfc2VxKDB4Q0IsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs IDB4MDAsIDB4MDAsIDB4MDQsIDB4MDQsCisJCSAgICAgIDB4MDQsIDB4MDQsIDB4MDQsIDB4MDAs IDB4MDAsIDB4MDAsIDB4MDApOworCWRjc193cml0ZV9zZXEoMHgwMCwgMHhFMCk7CisJZGNzX3dy aXRlX3NlcSgweENCLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAw eDAwLAorCQkgICAgICAweDAwLCAweDAwKTsKKwlkY3Nfd3JpdGVfc2VxKDB4MDAsIDB4RjApOwor CWRjc193cml0ZV9zZXEoMHhDQiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwg MHhGRiwgMHhGRiwKKwkJICAgICAgMHhGRiwgMHhGRik7CisKKwkvKiBQQU5VMkQxLTMgKDB4Q0M4 MC0weENDQTApIFBhbmVsIFUyRCBTZXR0aW5nIDEtMyAqLworCWRjc193cml0ZV9zZXEoMHgwMCwg MHg4MCk7CisJZGNzX3dyaXRlX3NlcSgweENDLCAweDAwLCAweDI2LCAweDA5LCAweDBCLCAweDAx LCAweDI1LCAweDAwLCAweDAwLAorCQkgICAgICAweDAwLCAweDAwKTsKKwlkY3Nfd3JpdGVfc2Vx KDB4MDAsIDB4OTApOworCWRjc193cml0ZV9zZXEoMHhDQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgw MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgy NiwgMHgwQSwgMHgwQywgMHgwMik7CisJZGNzX3dyaXRlX3NlcSgweDAwLCAweEEwKTsKKwlkY3Nf d3JpdGVfc2VxKDB4Q0MsIDB4MjUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs IDB4MDAsCisJCSAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAp OworCisJLyogUEFORDJVMS0zICgweENDQjAtMHhDQ0QwKSBQYW5lbCBEMlUgU2V0dGluZyAxLTMg Ki8KKwlkY3Nfd3JpdGVfc2VxKDB4MDAsIDB4QjApOworCWRjc193cml0ZV9zZXEoMHhDQywgMHgw MCwgMHgyNSwgMHgwQywgMHgwQSwgMHgwMiwgMHgyNiwgMHgwMCwgMHgwMCwKKwkJICAgICAgMHgw MCwgMHgwMCk7CisJZGNzX3dyaXRlX3NlcSgweDAwLCAweEMwKTsKKwlkY3Nfd3JpdGVfc2VxKDB4 Q0MsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCSAg ICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjUsIDB4MEIsIDB4MDksIDB4MDEpOworCWRjc193cml0 ZV9zZXEoMHgwMCwgMHhEMCk7CisJZGNzX3dyaXRlX3NlcSgweENDLCAweDI2LCAweDAwLCAweDAw LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkgICAgICAweDAwLCAweDAwLCAweDAw LCAweDAwLCAweDAwLCAweDAwLCAweDAwKTsKKworCS8qIFBXUl9DVFJMMSAoMHhDNTgwKSBQb3dl ciBDb250cm9sIFNldHRpbmcgMSAqLworCWRjc193cml0ZV9zZXEoMHgwMCwgMHg4MSk7IC8qIDEz MHRoIHBhcmFtZXRlciAqLworCWRjc193cml0ZV9zZXEoMHhDNSwgMHg2Nik7CisKKwkvKiBOb3Qg ZG9jdW1lbnRlZCAqLworCWRjc193cml0ZV9zZXEoMHgwMCwgMHhCNik7CisJZGNzX3dyaXRlX3Nl cSgweEY1LCAweDA2KTsKKworCS8qIEdNQ1QyLjJQICgweEUxMDApIEdhbW1hIENvcnJlY3Rpb24g Mi4yKyBTZXR0aW5nICovCisJZGNzX3dyaXRlX3NlcSgweDAwLCAweDAwKTsKKwlkY3Nfd3JpdGVf c2VxKDB4RTEsIDB4MDAsIDB4MDksIDB4MEYsIDB4MEUsIDB4MDcsIDB4MTAsIDB4MEIsIDB4MEEs CisJCSAgICAgIDB4MDQsIDB4MDcsIDB4MEIsIDB4MDgsIDB4MEYsIDB4MTAsIDB4MEEsIDB4MDEp OworCisJLyogR01DVDIuMk4gKDB4RTEwMCkgR2FtbWEgQ29ycmVjdGlvbiAyLjItIFNldHRpbmcg Ki8KKwlkY3Nfd3JpdGVfc2VxKDB4MDAsIDB4MDApOworCWRjc193cml0ZV9zZXEoMHhFMiwgMHgw MCwgMHgwOSwgMHgwRiwgMHgwRSwgMHgwNywgMHgxMCwgMHgwQiwgMHgwQSwKKwkJICAgICAgMHgw NCwgMHgwNywgMHgwQiwgMHgwOCwgMHgwRiwgMHgxMCwgMHgwQSwgMHgwMSk7CisKKwkvKiBFeGl0 IENNRDIgbW9kZSAqLworCWRjc193cml0ZV9zZXEoMHgwMCwgMHgwMCk7CisJZGNzX3dyaXRlX3Nl cSgweEZGLCAweEZGLCAweEZGLCAweEZGKTsKKworCS8qIE9UTTgwMDlhIE5PUCAqLworCWRjc193 cml0ZV9zZXEoMHgwMCwgMHgwMCk7CisKKwlyZXQgPSBtaXBpX2RzaV9kY3NfZXhpdF9zbGVlcF9t b2RlKGRzaSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFdhaXQgZm9yIHNsZWVw IG91dCBleGl0ICovCisJbWRlbGF5KDEyMCk7CisKKwkvKiBEZWZhdWx0IHBvcnRyYWl0IDQ4MHg4 MDAgcmdiMjQgKi8KKwlkY3Nfd3JpdGVfc2VxKE1JUElfRENTX1NFVF9BRERSRVNTX01PREUsIDB4 MDApOworCWRjc193cml0ZV9zZXEoTUlQSV9EQ1NfU0VUX0NPTFVNTl9BRERSRVNTLCAweDAwLCAw eDAwLCAweDAxLCAweERGKTsKKwlkY3Nfd3JpdGVfc2VxKE1JUElfRENTX1NFVF9QQUdFX0FERFJF U1MsIDB4MDAsIDB4MDAsIDB4MDMsIDB4MUYpOworCWRjc193cml0ZV9zZXEoTUlQSV9EQ1NfU0VU X1BJWEVMX0ZPUk1BVCwgMHg3Nyk7CisKKwkvKiBEaXNhYmxlIENBQkMgZmVhdHVyZSAqLworCWRj c193cml0ZV9zZXEoMHg1NSwgMHgwMCk7CisKKwlyZXQgPSBtaXBpX2RzaV9kY3Nfc2V0X2Rpc3Bs YXlfb24oZHNpKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogT1RNODAwOWEgTk9Q ICovCisJZGNzX3dyaXRlX3NlcSgweDAwLCAweDAwKTsKKworCS8qIFNlbmQgQ29tbWFuZCBHUkFN IG1lbW9yeSB3cml0ZSAobm8gcGFyYW1ldGVycykgKi8KKwlkY3Nfd3JpdGVfc2VxKE1JUElfRENT X1dSSVRFX01FTU9SWV9TVEFSVCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvdG04 MDA5YV9kaXNhYmxlKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQoreworCXN0cnVjdCBvdG04MDA5 YSAqY3R4ID0gcGFuZWxfdG9fb3RtODAwOWEocGFuZWwpOworCXN0cnVjdCBtaXBpX2RzaV9kZXZp Y2UgKmRzaSA9IHRvX21pcGlfZHNpX2RldmljZShjdHgtPmRldik7CisJaW50IHJldDsKKworCWlm ICghY3R4LT5lbmFibGVkKQorCQlyZXR1cm4gMDsgLyogVGhpcyBpcyBub3QgYW4gaXNzdWUgc28g d2UgcmV0dXJuIDAgaGVyZSAqLworCisJLyogUG93ZXIgb2ZmIHRoZSBiYWNrbGlnaHQuIE5vdGU6 IGVuZC11c2VyIHN0aWxsIGNvbnRyb2xzIGJyaWdodG5lc3MgKi8KKwljdHgtPmJsX2Rldi0+cHJv cHMucG93ZXIgPSBGQl9CTEFOS19QT1dFUkRPV047CisJcmV0ID0gYmFja2xpZ2h0X3VwZGF0ZV9z dGF0dXMoY3R4LT5ibF9kZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBt aXBpX2RzaV9kY3Nfc2V0X2Rpc3BsYXlfb2ZmKGRzaSk7CisJaWYgKHJldCA8IDApCisJCXJldHVy biByZXQ7CisKKwlyZXQgPSBtaXBpX2RzaV9kY3NfZW50ZXJfc2xlZXBfbW9kZShkc2kpOworCWlm IChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJbXNsZWVwKDEyMCk7CisKKwljdHgtPmVuYWJs ZWQgPSBmYWxzZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG90bTgwMDlhX3VucHJl cGFyZShzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkKK3sKKwlzdHJ1Y3Qgb3RtODAwOWEgKmN0eCA9 IHBhbmVsX3RvX290bTgwMDlhKHBhbmVsKTsKKworCWlmICghY3R4LT5wcmVwYXJlZCkKKwkJcmV0 dXJuIDA7CisKKwlpZiAoY3R4LT5yZXNldF9ncGlvKSB7CisJCWdwaW9kX3NldF92YWx1ZV9jYW5z bGVlcChjdHgtPnJlc2V0X2dwaW8sIDApOworCQltc2xlZXAoMjApOworCX0KKworCWN0eC0+cHJl cGFyZWQgPSBmYWxzZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG90bTgwMDlhX3By ZXBhcmUoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCit7CisJc3RydWN0IG90bTgwMDlhICpjdHgg PSBwYW5lbF90b19vdG04MDA5YShwYW5lbCk7CisJaW50IHJldDsKKworCWlmIChjdHgtPnByZXBh cmVkKQorCQlyZXR1cm4gMDsKKworCWlmIChjdHgtPnJlc2V0X2dwaW8pIHsKKwkJZ3Bpb2Rfc2V0 X3ZhbHVlX2NhbnNsZWVwKGN0eC0+cmVzZXRfZ3BpbywgMCk7CisJCW1zbGVlcCgyMCk7CisJCWdw aW9kX3NldF92YWx1ZV9jYW5zbGVlcChjdHgtPnJlc2V0X2dwaW8sIDEpOworCQltc2xlZXAoMjAp OworCX0KKworCXJldCA9IG90bTgwMDlhX2luaXRfc2VxdWVuY2UoY3R4KTsKKwlpZiAocmV0KQor CQlyZXR1cm4gcmV0OworCisJY3R4LT5wcmVwYXJlZCA9IHRydWU7CisKKwkvKiBQb3dlciBvbiB0 aGUgYmFja2xpZ2h0LiBOb3RlOiBlbmQtdXNlciBzdGlsbCBjb250cm9scyBicmlnaHRuZXNzICov CisJY3R4LT5ibF9kZXYtPnByb3BzLnBvd2VyID0gRkJfQkxBTktfVU5CTEFOSzsKKwliYWNrbGln aHRfdXBkYXRlX3N0YXR1cyhjdHgtPmJsX2Rldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj IGludCBvdG04MDA5YV9lbmFibGUoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCit7CisJc3RydWN0 IG90bTgwMDlhICpjdHggPSBwYW5lbF90b19vdG04MDA5YShwYW5lbCk7CisKKwljdHgtPmVuYWJs ZWQgPSB0cnVlOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb3RtODAwOWFfZ2V0X21v ZGVzKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQoreworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl ICptb2RlOworCisJbW9kZSA9IGRybV9tb2RlX2R1cGxpY2F0ZShwYW5lbC0+ZHJtLCAmZGVmYXVs dF9tb2RlKTsKKwlpZiAoIW1vZGUpIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gYWRkIG1vZGUg JXV4JXV4QCV1XG4iLAorCQkJICBkZWZhdWx0X21vZGUuaGRpc3BsYXksIGRlZmF1bHRfbW9kZS52 ZGlzcGxheSwKKwkJCSAgZGVmYXVsdF9tb2RlLnZyZWZyZXNoKTsKKwkJcmV0dXJuIC1FTk9NRU07 CisJfQorCisJZHJtX21vZGVfc2V0X25hbWUobW9kZSk7CisKKwltb2RlLT50eXBlID0gRFJNX01P REVfVFlQRV9EUklWRVIgfCBEUk1fTU9ERV9UWVBFX1BSRUZFUlJFRDsKKwlkcm1fbW9kZV9wcm9i ZWRfYWRkKHBhbmVsLT5jb25uZWN0b3IsIG1vZGUpOworCisJcGFuZWwtPmNvbm5lY3Rvci0+ZGlz cGxheV9pbmZvLndpZHRoX21tID0gbW9kZS0+d2lkdGhfbW07CisJcGFuZWwtPmNvbm5lY3Rvci0+ ZGlzcGxheV9pbmZvLmhlaWdodF9tbSA9IG1vZGUtPmhlaWdodF9tbTsKKworCXJldHVybiAxOwor fQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wYW5lbF9mdW5jcyBvdG04MDA5YV9kcm1fZnVu Y3MgPSB7CisJLmRpc2FibGUgICA9IG90bTgwMDlhX2Rpc2FibGUsCisJLnVucHJlcGFyZSA9IG90 bTgwMDlhX3VucHJlcGFyZSwKKwkucHJlcGFyZSAgID0gb3RtODAwOWFfcHJlcGFyZSwKKwkuZW5h YmxlICAgID0gb3RtODAwOWFfZW5hYmxlLAorCS5nZXRfbW9kZXMgPSBvdG04MDA5YV9nZXRfbW9k ZXMsCit9OworCisvKgorICogRFNJLUJBU0VEIEJBQ0tMSUdIVAorICovCisKK3N0YXRpYyBpbnQg b3RtODAwOWFfYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMoc3RydWN0IGJhY2tsaWdodF9kZXZpY2Ug KmJkKQoreworCXN0cnVjdCBvdG04MDA5YSAqY3R4ID0gYmxfZ2V0X2RhdGEoYmQpOworCXU4IGRh dGFbMl07CisKKwlpZiAoIWN0eC0+cHJlcGFyZWQpIHsKKwkJRFJNX1dBUk4oImxjZCBub3QgcmVh ZHkgeWV0IGZvciBzZXR0aW5nIGl0cyBiYWNrbGlnaHQhXG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsK Kwl9CisKKwlpZiAoYmQtPnByb3BzLnBvd2VyIDw9IEZCX0JMQU5LX05PUk1BTCkgeworCQkvKiBQ b3dlciBvbiB0aGUgYmFja2xpZ2h0IHdpdGggdGhlIHJlcXVlc3RlZCBicmlnaHRuZXNzICovCisJ CWRhdGFbMF0gPSBNSVBJX0RDU19TRVRfRElTUExBWV9CUklHSFRORVNTOworCQlkYXRhWzFdID0g YmQtPnByb3BzLmJyaWdodG5lc3M7CisJCW90bTgwMDlhX2Rjc193cml0ZV9idWYoY3R4LCBkYXRh LCBBUlJBWV9TSVpFKGRhdGEpKTsKKwkJLyogc2V0IEJyaWdodG5lc3MgQ29udHJvbCAmIEJhY2ts aWdodCBvbiAqLworCQlkYXRhWzFdID0gMHgyNDsKKwl9IGVsc2UgeworCQkvKiBQb3dlciBvZmYg dGhlIGJhY2tsaWdodDogc2V0IEJyaWdodG5lc3MgQ29udHJvbCAmIEJsIG9mZiAqLworCQlkYXRh WzFdID0gMDsKKwl9CisKKwkvKiBVcGRhdGUgQnJpZ2h0bmVzcyBDb250cm9sICYgQmFja2xpZ2h0 ICovCisJZGF0YVswXSA9IE1JUElfRENTX1dSSVRFX0NPTlRST0xfRElTUExBWTsKKwlvdG04MDA5 YV9kY3Nfd3JpdGVfYnVmKGN0eCwgZGF0YSwgQVJSQVlfU0laRShkYXRhKSk7CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBiYWNrbGlnaHRfb3BzIG90bTgwMDlhX2JhY2ts aWdodF9vcHMgPSB7CisJLnVwZGF0ZV9zdGF0dXMgPSBvdG04MDA5YV9iYWNrbGlnaHRfdXBkYXRl X3N0YXR1cywKK307CisKK3N0YXRpYyBpbnQgb3RtODAwOWFfcHJvYmUoc3RydWN0IG1pcGlfZHNp X2RldmljZSAqZHNpKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZkc2ktPmRldjsKKwlzdHJ1 Y3Qgb3RtODAwOWEgKmN0eDsKKwlpbnQgcmV0OworCisJY3R4ID0gZGV2bV9remFsbG9jKGRldiwg c2l6ZW9mKCpjdHgpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWN0eCkKKwkJcmV0dXJuIC1FTk9NRU07 CisKKwljdHgtPnJlc2V0X2dwaW8gPSBkZXZtX2dwaW9kX2dldF9vcHRpb25hbChkZXYsICJyZXNl dCIsIEdQSU9EX09VVF9MT1cpOworCWlmIChJU19FUlIoY3R4LT5yZXNldF9ncGlvKSkgeworCQlk ZXZfZXJyKGRldiwgImNhbm5vdCBnZXQgcmVzZXQtZ3Bpb1xuIik7CisJCXJldHVybiBQVFJfRVJS KGN0eC0+cmVzZXRfZ3Bpbyk7CisJfQorCisJbWlwaV9kc2lfc2V0X2RydmRhdGEoZHNpLCBjdHgp OworCisJY3R4LT5kZXYgPSBkZXY7CisKKwlkc2ktPmxhbmVzID0gMjsKKwlkc2ktPmZvcm1hdCA9 IE1JUElfRFNJX0ZNVF9SR0I4ODg7CisJZHNpLT5tb2RlX2ZsYWdzID0gTUlQSV9EU0lfTU9ERV9W SURFTyB8IE1JUElfRFNJX01PREVfVklERU9fQlVSU1QgfAorCQkJICBNSVBJX0RTSV9NT0RFX0xQ TTsKKworCWRybV9wYW5lbF9pbml0KCZjdHgtPnBhbmVsKTsKKwljdHgtPnBhbmVsLmRldiA9IGRl djsKKwljdHgtPnBhbmVsLmZ1bmNzID0gJm90bTgwMDlhX2RybV9mdW5jczsKKworCWN0eC0+Ymxf ZGV2ID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcihEUlZfTkFNRSAiX2JhY2tsaWdodCIsIGRl diwgY3R4LAorCQkJCQkJJm90bTgwMDlhX2JhY2tsaWdodF9vcHMsIE5VTEwpOworCWlmIChJU19F UlIoY3R4LT5ibF9kZXYpKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIGJh Y2tsaWdodCBkZXZpY2VcbiIpOworCQlyZXR1cm4gUFRSX0VSUihjdHgtPmJsX2Rldik7CisJfQor CisJY3R4LT5ibF9kZXYtPnByb3BzLm1heF9icmlnaHRuZXNzID0gT1RNODAwOUFfQkFDS0xJR0hU X01BWDsKKwljdHgtPmJsX2Rldi0+cHJvcHMuYnJpZ2h0bmVzcyA9IE9UTTgwMDlBX0JBQ0tMSUdI VF9ERUZBVUxUOworCWN0eC0+YmxfZGV2LT5wcm9wcy5wb3dlciA9IEZCX0JMQU5LX1BPV0VSRE9X TjsKKwljdHgtPmJsX2Rldi0+cHJvcHMudHlwZSA9IEJBQ0tMSUdIVF9SQVc7CisKKwlkcm1fcGFu ZWxfYWRkKCZjdHgtPnBhbmVsKTsKKworCXJldCA9IG1pcGlfZHNpX2F0dGFjaChkc2kpOworCWlm IChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAibWlwaV9kc2lfYXR0YWNoIGZhaWxlZC4gSXMg aG9zdCByZWFkeT9cbiIpOworCQlkcm1fcGFuZWxfcmVtb3ZlKCZjdHgtPnBhbmVsKTsKKwkJYmFj a2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKGN0eC0+YmxfZGV2KTsKKwkJcmV0dXJuIHJldDsKKwl9 CisKKwlEUk1fSU5GTyhEUlZfTkFNRSAiX3BhbmVsICV1eCV1QCV1ICV1YnBwIGRzaSAldWRsIC0g cmVhZHlcbiIsCisJCSBkZWZhdWx0X21vZGUuaGRpc3BsYXksIGRlZmF1bHRfbW9kZS52ZGlzcGxh eSwKKwkJIGRlZmF1bHRfbW9kZS52cmVmcmVzaCwKKwkJIG1pcGlfZHNpX3BpeGVsX2Zvcm1hdF90 b19icHAoZHNpLT5mb3JtYXQpLCBkc2ktPmxhbmVzKTsKKworCXJldHVybiAwOworfQorCitzdGF0 aWMgaW50IG90bTgwMDlhX3JlbW92ZShzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2kpCit7CisJ c3RydWN0IG90bTgwMDlhICpjdHggPSBtaXBpX2RzaV9nZXRfZHJ2ZGF0YShkc2kpOworCisJbWlw aV9kc2lfZGV0YWNoKGRzaSk7CisJZHJtX3BhbmVsX3JlbW92ZSgmY3R4LT5wYW5lbCk7CisKKwli YWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoY3R4LT5ibF9kZXYpOworCisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9yaXNldGVjaF9vdG04MDA5YV9v Zl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAib3Jpc2V0ZWNoLG90bTgwMDlhIiB9LAor CXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG9yaXNldGVjaF9vdG04MDA5YV9vZl9t YXRjaCk7CisKK3N0YXRpYyBzdHJ1Y3QgbWlwaV9kc2lfZHJpdmVyIG9yaXNldGVjaF9vdG04MDA5 YV9kcml2ZXIgPSB7CisJLnByb2JlICA9IG90bTgwMDlhX3Byb2JlLAorCS5yZW1vdmUgPSBvdG04 MDA5YV9yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSBEUlZfTkFNRSAiX3BhbmVsIiwK KwkJLm9mX21hdGNoX3RhYmxlID0gb3Jpc2V0ZWNoX290bTgwMDlhX29mX21hdGNoLAorCX0sCit9 OworbW9kdWxlX21pcGlfZHNpX2RyaXZlcihvcmlzZXRlY2hfb3RtODAwOWFfZHJpdmVyKTsKKwor TU9EVUxFX0FVVEhPUigiUGhpbGlwcGUgQ29ybnUgPHBoaWxpcHBlLmNvcm51QHN0LmNvbT4iKTsK K01PRFVMRV9BVVRIT1IoIllhbm5pY2sgRmVydHJlIDx5YW5uaWNrLmZlcnRyZUBzdC5jb20+Iik7 CitNT0RVTEVfREVTQ1JJUFRJT04oIkRSTSBkcml2ZXIgZm9yIE9yaXNlIFRlY2ggT1RNODAwOUEg TUlQSSBEU0kgcGFuZWwiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKLS0gCjEuOS4xCgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwg bWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK