From mboxrd@z Thu Jan 1 00:00:00 1970 From: David Lechner Subject: [PATCH 3/3] drm/tinydrm: new driver for ILI9341 display panels Date: Mon, 14 May 2018 20:43:49 -0500 Message-ID: <20180515014349.26226-4-david@lechnology.com> References: <20180515014349.26226-1-david@lechnology.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180515014349.26226-1-david@lechnology.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org Cc: Mark Rutland , limor@ladyada.net, David Lechner , linux-kernel@vger.kernel.org, Rob Herring , Nitin Patil List-Id: devicetree@vger.kernel.org VGhpcyBhZGRzIGEgbmV3IGRyaXZlciBmb3IgZGlzcGxheSBwYW5lbHMgdGhhdCB1c2UgdGhlIEls aXRlayBJTEk5MzQxCmNvbnRyb2xsZXIuIEl0IGN1cnJlbnRseSBzdXBwb3J0cyBhIHNpbmdsZSBk aXNwbGF5IHBhbmVsLCBuYW1lbHkKdGhlIFlYMjQwUVYyOS1UIChlLmcuIEFkYWZydWl0IDIuNCIg VEZUKS4KClRoZSBpbml0IHNlcXVlbmNlIGlzIGZyb20gdGhlIEFkYWZydWl0IFB5dGhvbiBsaWJy YXJ5IGZvciB0aGUgSUxJOTM0MQpjb250cm9sbGVyLiBodHRwczovL2dpdGh1Yi5jb20vYWRhZnJ1 aXQvQWRhZnJ1aXRfUHl0aG9uX0lMSTkzNDEKClNpZ25lZC1vZmYtYnk6IERhdmlkIExlY2huZXIg PGRhdmlkQGxlY2hub2xvZ3kuY29tPgotLS0KIE1BSU5UQUlORVJTICAgICAgICAgICAgICAgICAg ICAgICB8ICAgNiArCiBkcml2ZXJzL2dwdS9kcm0vdGlueWRybS9LY29uZmlnICAgfCAgMTAgKysK IGRyaXZlcnMvZ3B1L2RybS90aW55ZHJtL01ha2VmaWxlICB8ICAgMSArCiBkcml2ZXJzL2dwdS9k cm0vdGlueWRybS9pbGk5MzQxLmMgfCAyMzkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr CiA0IGZpbGVzIGNoYW5nZWQsIDI1NiBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vaWxpOTM0MS5jCgpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5F UlMgYi9NQUlOVEFJTkVSUwppbmRleCBiYzIxOWRlOWNiZWUuLmZmYTA5OWFiYmQ3OSAxMDA2NDQK LS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTQ0ODAsNiArNDQ4MCwxMiBA QCBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL2dwdS9kcm0vdGlueWRybS9pbGk5MjI1LmMKIEY6 CURvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5L2lsaXRlayxpbGk5MjI1 LnR4dAogCitEUk0gRFJJVkVSIEZPUiBJTElURUsgSUxJOTM0MSBQQU5FTFMKK006CURhdmlkIExl Y2huZXIgPGRhdmlkQGxlY2hub2xvZ3kuY29tPgorUzoJTWFpbnRhaW5lZAorRjoJZHJpdmVycy9n cHUvZHJtL3Rpbnlkcm0vaWxpOTM0MS5jCitGOglEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmlu ZGluZ3MvZGlzcGxheS9pbGl0ZWssaWxpOTM0MS50eHQKKwogRFJNIERSSVZFUiBGT1IgSU5URUwg STgxMCBWSURFTyBDQVJEUwogUzoJT3JwaGFuIC8gT2Jzb2xldGUKIEY6CWRyaXZlcnMvZ3B1L2Ry bS9pODEwLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vS2NvbmZpZyBiL2Ry aXZlcnMvZ3B1L2RybS90aW55ZHJtL0tjb25maWcKaW5kZXggNDU5MmE1ZTNmMjBiLi43YTgwMDhi MDc4M2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS90aW55ZHJtL0tjb25maWcKKysrIGIv ZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vS2NvbmZpZwpAQCAtMjAsNiArMjAsMTYgQEAgY29uZmln IFRJTllEUk1fSUxJOTIyNQogCiAJICBJZiBNIGlzIHNlbGVjdGVkIHRoZSBtb2R1bGUgd2lsbCBi ZSBjYWxsZWQgaWxpOTIyNS4KIAorY29uZmlnIFRJTllEUk1fSUxJOTM0MQorCXRyaXN0YXRlICJE Uk0gc3VwcG9ydCBmb3IgSUxJOTM0MSBkaXNwbGF5IHBhbmVscyIKKwlkZXBlbmRzIG9uIERSTV9U SU5ZRFJNICYmIFNQSQorCXNlbGVjdCBUSU5ZRFJNX01JUElfREJJCisJaGVscAorCSAgRFJNIGRy aXZlciBmb3IgdGhlIGZvbGxvd2luZyBJbGl0ZWsgSUxJOTM0MSBwYW5lbHM6CisJICAqIFlYMjQw UVYyOS1UIDIuNCIgMjQweDMyMCBURlQgKEFkYWZydWl0IDIuNCIpCisKKwkgIElmIE0gaXMgc2Vs ZWN0ZWQgdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBpbGk5MzQxLgorCiBjb25maWcgVElOWURS TV9NSTAyODNRVAogCXRyaXN0YXRlICJEUk0gc3VwcG9ydCBmb3IgTUkwMjgzUVQiCiAJZGVwZW5k cyBvbiBEUk1fVElOWURSTSAmJiBTUEkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90aW55 ZHJtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vTWFrZWZpbGUKaW5kZXggNDlh MTExOTI5NzI0Li4xNGQ5OTA4MDY2NWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS90aW55 ZHJtL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS90aW55ZHJtL01ha2VmaWxlCkBAIC01 LDYgKzUsNyBAQCBvYmotJChDT05GSUdfVElOWURSTV9NSVBJX0RCSSkJCSs9IG1pcGktZGJpLm8K IAogIyBEaXNwbGF5cwogb2JqLSQoQ09ORklHX1RJTllEUk1fSUxJOTIyNSkJCSs9IGlsaTkyMjUu bworb2JqLSQoQ09ORklHX1RJTllEUk1fSUxJOTM0MSkJCSs9IGlsaTkzNDEubwogb2JqLSQoQ09O RklHX1RJTllEUk1fTUkwMjgzUVQpCQkrPSBtaTAyODNxdC5vCiBvYmotJChDT05GSUdfVElOWURS TV9SRVBBUEVSKQkJKz0gcmVwYXBlci5vCiBvYmotJChDT05GSUdfVElOWURSTV9TVDc1ODYpCQkr PSBzdDc1ODYubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vaWxpOTM0MS5j IGIvZHJpdmVycy9ncHUvZHJtL3Rpbnlkcm0vaWxpOTM0MS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwMC4uMmNlNDI0NGE2OGMzCi0tLSAvZGV2L251bGwKKysrIGIvZHJp dmVycy9ncHUvZHJtL3Rpbnlkcm0vaWxpOTM0MS5jCkBAIC0wLDAgKzEsMjM5IEBACisvLyBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsKKy8qCisgKiBEUk0gZHJpdmVyIGZvciBJbGl0 ZWsgSUxJOTM0MSBwYW5lbHMKKyAqCisgKiBDb3B5cmlnaHQgMjAxOCBEYXZpZCBMZWNobmVyIDxk YXZpZEBsZWNobm9sb2d5LmNvbT4KKyAqCisgKiBCYXNlZCBvbiBtaTAyODNxdC5jOgorICogQ29w eXJpZ2h0IDIwMTYgTm9yYWxmIFRyw7hubmVzCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2JhY2ts aWdodC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby9j b25zdW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3By b3BlcnR5Lmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CisjaW5jbHVk ZSA8bGludXgvc3BpL3NwaS5oPgorCisjaW5jbHVkZSA8ZHJtL2RybV9mYl9oZWxwZXIuaD4KKyNp bmNsdWRlIDxkcm0vZHJtX21vZGVzZXRfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9nZW1f ZnJhbWVidWZmZXJfaGVscGVyLmg+CisjaW5jbHVkZSA8ZHJtL3Rpbnlkcm0vbWlwaS1kYmkuaD4K KyNpbmNsdWRlIDxkcm0vdGlueWRybS90aW55ZHJtLWhlbHBlcnMuaD4KKyNpbmNsdWRlIDx2aWRl by9taXBpX2Rpc3BsYXkuaD4KKworI2RlZmluZSBJTEk5MzQxX0ZSTUNUUjEJCTB4YjEKKyNkZWZp bmUgSUxJOTM0MV9ESVNDVFJMCQkweGI2CisjZGVmaW5lIElMSTkzNDFfRVRNT0QJCTB4YjcKKwor I2RlZmluZSBJTEk5MzQxX1BXQ1RSTDEJCTB4YzAKKyNkZWZpbmUgSUxJOTM0MV9QV0NUUkwyCQkw eGMxCisjZGVmaW5lIElMSTkzNDFfVk1DVFJMMQkJMHhjNQorI2RlZmluZSBJTEk5MzQxX1ZNQ1RS TDIJCTB4YzcKKyNkZWZpbmUgSUxJOTM0MV9QV0NUUkxBCQkweGNiCisjZGVmaW5lIElMSTkzNDFf UFdDVFJMQgkJMHhjZgorCisjZGVmaW5lIElMSTkzNDFfUEdBTUNUUkwJMHhlMAorI2RlZmluZSBJ TEk5MzQxX05HQU1DVFJMCTB4ZTEKKyNkZWZpbmUgSUxJOTM0MV9EVENUUkxBCQkweGU4CisjZGVm aW5lIElMSTkzNDFfRFRDVFJMQgkJMHhlYQorI2RlZmluZSBJTEk5MzQxX1BXUlNFUQkJMHhlZAor CisjZGVmaW5lIElMSTkzNDFfRU4zR0FNCQkweGYyCisjZGVmaW5lIElMSTkzNDFfUFVNUENUUkwJ MHhmNworCisjZGVmaW5lIElMSTkzNDFfTUFEQ1RMX0JHUglCSVQoMykKKyNkZWZpbmUgSUxJOTM0 MV9NQURDVExfTVYJQklUKDUpCisjZGVmaW5lIElMSTkzNDFfTUFEQ1RMX01YCUJJVCg2KQorI2Rl ZmluZSBJTEk5MzQxX01BRENUTF9NWQlCSVQoNykKKworc3RhdGljIHZvaWQgeXgyNDBxdjI5X2Vu YWJsZShzdHJ1Y3QgZHJtX3NpbXBsZV9kaXNwbGF5X3BpcGUgKnBpcGUsCisJCQkgICAgIHN0cnVj dCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKKwkJCSAgICAgc3RydWN0IGRybV9wbGFuZV9z dGF0ZSAqcGxhbmVfc3RhdGUpCit7CisJc3RydWN0IHRpbnlkcm1fZGV2aWNlICp0ZGV2ID0gcGlw ZV90b190aW55ZHJtKHBpcGUpOworCXN0cnVjdCBtaXBpX2RiaSAqbWlwaSA9IG1pcGlfZGJpX2Zy b21fdGlueWRybSh0ZGV2KTsKKwl1OCBhZGRyX21vZGU7CisJaW50IHJldDsKKworCURSTV9ERUJV R19LTVMoIlxuIik7CisKKwlyZXQgPSBtaXBpX2RiaV9wb3dlcm9uX2NvbmRpdGlvbmFsX3Jlc2V0 KG1pcGkpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm47CisJaWYgKHJldCA9PSAxKQorCQlnb3Rv IG91dF9lbmFibGU7CisKKwltaXBpX2RiaV9jb21tYW5kKG1pcGksIE1JUElfRENTX1NFVF9ESVNQ TEFZX09GRik7CisKKwltaXBpX2RiaV9jb21tYW5kKG1pcGksIElMSTkzNDFfUFdDVFJMQiwgMHgw MCwgMHhjMSwgMHgzMCk7CisJbWlwaV9kYmlfY29tbWFuZChtaXBpLCBJTEk5MzQxX1BXUlNFUSwg MHg2NCwgMHgwMywgMHgxMiwgMHg4MSk7CisJbWlwaV9kYmlfY29tbWFuZChtaXBpLCBJTEk5MzQx X0RUQ1RSTEEsIDB4ODUsIDB4MDAsIDB4NzgpOworCW1pcGlfZGJpX2NvbW1hbmQobWlwaSwgSUxJ OTM0MV9QV0NUUkxBLCAweDM5LCAweDJjLCAweDAwLCAweDM0LCAweDAyKTsKKwltaXBpX2RiaV9j b21tYW5kKG1pcGksIElMSTkzNDFfUFVNUENUUkwsIDB4MjApOworCW1pcGlfZGJpX2NvbW1hbmQo bWlwaSwgSUxJOTM0MV9EVENUUkxCLCAweDAwLCAweDAwKTsKKworCS8qIFBvd2VyIENvbnRyb2wg Ki8KKwltaXBpX2RiaV9jb21tYW5kKG1pcGksIElMSTkzNDFfUFdDVFJMMSwgMHgyMyk7CisJbWlw aV9kYmlfY29tbWFuZChtaXBpLCBJTEk5MzQxX1BXQ1RSTDIsIDB4MTApOworCS8qIFZDT00gKi8K KwltaXBpX2RiaV9jb21tYW5kKG1pcGksIElMSTkzNDFfVk1DVFJMMSwgMHgzZSwgMHgyOCk7CisJ bWlwaV9kYmlfY29tbWFuZChtaXBpLCBJTEk5MzQxX1ZNQ1RSTDIsIDB4ODYpOworCisJLyogTWVt b3J5IEFjY2VzcyBDb250cm9sICovCisJbWlwaV9kYmlfY29tbWFuZChtaXBpLCBNSVBJX0RDU19T RVRfUElYRUxfRk9STUFULCBNSVBJX0RDU19QSVhFTF9GTVRfMTZCSVQpOworCisJLyogRnJhbWUg UmF0ZSAqLworCW1pcGlfZGJpX2NvbW1hbmQobWlwaSwgSUxJOTM0MV9GUk1DVFIxLCAweDAwLCAw eDFiKTsKKworCS8qIEdhbW1hICovCisJbWlwaV9kYmlfY29tbWFuZChtaXBpLCBJTEk5MzQxX0VO M0dBTSwgMHgwMCk7CisJbWlwaV9kYmlfY29tbWFuZChtaXBpLCBNSVBJX0RDU19TRVRfR0FNTUFf Q1VSVkUsIDB4MDEpOworCW1pcGlfZGJpX2NvbW1hbmQobWlwaSwgSUxJOTM0MV9QR0FNQ1RSTCwK KwkJCSAweDBmLCAweDMxLCAweDJiLCAweDBjLCAweDBlLCAweDA4LCAweDRlLCAweGYxLAorCQkJ IDB4MzcsIDB4MDcsIDB4MTAsIDB4MDMsIDB4MGUsIDB4MDksIDB4MDApOworCW1pcGlfZGJpX2Nv bW1hbmQobWlwaSwgSUxJOTM0MV9OR0FNQ1RSTCwKKwkJCSAweDAwLCAweDBlLCAweDE0LCAweDAz LCAweDExLCAweDA3LCAweDMxLCAweGMxLAorCQkJIDB4NDgsIDB4MDgsIDB4MGYsIDB4MGMsIDB4 MzEsIDB4MzYsIDB4MGYpOworCisJLyogRERSQU0gKi8KKwltaXBpX2RiaV9jb21tYW5kKG1pcGks IElMSTkzNDFfRVRNT0QsIDB4MDcpOworCisJLyogRGlzcGxheSAqLworCW1pcGlfZGJpX2NvbW1h bmQobWlwaSwgSUxJOTM0MV9ESVNDVFJMLCAweDA4LCAweDgyLCAweDI3LCAweDAwKTsKKwltaXBp X2RiaV9jb21tYW5kKG1pcGksIE1JUElfRENTX0VYSVRfU0xFRVBfTU9ERSk7CisJbXNsZWVwKDEw MCk7CisKKwltaXBpX2RiaV9jb21tYW5kKG1pcGksIE1JUElfRENTX1NFVF9ESVNQTEFZX09OKTsK Kwltc2xlZXAoMTAwKTsKKworb3V0X2VuYWJsZToKKwlzd2l0Y2ggKG1pcGktPnJvdGF0aW9uKSB7 CisJZGVmYXVsdDoKKwkJYWRkcl9tb2RlID0gSUxJOTM0MV9NQURDVExfTVg7CisJCWJyZWFrOwor CWNhc2UgOTA6CisJCWFkZHJfbW9kZSA9IElMSTkzNDFfTUFEQ1RMX01WOworCQlicmVhazsKKwlj YXNlIDE4MDoKKwkJYWRkcl9tb2RlID0gSUxJOTM0MV9NQURDVExfTVk7CisJCWJyZWFrOworCWNh c2UgMjcwOgorCQlhZGRyX21vZGUgPSBJTEk5MzQxX01BRENUTF9NViB8IElMSTkzNDFfTUFEQ1RM X01ZIHwKKwkJCSAgICBJTEk5MzQxX01BRENUTF9NWDsKKwkJYnJlYWs7CisJfQorCWFkZHJfbW9k ZSB8PSBJTEk5MzQxX01BRENUTF9CR1I7CisJbWlwaV9kYmlfY29tbWFuZChtaXBpLCBNSVBJX0RD U19TRVRfQUREUkVTU19NT0RFLCBhZGRyX21vZGUpOworCW1pcGlfZGJpX2VuYWJsZV9mbHVzaCht aXBpLCBjcnRjX3N0YXRlLCBwbGFuZV9zdGF0ZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg ZHJtX3NpbXBsZV9kaXNwbGF5X3BpcGVfZnVuY3MgaWxpOTM0MV9waXBlX2Z1bmNzID0geworCS5l bmFibGUgPSB5eDI0MHF2MjlfZW5hYmxlLAorCS5kaXNhYmxlID0gbWlwaV9kYmlfcGlwZV9kaXNh YmxlLAorCS51cGRhdGUgPSB0aW55ZHJtX2Rpc3BsYXlfcGlwZV91cGRhdGUsCisJLnByZXBhcmVf ZmIgPSBkcm1fZ2VtX2ZiX3NpbXBsZV9kaXNwbGF5X3BpcGVfcHJlcGFyZV9mYiwKK307CisKK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSB5eDI0MHF2MjlfbW9kZSA9IHsKKwlU SU5ZRFJNX01PREUoMjQwLCAzMjAsIDM3LCA0OSksCit9OworCitERUZJTkVfRFJNX0dFTV9DTUFf Rk9QUyhpbGk5MzQxX2ZvcHMpOworCitzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIgaWxpOTM0MV9k cml2ZXIgPSB7CisJLmRyaXZlcl9mZWF0dXJlcwk9IERSSVZFUl9HRU0gfCBEUklWRVJfTU9ERVNF VCB8IERSSVZFUl9QUklNRSB8CisJCQkJICBEUklWRVJfQVRPTUlDLAorCS5mb3BzCQkJPSAmaWxp OTM0MV9mb3BzLAorCVRJTllEUk1fR0VNX0RSSVZFUl9PUFMsCisJLmxhc3RjbG9zZQkJPSBkcm1f ZmJfaGVscGVyX2xhc3RjbG9zZSwKKwkuZGVidWdmc19pbml0CQk9IG1pcGlfZGJpX2RlYnVnZnNf aW5pdCwKKwkubmFtZQkJCT0gImlsaTkzNDEiLAorCS5kZXNjCQkJPSAiSWxpdGVrIElMSTkzNDEi LAorCS5kYXRlCQkJPSAiMjAxODA1MTQiLAorCS5tYWpvcgkJCT0gMSwKKwkubWlub3IJCQk9IDAs Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBpbGk5MzQxX29mX21hdGNo W10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJub25hbWUseXgyNDBxdjI5IiB9LAorCXt9LAorfTsK K01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGlsaTkzNDFfb2ZfbWF0Y2gpOworCitzdGF0aWMgY29u c3Qgc3RydWN0IHNwaV9kZXZpY2VfaWQgaWxpOTM0MV9pZFtdID0geworCXsgInl4MjQwcXYyOSIs IDAgfSwKKwl7IH0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShzcGksIGlsaTkzNDFfaWQpOwor CitzdGF0aWMgaW50IGlsaTkzNDFfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlz dHJ1Y3QgZGV2aWNlICpkZXYgPSAmc3BpLT5kZXY7CisJc3RydWN0IG1pcGlfZGJpICptaXBpOwor CXN0cnVjdCBncGlvX2Rlc2MgKmRjOworCXUzMiByb3RhdGlvbiA9IDA7CisJaW50IHJldDsKKwor CW1pcGkgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKm1pcGkpLCBHRlBfS0VSTkVMKTsKKwlp ZiAoIW1pcGkpCisJCXJldHVybiAtRU5PTUVNOworCisJbWlwaS0+cmVzZXQgPSBkZXZtX2dwaW9k X2dldF9vcHRpb25hbChkZXYsICJyZXNldCIsIEdQSU9EX09VVF9ISUdIKTsKKwlpZiAoSVNfRVJS KG1pcGktPnJlc2V0KSkgeworCQlEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBnZXQgZ3Bp byAncmVzZXQnXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIobWlwaS0+cmVzZXQpOworCX0KKworCWRj ID0gZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwoZGV2LCAiZGMiLCBHUElPRF9PVVRfTE9XKTsKKwlp ZiAoSVNfRVJSKGRjKSkgeworCQlEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBnZXQgZ3Bp byAnZGMnXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoZGMpOworCX0KKworCW1pcGktPnJlZ3VsYXRv ciA9IGRldm1fcmVndWxhdG9yX2dldChkZXYsICJwb3dlciIpOworCWlmIChJU19FUlIobWlwaS0+ cmVndWxhdG9yKSkKKwkJcmV0dXJuIFBUUl9FUlIobWlwaS0+cmVndWxhdG9yKTsKKworCW1pcGkt PmJhY2tsaWdodCA9IGRldm1fb2ZfZmluZF9iYWNrbGlnaHQoZGV2KTsKKwlpZiAoSVNfRVJSKG1p cGktPmJhY2tsaWdodCkpCisJCXJldHVybiBQVFJfRVJSKG1pcGktPmJhY2tsaWdodCk7CisKKwlk ZXZpY2VfcHJvcGVydHlfcmVhZF91MzIoZGV2LCAicm90YXRpb24iLCAmcm90YXRpb24pOworCisJ cmV0ID0gbWlwaV9kYmlfc3BpX2luaXQoc3BpLCBtaXBpLCBkYyk7CisJaWYgKHJldCkKKwkJcmV0 dXJuIHJldDsKKworCXJldCA9IG1pcGlfZGJpX2luaXQoJnNwaS0+ZGV2LCBtaXBpLCAmaWxpOTM0 MV9waXBlX2Z1bmNzLAorCQkJICAgICZpbGk5MzQxX2RyaXZlciwgJnl4MjQwcXYyOV9tb2RlLCBy b3RhdGlvbik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXNwaV9zZXRfZHJ2ZGF0YShz cGksIG1pcGkpOworCisJcmV0dXJuIGRldm1fdGlueWRybV9yZWdpc3RlcigmbWlwaS0+dGlueWRy bSk7Cit9CisKK3N0YXRpYyB2b2lkIGlsaTkzNDFfc2h1dGRvd24oc3RydWN0IHNwaV9kZXZpY2Ug KnNwaSkKK3sKKwlzdHJ1Y3QgbWlwaV9kYmkgKm1pcGkgPSBzcGlfZ2V0X2RydmRhdGEoc3BpKTsK KworCXRpbnlkcm1fc2h1dGRvd24oJm1pcGktPnRpbnlkcm0pOworfQorCitzdGF0aWMgc3RydWN0 IHNwaV9kcml2ZXIgaWxpOTM0MV9zcGlfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1l ID0gImlsaTkzNDEiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBpbGk5MzQxX29mX21hdGNoLAorCX0s CisJLmlkX3RhYmxlID0gaWxpOTM0MV9pZCwKKwkucHJvYmUgPSBpbGk5MzQxX3Byb2JlLAorCS5z aHV0ZG93biA9IGlsaTkzNDFfc2h1dGRvd24sCit9OworbW9kdWxlX3NwaV9kcml2ZXIoaWxpOTM0 MV9zcGlfZHJpdmVyKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJJbGl0ZWsgSUxJOTM0MSBEUk0g ZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJEYXZpZCBMZWNobmVyIDxkYXZpZEBsZWNobm9sb2d5 LmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLS0gCjIuMTcuMAoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlz dApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0 b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==