From mboxrd@z Thu Jan 1 00:00:00 1970 From: Philippe Cornu Subject: [PATCH v2 2/2] drm/panel: Add support for Raydium RM68200 panel driver Date: Fri, 2 Mar 2018 16:32:22 +0100 Message-ID: <20180302153222.4377-3-philippe.cornu@st.com> References: <20180302153222.4377-1-philippe.cornu@st.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180302153222.4377-1-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: Thierry Reding , David Airlie , Rob Herring , Mark Rutland , dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Alexandre Torgue , Philippe Cornu , Yannick Fertre , Vincent Abriou List-Id: devicetree@vger.kernel.org VGhpcyBwYXRjaCBhZGRzIFJheWRpdW0gU2VtaWNvbmR1Y3RvciBDb3Jwb3JhdGlvbiBSTTY4MjAw CjUuNSIgNzIweDEyODAgVEZUIExDRCBwYW5lbCBkcml2ZXIgKE1JUEktRFNJIHZpZGVvIG1vZGUp LgoKU2lnbmVkLW9mZi1ieTogUGhpbGlwcGUgQ29ybnUgPHBoaWxpcHBlLmNvcm51QHN0LmNvbT4K LS0tCiBkcml2ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZpZyAgICAgICAgICAgICAgICAgfCAgIDgg KwogZHJpdmVycy9ncHUvZHJtL3BhbmVsL01ha2VmaWxlICAgICAgICAgICAgICAgIHwgICAxICsK IGRyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC1yYXlkaXVtLXJtNjgyMDAuYyB8IDQzNyArKysr KysrKysrKysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCA0NDYgaW5zZXJ0aW9ucygr KQogY3JlYXRlIG1vZGUgMTAwNzU1IGRyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC1yYXlkaXVt LXJtNjgyMDAuYwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9LY29uZmlnIGIv ZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcKaW5kZXggOTg4MDQ4ZWJjYzIyLi5hMzBlYjdh MmY4ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9LY29uZmlnCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9wYW5lbC9LY29uZmlnCkBAIC0xMDgsNiArMTA4LDE0IEBAIGNvbmZpZyBE Uk1fUEFORUxfUkFTUEJFUlJZUElfVE9VQ0hTQ1JFRU4KIAkgIFBpIDciIFRvdWNoc2NyZWVuLiAg VG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwKIAkgIGNob29zZSBNIGhlcmUuCiAK K2NvbmZpZyBEUk1fUEFORUxfUkFZRElVTV9STTY4MjAwCisJdHJpc3RhdGUgIlJheWRpdW0gUk02 ODIwMCA3MjB4MTI4MCBkc2kgdmlkZW8gbW9kZSBwYW5lbCIKKwlkZXBlbmRzIG9uIE9GCisJZGVw ZW5kcyBvbiBEUk1fTUlQSV9EU0kKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRv IGVuYWJsZSBzdXBwb3J0IGZvciBSYXlkaXVtIFJNNjgyMDAKKwkgIDcyMHgxMjgwIGRzaSB2aWRl byBtb2RlIHBhbmVsCisKIGNvbmZpZyBEUk1fUEFORUxfU0FNU1VOR19TNkUzSEEyCiAJdHJpc3Rh dGUgIlNhbXN1bmcgUzZFM0hBMiBEU0kgdmlkZW8gbW9kZSBwYW5lbCIKIAlkZXBlbmRzIG9uIE9G CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvTWFrZWZpbGUgYi9kcml2ZXJzL2dw dS9kcm0vcGFuZWwvTWFrZWZpbGUKaW5kZXggM2QyYTg4ZDBlOTY1Li5mMjZlZmMxMWQ3NDYgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dw dS9kcm0vcGFuZWwvTWFrZWZpbGUKQEAgLTksNiArOSw3IEBAIG9iai0kKENPTkZJR19EUk1fUEFO RUxfTEdfTEc0NTczKSArPSBwYW5lbC1sZy1sZzQ1NzMubwogb2JqLSQoQ09ORklHX0RSTV9QQU5F TF9PUklTRVRFQ0hfT1RNODAwOUEpICs9IHBhbmVsLW9yaXNldGVjaC1vdG04MDA5YS5vCiBvYmot JChDT05GSUdfRFJNX1BBTkVMX1BBTkFTT05JQ19WVlgxMEYwMzROMDApICs9IHBhbmVsLXBhbmFz b25pYy12dngxMGYwMzRuMDAubwogb2JqLSQoQ09ORklHX0RSTV9QQU5FTF9SQVNQQkVSUllQSV9U T1VDSFNDUkVFTikgKz0gcGFuZWwtcmFzcGJlcnJ5cGktdG91Y2hzY3JlZW4ubworb2JqLSQoQ09O RklHX0RSTV9QQU5FTF9SQVlESVVNX1JNNjgyMDApICs9IHBhbmVsLXJheWRpdW0tcm02ODIwMC5v CiBvYmotJChDT05GSUdfRFJNX1BBTkVMX1NBTVNVTkdfTEQ5MDQwKSArPSBwYW5lbC1zYW1zdW5n LWxkOTA0MC5vCiBvYmotJChDT05GSUdfRFJNX1BBTkVMX1NBTVNVTkdfUzZFM0hBMikgKz0gcGFu ZWwtc2Ftc3VuZy1zNmUzaGEyLm8KIG9iai0kKENPTkZJR19EUk1fUEFORUxfU0FNU1VOR19TNkU2 M0owWDAzKSArPSBwYW5lbC1zYW1zdW5nLXM2ZTYzajB4MDMubwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL3BhbmVsL3BhbmVsLXJheWRpdW0tcm02ODIwMC5jIGIvZHJpdmVycy9ncHUvZHJt L3BhbmVsL3BhbmVsLXJheWRpdW0tcm02ODIwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4 IDAwMDAwMDAwMDAwMC4uMzVkNzUxNDhjYTA4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9n cHUvZHJtL3BhbmVsL3BhbmVsLXJheWRpdW0tcm02ODIwMC5jCkBAIC0wLDAgKzEsNDM3IEBACisv LyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyoKKyAqIENvcHlyaWdodCAoQykg U1RNaWNyb2VsZWN0cm9uaWNzIFNBIDIwMTcKKyAqCisgKiBBdXRob3JzOiBQaGlsaXBwZSBDb3Ju dSA8cGhpbGlwcGUuY29ybnVAc3QuY29tPgorICogICAgICAgICAgWWFubmljayBGZXJ0cmUgPHlh bm5pY2suZmVydHJlQHN0LmNvbT4KKyAqLworCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNs dWRlIDxkcm0vZHJtX21pcGlfZHNpLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wYW5lbC5oPgorI2lu Y2x1ZGUgPGxpbnV4L2JhY2tsaWdodC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8vY29uc3VtZXIu aD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KKyNpbmNsdWRlIDx2aWRl by9taXBpX2Rpc3BsYXkuaD4KKworLyoqKiBNYW51ZmFjdHVyZXIgQ29tbWFuZCBTZXQgKioqLwor I2RlZmluZSBNQ1NfQ01EX01PREVfU1cJMHhGRSAvKiBDTUQgTW9kZSBTd2l0Y2ggKi8KKyNkZWZp bmUgTUNTX0NNRDFfVUNTCTB4MDAgLyogVXNlciBDb21tYW5kIFNldCAoVUNTID0gQ01EMSkgKi8K KyNkZWZpbmUgTUNTX0NNRDJfUDAJMHgwMSAvKiBNYW51ZmFjdHVyZSBDb21tYW5kIFNldCBQYWdl MCAoQ01EMiBQMCkgKi8KKyNkZWZpbmUgTUNTX0NNRDJfUDEJMHgwMiAvKiBNYW51ZmFjdHVyZSBD b21tYW5kIFNldCBQYWdlMSAoQ01EMiBQMSkgKi8KKyNkZWZpbmUgTUNTX0NNRDJfUDIJMHgwMyAv KiBNYW51ZmFjdHVyZSBDb21tYW5kIFNldCBQYWdlMiAoQ01EMiBQMikgKi8KKyNkZWZpbmUgTUNT X0NNRDJfUDMJMHgwNCAvKiBNYW51ZmFjdHVyZSBDb21tYW5kIFNldCBQYWdlMyAoQ01EMiBQMykg Ki8KKworLyogQ01EMiBQMCBjb21tYW5kcyAoRGlzcGxheSBPcHRpb25zIGFuZCBQb3dlcikgKi8K KyNkZWZpbmUgTUNTX1NUQkNUUgkweDEyIC8qIFRFMSBPdXRwdXQgU2V0dGluZyBaaWctWmFnIENv bm5lY3Rpb24gKi8KKyNkZWZpbmUgTUNTX1NHT1BDVFIJMHgxNiAvKiBTb3VyY2UgQmlhcyBDdXJy ZW50ICovCisjZGVmaW5lIE1DU19TRENUUgkweDFBIC8qIFNvdXJjZSBPdXRwdXQgRGVsYXkgVGlt ZSAqLworI2RlZmluZSBNQ1NfSU5WQ1RSCTB4MUIgLyogSW52ZXJzaW9uIFR5cGUgKi8KKyNkZWZp bmUgTUNTX0VYVF9QV1JfSUMJMHgyNCAvKiBFeHRlcm5hbCBQV1IgSUMgQ29udHJvbCAqLworI2Rl ZmluZSBNQ1NfU0VUQVZERAkweDI3IC8qIFBGTSBDb250cm9sIGZvciBBVkREIE91dHB1dCAqLwor I2RlZmluZSBNQ1NfU0VUQVZFRQkweDI5IC8qIFBGTSBDb250cm9sIGZvciBBVkVFIE91dHB1dCAq LworI2RlZmluZSBNQ1NfQlQyQ1RSCTB4MkIgLyogRERWREwgQ2hhcmdlIFB1bXAgQ29udHJvbCAq LworI2RlZmluZSBNQ1NfQlQzQ1RSCTB4MkYgLyogVkdIIENoYXJnZSBQdW1wIENvbnRyb2wgKi8K KyNkZWZpbmUgTUNTX0JUNENUUgkweDM0IC8qIFZHTCBDaGFyZ2UgUHVtcCBDb250cm9sICovCisj ZGVmaW5lIE1DU19WQ01DVFIJMHg0NiAvKiBWQ09NIE91dHB1dCBMZXZlbCBDb250cm9sICovCisj ZGVmaW5lIE1DU19TRVRWR04JMHg1MiAvKiBWRyBNL1MgTiBDb250cm9sICovCisjZGVmaW5lIE1D U19TRVRWR1AJMHg1NCAvKiBWRyBNL1MgUCBDb250cm9sICovCisjZGVmaW5lIE1DU19TV19DVFJM CTB4NUYgLyogSW50ZXJmYWNlIENvbnRyb2wgZm9yIFBGTSBhbmQgTUlQSSAqLworCisvKiBDTUQy IFAyIGNvbW1hbmRzIChHT0EgVGltaW5nIENvbnRyb2wpIC0gbm8gZGVzY3JpcHRpb24gaW4gZGF0 YXNoZWV0ICovCisjZGVmaW5lIEdPQV9WU1RWMQkweDAwCisjZGVmaW5lIEdPQV9WU1RWMgkweDA3 CisjZGVmaW5lIEdPQV9WQ0xLMQkweDBFCisjZGVmaW5lIEdPQV9WQ0xLMgkweDE3CisjZGVmaW5l IEdPQV9WQ0xLX09QVDEJMHgyMAorI2RlZmluZSBHT0FfQklDTEsxCTB4MkEKKyNkZWZpbmUgR09B X0JJQ0xLMgkweDM3CisjZGVmaW5lIEdPQV9CSUNMSzMJMHg0NAorI2RlZmluZSBHT0FfQklDTEs0 CTB4NEYKKyNkZWZpbmUgR09BX0JJQ0xLX09QVDEJMHg1QgorI2RlZmluZSBHT0FfQklDTEtfT1BU MgkweDYwCisjZGVmaW5lIE1DU19HT0FfR1BPMQkweDZECisjZGVmaW5lIE1DU19HT0FfR1BPMgkw eDcxCisjZGVmaW5lIE1DU19HT0FfRVEJMHg3NAorI2RlZmluZSBNQ1NfR09BX0NMS19HQUxMT04g MHg3QworI2RlZmluZSBNQ1NfR09BX0ZTX1NFTDAJMHg3RQorI2RlZmluZSBNQ1NfR09BX0ZTX1NF TDEJMHg4NworI2RlZmluZSBNQ1NfR09BX0ZTX1NFTDIJMHg5MQorI2RlZmluZSBNQ1NfR09BX0ZT X1NFTDMJMHg5QgorI2RlZmluZSBNQ1NfR09BX0JTX1NFTDAJMHhBQworI2RlZmluZSBNQ1NfR09B X0JTX1NFTDEJMHhCNQorI2RlZmluZSBNQ1NfR09BX0JTX1NFTDIJMHhCRgorI2RlZmluZSBNQ1Nf R09BX0JTX1NFTDMJMHhDOQorI2RlZmluZSBNQ1NfR09BX0JTX1NFTDQJMHhEMworCisvKiBDTUQy IFAzIGNvbW1hbmRzIChHYW1tYSkgKi8KKyNkZWZpbmUgTUNTX0dBTU1BX1ZQCTB4NjAgLyogR2Ft bWEgVlAxflZQMTYgKi8KKyNkZWZpbmUgTUNTX0dBTU1BX1ZOCTB4NzAgLyogR2FtbWEgVk4xflZO MTYgKi8KKworc3RydWN0IHJtNjgyMDAgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3Qg ZHJtX3BhbmVsIHBhbmVsOworCXN0cnVjdCBncGlvX2Rlc2MgKnJlc2V0X2dwaW87CisJc3RydWN0 IHJlZ3VsYXRvciAqc3VwcGx5OworCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiYWNrbGlnaHQ7 CisJYm9vbCBwcmVwYXJlZDsKKwlib29sIGVuYWJsZWQ7Cit9OworCitzdGF0aWMgY29uc3Qgc3Ry dWN0IGRybV9kaXNwbGF5X21vZGUgZGVmYXVsdF9tb2RlID0geworCS5jbG9jayA9IDUyNTgyLAor CS5oZGlzcGxheSA9IDcyMCwKKwkuaHN5bmNfc3RhcnQgPSA3MjAgKyAzOCwKKwkuaHN5bmNfZW5k ID0gNzIwICsgMzggKyA4LAorCS5odG90YWwgPSA3MjAgKyAzOCArIDggKyAzOCwKKwkudmRpc3Bs YXkgPSAxMjgwLAorCS52c3luY19zdGFydCA9IDEyODAgKyAxMiwKKwkudnN5bmNfZW5kID0gMTI4 MCArIDEyICsgNCwKKwkudnRvdGFsID0gMTI4MCArIDEyICsgNCArIDEyLAorCS52cmVmcmVzaCA9 IDUwLAorCS5mbGFncyA9IDAsCisJLndpZHRoX21tID0gNjgsCisJLmhlaWdodF9tbSA9IDEyMiwK K307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJtNjgyMDAgKnBhbmVsX3RvX3JtNjgyMDAoc3Ry dWN0IGRybV9wYW5lbCAqcGFuZWwpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihwYW5lbCwgc3Ry dWN0IHJtNjgyMDAsIHBhbmVsKTsKK30KKworc3RhdGljIHZvaWQgcm02ODIwMF9kY3Nfd3JpdGVf YnVmKHN0cnVjdCBybTY4MjAwICpjdHgsIGNvbnN0IHZvaWQgKmRhdGEsCisJCQkJICBzaXplX3Qg bGVuKQoreworCXN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaSA9IHRvX21pcGlfZHNpX2Rldmlj ZShjdHgtPmRldik7CisKKwlpZiAobWlwaV9kc2lfZGNzX3dyaXRlX2J1ZmZlcihkc2ksIGRhdGEs IGxlbikgPCAwKQorCQlEUk1fV0FSTl9PTkNFKCJtaXBpIGRzaSBkY3Mgd3JpdGUgYnVmZmVyIGZh aWxlZFxuIik7Cit9CisKK3N0YXRpYyB2b2lkIHJtNjgyMDBfZGNzX3dyaXRlX2NtZChzdHJ1Y3Qg cm02ODIwMCAqY3R4LCB1OCBjbWQsIHU4IHZhbHVlKQoreworCXN0cnVjdCBtaXBpX2RzaV9kZXZp Y2UgKmRzaSA9IHRvX21pcGlfZHNpX2RldmljZShjdHgtPmRldik7CisKKwlpZiAobWlwaV9kc2lf ZGNzX3dyaXRlKGRzaSwgY21kLCAmdmFsdWUsIDEpIDwgMCkKKwkJRFJNX1dBUk5fT05DRSgibWlw aSBkc2kgZGNzIHdyaXRlIGZhaWxlZFxuIik7Cit9CisKKyNkZWZpbmUgZGNzX3dyaXRlX3NlcShj dHgsIHNlcS4uLikJCQkJXAorKHsJCQkJCQkJCVwKKwlzdGF0aWMgY29uc3QgdTggZFtdID0geyBz ZXEgfTsJCQkJXAorCXJtNjgyMDBfZGNzX3dyaXRlX2J1ZihjdHgsIGQsIEFSUkFZX1NJWkUoZCkp OwkJXAorfSkKKworLyoKKyAqIFRoaXMgcGFuZWwgaXMgbm90IGFibGUgdG8gYXV0by1pbmNyZW1l bnQgYWxsIGNtZCBhZGRyZXNzZXMgc28gZm9yIHNvbWUgb2YKKyAqIHRoZW0sIHdlIG5lZWQgdG8g c2VuZCB0aGVtIG9uZSBieSBvbmUuLi4KKyAqLworI2RlZmluZSBkY3Nfd3JpdGVfY21kX3NlcShj dHgsIGNtZCwgc2VxLi4uKQkJCVwKKyh7CQkJCQkJCQlcCisJc3RhdGljIGNvbnN0IHU4IGRbXSA9 IHsgc2VxIH07CQkJCVwKKwlzdGF0aWMgaW50IGk7CQkJCQkJXAorCWZvciAoaSA9IDA7IGkgPCBB UlJBWV9TSVpFKGQpIDsgaSsrKQkJCVwKKwkJcm02ODIwMF9kY3Nfd3JpdGVfY21kKGN0eCwgY21k ICsgaSwgZFtpXSk7CVwKK30pCisKK3N0YXRpYyB2b2lkIHJtNjgyMDBfaW5pdF9zZXF1ZW5jZShz dHJ1Y3Qgcm02ODIwMCAqY3R4KQoreworCS8qIEVudGVyIENNRDIgd2l0aCBwYWdlIDAgKi8KKwlk Y3Nfd3JpdGVfc2VxKGN0eCwgTUNTX0NNRF9NT0RFX1NXLCBNQ1NfQ01EMl9QMCk7CisJZGNzX3dy aXRlX2NtZF9zZXEoY3R4LCBNQ1NfRVhUX1BXUl9JQywgMHhDMCwgMHg1MywgMHgwMCk7CisJZGNz X3dyaXRlX3NlcShjdHgsIE1DU19CVDJDVFIsIDB4RTUpOworCWRjc193cml0ZV9zZXEoY3R4LCBN Q1NfU0VUQVZERCwgMHgwQSk7CisJZGNzX3dyaXRlX3NlcShjdHgsIE1DU19TRVRBVkVFLCAweDBB KTsKKwlkY3Nfd3JpdGVfc2VxKGN0eCwgTUNTX1NHT1BDVFIsIDB4NTIpOworCWRjc193cml0ZV9z ZXEoY3R4LCBNQ1NfQlQzQ1RSLCAweDUzKTsKKwlkY3Nfd3JpdGVfc2VxKGN0eCwgTUNTX0JUNENU UiwgMHg1QSk7CisJZGNzX3dyaXRlX3NlcShjdHgsIE1DU19JTlZDVFIsIDB4MDApOworCWRjc193 cml0ZV9zZXEoY3R4LCBNQ1NfU1RCQ1RSLCAweDBBKTsKKwlkY3Nfd3JpdGVfc2VxKGN0eCwgTUNT X1NEQ1RSLCAweDA2KTsKKwlkY3Nfd3JpdGVfc2VxKGN0eCwgTUNTX1ZDTUNUUiwgMHg1Nik7CisJ ZGNzX3dyaXRlX3NlcShjdHgsIE1DU19TRVRWR04sIDB4QTAsIDB4MDApOworCWRjc193cml0ZV9z ZXEoY3R4LCBNQ1NfU0VUVkdQLCAweEEwLCAweDAwKTsKKwlkY3Nfd3JpdGVfc2VxKGN0eCwgTUNT X1NXX0NUUkwsIDB4MTEpOyAvKiAyIGRhdGEgbGFuZXMsIHNlZSBkb2MgKi8KKworCWRjc193cml0 ZV9zZXEoY3R4LCBNQ1NfQ01EX01PREVfU1csIE1DU19DTUQyX1AyKTsKKwlkY3Nfd3JpdGVfc2Vx KGN0eCwgR09BX1ZTVFYxLCAweDA1KTsKKwlkY3Nfd3JpdGVfc2VxKGN0eCwgMHgwMiwgMHgwQik7 CisJZGNzX3dyaXRlX3NlcShjdHgsIDB4MDMsIDB4MEYpOworCWRjc193cml0ZV9zZXEoY3R4LCAw eDA0LCAweDdELCAweDAwLCAweDUwKTsKKwlkY3Nfd3JpdGVfY21kX3NlcShjdHgsIEdPQV9WU1RW MiwgMHgwNSwgMHgxNiwgMHgwRCwgMHgxMSwgMHg3RCwgMHgwMCwKKwkJCSAgMHg1MCk7CisJZGNz X3dyaXRlX2NtZF9zZXEoY3R4LCBHT0FfVkNMSzEsIDB4MDcsIDB4MDgsIDB4MDEsIDB4MDIsIDB4 MDAsIDB4N0QsCisJCQkgIDB4MDAsIDB4ODUsIDB4MDgpOworCWRjc193cml0ZV9jbWRfc2VxKGN0 eCwgR09BX1ZDTEsyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDAwLCAweDdELAorCQkJICAw eDAwLCAweDg1LCAweDA4KTsKKwlkY3Nfd3JpdGVfc2VxKGN0eCwgR09BX1ZDTEtfT1BUMSwgMHgw MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJICAgICAgMHgwMCwgMHgwMCwgMHgw MCwgMHgwMCk7CisJZGNzX3dyaXRlX2NtZF9zZXEoY3R4LCBHT0FfQklDTEsxLCAweDA3LCAweDA4 KTsKKwlkY3Nfd3JpdGVfc2VxKGN0eCwgMHgyRCwgMHgwMSk7CisJZGNzX3dyaXRlX3NlcShjdHgs IDB4MkYsIDB4MDIsIDB4MDAsIDB4NDAsIDB4MDUsIDB4MDgsIDB4NTQsIDB4N0QsCisJCSAgICAg IDB4MDApOworCWRjc193cml0ZV9jbWRfc2VxKGN0eCwgR09BX0JJQ0xLMiwgMHgwMywgMHgwNCwg MHgwNSwgMHgwNiwgMHgwMCk7CisJZGNzX3dyaXRlX3NlcShjdHgsIDB4M0QsIDB4NDApOworCWRj c193cml0ZV9zZXEoY3R4LCAweDNGLCAweDA1LCAweDA4LCAweDU0LCAweDdELCAweDAwKTsKKwlk Y3Nfd3JpdGVfc2VxKGN0eCwgR09BX0JJQ0xLMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgw MCwgMHgwMCwKKwkJICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCk7CisJZGNzX3dy aXRlX3NlcShjdHgsIEdPQV9CSUNMSzQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4 MDAsCisJCSAgICAgIDB4MDAsIDB4MDApOworCWRjc193cml0ZV9zZXEoY3R4LCAweDU4LCAweDAw LCAweDAwLCAweDAwKTsKKwlkY3Nfd3JpdGVfc2VxKGN0eCwgR09BX0JJQ0xLX09QVDEsIDB4MDAs IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDApOworCWRjc193cml0ZV9zZXEoY3R4LCBHT0FfQklDTEtf T1BUMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKwkJICAgICAgMHgwMCwg MHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCk7CisJZGNzX3dyaXRlX3NlcShjdHgs IE1DU19HT0FfR1BPMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCk7CisJZGNzX3dyaXRlX3NlcShj dHgsIE1DU19HT0FfR1BPMiwgMHgwMCwgMHgyMCwgMHgwMCk7CisJZGNzX3dyaXRlX3NlcShjdHgs IE1DU19HT0FfRVEsIDB4MDgsIDB4MDgsIDB4MDgsIDB4MDgsIDB4MDgsIDB4MDgsCisJCSAgICAg IDB4MDAsIDB4MDApOworCWRjc193cml0ZV9zZXEoY3R4LCBNQ1NfR09BX0NMS19HQUxMT04sIDB4 MDAsIDB4MDApOworCWRjc193cml0ZV9jbWRfc2VxKGN0eCwgTUNTX0dPQV9GU19TRUwwLCAweEJG LCAweDAyLCAweDA2LCAweDE0LCAweDEwLAorCQkJICAweDE2LCAweDEyLCAweDA4LCAweDNGKTsK KwlkY3Nfd3JpdGVfY21kX3NlcShjdHgsIE1DU19HT0FfRlNfU0VMMSwgMHgzRiwgMHgzRiwgMHgz RiwgMHgzRiwgMHgwQywKKwkJCSAgMHgwQSwgMHgwRSwgMHgzRiwgMHgzRiwgMHgwMCk7CisJZGNz X3dyaXRlX2NtZF9zZXEoY3R4LCBNQ1NfR09BX0ZTX1NFTDIsIDB4MDQsIDB4M0YsIDB4M0YsIDB4 M0YsIDB4M0YsCisJCQkgIDB4MDUsIDB4MDEsIDB4M0YsIDB4M0YsIDB4MEYpOworCWRjc193cml0 ZV9jbWRfc2VxKGN0eCwgTUNTX0dPQV9GU19TRUwzLCAweDBCLCAweDBELCAweDNGLCAweDNGLCAw eDNGLAorCQkJICAweDNGKTsKKwlkY3Nfd3JpdGVfY21kX3NlcShjdHgsIDB4QTIsIDB4M0YsIDB4 MDksIDB4MTMsIDB4MTcsIDB4MTEsIDB4MTUpOworCWRjc193cml0ZV9jbWRfc2VxKGN0eCwgMHhB OSwgMHgwNywgMHgwMywgMHgzRik7CisJZGNzX3dyaXRlX2NtZF9zZXEoY3R4LCBNQ1NfR09BX0JT X1NFTDAsIDB4M0YsIDB4MDUsIDB4MDEsIDB4MTcsIDB4MTMsCisJCQkgIDB4MTUsIDB4MTEsIDB4 MEYsIDB4M0YpOworCWRjc193cml0ZV9jbWRfc2VxKGN0eCwgTUNTX0dPQV9CU19TRUwxLCAweDNG LCAweDNGLCAweDNGLCAweDNGLCAweDBCLAorCQkJICAweDBELCAweDA5LCAweDNGLCAweDNGLCAw eDA3KTsKKwlkY3Nfd3JpdGVfY21kX3NlcShjdHgsIE1DU19HT0FfQlNfU0VMMiwgMHgwMywgMHgz RiwgMHgzRiwgMHgzRiwgMHgzRiwKKwkJCSAgMHgwMiwgMHgwNiwgMHgzRiwgMHgzRiwgMHgwOCk7 CisJZGNzX3dyaXRlX2NtZF9zZXEoY3R4LCBNQ1NfR09BX0JTX1NFTDMsIDB4MEMsIDB4MEEsIDB4 M0YsIDB4M0YsIDB4M0YsCisJCQkgIDB4M0YsIDB4M0YsIDB4MEUsIDB4MTAsIDB4MTQpOworCWRj c193cml0ZV9jbWRfc2VxKGN0eCwgTUNTX0dPQV9CU19TRUw0LCAweDEyLCAweDE2LCAweDAwLCAw eDA0LCAweDNGKTsKKwlkY3Nfd3JpdGVfc2VxKGN0eCwgMHhEQywgMHgwMik7CisJZGNzX3dyaXRl X3NlcShjdHgsIDB4REUsIDB4MTIpOworCisJZGNzX3dyaXRlX3NlcShjdHgsIE1DU19DTURfTU9E RV9TVywgMHgwRSk7IC8qIE5vIGRvY3VtZW50YXRpb24gKi8KKwlkY3Nfd3JpdGVfc2VxKGN0eCwg MHgwMSwgMHg3NSk7CisKKwlkY3Nfd3JpdGVfc2VxKGN0eCwgTUNTX0NNRF9NT0RFX1NXLCBNQ1Nf Q01EMl9QMyk7CisJZGNzX3dyaXRlX2NtZF9zZXEoY3R4LCBNQ1NfR0FNTUFfVlAsIDB4MDAsIDB4 MEMsIDB4MTIsIDB4MEUsIDB4MDYsCisJCQkgIDB4MTIsIDB4MEUsIDB4MEIsIDB4MTUsIDB4MEIs IDB4MTAsIDB4MDcsIDB4MEYsCisJCQkgIDB4MTIsIDB4MEMsIDB4MDApOworCWRjc193cml0ZV9j bWRfc2VxKGN0eCwgTUNTX0dBTU1BX1ZOLCAweDAwLCAweDBDLCAweDEyLCAweDBFLCAweDA2LAor CQkJICAweDEyLCAweDBFLCAweDBCLCAweDE1LCAweDBCLCAweDEwLCAweDA3LCAweDBGLAorCQkJ ICAweDEyLCAweDBDLCAweDAwKTsKKworCS8qIEV4aXQgQ01EMiAqLworCWRjc193cml0ZV9zZXEo Y3R4LCBNQ1NfQ01EX01PREVfU1csIE1DU19DTUQxX1VDUyk7Cit9CisKK3N0YXRpYyBpbnQgcm02 ODIwMF9kaXNhYmxlKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQoreworCXN0cnVjdCBybTY4MjAw ICpjdHggPSBwYW5lbF90b19ybTY4MjAwKHBhbmVsKTsKKworCWlmICghY3R4LT5lbmFibGVkKQor CQlyZXR1cm4gMDsKKworCWJhY2tsaWdodF9kaXNhYmxlKGN0eC0+YmFja2xpZ2h0KTsKKworCWN0 eC0+ZW5hYmxlZCA9IGZhbHNlOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcm02ODIw MF91bnByZXBhcmUoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCit7CisJc3RydWN0IHJtNjgyMDAg KmN0eCA9IHBhbmVsX3RvX3JtNjgyMDAocGFuZWwpOworCXN0cnVjdCBtaXBpX2RzaV9kZXZpY2Ug KmRzaSA9IHRvX21pcGlfZHNpX2RldmljZShjdHgtPmRldik7CisJaW50IHJldDsKKworCWlmICgh Y3R4LT5wcmVwYXJlZCkKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBtaXBpX2RzaV9kY3Nfc2V0X2Rp c3BsYXlfb2ZmKGRzaSk7CisJaWYgKHJldCkKKwkJRFJNX1dBUk4oImZhaWxlZCB0byBzZXQgZGlz cGxheSBvZmY6ICVkXG4iLCByZXQpOworCisJcmV0ID0gbWlwaV9kc2lfZGNzX2VudGVyX3NsZWVw X21vZGUoZHNpKTsKKwlpZiAocmV0KQorCQlEUk1fV0FSTigiZmFpbGVkIHRvIGVudGVyIHNsZWVw IG1vZGU6ICVkXG4iLCByZXQpOworCisJbXNsZWVwKDEyMCk7CisKKwlpZiAoY3R4LT5yZXNldF9n cGlvKSB7CisJCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChjdHgtPnJlc2V0X2dwaW8sIDEpOwor CQltc2xlZXAoMjApOworCX0KKworCXJlZ3VsYXRvcl9kaXNhYmxlKGN0eC0+c3VwcGx5KTsKKwor CWN0eC0+cHJlcGFyZWQgPSBmYWxzZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJt NjgyMDBfcHJlcGFyZShzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkKK3sKKwlzdHJ1Y3Qgcm02ODIw MCAqY3R4ID0gcGFuZWxfdG9fcm02ODIwMChwYW5lbCk7CisJc3RydWN0IG1pcGlfZHNpX2Rldmlj ZSAqZHNpID0gdG9fbWlwaV9kc2lfZGV2aWNlKGN0eC0+ZGV2KTsKKwlpbnQgcmV0OworCisJaWYg KGN0eC0+cHJlcGFyZWQpCisJCXJldHVybiAwOworCisJcmV0ID0gcmVndWxhdG9yX2VuYWJsZShj dHgtPnN1cHBseSk7CisJaWYgKHJldCA8IDApIHsKKwkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gZW5h YmxlIHN1cHBseTogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKGN0eC0+ cmVzZXRfZ3BpbykgeworCQlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAoY3R4LT5yZXNldF9ncGlv LCAxKTsKKwkJbXNsZWVwKDIwKTsKKwkJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKGN0eC0+cmVz ZXRfZ3BpbywgMCk7CisJCW1zbGVlcCgxMDApOworCX0KKworCXJtNjgyMDBfaW5pdF9zZXF1ZW5j ZShjdHgpOworCisJcmV0ID0gbWlwaV9kc2lfZGNzX2V4aXRfc2xlZXBfbW9kZShkc2kpOworCWlm IChyZXQpCisJCXJldHVybiByZXQ7CisKKwltc2xlZXAoMTI1KTsKKworCXJldCA9IG1pcGlfZHNp X2Rjc19zZXRfZGlzcGxheV9vbihkc2kpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlt c2xlZXAoMjApOworCisJY3R4LT5wcmVwYXJlZCA9IHRydWU7CisKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIGludCBybTY4MjAwX2VuYWJsZShzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkKK3sKKwlz dHJ1Y3Qgcm02ODIwMCAqY3R4ID0gcGFuZWxfdG9fcm02ODIwMChwYW5lbCk7CisKKwlpZiAoY3R4 LT5lbmFibGVkKQorCQlyZXR1cm4gMDsKKworCWJhY2tsaWdodF9lbmFibGUoY3R4LT5iYWNrbGln aHQpOworCisJY3R4LT5lbmFibGVkID0gdHJ1ZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMg aW50IHJtNjgyMDBfZ2V0X21vZGVzKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQoreworCXN0cnVj dCBkcm1fZGlzcGxheV9tb2RlICptb2RlOworCisJbW9kZSA9IGRybV9tb2RlX2R1cGxpY2F0ZShw YW5lbC0+ZHJtLCAmZGVmYXVsdF9tb2RlKTsKKwlpZiAoIW1vZGUpIHsKKwkJRFJNX0VSUk9SKCJm YWlsZWQgdG8gYWRkIG1vZGUgJXV4JXV4QCV1XG4iLAorCQkJICBkZWZhdWx0X21vZGUuaGRpc3Bs YXksIGRlZmF1bHRfbW9kZS52ZGlzcGxheSwKKwkJCSAgZGVmYXVsdF9tb2RlLnZyZWZyZXNoKTsK KwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZHJtX21vZGVfc2V0X25hbWUobW9kZSk7CisKKwlt b2RlLT50eXBlID0gRFJNX01PREVfVFlQRV9EUklWRVIgfCBEUk1fTU9ERV9UWVBFX1BSRUZFUlJF RDsKKwlkcm1fbW9kZV9wcm9iZWRfYWRkKHBhbmVsLT5jb25uZWN0b3IsIG1vZGUpOworCisJcGFu ZWwtPmNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLndpZHRoX21tID0gbW9kZS0+d2lkdGhfbW07CisJ cGFuZWwtPmNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLmhlaWdodF9tbSA9IG1vZGUtPmhlaWdodF9t bTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wYW5lbF9mdW5j cyBybTY4MjAwX2RybV9mdW5jcyA9IHsKKwkuZGlzYWJsZSAgID0gcm02ODIwMF9kaXNhYmxlLAor CS51bnByZXBhcmUgPSBybTY4MjAwX3VucHJlcGFyZSwKKwkucHJlcGFyZSAgID0gcm02ODIwMF9w cmVwYXJlLAorCS5lbmFibGUgICAgPSBybTY4MjAwX2VuYWJsZSwKKwkuZ2V0X21vZGVzID0gcm02 ODIwMF9nZXRfbW9kZXMsCit9OworCitzdGF0aWMgaW50IHJtNjgyMDBfcHJvYmUoc3RydWN0IG1p cGlfZHNpX2RldmljZSAqZHNpKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZkc2ktPmRldjsK KwlzdHJ1Y3Qgcm02ODIwMCAqY3R4OworCWludCByZXQ7CisKKwljdHggPSBkZXZtX2t6YWxsb2Mo ZGV2LCBzaXplb2YoKmN0eCksIEdGUF9LRVJORUwpOworCWlmICghY3R4KQorCQlyZXR1cm4gLUVO T01FTTsKKworCWN0eC0+cmVzZXRfZ3BpbyA9IGRldm1fZ3Bpb2RfZ2V0X29wdGlvbmFsKGRldiwg InJlc2V0IiwgR1BJT0RfT1VUX0xPVyk7CisJaWYgKElTX0VSUihjdHgtPnJlc2V0X2dwaW8pKSB7 CisJCWRldl9lcnIoZGV2LCAiY2Fubm90IGdldCByZXNldC1ncGlvXG4iKTsKKwkJcmV0dXJuIFBU Ul9FUlIoY3R4LT5yZXNldF9ncGlvKTsKKwl9CisKKwljdHgtPnN1cHBseSA9IGRldm1fcmVndWxh dG9yX2dldChkZXYsICJwb3dlciIpOworCWlmIChJU19FUlIoY3R4LT5zdXBwbHkpKSB7CisJCWRl dl9lcnIoZGV2LCAiY2Fubm90IGdldCByZWd1bGF0b3JcbiIpOworCQlyZXR1cm4gUFRSX0VSUihj dHgtPnN1cHBseSk7CisJfQorCisJY3R4LT5iYWNrbGlnaHQgPSBkZXZtX29mX2ZpbmRfYmFja2xp Z2h0KGRldik7CisJaWYgKElTX0VSUihjdHgtPmJhY2tsaWdodCkpCisJCXJldHVybiBQVFJfRVJS KGN0eC0+YmFja2xpZ2h0KTsKKworCW1pcGlfZHNpX3NldF9kcnZkYXRhKGRzaSwgY3R4KTsKKwor CWN0eC0+ZGV2ID0gZGV2OworCisJZHNpLT5sYW5lcyA9IDI7CisJZHNpLT5mb3JtYXQgPSBNSVBJ X0RTSV9GTVRfUkdCODg4OworCWRzaS0+bW9kZV9mbGFncyA9IE1JUElfRFNJX01PREVfVklERU8g fCBNSVBJX0RTSV9NT0RFX1ZJREVPX0JVUlNUIHwKKwkJCSAgTUlQSV9EU0lfTU9ERV9MUE07CisK Kwlkcm1fcGFuZWxfaW5pdCgmY3R4LT5wYW5lbCk7CisJY3R4LT5wYW5lbC5kZXYgPSBkZXY7CisJ Y3R4LT5wYW5lbC5mdW5jcyA9ICZybTY4MjAwX2RybV9mdW5jczsKKworCWRybV9wYW5lbF9hZGQo JmN0eC0+cGFuZWwpOworCisJcmV0ID0gbWlwaV9kc2lfYXR0YWNoKGRzaSk7CisJaWYgKHJldCA8 IDApIHsKKwkJZGV2X2VycihkZXYsICJtaXBpX2RzaV9hdHRhY2ggZmFpbGVkLiBJcyBob3N0IHJl YWR5P1xuIik7CisJCWRybV9wYW5lbF9yZW1vdmUoJmN0eC0+cGFuZWwpOworCQlyZXR1cm4gcmV0 OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJtNjgyMDBfcmVtb3ZlKHN0cnVj dCBtaXBpX2RzaV9kZXZpY2UgKmRzaSkKK3sKKwlzdHJ1Y3Qgcm02ODIwMCAqY3R4ID0gbWlwaV9k c2lfZ2V0X2RydmRhdGEoZHNpKTsKKworCW1pcGlfZHNpX2RldGFjaChkc2kpOworCWRybV9wYW5l bF9yZW1vdmUoJmN0eC0+cGFuZWwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBz dHJ1Y3Qgb2ZfZGV2aWNlX2lkIHJheWRpdW1fcm02ODIwMF9vZl9tYXRjaFtdID0geworCXsgLmNv bXBhdGlibGUgPSAicmF5ZGl1bSxybTY4MjAwIiB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0Vf VEFCTEUob2YsIHJheWRpdW1fcm02ODIwMF9vZl9tYXRjaCk7CisKK3N0YXRpYyBzdHJ1Y3QgbWlw aV9kc2lfZHJpdmVyIHJheWRpdW1fcm02ODIwMF9kcml2ZXIgPSB7CisJLnByb2JlICA9IHJtNjgy MDBfcHJvYmUsCisJLnJlbW92ZSA9IHJtNjgyMDBfcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCS5u YW1lID0gInBhbmVsLXJheWRpdW0tcm02ODIwMCIsCisJCS5vZl9tYXRjaF90YWJsZSA9IHJheWRp dW1fcm02ODIwMF9vZl9tYXRjaCwKKwl9LAorfTsKK21vZHVsZV9taXBpX2RzaV9kcml2ZXIocmF5 ZGl1bV9ybTY4MjAwX2RyaXZlcik7CisKK01PRFVMRV9BVVRIT1IoIlBoaWxpcHBlIENvcm51IDxw aGlsaXBwZS5jb3JudUBzdC5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJZYW5uaWNrIEZlcnRyZSA8 eWFubmljay5mZXJ0cmVAc3QuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJEUk0gRHJpdmVy IGZvciBSYXlkaXVtIFJNNjgyMDAgTUlQSSBEU0kgcGFuZWwiKTsKK01PRFVMRV9MSUNFTlNFKCJH UEwgdjIiKTsKLS0gCjIuMTUuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRl c2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8v ZHJpLWRldmVsCg==