From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Zhong Subject: [PATCH v2 2/2] drm/panel: add innolux,p079zca panel driver Date: Wed, 15 Mar 2017 15:19:13 +0800 Message-ID: <1489562353-10313-2-git-send-email-zyw@rock-chips.com> References: <1489562353-10313-1-git-send-email-zyw@rock-chips.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1489562353-10313-1-git-send-email-zyw@rock-chips.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: linux-rockchip@lists.infradead.org Cc: Chris Zhong , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org List-Id: linux-rockchip.vger.kernel.org U3VwcG9ydCBJbm5vbHV4IFAwNzlaQ0EgNy44NSIgNzY4eDEwMjQgVEZUIExDRCBwYW5lbCwgaXQg aXMgYSBNSVBJIERTSQpwYW5lbC4KClNpZ25lZC1vZmYtYnk6IENocmlzIFpob25nIDx6eXdAcm9j ay1jaGlwcy5jb20+Ci0tLQoKQ2hhbmdlcyBpbiB2MjoKLSBhZGQgc29tZSBlcnJvciBjaGVjawot IGFsd2F5cyB1c2UgTG93IHBvd2VyIG1vZGUgdG8gc2VuZCBjb21tZW5kCi0gYWRkIGNvbW1lbnRz IGZvciBhbGwgdGhlIHNsZWVwCi0gdXNlIERSTV9ERVZfRVJST1IgaW5zdGVhZCBvZiBkZXZfZXJy CgogZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcgICAgICAgICAgICAgICAgIHwgIDExICsK IGRyaXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtlZmlsZSAgICAgICAgICAgICAgICB8ICAgMSArCiBk cml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwtaW5ub2x1eC1wMDc5emNhLmMgfCAzNDQgKysrKysr KysrKysrKysrKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgMzU2IGluc2VydGlvbnMoKykK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwtaW5ub2x1eC1w MDc5emNhLmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZpZyBiL2Ry aXZlcnMvZ3B1L2RybS9wYW5lbC9LY29uZmlnCmluZGV4IDYyYWJhOTcuLjk5ZGQwMTAgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9wYW5lbC9LY29uZmlnCkBAIC0xOCw2ICsxOCwxNyBAQCBjb25maWcgRFJNX1BBTkVMX1NJTVBM RQogCSAgdGhhdCBpdCBjYW4gYmUgYXV0b21hdGljYWxseSB0dXJuZWQgb2ZmIHdoZW4gdGhlIHBh bmVsIGdvZXMgaW50byBhCiAJICBsb3cgcG93ZXIgc3RhdGUuCiAKK2NvbmZpZyBEUk1fUEFORUxf SU5OT0xVWF9QMDc5WkNBCisJdHJpc3RhdGUgIklubm9sdXggUDA3OVpDQSBwYW5lbCIKKwlkZXBl bmRzIG9uIE9GCisJZGVwZW5kcyBvbiBEUk1fTUlQSV9EU0kKKwlkZXBlbmRzIG9uIEJBQ0tMSUdI VF9DTEFTU19ERVZJQ0UKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGVuYWJs ZSBzdXBwb3J0IGZvciBJbm5vbHV4IFAwNzlaQ0EKKwkgIFRGVC1MQ0QgbW9kdWxlcy4gVGhlIHBh bmVsIGhhcyBhIDEwMjR4NzY4IHJlc29sdXRpb24gYW5kIHVzZXMKKwkgIDI0IGJpdCBSR0IgcGVy IHBpeGVsLiBJdCBwcm92aWRlcyBhIE1JUEkgRFNJIGludGVyZmFjZSB0bworCSAgdGhlIGhvc3Qg YW5kIGhhcyBhIGJ1aWx0LWluIExFRCBiYWNrbGlnaHQuCisKIGNvbmZpZyBEUk1fUEFORUxfSkRJ X0xUMDcwTUUwNTAwMAogCXRyaXN0YXRlICJKREkgTFQwNzBNRTA1MDAwIFdVWEdBIERTSSBwYW5l bCIKIAlkZXBlbmRzIG9uIE9GCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvTWFr ZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvTWFrZWZpbGUKaW5kZXggYTVjN2VjMC4uYmRh MmFhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL01ha2VmaWxlCisrKyBiL2Ry aXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtlZmlsZQpAQCAtMSw0ICsxLDUgQEAKIG9iai0kKENPTkZJ R19EUk1fUEFORUxfU0lNUExFKSArPSBwYW5lbC1zaW1wbGUubworb2JqLSQoQ09ORklHX0RSTV9Q QU5FTF9JTk5PTFVYX1AwNzlaQ0EpICs9IHBhbmVsLWlubm9sdXgtcDA3OXpjYS5vCiBvYmotJChD T05GSUdfRFJNX1BBTkVMX0pESV9MVDA3ME1FMDUwMDApICs9IHBhbmVsLWpkaS1sdDA3MG1lMDUw MDAubwogb2JqLSQoQ09ORklHX0RSTV9QQU5FTF9MR19MRzQ1NzMpICs9IHBhbmVsLWxnLWxnNDU3 My5vCiBvYmotJChDT05GSUdfRFJNX1BBTkVMX1BBTkFTT05JQ19WVlgxMEYwMzROMDApICs9IHBh bmVsLXBhbmFzb25pYy12dngxMGYwMzRuMDAubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L3BhbmVsL3BhbmVsLWlubm9sdXgtcDA3OXpjYS5jIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL3Bh bmVsLWlubm9sdXgtcDA3OXpjYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LmI4YzM0ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwt aW5ub2x1eC1wMDc5emNhLmMKQEAgLTAsMCArMSwzNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMp IDIwMTcsIEZ1emhvdSBSb2NrY2hpcCBFbGVjdHJvbmljcyBDby4sIEx0ZAorICoKKyAqIFRoaXMg cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg ZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2JhY2tsaWdodC5oPgor I2luY2x1ZGUgPGxpbnV4L2dwaW8vY29uc3VtZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUu aD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25z dW1lci5oPgorCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMu aD4KKyNpbmNsdWRlIDxkcm0vZHJtX21pcGlfZHNpLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wYW5l bC5oPgorCisjaW5jbHVkZSA8dmlkZW8vbWlwaV9kaXNwbGF5Lmg+CisKK3N0cnVjdCBpbm5vbHV4 X3BhbmVsIHsKKwlzdHJ1Y3QgZHJtX3BhbmVsIGJhc2U7CisJc3RydWN0IG1pcGlfZHNpX2Rldmlj ZSAqbGluazsKKworCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiYWNrbGlnaHQ7CisJc3RydWN0 IHJlZ3VsYXRvciAqc3VwcGx5OworCXN0cnVjdCBncGlvX2Rlc2MgKmVuYWJsZV9ncGlvOworCisJ Ym9vbCBwcmVwYXJlZDsKKwlib29sIGVuYWJsZWQ7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVj dCBpbm5vbHV4X3BhbmVsICp0b19pbm5vbHV4X3BhbmVsKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVs KQoreworCXJldHVybiBjb250YWluZXJfb2YocGFuZWwsIHN0cnVjdCBpbm5vbHV4X3BhbmVsLCBi YXNlKTsKK30KKworc3RhdGljIGludCBpbm5vbHV4X3BhbmVsX2Rpc2FibGUoc3RydWN0IGRybV9w YW5lbCAqcGFuZWwpCit7CisJc3RydWN0IGlubm9sdXhfcGFuZWwgKmlubm9sdXggPSB0b19pbm5v bHV4X3BhbmVsKHBhbmVsKTsKKwlpbnQgZXJyOworCisJaWYgKCFpbm5vbHV4LT5lbmFibGVkKQor CQlyZXR1cm4gMDsKKworCWlmIChpbm5vbHV4LT5iYWNrbGlnaHQpIHsKKwkJaW5ub2x1eC0+YmFj a2xpZ2h0LT5wcm9wcy5wb3dlciA9IEZCX0JMQU5LX1BPV0VSRE9XTjsKKwkJYmFja2xpZ2h0X3Vw ZGF0ZV9zdGF0dXMoaW5ub2x1eC0+YmFja2xpZ2h0KTsKKwl9CisKKwllcnIgPSBtaXBpX2RzaV9k Y3Nfc2V0X2Rpc3BsYXlfb2ZmKGlubm9sdXgtPmxpbmspOworCWlmIChlcnIgPCAwKQorCQlEUk1f REVWX0VSUk9SKHBhbmVsLT5kZXYsICJmYWlsZWQgdG8gc2V0IGRpc3BsYXkgb2ZmOiAlZFxuIiwK KwkJCSAgICAgIGVycik7CisKKwlpbm5vbHV4LT5lbmFibGVkID0gZmFsc2U7CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGludCBpbm5vbHV4X3BhbmVsX3VucHJlcGFyZShzdHJ1Y3QgZHJtX3Bh bmVsICpwYW5lbCkKK3sKKwlzdHJ1Y3QgaW5ub2x1eF9wYW5lbCAqaW5ub2x1eCA9IHRvX2lubm9s dXhfcGFuZWwocGFuZWwpOworCWludCBlcnI7CisKKwlpZiAoIWlubm9sdXgtPnByZXBhcmVkKQor CQlyZXR1cm4gMDsKKworCWVyciA9IG1pcGlfZHNpX2Rjc19lbnRlcl9zbGVlcF9tb2RlKGlubm9s dXgtPmxpbmspOworCWlmIChlcnIgPCAwKSB7CisJCURSTV9ERVZfRVJST1IocGFuZWwtPmRldiwg ImZhaWxlZCB0byBlbnRlciBzbGVlcCBtb2RlOiAlZFxuIiwKKwkJCSAgICAgIGVycik7CisJCXJl dHVybiBlcnI7CisJfQorCisJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKGlubm9sdXgtPmVuYWJs ZV9ncGlvLCAwKTsKKworCS8qIFQ4OiA4MG1zIC0gMTAwMG1zICovCisJbXNsZWVwKDgwKTsKKwor CWVyciA9IHJlZ3VsYXRvcl9kaXNhYmxlKGlubm9sdXgtPnN1cHBseSk7CisJaWYgKGVyciA8IDAp CisJCXJldHVybiBlcnI7CisKKwlpbm5vbHV4LT5wcmVwYXJlZCA9IGZhbHNlOworCisJcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgaW5ub2x1eF9wYW5lbF9wcmVwYXJlKHN0cnVjdCBkcm1fcGFu ZWwgKnBhbmVsKQoreworCXN0cnVjdCBpbm5vbHV4X3BhbmVsICppbm5vbHV4ID0gdG9faW5ub2x1 eF9wYW5lbChwYW5lbCk7CisJaW50IGVyciwgcmV0OworCisJaWYgKGlubm9sdXgtPnByZXBhcmVk KQorCQlyZXR1cm4gMDsKKworCWdwaW9kX3NldF92YWx1ZV9jYW5zbGVlcChpbm5vbHV4LT5lbmFi bGVfZ3BpbywgMCk7CisKKwllcnIgPSByZWd1bGF0b3JfZW5hYmxlKGlubm9sdXgtPnN1cHBseSk7 CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwkvKiBUMjogMTVtcyAtIDEwMDBtcyAq LworCXVzbGVlcF9yYW5nZSgxNTAwMCwgMTYwMDApOworCisJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNs ZWVwKGlubm9sdXgtPmVuYWJsZV9ncGlvLCAxKTsKKworCS8qIFQ0OiAxNW1zIC0gMTAwMG1zICov CisJdXNsZWVwX3JhbmdlKDE1MDAwLCAxNjAwMCk7CisKKwllcnIgPSBtaXBpX2RzaV9kY3NfZXhp dF9zbGVlcF9tb2RlKGlubm9sdXgtPmxpbmspOworCWlmIChlcnIgPCAwKSB7CisJCURSTV9ERVZf RVJST1IocGFuZWwtPmRldiwgImZhaWxlZCB0byBleGl0IHNsZWVwIG1vZGU6ICVkXG4iLAorCQkJ ICAgICAgZXJyKTsKKwkJZ290byBwb3dlcm9mZjsKKwl9CisKKwkvKiBUNjogMTIwbXMgLSAxMDAw bXMqLworCW1zbGVlcCgxMjApOworCisJZXJyID0gbWlwaV9kc2lfZGNzX3NldF9kaXNwbGF5X29u KGlubm9sdXgtPmxpbmspOworCWlmIChlcnIgPCAwKSB7CisJCURSTV9ERVZfRVJST1IocGFuZWwt PmRldiwgImZhaWxlZCB0byBzZXQgZGlzcGxheSBvbjogJWRcbiIsCisJCQkgICAgICBlcnIpOwor CQlnb3RvIHBvd2Vyb2ZmOworCX0KKworCS8qIFQ3OiA1bXMgKi8KKwl1c2xlZXBfcmFuZ2UoNTAw MCwgNjAwMCk7CisKKwlpbm5vbHV4LT5wcmVwYXJlZCA9IHRydWU7CisKKwlyZXR1cm4gMDsKKwor cG93ZXJvZmY6CisJcmV0ID0gcmVndWxhdG9yX2Rpc2FibGUoaW5ub2x1eC0+c3VwcGx5KTsKKwlp ZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKGlubm9s dXgtPmVuYWJsZV9ncGlvLCAwKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGlubm9s dXhfcGFuZWxfZW5hYmxlKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQoreworCXN0cnVjdCBpbm5v bHV4X3BhbmVsICppbm5vbHV4ID0gdG9faW5ub2x1eF9wYW5lbChwYW5lbCk7CisJaW50IHJldDsK KworCWlmIChpbm5vbHV4LT5lbmFibGVkKQorCQlyZXR1cm4gMDsKKworCWlmIChpbm5vbHV4LT5i YWNrbGlnaHQpIHsKKwkJaW5ub2x1eC0+YmFja2xpZ2h0LT5wcm9wcy5wb3dlciA9IEZCX0JMQU5L X1VOQkxBTks7CisJCXJldCA9IGJhY2tsaWdodF91cGRhdGVfc3RhdHVzKGlubm9sdXgtPmJhY2ts aWdodCk7CisJCWlmIChyZXQpIHsKKwkJCURSTV9ERVZfRVJST1IocGFuZWwtPmRybS0+ZGV2LAor CQkJCSAgICAgICJGYWlsZWQgdG8gZW5hYmxlIGJhY2tsaWdodCAlZFxuIiwgcmV0KTsKKwkJCXJl dHVybiByZXQ7CisJCX0KKwl9CisKKwlpbm5vbHV4LT5lbmFibGVkID0gdHJ1ZTsKKworCXJldHVy biAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgZGVmYXVsdF9t b2RlID0geworCS5jbG9jayA9IDU2OTAwLAorCS5oZGlzcGxheSA9IDc2OCwKKwkuaHN5bmNfc3Rh cnQgPSA3NjggKyA0MCwKKwkuaHN5bmNfZW5kID0gNzY4ICsgNDAgKyA0MCwKKwkuaHRvdGFsID0g NzY4ICsgNDAgKyA0MCArIDQwLAorCS52ZGlzcGxheSA9IDEwMjQsCisJLnZzeW5jX3N0YXJ0ID0g MTAyNCArIDIwLAorCS52c3luY19lbmQgPSAxMDI0ICsgMjAgKyA0LAorCS52dG90YWwgPSAxMDI0 ICsgMjAgKyA0ICsgMjAsCisJLnZyZWZyZXNoID0gNjAsCit9OworCitzdGF0aWMgaW50IGlubm9s dXhfcGFuZWxfZ2V0X21vZGVzKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQoreworCXN0cnVjdCBk cm1fZGlzcGxheV9tb2RlICptb2RlOworCisJbW9kZSA9IGRybV9tb2RlX2R1cGxpY2F0ZShwYW5l bC0+ZHJtLCAmZGVmYXVsdF9tb2RlKTsKKwlpZiAoIW1vZGUpIHsKKwkJRFJNX0RFVl9FUlJPUihw YW5lbC0+ZHJtLT5kZXYsICJmYWlsZWQgdG8gYWRkIG1vZGUgJXV4JXV4QCV1XG4iLAorCQkJICAg ICAgZGVmYXVsdF9tb2RlLmhkaXNwbGF5LCBkZWZhdWx0X21vZGUudmRpc3BsYXksCisJCQkgICAg ICBkZWZhdWx0X21vZGUudnJlZnJlc2gpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlkcm1f bW9kZV9zZXRfbmFtZShtb2RlKTsKKworCWRybV9tb2RlX3Byb2JlZF9hZGQocGFuZWwtPmNvbm5l Y3RvciwgbW9kZSk7CisKKwlwYW5lbC0+Y29ubmVjdG9yLT5kaXNwbGF5X2luZm8ud2lkdGhfbW0g PSAxMjA7CisJcGFuZWwtPmNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLmhlaWdodF9tbSA9IDE2MDsK KworCXJldHVybiAxOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wYW5lbF9mdW5jcyBp bm5vbHV4X3BhbmVsX2Z1bmNzID0geworCS5kaXNhYmxlID0gaW5ub2x1eF9wYW5lbF9kaXNhYmxl LAorCS51bnByZXBhcmUgPSBpbm5vbHV4X3BhbmVsX3VucHJlcGFyZSwKKwkucHJlcGFyZSA9IGlu bm9sdXhfcGFuZWxfcHJlcGFyZSwKKwkuZW5hYmxlID0gaW5ub2x1eF9wYW5lbF9lbmFibGUsCisJ LmdldF9tb2RlcyA9IGlubm9sdXhfcGFuZWxfZ2V0X21vZGVzLAorfTsKKworc3RhdGljIGNvbnN0 IHN0cnVjdCBvZl9kZXZpY2VfaWQgaW5ub2x1eF9vZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGli bGUgPSAiaW5ub2x1eCxwMDc5emNhIiwgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxF KG9mLCBpbm5vbHV4X29mX21hdGNoKTsKKworc3RhdGljIGludCBpbm5vbHV4X3BhbmVsX2FkZChz dHJ1Y3QgaW5ub2x1eF9wYW5lbCAqaW5ub2x1eCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAm aW5ub2x1eC0+bGluay0+ZGV2OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJaW50IGVycjsK KworCWlubm9sdXgtPnN1cHBseSA9IGRldm1fcmVndWxhdG9yX2dldChkZXYsICJwb3dlciIpOwor CWlmIChJU19FUlIoaW5ub2x1eC0+c3VwcGx5KSkKKwkJcmV0dXJuIFBUUl9FUlIoaW5ub2x1eC0+ c3VwcGx5KTsKKworCWlubm9sdXgtPmVuYWJsZV9ncGlvID0gZGV2bV9ncGlvZF9nZXRfb3B0aW9u YWwoZGV2LCAiZW5hYmxlIiwKKwkJCQkJCSAgICAgICBHUElPRF9PVVRfSElHSCk7CisJaWYgKElT X0VSUihpbm5vbHV4LT5lbmFibGVfZ3BpbykpIHsKKwkJZXJyID0gUFRSX0VSUihpbm5vbHV4LT5l bmFibGVfZ3Bpbyk7CisJCWRldl9kYmcoZGV2LCAiZmFpbGVkIHRvIGdldCBlbmFibGUgZ3Bpbzog JWRcbiIsIGVycik7CisJCWlubm9sdXgtPmVuYWJsZV9ncGlvID0gTlVMTDsKKwl9CisKKwlucCA9 IG9mX3BhcnNlX3BoYW5kbGUoZGV2LT5vZl9ub2RlLCAiYmFja2xpZ2h0IiwgMCk7CisJaWYgKG5w KSB7CisJCWlubm9sdXgtPmJhY2tsaWdodCA9IG9mX2ZpbmRfYmFja2xpZ2h0X2J5X25vZGUobnAp OworCQlvZl9ub2RlX3B1dChucCk7CisKKwkJaWYgKCFpbm5vbHV4LT5iYWNrbGlnaHQpCisJCQly ZXR1cm4gLUVQUk9CRV9ERUZFUjsKKwl9CisKKwlkcm1fcGFuZWxfaW5pdCgmaW5ub2x1eC0+YmFz ZSk7CisJaW5ub2x1eC0+YmFzZS5mdW5jcyA9ICZpbm5vbHV4X3BhbmVsX2Z1bmNzOworCWlubm9s dXgtPmJhc2UuZGV2ID0gJmlubm9sdXgtPmxpbmstPmRldjsKKworCWVyciA9IGRybV9wYW5lbF9h ZGQoJmlubm9sdXgtPmJhc2UpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIHB1dF9iYWNrbGlnaHQ7 CisKKwlyZXR1cm4gMDsKKworcHV0X2JhY2tsaWdodDoKKwlpZiAoaW5ub2x1eC0+YmFja2xpZ2h0 KQorCQlwdXRfZGV2aWNlKCZpbm5vbHV4LT5iYWNrbGlnaHQtPmRldik7CisKKwlyZXR1cm4gZXJy OworfQorCitzdGF0aWMgdm9pZCBpbm5vbHV4X3BhbmVsX2RlbChzdHJ1Y3QgaW5ub2x1eF9wYW5l bCAqaW5ub2x1eCkKK3sKKwlpZiAoaW5ub2x1eC0+YmFzZS5kZXYpCisJCWRybV9wYW5lbF9yZW1v dmUoJmlubm9sdXgtPmJhc2UpOworCisJaWYgKGlubm9sdXgtPmJhY2tsaWdodCkKKwkJcHV0X2Rl dmljZSgmaW5ub2x1eC0+YmFja2xpZ2h0LT5kZXYpOworfQorCitzdGF0aWMgaW50IGlubm9sdXhf cGFuZWxfcHJvYmUoc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpKQoreworCXN0cnVjdCBpbm5v bHV4X3BhbmVsICppbm5vbHV4OworCWludCBlcnI7CisKKwlkc2ktPmxhbmVzID0gNDsKKwlkc2kt PmZvcm1hdCA9IE1JUElfRFNJX0ZNVF9SR0I4ODg7CisJZHNpLT5tb2RlX2ZsYWdzID0gTUlQSV9E U0lfTU9ERV9WSURFTyB8IE1JUElfRFNJX01PREVfVklERU9fU1lOQ19QVUxTRSB8CisJCQkgIE1J UElfRFNJX01PREVfTFBNOworCisJaW5ub2x1eCA9IGRldm1fa3phbGxvYygmZHNpLT5kZXYsIHNp emVvZigqaW5ub2x1eCksIEdGUF9LRVJORUwpOworCWlmICghaW5ub2x1eCkKKwkJcmV0dXJuIC1F Tk9NRU07CisKKwltaXBpX2RzaV9zZXRfZHJ2ZGF0YShkc2ksIGlubm9sdXgpOworCisJaW5ub2x1 eC0+bGluayA9IGRzaTsKKworCWVyciA9IGlubm9sdXhfcGFuZWxfYWRkKGlubm9sdXgpOworCWlm IChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gbWlwaV9kc2lfYXR0YWNoKGRzaSk7 CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBpbm5vbHV4X3BhbmVsX3JlbW92ZShzdHJ1 Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2kpCit7CisJc3RydWN0IGlubm9sdXhfcGFuZWwgKmlubm9s dXggPSBtaXBpX2RzaV9nZXRfZHJ2ZGF0YShkc2kpOworCWludCBlcnI7CisKKwllcnIgPSBpbm5v bHV4X3BhbmVsX3VucHJlcGFyZSgmaW5ub2x1eC0+YmFzZSk7CisJaWYgKGVyciA8IDApCisJCURS TV9ERVZfRVJST1IoJmRzaS0+ZGV2LCAiZmFpbGVkIHRvIHVucHJlcGFyZSBwYW5lbDogJWRcbiIs CisJCQkgICAgICBlcnIpOworCisJZXJyID0gaW5ub2x1eF9wYW5lbF9kaXNhYmxlKCZpbm5vbHV4 LT5iYXNlKTsKKwlpZiAoZXJyIDwgMCkKKwkJRFJNX0RFVl9FUlJPUigmZHNpLT5kZXYsICJmYWls ZWQgdG8gZGlzYWJsZSBwYW5lbDogJWRcbiIsIGVycik7CisKKwllcnIgPSBtaXBpX2RzaV9kZXRh Y2goZHNpKTsKKwlpZiAoZXJyIDwgMCkKKwkJRFJNX0RFVl9FUlJPUigmZHNpLT5kZXYsICJmYWls ZWQgdG8gZGV0YWNoIGZyb20gRFNJIGhvc3Q6ICVkXG4iLAorCQkJICAgICAgZXJyKTsKKworCWRy bV9wYW5lbF9kZXRhY2goJmlubm9sdXgtPmJhc2UpOworCWlubm9sdXhfcGFuZWxfZGVsKGlubm9s dXgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGlubm9sdXhfcGFuZWxfc2h1dGRv d24oc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpKQoreworCXN0cnVjdCBpbm5vbHV4X3BhbmVs ICppbm5vbHV4ID0gbWlwaV9kc2lfZ2V0X2RydmRhdGEoZHNpKTsKKworCWlubm9sdXhfcGFuZWxf dW5wcmVwYXJlKCZpbm5vbHV4LT5iYXNlKTsKKwlpbm5vbHV4X3BhbmVsX2Rpc2FibGUoJmlubm9s dXgtPmJhc2UpOworfQorCitzdGF0aWMgc3RydWN0IG1pcGlfZHNpX2RyaXZlciBpbm5vbHV4X3Bh bmVsX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJwYW5lbC1pbm5vbHV4LXAw Nzl6Y2EiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBpbm5vbHV4X29mX21hdGNoLAorCX0sCisJLnBy b2JlID0gaW5ub2x1eF9wYW5lbF9wcm9iZSwKKwkucmVtb3ZlID0gaW5ub2x1eF9wYW5lbF9yZW1v dmUsCisJLnNodXRkb3duID0gaW5ub2x1eF9wYW5lbF9zaHV0ZG93biwKK307Cittb2R1bGVfbWlw aV9kc2lfZHJpdmVyKGlubm9sdXhfcGFuZWxfZHJpdmVyKTsKKworTU9EVUxFX0FVVEhPUigiQ2hy aXMgWmhvbmcgPHp5d0Byb2NrLWNoaXBzLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiSW5u b2x1eCBQMDc5WkNBIHBhbmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwot LSAKMi42LjMKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpo dHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=