From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thierry Reding Subject: [PATCH v4 16/16] drm/panel: Add Sharp LQ101R1SX01 support Date: Mon, 3 Nov 2014 10:13:41 +0100 Message-ID: <1415006021-29313-16-git-send-email-thierry.reding@gmail.com> References: <1415006021-29313-1-git-send-email-thierry.reding@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-pa0-f53.google.com (mail-pa0-f53.google.com [209.85.220.53]) by gabe.freedesktop.org (Postfix) with ESMTP id E529A6E409 for ; Mon, 3 Nov 2014 01:15:13 -0800 (PST) Received: by mail-pa0-f53.google.com with SMTP id kx10so11781188pab.40 for ; Mon, 03 Nov 2014 01:15:13 -0800 (PST) In-Reply-To: <1415006021-29313-1-git-send-email-thierry.reding@gmail.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 Cc: Andrzej Hajda , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org RnJvbTogVGhpZXJyeSBSZWRpbmcgPHRyZWRpbmdAbnZpZGlhLmNvbT4KClRoaXMgcGFuZWwgcmVx dWlyZXMgZHVhbC1jaGFubmVsIG1vZGUuIFRoZSBkZXZpY2UgYWNjZXB0cyBjb21tYW5kLW1vZGUK ZGF0YSBvbiA4IGxhbmVzIGFuZCB3aWxsIHRoZXJlZm9yZSBuZWVkIGEgZHVhbC1jaGFubmVsIERT SSBjb250cm9sbGVyLgpUaGUgdHdvIGludGVyZmFjZXMgdGhhdCBtYWtlIHVwIHRoaXMgZGV2aWNl IG5lZWQgdG8gYmUgaW5zdGFudGlhdGVkIGluCnRoZSBjb250cm9sbGVycyB0aGF0IGdhbmcgdXAg dG8gcHJvdmlkZSB0aGUgZHVhbC1jaGFubmVsIERTSSBob3N0LgoKU2lnbmVkLW9mZi1ieTogVGhp ZXJyeSBSZWRpbmcgPHRyZWRpbmdAbnZpZGlhLmNvbT4KLS0tCkNoYW5nZXMgaW4gdjQ6Ci0gdXNl IGxvdyBwb3dlciBtb2RlIHNpbmNlIGhpZ2hzcGVlZCBtZXNzYWdlIHRyYW5zZmVycyBkb24ndCB3 b3JrCi0gY2xhcmlmeSByZXF1aXJlZCBhbmQgb3B0aW9uYWwgcHJvcGVydGllcyBmb3IgYm90aCBE U0kgbGlua3MKLSBwb3dlciBvZmYgcGFuZWwgd2hlbiAucHJlcGFyZSgpIGZhaWxzCi0gcHJvcGVy bHkgZHJvcCByZWZlcmVuY2UgdG8gRFNJLUxJTksyCi0gZG9uJ3QgYWxsb2NhdGUgbWVtb3J5IGZv ciBEU0ktTElOSzIKLSBwcm9wYWdhdGUgZXJyb3JzIG9uIGZhaWx1cmUKCiAuLi4vYmluZGluZ3Mv cGFuZWwvc2hhcnAsbHExMDFyMXN4MDEudHh0ICAgICAgICAgICB8ICA0OSArKysKIGRyaXZlcnMv Z3B1L2RybS9wYW5lbC9LY29uZmlnICAgICAgICAgICAgICAgICAgICAgIHwgIDEzICsKIGRyaXZl cnMvZ3B1L2RybS9wYW5lbC9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIGRy aXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC1zaGFycC1scTEwMXIxc3gwMS5jICAgIHwgNDY0ICsr KysrKysrKysrKysrKysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCA1MjcgaW5zZXJ0aW9ucygrKQog Y3JlYXRlIG1vZGUgMTAwNjQ0IERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wYW5l bC9zaGFycCxscTEwMXIxc3gwMS50eHQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9k cm0vcGFuZWwvcGFuZWwtc2hhcnAtbHExMDFyMXN4MDEuYwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50 YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wYW5lbC9zaGFycCxscTEwMXIxc3gwMS50eHQgYi9E b2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGFuZWwvc2hhcnAsbHExMDFyMXN4MDEu dHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZjUyMmJiOGU0N2Ux Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bh bmVsL3NoYXJwLGxxMTAxcjFzeDAxLnR4dApAQCAtMCwwICsxLDQ5IEBACitTaGFycCBNaWNyb2Vs ZWN0cm9uaWNzIDEwLjEiIFdRWEdBIFRGVCBMQ0QgcGFuZWwKKworVGhpcyBwYW5lbCByZXF1aXJl cyBhIGR1YWwtY2hhbm5lbCBEU0kgaG9zdCB0byBvcGVyYXRlLiBJdCBzdXBwb3J0cyB0d28gbW9k ZXM6CistIGxlZnQtcmlnaHQ6IGVhY2ggY2hhbm5lbCBkcml2ZXMgdGhlIGxlZnQgb3IgcmlnaHQg aGFsZiBvZiB0aGUgc2NyZWVuCistIGV2ZW4tb2RkOiBlYWNoIGNoYW5uZWwgZHJpdmVzIHRoZSBl dmVuIG9yIG9kZCBsaW5lcyBvZiB0aGUgc2NyZWVuCisKK0VhY2ggb2YgdGhlIERTSSBjaGFubmVs cyBjb250cm9scyBhIHNlcGFyYXRlIERTSSBwZXJpcGhlcmFsLiBUaGUgcGVyaXBoZXJhbAorZHJp dmVuIGJ5IHRoZSBmaXJzdCBsaW5rIChEU0ktTElOSzEpLCBsZWZ0IG9yIGV2ZW4sIGlzIGNvbnNp ZGVyZWQgdGhlIHByaW1hcnkKK3BlcmlwaGVyYWwgYW5kIGNvbnRyb2xzIHRoZSBkZXZpY2UuIFRo ZSAnbGluazInIHByb3BlcnR5IGNvbnRhaW5zIGEgcGhhbmRsZQordG8gdGhlIHBlcmlwaGVyYWwg ZHJpdmVuIGJ5IHRoZSBzZWNvbmQgbGluayAoRFNJLUxJTksyLCByaWdodCBvciBvZGQpLgorCitO b3RlIHRoYXQgaW4gdmlkZW8gbW9kZSB0aGUgRFNJLUxJTksxIGludGVyZmFjZSBhbHdheXMgcHJv dmlkZXMgdGhlIGxlZnQvZXZlbgorcGl4ZWxzIGFuZCBEU0ktTElOSzIgYWx3YXlzIHByb3ZpZGVz IHRoZSByaWdodC9vZGQgcGl4ZWxzLiBJbiBjb21tYW5kIG1vZGUgaXQKK2lzIHBvc3NpYmxlIHRv IHByb2dyYW0gZWl0aGVyIGxpbmsgdG8gZHJpdmUgdGhlIGxlZnQvZXZlbiBvciByaWdodC9vZGQg cGl4ZWxzCitidXQgZm9yIHRoZSBzYWtlIG9mIGNvbnNpc3RlbmN5IHRoaXMgYmluZGluZyBhc3N1 bWVzIHRoYXQgdGhlIHNhbWUgYXNzaWdubWVudAoraXMgY2hvc2VuIGFzIGZvciB2aWRlbyBtb2Rl LgorCitSZXF1aXJlZCBwcm9wZXJ0aWVzOgorLSBjb21wYXRpYmxlOiBzaG91bGQgYmUgInNoYXJw LGxxMTAxcjFzeDAxIgorLSByZWc6IERTSSB2aXJ0dWFsIGNoYW5uZWwgb2YgdGhlIHBlcmlwaGVy YWwKKworUmVxdWlyZWQgcHJvcGVydGllcyAoZm9yIERTSS1MSU5LMSBvbmx5KToKKy0gbGluazI6 IHBoYW5kbGUgdG8gdGhlIERTSSBwZXJpcGhlcmFsIG9uIHRoZSBzZWNvbmRhcnkgbGluay4gTm90 ZSB0aGF0IHRoZQorICBwcmVzZW5jZSBvZiB0aGlzIHByb3BlcnR5IG1hcmtzIHRoZSBjb250YWlu aW5nIG5vZGUgYXMgRFNJLUxJTksxLgorLSBwb3dlci1zdXBwbHk6IHBoYW5kbGUgb2YgdGhlIHJl Z3VsYXRvciB0aGF0IHByb3ZpZGVzIHRoZSBzdXBwbHkgdm9sdGFnZQorCitPcHRpb25hbCBwcm9w ZXJ0aWVzIChmb3IgRFNJLUxJTksxIG9ubHkpOgorLSBiYWNrbGlnaHQ6IHBoYW5kbGUgb2YgdGhl IGJhY2tsaWdodCBkZXZpY2UgYXR0YWNoZWQgdG8gdGhlIHBhbmVsCisKK0V4YW1wbGU6CisKKwlk c2lANTQzMDAwMDAgeworCQlwYW5lbDogcGFuZWxAMCB7CisJCQljb21wYXRpYmxlID0gInNoYXJw LGxxMTAxcjFzeDAxIjsKKwkJCXJlZyA9IDwwPjsKKworCQkJbGluazIgPSA8JnNlY29uZGFyeT47 CisKKwkJCXBvd2VyLXN1cHBseSA9IDwuLi4+OworCQkJYmFja2xpZ2h0ID0gPC4uLj47CisJCX07 CisJfTsKKworCWRzaUA1NDQwMDAwMCB7CisJCXNlY29uZGFyeTogcGFuZWxAMCB7CisJCQljb21w YXRpYmxlID0gInNoYXJwLGxxMTAxcjFzeDAxIjsKKwkJCXJlZyA9IDwwPjsKKwkJfTsKKwl9Owpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcgYi9kcml2ZXJzL2dwdS9k cm0vcGFuZWwvS2NvbmZpZwppbmRleCBiZWU5ZjcyYjNhOTMuLjAyNGU5OGVmOGU0ZCAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJt L3BhbmVsL0tjb25maWcKQEAgLTI3LDQgKzI3LDE3IEBAIGNvbmZpZyBEUk1fUEFORUxfUzZFOEFB MAogCXNlbGVjdCBEUk1fTUlQSV9EU0kKIAlzZWxlY3QgVklERU9NT0RFX0hFTFBFUlMKIAorY29u ZmlnIERSTV9QQU5FTF9TSEFSUF9MUTEwMVIxU1gwMQorCXRyaXN0YXRlICJTaGFycCBMUTEwMVIx U1gwMSBwYW5lbCIKKwlkZXBlbmRzIG9uIE9GCisJZGVwZW5kcyBvbiBEUk1fTUlQSV9EU0kKKwlo ZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBzdXBwb3J0IGZvciBTaGFy cCBMUTEwMVIxU1gwMQorCSAgVEZULUxDRCBtb2R1bGVzLiBUaGUgcGFuZWwgaGFzIGEgMjU2MHgx NjAwIHJlc29sdXRpb24gYW5kIHVzZXMKKwkgIDI0IGJpdCBSR0IgcGVyIHBpeGVsLiBJdCBwcm92 aWRlcyBhIGR1YWwgTUlQSSBEU0kgaW50ZXJmYWNlIHRvCisJICB0aGUgaG9zdCBhbmQgaGFzIGEg YnVpbHQtaW4gTEVEIGJhY2tsaWdodC4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBh IG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgcGFu ZWwtc2hhcnAtbHExMDFyMXN4MDEuCisKIGVuZG1lbnUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9wYW5lbC9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtlZmlsZQppbmRl eCA4YjkyOTIxMmZhZDcuLjRiMmEwNDMwODA0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJt L3BhbmVsL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtlZmlsZQpAQCAt MSwzICsxLDQgQEAKIG9iai0kKENPTkZJR19EUk1fUEFORUxfU0lNUExFKSArPSBwYW5lbC1zaW1w bGUubwogb2JqLSQoQ09ORklHX0RSTV9QQU5FTF9MRDkwNDApICs9IHBhbmVsLWxkOTA0MC5vCiBv YmotJChDT05GSUdfRFJNX1BBTkVMX1M2RThBQTApICs9IHBhbmVsLXM2ZThhYTAubworb2JqLSQo Q09ORklHX0RSTV9QQU5FTF9TSEFSUF9MUTEwMVIxU1gwMSkgKz0gcGFuZWwtc2hhcnAtbHExMDFy MXN4MDEubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLXNoYXJwLWxx MTAxcjFzeDAxLmMgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwtc2hhcnAtbHExMDFyMXN4 MDEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmVlMGU3ZjU3ZTRh MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC1zaGFycC1s cTEwMXIxc3gwMS5jCkBAIC0wLDAgKzEsNDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0 IE5WSURJQSBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICog cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1 ZGUgPGxpbnV4L2JhY2tsaWdodC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8vY29uc3VtZXIuaD4K KyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1 ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgorCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4K KyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX21pcGlfZHNpLmg+ CisjaW5jbHVkZSA8ZHJtL2RybV9wYW5lbC5oPgorCisjaW5jbHVkZSA8dmlkZW8vbWlwaV9kaXNw bGF5Lmg+CisKKyNpbmNsdWRlIDxsaW51eC9ob3N0MXguaD4KKworc3RydWN0IHNoYXJwX3BhbmVs IHsKKwlzdHJ1Y3QgZHJtX3BhbmVsIGJhc2U7CisJLyogdGhlIGRhdGFzaGVldCByZWZlcnMgdG8g dGhlbSBhcyBEU0ktTElOSzEgYW5kIERTSS1MSU5LMiAqLworCXN0cnVjdCBtaXBpX2RzaV9kZXZp Y2UgKmxpbmsxOworCXN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmxpbmsyOworCisJc3RydWN0IGJh Y2tsaWdodF9kZXZpY2UgKmJhY2tsaWdodDsKKwlzdHJ1Y3QgcmVndWxhdG9yICpzdXBwbHk7CisK Kwlib29sIHByZXBhcmVkOworCWJvb2wgZW5hYmxlZDsKKworCWNvbnN0IHN0cnVjdCBkcm1fZGlz cGxheV9tb2RlICptb2RlOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2hhcnBfcGFuZWwg KnRvX3NoYXJwX3BhbmVsKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQoreworCXJldHVybiBjb250 YWluZXJfb2YocGFuZWwsIHN0cnVjdCBzaGFycF9wYW5lbCwgYmFzZSk7Cit9CisKK3N0YXRpYyBp bnQgc2hhcnBfcGFuZWxfd3JpdGUoc3RydWN0IHNoYXJwX3BhbmVsICpzaGFycCwgdTE2IG9mZnNl dCwgdTggdmFsdWUpCit7CisJdTggcGF5bG9hZFszXSA9IHsgb2Zmc2V0ID4+IDgsIG9mZnNldCAm IDB4ZmYsIHZhbHVlIH07CisJc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpID0gc2hhcnAtPmxp bmsxOworCXNzaXplX3QgZXJyOworCisJZXJyID0gbWlwaV9kc2lfZ2VuZXJpY193cml0ZShkc2ks IHBheWxvYWQsIHNpemVvZihwYXlsb2FkKSk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2Vycigm ZHNpLT5kZXYsICJmYWlsZWQgdG8gd3JpdGUgJTAyeCB0byAlMDR4OiAlZFxuIiwKKwkJCXZhbHVl LCBvZmZzZXQsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gbWlwaV9kc2lfZGNz X25vcChkc2kpOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIoJmRzaS0+ZGV2LCAiZmFpbGVk IHRvIHNlbmQgRENTIG5vcDogJWRcbiIsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJdXNs ZWVwX3JhbmdlKDEwLCAyMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIF9fbWF5YmVfdW51 c2VkIGludCBzaGFycF9wYW5lbF9yZWFkKHN0cnVjdCBzaGFycF9wYW5lbCAqc2hhcnAsCisJCQkJ CSAgIHUxNiBvZmZzZXQsIHU4ICp2YWx1ZSkKK3sKKwlzc2l6ZV90IGVycjsKKworCWNwdV90b19i ZTE2cygmb2Zmc2V0KTsKKworCWVyciA9IG1pcGlfZHNpX2dlbmVyaWNfcmVhZChzaGFycC0+bGlu azEsICZvZmZzZXQsIHNpemVvZihvZmZzZXQpLAorCQkJCSAgICB2YWx1ZSwgc2l6ZW9mKCp2YWx1 ZSkpOworCWlmIChlcnIgPCAwKQorCQlkZXZfZXJyKCZzaGFycC0+bGluazEtPmRldiwgImZhaWxl ZCB0byByZWFkIGZyb20gJTA0eDogJWRcbiIsCisJCQlvZmZzZXQsIGVycik7CisKKwlyZXR1cm4g ZXJyOworfQorCitzdGF0aWMgaW50IHNoYXJwX3BhbmVsX2Rpc2FibGUoc3RydWN0IGRybV9wYW5l bCAqcGFuZWwpCit7CisJc3RydWN0IHNoYXJwX3BhbmVsICpzaGFycCA9IHRvX3NoYXJwX3BhbmVs KHBhbmVsKTsKKworCWlmICghc2hhcnAtPmVuYWJsZWQpCisJCXJldHVybiAwOworCisJaWYgKHNo YXJwLT5iYWNrbGlnaHQpIHsKKwkJc2hhcnAtPmJhY2tsaWdodC0+cHJvcHMucG93ZXIgPSBGQl9C TEFOS19QT1dFUkRPV047CisJCWJhY2tsaWdodF91cGRhdGVfc3RhdHVzKHNoYXJwLT5iYWNrbGln aHQpOworCX0KKworCXNoYXJwLT5lbmFibGVkID0gZmFsc2U7CisKKwlyZXR1cm4gMDsKK30KKwor c3RhdGljIGludCBzaGFycF9wYW5lbF91bnByZXBhcmUoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwp Cit7CisJc3RydWN0IHNoYXJwX3BhbmVsICpzaGFycCA9IHRvX3NoYXJwX3BhbmVsKHBhbmVsKTsK KwlpbnQgZXJyOworCisJaWYgKCFzaGFycC0+cHJlcGFyZWQpCisJCXJldHVybiAwOworCisJZXJy ID0gbWlwaV9kc2lfZGNzX3NldF9kaXNwbGF5X29mZihzaGFycC0+bGluazEpOworCWlmIChlcnIg PCAwKQorCQlkZXZfZXJyKHBhbmVsLT5kZXYsICJmYWlsZWQgdG8gc2V0IGRpc3BsYXkgb2ZmOiAl ZFxuIiwgZXJyKTsKKworCWVyciA9IG1pcGlfZHNpX2Rjc19lbnRlcl9zbGVlcF9tb2RlKHNoYXJw LT5saW5rMSk7CisJaWYgKGVyciA8IDApCisJCWRldl9lcnIocGFuZWwtPmRldiwgImZhaWxlZCB0 byBlbnRlciBzbGVlcCBtb2RlOiAlZFxuIiwgZXJyKTsKKworCW1zbGVlcCgxMjApOworCisJcmVn dWxhdG9yX2Rpc2FibGUoc2hhcnAtPnN1cHBseSk7CisKKwlzaGFycC0+cHJlcGFyZWQgPSBmYWxz ZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNoYXJwX3NldHVwX3N5bW1ldHJpY2Fs X3NwbGl0KHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmxlZnQsCisJCQkJCSBzdHJ1Y3QgbWlwaV9k c2lfZGV2aWNlICpyaWdodCwKKwkJCQkJIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpt b2RlKQoreworCWludCBlcnI7CisKKwllcnIgPSBtaXBpX2RzaV9kY3Nfc2V0X2NvbHVtbl9hZGRy ZXNzKGxlZnQsIDAsIG1vZGUtPmhkaXNwbGF5IC8gMiAtIDEpOworCWlmIChlcnIgPCAwKSB7CisJ CWRldl9lcnIoJmxlZnQtPmRldiwgImZhaWxlZCB0byBzZXQgY29sdW1uIGFkZHJlc3M6ICVkXG4i LCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWVyciA9IG1pcGlfZHNpX2Rjc19zZXRfcGFn ZV9hZGRyZXNzKGxlZnQsIDAsIG1vZGUtPnZkaXNwbGF5IC0gMSk7CisJaWYgKGVyciA8IDApIHsK KwkJZGV2X2VycigmbGVmdC0+ZGV2LCAiZmFpbGVkIHRvIHNldCBwYWdlIGFkZHJlc3M6ICVkXG4i LCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWVyciA9IG1pcGlfZHNpX2Rjc19zZXRfY29s dW1uX2FkZHJlc3MocmlnaHQsIG1vZGUtPmhkaXNwbGF5IC8gMiwKKwkJCQkJICAgICAgbW9kZS0+ aGRpc3BsYXkgLSAxKTsKKwlpZiAoZXJyIDwgMCkgeworCQlkZXZfZXJyKCZyaWdodC0+ZGV2LCAi ZmFpbGVkIHRvIHNldCBjb2x1bW4gYWRkcmVzczogJWRcbiIsIGVycik7CisJCXJldHVybiBlcnI7 CisJfQorCisJZXJyID0gbWlwaV9kc2lfZGNzX3NldF9wYWdlX2FkZHJlc3MocmlnaHQsIDAsIG1v ZGUtPnZkaXNwbGF5IC0gMSk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2VycigmcmlnaHQtPmRl diwgImZhaWxlZCB0byBzZXQgcGFnZSBhZGRyZXNzOiAlZFxuIiwgZXJyKTsKKwkJcmV0dXJuIGVy cjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaGFycF9wYW5lbF9wcmVwYXJl KHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQoreworCXN0cnVjdCBzaGFycF9wYW5lbCAqc2hhcnAg PSB0b19zaGFycF9wYW5lbChwYW5lbCk7CisJdTggZm9ybWF0ID0gTUlQSV9EQ1NfUElYRUxfRk1U XzI0QklUOworCWludCBlcnI7CisKKwlpZiAoc2hhcnAtPnByZXBhcmVkKQorCQlyZXR1cm4gMDsK KworCWVyciA9IHJlZ3VsYXRvcl9lbmFibGUoc2hhcnAtPnN1cHBseSk7CisJaWYgKGVyciA8IDAp CisJCXJldHVybiBlcnI7CisKKwl1c2xlZXBfcmFuZ2UoMTAwMDAsIDIwMDAwKTsKKworCWVyciA9 IG1pcGlfZHNpX2Rjc19zb2Z0X3Jlc2V0KHNoYXJwLT5saW5rMSk7CisJaWYgKGVyciA8IDApIHsK KwkJZGV2X2VycihwYW5lbC0+ZGV2LCAic29mdCByZXNldCBmYWlsZWQ6ICVkXG4iLCBlcnIpOwor CQlnb3RvIHBvd2Vyb2ZmOworCX0KKworCW1zbGVlcCgxMjApOworCisJZXJyID0gbWlwaV9kc2lf ZGNzX2V4aXRfc2xlZXBfbW9kZShzaGFycC0+bGluazEpOworCWlmIChlcnIgPCAwKSB7CisJCWRl dl9lcnIocGFuZWwtPmRldiwgImZhaWxlZCB0byBleGl0IHNsZWVwIG1vZGU6ICVkXG4iLCBlcnIp OworCQlnb3RvIHBvd2Vyb2ZmOworCX0KKworCS8qCisJICogVGhlIE1JUEkgRENTIHNwZWNpZmlj YXRpb24gbWFuZGF0ZXMgdGhpcyBkZWxheSBvbmx5IGJldHdlZW4gdGhlCisJICogZXhpdF9zbGVl cF9tb2RlIGFuZCBlbnRlcl9zbGVlcF9tb2RlIGNvbW1hbmRzLCBzbyBpdCBpc24ndCBzdHJpY3Rs eQorCSAqIG5lY2Vzc2FyeSBoZXJlLgorCSAqLworCS8qCisJbXNsZWVwKDEyMCk7CisJKi8KKwor CS8qIHNldCBsZWZ0LXJpZ2h0IG1vZGUgKi8KKwllcnIgPSBzaGFycF9wYW5lbF93cml0ZShzaGFy cCwgMHgxMDAwLCAweDJhKTsKKwlpZiAoZXJyIDwgMCkgeworCQlkZXZfZXJyKHBhbmVsLT5kZXYs ICJmYWlsZWQgdG8gc2V0IGxlZnQtcmlnaHQgbW9kZTogJWRcbiIsIGVycik7CisJCWdvdG8gcG93 ZXJvZmY7CisJfQorCisJLyogZW5hYmxlIGNvbW1hbmQgbW9kZSAqLworCWVyciA9IHNoYXJwX3Bh bmVsX3dyaXRlKHNoYXJwLCAweDEwMDEsIDB4MDEpOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9l cnIocGFuZWwtPmRldiwgImZhaWxlZCB0byBlbmFibGUgY29tbWFuZCBtb2RlOiAlZFxuIiwgZXJy KTsKKwkJZ290byBwb3dlcm9mZjsKKwl9CisKKwllcnIgPSBtaXBpX2RzaV9kY3Nfc2V0X3BpeGVs X2Zvcm1hdChzaGFycC0+bGluazEsIGZvcm1hdCk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2Vy cihwYW5lbC0+ZGV2LCAiZmFpbGVkIHRvIHNldCBwaXhlbCBmb3JtYXQ6ICVkXG4iLCBlcnIpOwor CQlnb3RvIHBvd2Vyb2ZmOworCX0KKworCS8qCisJICogVE9ETzogVGhlIGRldmljZSBzdXBwb3J0 cyBib3RoIGxlZnQtcmlnaHQgYW5kIGV2ZW4tb2RkIHNwbGl0CisJICogY29uZmlndXJhdGlvbnMs IGJ1dCB0aGlzIGRyaXZlciBjdXJyZW50bHkgc3VwcG9ydHMgb25seSB0aGUgbGVmdC0KKwkgKiBy aWdodCBzcGxpdC4gVG8gc3VwcG9ydCBhIGRpZmZlcmVudCBtb2RlIGEgbWVjaGFuaXNtIG5lZWRz IHRvIGJlCisJICogcHV0IGluIHBsYWNlIHRvIGNvbW11bmljYXRlIHRoZSBjb25maWd1cmF0aW9u IGJhY2sgdG8gdGhlIERTSSBob3N0CisJICogY29udHJvbGxlci4KKwkgKi8KKwllcnIgPSBzaGFy cF9zZXR1cF9zeW1tZXRyaWNhbF9zcGxpdChzaGFycC0+bGluazEsIHNoYXJwLT5saW5rMiwKKwkJ CQkJICAgIHNoYXJwLT5tb2RlKTsKKwlpZiAoZXJyIDwgMCkgeworCQlkZXZfZXJyKHBhbmVsLT5k ZXYsICJmYWlsZWQgdG8gc2V0IHVwIHN5bW1ldHJpY2FsIHNwbGl0OiAlZFxuIiwKKwkJCWVycik7 CisJCWdvdG8gcG93ZXJvZmY7CisJfQorCisJZXJyID0gbWlwaV9kc2lfZGNzX3NldF9kaXNwbGF5 X29uKHNoYXJwLT5saW5rMSk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2VycihwYW5lbC0+ZGV2 LCAiZmFpbGVkIHRvIHNldCBkaXNwbGF5IG9uOiAlZFxuIiwgZXJyKTsKKwkJZ290byBwb3dlcm9m ZjsKKwl9CisKKwlzaGFycC0+cHJlcGFyZWQgPSB0cnVlOworCisJcmV0dXJuIDA7CisKK3Bvd2Vy b2ZmOgorCXJlZ3VsYXRvcl9kaXNhYmxlKHNoYXJwLT5zdXBwbHkpOworCXJldHVybiBlcnI7Cit9 CisKK3N0YXRpYyBpbnQgc2hhcnBfcGFuZWxfZW5hYmxlKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVs KQoreworCXN0cnVjdCBzaGFycF9wYW5lbCAqc2hhcnAgPSB0b19zaGFycF9wYW5lbChwYW5lbCk7 CisKKwlpZiAoc2hhcnAtPmVuYWJsZWQpCisJCXJldHVybiAwOworCisJaWYgKHNoYXJwLT5iYWNr bGlnaHQpIHsKKwkJc2hhcnAtPmJhY2tsaWdodC0+cHJvcHMucG93ZXIgPSBGQl9CTEFOS19VTkJM QU5LOworCQliYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhzaGFycC0+YmFja2xpZ2h0KTsKKwl9CisK KwlzaGFycC0+ZW5hYmxlZCA9IHRydWU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0 IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlIGRlZmF1bHRfbW9kZSA9IHsKKwkuY2xvY2sgPSAyNzgw MDAsCisJLmhkaXNwbGF5ID0gMjU2MCwKKwkuaHN5bmNfc3RhcnQgPSAyNTYwICsgMTI4LAorCS5o c3luY19lbmQgPSAyNTYwICsgMTI4ICsgNjQsCisJLmh0b3RhbCA9IDI1NjAgKyAxMjggKyA2NCAr IDY0LAorCS52ZGlzcGxheSA9IDE2MDAsCisJLnZzeW5jX3N0YXJ0ID0gMTYwMCArIDQsCisJLnZz eW5jX2VuZCA9IDE2MDAgKyA0ICsgOCwKKwkudnRvdGFsID0gMTYwMCArIDQgKyA4ICsgMzIsCisJ LnZyZWZyZXNoID0gNjAsCit9OworCitzdGF0aWMgaW50IHNoYXJwX3BhbmVsX2dldF9tb2Rlcyhz dHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkKK3sKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9k ZTsKKworCW1vZGUgPSBkcm1fbW9kZV9kdXBsaWNhdGUocGFuZWwtPmRybSwgJmRlZmF1bHRfbW9k ZSk7CisJaWYgKCFtb2RlKSB7CisJCWRldl9lcnIocGFuZWwtPmRybS0+ZGV2LCAiZmFpbGVkIHRv IGFkZCBtb2RlICV1eCV1eEAldVxuIiwKKwkJCWRlZmF1bHRfbW9kZS5oZGlzcGxheSwgZGVmYXVs dF9tb2RlLnZkaXNwbGF5LAorCQkJZGVmYXVsdF9tb2RlLnZyZWZyZXNoKTsKKwkJcmV0dXJuIC1F Tk9NRU07CisJfQorCisJZHJtX21vZGVfc2V0X25hbWUobW9kZSk7CisKKwlkcm1fbW9kZV9wcm9i ZWRfYWRkKHBhbmVsLT5jb25uZWN0b3IsIG1vZGUpOworCisJcGFuZWwtPmNvbm5lY3Rvci0+ZGlz cGxheV9pbmZvLndpZHRoX21tID0gMjE3OworCXBhbmVsLT5jb25uZWN0b3ItPmRpc3BsYXlfaW5m by5oZWlnaHRfbW0gPSAxMzY7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVj dCBkcm1fcGFuZWxfZnVuY3Mgc2hhcnBfcGFuZWxfZnVuY3MgPSB7CisJLmRpc2FibGUgPSBzaGFy cF9wYW5lbF9kaXNhYmxlLAorCS51bnByZXBhcmUgPSBzaGFycF9wYW5lbF91bnByZXBhcmUsCisJ LnByZXBhcmUgPSBzaGFycF9wYW5lbF9wcmVwYXJlLAorCS5lbmFibGUgPSBzaGFycF9wYW5lbF9l bmFibGUsCisJLmdldF9tb2RlcyA9IHNoYXJwX3BhbmVsX2dldF9tb2RlcywKK307CisKK3N0YXRp YyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHNoYXJwX29mX21hdGNoW10gPSB7CisJeyAuY29t cGF0aWJsZSA9ICJzaGFycCxscTEwMXIxc3gwMSIsIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklD RV9UQUJMRShvZiwgc2hhcnBfb2ZfbWF0Y2gpOworCitzdGF0aWMgaW50IHNoYXJwX3BhbmVsX2Fk ZChzdHJ1Y3Qgc2hhcnBfcGFuZWwgKnNoYXJwKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7 CisJaW50IGVycjsKKworCXNoYXJwLT5tb2RlID0gJmRlZmF1bHRfbW9kZTsKKworCXNoYXJwLT5z dXBwbHkgPSBkZXZtX3JlZ3VsYXRvcl9nZXQoJnNoYXJwLT5saW5rMS0+ZGV2LCAicG93ZXIiKTsK KwlpZiAoSVNfRVJSKHNoYXJwLT5zdXBwbHkpKQorCQlyZXR1cm4gUFRSX0VSUihzaGFycC0+c3Vw cGx5KTsKKworCW5wID0gb2ZfcGFyc2VfcGhhbmRsZShzaGFycC0+bGluazEtPmRldi5vZl9ub2Rl LCAiYmFja2xpZ2h0IiwgMCk7CisJaWYgKG5wKSB7CisJCXNoYXJwLT5iYWNrbGlnaHQgPSBvZl9m aW5kX2JhY2tsaWdodF9ieV9ub2RlKG5wKTsKKwkJb2Zfbm9kZV9wdXQobnApOworCisJCWlmICgh c2hhcnAtPmJhY2tsaWdodCkKKwkJCXJldHVybiAtRVBST0JFX0RFRkVSOworCX0KKworCWRybV9w YW5lbF9pbml0KCZzaGFycC0+YmFzZSk7CisJc2hhcnAtPmJhc2UuZnVuY3MgPSAmc2hhcnBfcGFu ZWxfZnVuY3M7CisJc2hhcnAtPmJhc2UuZGV2ID0gJnNoYXJwLT5saW5rMS0+ZGV2OworCisJZXJy ID0gZHJtX3BhbmVsX2FkZCgmc2hhcnAtPmJhc2UpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIHB1 dF9iYWNrbGlnaHQ7CisKKwlyZXR1cm4gMDsKKworcHV0X2JhY2tsaWdodDoKKwlpZiAoc2hhcnAt PmJhY2tsaWdodCkKKwkJcHV0X2RldmljZSgmc2hhcnAtPmJhY2tsaWdodC0+ZGV2KTsKKworCXJl dHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIHNoYXJwX3BhbmVsX2RlbChzdHJ1Y3Qgc2hhcnBf cGFuZWwgKnNoYXJwKQoreworCWlmIChzaGFycC0+YmFzZS5kZXYpCisJCWRybV9wYW5lbF9yZW1v dmUoJnNoYXJwLT5iYXNlKTsKKworCWlmIChzaGFycC0+YmFja2xpZ2h0KQorCQlwdXRfZGV2aWNl KCZzaGFycC0+YmFja2xpZ2h0LT5kZXYpOworCisJaWYgKHNoYXJwLT5saW5rMikKKwkJcHV0X2Rl dmljZSgmc2hhcnAtPmxpbmsyLT5kZXYpOworfQorCitzdGF0aWMgaW50IHNoYXJwX3BhbmVsX3By b2JlKHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaSkKK3sKKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2 aWNlICpzZWNvbmRhcnkgPSBOVUxMOworCXN0cnVjdCBzaGFycF9wYW5lbCAqc2hhcnA7CisJc3Ry dWN0IGRldmljZV9ub2RlICpucDsKKwlpbnQgZXJyOworCisJZHNpLT5sYW5lcyA9IDQ7CisJZHNp LT5mb3JtYXQgPSBNSVBJX0RTSV9GTVRfUkdCODg4OworCWRzaS0+bW9kZV9mbGFncyA9IE1JUElf RFNJX01PREVfTFBNOworCisJLyogRmluZCBEU0ktTElOSzEgKi8KKwlucCA9IG9mX3BhcnNlX3Bo YW5kbGUoZHNpLT5kZXYub2Zfbm9kZSwgImxpbmsyIiwgMCk7CisJaWYgKG5wKSB7CisJCXNlY29u ZGFyeSA9IG9mX2ZpbmRfbWlwaV9kc2lfZGV2aWNlX2J5X25vZGUobnApOworCQlvZl9ub2RlX3B1 dChucCk7CisKKwkJaWYgKCFzZWNvbmRhcnkpCisJCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKwl9 CisKKwkvKiByZWdpc3RlciBhIHBhbmVsIGZvciBvbmx5IHRoZSBEU0ktTElOSzEgaW50ZXJmYWNl ICovCisJaWYgKHNlY29uZGFyeSkgeworCQlzaGFycCA9IGRldm1fa3phbGxvYygmZHNpLT5kZXYs IHNpemVvZigqc2hhcnApLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFzaGFycCkgeworCQkJcHV0X2Rl dmljZSgmc2Vjb25kYXJ5LT5kZXYpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQltaXBp X2RzaV9zZXRfZHJ2ZGF0YShkc2ksIHNoYXJwKTsKKworCQlzaGFycC0+bGluazIgPSBzZWNvbmRh cnk7CisJCXNoYXJwLT5saW5rMSA9IGRzaTsKKworCQllcnIgPSBzaGFycF9wYW5lbF9hZGQoc2hh cnApOworCQlpZiAoZXJyIDwgMCkgeworCQkJcHV0X2RldmljZSgmc2Vjb25kYXJ5LT5kZXYpOwor CQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKworCWVyciA9IG1pcGlfZHNpX2F0dGFjaChkc2kpOwor CWlmIChlcnIgPCAwKSB7CisJCWlmIChzZWNvbmRhcnkpCisJCQlzaGFycF9wYW5lbF9kZWwoc2hh cnApOworCisJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQg c2hhcnBfcGFuZWxfcmVtb3ZlKHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaSkKK3sKKwlzdHJ1 Y3Qgc2hhcnBfcGFuZWwgKnNoYXJwID0gbWlwaV9kc2lfZ2V0X2RydmRhdGEoZHNpKTsKKwlpbnQg ZXJyOworCisJLyogb25seSBkZXRhY2ggZnJvbSBob3N0IGZvciB0aGUgRFNJLUxJTksyIGludGVy ZmFjZSAqLworCWlmICghc2hhcnApIHsKKwkJbWlwaV9kc2lfZGV0YWNoKGRzaSk7CisJCXJldHVy biAwOworCX0KKworCWVyciA9IHNoYXJwX3BhbmVsX2Rpc2FibGUoJnNoYXJwLT5iYXNlKTsKKwlp ZiAoZXJyIDwgMCkKKwkJZGV2X2VycigmZHNpLT5kZXYsICJmYWlsZWQgdG8gZGlzYWJsZSBwYW5l bDogJWRcbiIsIGVycik7CisKKwllcnIgPSBtaXBpX2RzaV9kZXRhY2goZHNpKTsKKwlpZiAoZXJy IDwgMCkKKwkJZGV2X2VycigmZHNpLT5kZXYsICJmYWlsZWQgdG8gZGV0YWNoIGZyb20gRFNJIGhv c3Q6ICVkXG4iLCBlcnIpOworCisJZHJtX3BhbmVsX2RldGFjaCgmc2hhcnAtPmJhc2UpOworCXNo YXJwX3BhbmVsX2RlbChzaGFycCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2hh cnBfcGFuZWxfc2h1dGRvd24oc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpKQoreworCXN0cnVj dCBzaGFycF9wYW5lbCAqc2hhcnAgPSBtaXBpX2RzaV9nZXRfZHJ2ZGF0YShkc2kpOworCisJLyog bm90aGluZyB0byBkbyBmb3IgRFNJLUxJTksyICovCisJaWYgKCFzaGFycCkKKwkJcmV0dXJuOwor CisJc2hhcnBfcGFuZWxfZGlzYWJsZSgmc2hhcnAtPmJhc2UpOworfQorCitzdGF0aWMgc3RydWN0 IG1pcGlfZHNpX2RyaXZlciBzaGFycF9wYW5lbF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJ Lm5hbWUgPSAicGFuZWwtc2hhcnAtbHExMDFyMXN4MDEiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBz aGFycF9vZl9tYXRjaCwKKwl9LAorCS5wcm9iZSA9IHNoYXJwX3BhbmVsX3Byb2JlLAorCS5yZW1v dmUgPSBzaGFycF9wYW5lbF9yZW1vdmUsCisJLnNodXRkb3duID0gc2hhcnBfcGFuZWxfc2h1dGRv d24sCit9OworbW9kdWxlX21pcGlfZHNpX2RyaXZlcihzaGFycF9wYW5lbF9kcml2ZXIpOworCitN T0RVTEVfQVVUSE9SKCJUaGllcnJ5IFJlZGluZyA8dHJlZGluZ0BudmlkaWEuY29tPiIpOworTU9E VUxFX0RFU0NSSVBUSU9OKCJTaGFycCBMUTEwMVIxU1gwMSBwYW5lbCBkcml2ZXIiKTsKK01PRFVM RV9MSUNFTlNFKCJHUEwgdjIiKTsKLS0gCjIuMS4yCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBs aXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2RyaS1kZXZlbAo=