From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chris Zhong Subject: [PATCH v4 2/2] drm/panel: add innolux,p079zca panel driver Date: Fri, 24 Mar 2017 08:51:32 +0800 Message-ID: <1490316692-20506-2-git-send-email-zyw@rock-chips.com> References: <1490316692-20506-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: Received: from mail-pf0-f196.google.com (mail-pf0-f196.google.com [209.85.192.196]) by gabe.freedesktop.org (Postfix) with ESMTPS id E6E876EB75 for ; Fri, 24 Mar 2017 00:51:41 +0000 (UTC) Received: by mail-pf0-f196.google.com with SMTP id o126so32688pfb.1 for ; Thu, 23 Mar 2017 17:51:41 -0700 (PDT) In-Reply-To: <1490316692-20506-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, thierry.reding@gmail.com Cc: Chris Zhong , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org U3VwcG9ydCBJbm5vbHV4IFAwNzlaQ0EgNy44NSIgNzY4eDEwMjQgVEZUIExDRCBwYW5lbCwgaXQg aXMgYSBNSVBJIERTSQpwYW5lbC4KClNpZ25lZC1vZmYtYnk6IENocmlzIFpob25nIDx6eXdAcm9j ay1jaGlwcy5jb20+ClJldmlld2VkLWJ5OiBTZWFuIFBhdWwgPHNlYW5wYXVsQGNocm9taXVtLm9y Zz4KVGVzdGVkLWJ5OiBCcmlhbiBOb3JyaXMgPGJyaWFubm9ycmlzQGNocm9taXVtLm9yZz4KLS0t CgpDaGFuZ2VzIGluIHY0OgotIHJlbW92ZSBiYWNrbGlnaHQgY2hlY2sgYWZ0ZXIgcHJvYmUKLSBh ZGQgYnBjIGluZm8KCkNoYW5nZXMgaW4gdjM6Ci0gcHJpbnRrIGVyciBhZnRlciByZWd1bGF0b3Jf ZGlzYWJsZShpbm5vbHV4LT5zdXBwbHkpCgpDaGFuZ2VzIGluIHYyOgotIGFkZCBzb21lIGVycm9y IGNoZWNrCi0gYWx3YXlzIHVzZSBMb3cgcG93ZXIgbW9kZSB0byBzZW5kIGNvbW1lbmQKLSBhZGQg Y29tbWVudHMgZm9yIGFsbCB0aGUgc2xlZXAKLSB1c2UgRFJNX0RFVl9FUlJPUiBpbnN0ZWFkIG9m IGRldl9lcnIKCiBkcml2ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZpZyAgICAgICAgICAgICAgICAg fCAgMTEgKwogZHJpdmVycy9ncHUvZHJtL3BhbmVsL01ha2VmaWxlICAgICAgICAgICAgICAgIHwg ICAxICsKIGRyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC1pbm5vbHV4LXAwNzl6Y2EuYyB8IDM0 MCArKysrKysrKysrKysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCAzNTIgaW5zZXJ0 aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC1p bm5vbHV4LXAwNzl6Y2EuYwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9LY29u ZmlnIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcKaW5kZXggNjJhYmE5Ny4uOTlkZDAx MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcKKysrIGIvZHJpdmVy cy9ncHUvZHJtL3BhbmVsL0tjb25maWcKQEAgLTE4LDYgKzE4LDE3IEBAIGNvbmZpZyBEUk1fUEFO RUxfU0lNUExFCiAJICB0aGF0IGl0IGNhbiBiZSBhdXRvbWF0aWNhbGx5IHR1cm5lZCBvZmYgd2hl biB0aGUgcGFuZWwgZ29lcyBpbnRvIGEKIAkgIGxvdyBwb3dlciBzdGF0ZS4KIAorY29uZmlnIERS TV9QQU5FTF9JTk5PTFVYX1AwNzlaQ0EKKwl0cmlzdGF0ZSAiSW5ub2x1eCBQMDc5WkNBIHBhbmVs IgorCWRlcGVuZHMgb24gT0YKKwlkZXBlbmRzIG9uIERSTV9NSVBJX0RTSQorCWRlcGVuZHMgb24g QkFDS0xJR0hUX0NMQVNTX0RFVklDRQorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQg dG8gZW5hYmxlIHN1cHBvcnQgZm9yIElubm9sdXggUDA3OVpDQQorCSAgVEZULUxDRCBtb2R1bGVz LiBUaGUgcGFuZWwgaGFzIGEgMTAyNHg3NjggcmVzb2x1dGlvbiBhbmQgdXNlcworCSAgMjQgYml0 IFJHQiBwZXIgcGl4ZWwuIEl0IHByb3ZpZGVzIGEgTUlQSSBEU0kgaW50ZXJmYWNlIHRvCisJICB0 aGUgaG9zdCBhbmQgaGFzIGEgYnVpbHQtaW4gTEVEIGJhY2tsaWdodC4KKwogY29uZmlnIERSTV9Q QU5FTF9KRElfTFQwNzBNRTA1MDAwCiAJdHJpc3RhdGUgIkpESSBMVDA3ME1FMDUwMDAgV1VYR0Eg RFNJIHBhbmVsIgogCWRlcGVuZHMgb24gT0YKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9w YW5lbC9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtlZmlsZQppbmRleCBhNWM3 ZWMwLi5iZGEyYWE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvTWFrZWZpbGUK KysrIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL01ha2VmaWxlCkBAIC0xLDQgKzEsNSBAQAogb2Jq LSQoQ09ORklHX0RSTV9QQU5FTF9TSU1QTEUpICs9IHBhbmVsLXNpbXBsZS5vCitvYmotJChDT05G SUdfRFJNX1BBTkVMX0lOTk9MVVhfUDA3OVpDQSkgKz0gcGFuZWwtaW5ub2x1eC1wMDc5emNhLm8K IG9iai0kKENPTkZJR19EUk1fUEFORUxfSkRJX0xUMDcwTUUwNTAwMCkgKz0gcGFuZWwtamRpLWx0 MDcwbWUwNTAwMC5vCiBvYmotJChDT05GSUdfRFJNX1BBTkVMX0xHX0xHNDU3MykgKz0gcGFuZWwt bGctbGc0NTczLm8KIG9iai0kKENPTkZJR19EUk1fUEFORUxfUEFOQVNPTklDX1ZWWDEwRjAzNE4w MCkgKz0gcGFuZWwtcGFuYXNvbmljLXZ2eDEwZjAzNG4wMC5vCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vcGFuZWwvcGFuZWwtaW5ub2x1eC1wMDc5emNhLmMgYi9kcml2ZXJzL2dwdS9kcm0v cGFuZWwvcGFuZWwtaW5ub2x1eC1wMDc5emNhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uNmJhOTM0NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5l bC9wYW5lbC1pbm5vbHV4LXAwNzl6Y2EuYwpAQCAtMCwwICsxLDM0MCBAQAorLyoKKyAqIENvcHly aWdodCAoYykgMjAxNywgRnV6aG91IFJvY2tjaGlwIEVsZWN0cm9uaWNzIENvLiwgTHRkCisgKgor ICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIg b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvYmFja2xp Z2h0Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby9jb25zdW1lci5oPgorI2luY2x1ZGUgPGxpbnV4 L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxh dG9yL2NvbnN1bWVyLmg+CisKKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgorI2luY2x1ZGUgPGRybS9k cm1fY3J0Yy5oPgorI2luY2x1ZGUgPGRybS9kcm1fbWlwaV9kc2kuaD4KKyNpbmNsdWRlIDxkcm0v ZHJtX3BhbmVsLmg+CisKKyNpbmNsdWRlIDx2aWRlby9taXBpX2Rpc3BsYXkuaD4KKworc3RydWN0 IGlubm9sdXhfcGFuZWwgeworCXN0cnVjdCBkcm1fcGFuZWwgYmFzZTsKKwlzdHJ1Y3QgbWlwaV9k c2lfZGV2aWNlICpsaW5rOworCisJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJhY2tsaWdodDsK KwlzdHJ1Y3QgcmVndWxhdG9yICpzdXBwbHk7CisJc3RydWN0IGdwaW9fZGVzYyAqZW5hYmxlX2dw aW87CisKKwlib29sIHByZXBhcmVkOworCWJvb2wgZW5hYmxlZDsKK307CisKK3N0YXRpYyBpbmxp bmUgc3RydWN0IGlubm9sdXhfcGFuZWwgKnRvX2lubm9sdXhfcGFuZWwoc3RydWN0IGRybV9wYW5l bCAqcGFuZWwpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihwYW5lbCwgc3RydWN0IGlubm9sdXhf cGFuZWwsIGJhc2UpOworfQorCitzdGF0aWMgaW50IGlubm9sdXhfcGFuZWxfZGlzYWJsZShzdHJ1 Y3QgZHJtX3BhbmVsICpwYW5lbCkKK3sKKwlzdHJ1Y3QgaW5ub2x1eF9wYW5lbCAqaW5ub2x1eCA9 IHRvX2lubm9sdXhfcGFuZWwocGFuZWwpOworCWludCBlcnI7CisKKwlpZiAoIWlubm9sdXgtPmVu YWJsZWQpCisJCXJldHVybiAwOworCisJaW5ub2x1eC0+YmFja2xpZ2h0LT5wcm9wcy5wb3dlciA9 IEZCX0JMQU5LX1BPV0VSRE9XTjsKKwliYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhpbm5vbHV4LT5i YWNrbGlnaHQpOworCisJZXJyID0gbWlwaV9kc2lfZGNzX3NldF9kaXNwbGF5X29mZihpbm5vbHV4 LT5saW5rKTsKKwlpZiAoZXJyIDwgMCkKKwkJRFJNX0RFVl9FUlJPUihwYW5lbC0+ZGV2LCAiZmFp bGVkIHRvIHNldCBkaXNwbGF5IG9mZjogJWRcbiIsCisJCQkgICAgICBlcnIpOworCisJaW5ub2x1 eC0+ZW5hYmxlZCA9IGZhbHNlOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW5ub2x1 eF9wYW5lbF91bnByZXBhcmUoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCit7CisJc3RydWN0IGlu bm9sdXhfcGFuZWwgKmlubm9sdXggPSB0b19pbm5vbHV4X3BhbmVsKHBhbmVsKTsKKwlpbnQgZXJy OworCisJaWYgKCFpbm5vbHV4LT5wcmVwYXJlZCkKKwkJcmV0dXJuIDA7CisKKwllcnIgPSBtaXBp X2RzaV9kY3NfZW50ZXJfc2xlZXBfbW9kZShpbm5vbHV4LT5saW5rKTsKKwlpZiAoZXJyIDwgMCkg eworCQlEUk1fREVWX0VSUk9SKHBhbmVsLT5kZXYsICJmYWlsZWQgdG8gZW50ZXIgc2xlZXAgbW9k ZTogJWRcbiIsCisJCQkgICAgICBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWdwaW9kX3Nl dF92YWx1ZV9jYW5zbGVlcChpbm5vbHV4LT5lbmFibGVfZ3BpbywgMCk7CisKKwkvKiBUODogODBt cyAtIDEwMDBtcyAqLworCW1zbGVlcCg4MCk7CisKKwllcnIgPSByZWd1bGF0b3JfZGlzYWJsZShp bm5vbHV4LT5zdXBwbHkpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJaW5ub2x1 eC0+cHJlcGFyZWQgPSBmYWxzZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlubm9s dXhfcGFuZWxfcHJlcGFyZShzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkKK3sKKwlzdHJ1Y3QgaW5u b2x1eF9wYW5lbCAqaW5ub2x1eCA9IHRvX2lubm9sdXhfcGFuZWwocGFuZWwpOworCWludCBlcnIs IHJlZ3VsYXRvcl9lcnI7CisKKwlpZiAoaW5ub2x1eC0+cHJlcGFyZWQpCisJCXJldHVybiAwOwor CisJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKGlubm9sdXgtPmVuYWJsZV9ncGlvLCAwKTsKKwor CWVyciA9IHJlZ3VsYXRvcl9lbmFibGUoaW5ub2x1eC0+c3VwcGx5KTsKKwlpZiAoZXJyIDwgMCkK KwkJcmV0dXJuIGVycjsKKworCS8qIFQyOiAxNW1zIC0gMTAwMG1zICovCisJdXNsZWVwX3Jhbmdl KDE1MDAwLCAxNjAwMCk7CisKKwlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAoaW5ub2x1eC0+ZW5h YmxlX2dwaW8sIDEpOworCisJLyogVDQ6IDE1bXMgLSAxMDAwbXMgKi8KKwl1c2xlZXBfcmFuZ2Uo MTUwMDAsIDE2MDAwKTsKKworCWVyciA9IG1pcGlfZHNpX2Rjc19leGl0X3NsZWVwX21vZGUoaW5u b2x1eC0+bGluayk7CisJaWYgKGVyciA8IDApIHsKKwkJRFJNX0RFVl9FUlJPUihwYW5lbC0+ZGV2 LCAiZmFpbGVkIHRvIGV4aXQgc2xlZXAgbW9kZTogJWRcbiIsCisJCQkgICAgICBlcnIpOworCQln b3RvIHBvd2Vyb2ZmOworCX0KKworCS8qIFQ2OiAxMjBtcyAtIDEwMDBtcyovCisJbXNsZWVwKDEy MCk7CisKKwllcnIgPSBtaXBpX2RzaV9kY3Nfc2V0X2Rpc3BsYXlfb24oaW5ub2x1eC0+bGluayk7 CisJaWYgKGVyciA8IDApIHsKKwkJRFJNX0RFVl9FUlJPUihwYW5lbC0+ZGV2LCAiZmFpbGVkIHRv IHNldCBkaXNwbGF5IG9uOiAlZFxuIiwKKwkJCSAgICAgIGVycik7CisJCWdvdG8gcG93ZXJvZmY7 CisJfQorCisJLyogVDc6IDVtcyAqLworCXVzbGVlcF9yYW5nZSg1MDAwLCA2MDAwKTsKKworCWlu bm9sdXgtPnByZXBhcmVkID0gdHJ1ZTsKKworCXJldHVybiAwOworCitwb3dlcm9mZjoKKwlyZWd1 bGF0b3JfZXJyID0gcmVndWxhdG9yX2Rpc2FibGUoaW5ub2x1eC0+c3VwcGx5KTsKKwlpZiAocmVn dWxhdG9yX2VycikKKwkJRFJNX0RFVl9FUlJPUihwYW5lbC0+ZGV2LCAiZmFpbGVkIHRvIGRpc2Fi bGUgcmVndWxhdG9yOiAlZFxuIiwKKwkJCSAgICAgIHJlZ3VsYXRvcl9lcnIpOworCisJZ3Bpb2Rf c2V0X3ZhbHVlX2NhbnNsZWVwKGlubm9sdXgtPmVuYWJsZV9ncGlvLCAwKTsKKwlyZXR1cm4gZXJy OworfQorCitzdGF0aWMgaW50IGlubm9sdXhfcGFuZWxfZW5hYmxlKHN0cnVjdCBkcm1fcGFuZWwg KnBhbmVsKQoreworCXN0cnVjdCBpbm5vbHV4X3BhbmVsICppbm5vbHV4ID0gdG9faW5ub2x1eF9w YW5lbChwYW5lbCk7CisJaW50IHJldDsKKworCWlmIChpbm5vbHV4LT5lbmFibGVkKQorCQlyZXR1 cm4gMDsKKworCWlubm9sdXgtPmJhY2tsaWdodC0+cHJvcHMucG93ZXIgPSBGQl9CTEFOS19VTkJM QU5LOworCXJldCA9IGJhY2tsaWdodF91cGRhdGVfc3RhdHVzKGlubm9sdXgtPmJhY2tsaWdodCk7 CisJaWYgKHJldCkgeworCQlEUk1fREVWX0VSUk9SKHBhbmVsLT5kcm0tPmRldiwKKwkJCSAgICAg ICJGYWlsZWQgdG8gZW5hYmxlIGJhY2tsaWdodCAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsK Kwl9CisKKwlpbm5vbHV4LT5lbmFibGVkID0gdHJ1ZTsKKworCXJldHVybiAwOworfQorCitzdGF0 aWMgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgZGVmYXVsdF9tb2RlID0geworCS5jbG9j ayA9IDU2OTAwLAorCS5oZGlzcGxheSA9IDc2OCwKKwkuaHN5bmNfc3RhcnQgPSA3NjggKyA0MCwK KwkuaHN5bmNfZW5kID0gNzY4ICsgNDAgKyA0MCwKKwkuaHRvdGFsID0gNzY4ICsgNDAgKyA0MCAr IDQwLAorCS52ZGlzcGxheSA9IDEwMjQsCisJLnZzeW5jX3N0YXJ0ID0gMTAyNCArIDIwLAorCS52 c3luY19lbmQgPSAxMDI0ICsgMjAgKyA0LAorCS52dG90YWwgPSAxMDI0ICsgMjAgKyA0ICsgMjAs CisJLnZyZWZyZXNoID0gNjAsCit9OworCitzdGF0aWMgaW50IGlubm9sdXhfcGFuZWxfZ2V0X21v ZGVzKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQoreworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl ICptb2RlOworCisJbW9kZSA9IGRybV9tb2RlX2R1cGxpY2F0ZShwYW5lbC0+ZHJtLCAmZGVmYXVs dF9tb2RlKTsKKwlpZiAoIW1vZGUpIHsKKwkJRFJNX0RFVl9FUlJPUihwYW5lbC0+ZHJtLT5kZXYs ICJmYWlsZWQgdG8gYWRkIG1vZGUgJXV4JXV4QCV1XG4iLAorCQkJICAgICAgZGVmYXVsdF9tb2Rl LmhkaXNwbGF5LCBkZWZhdWx0X21vZGUudmRpc3BsYXksCisJCQkgICAgICBkZWZhdWx0X21vZGUu dnJlZnJlc2gpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlkcm1fbW9kZV9zZXRfbmFtZSht b2RlKTsKKworCWRybV9tb2RlX3Byb2JlZF9hZGQocGFuZWwtPmNvbm5lY3RvciwgbW9kZSk7CisK KwlwYW5lbC0+Y29ubmVjdG9yLT5kaXNwbGF5X2luZm8ud2lkdGhfbW0gPSAxMjA7CisJcGFuZWwt PmNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLmhlaWdodF9tbSA9IDE2MDsKKwlwYW5lbC0+Y29ubmVj dG9yLT5kaXNwbGF5X2luZm8uYnBjID0gODsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgY29u c3Qgc3RydWN0IGRybV9wYW5lbF9mdW5jcyBpbm5vbHV4X3BhbmVsX2Z1bmNzID0geworCS5kaXNh YmxlID0gaW5ub2x1eF9wYW5lbF9kaXNhYmxlLAorCS51bnByZXBhcmUgPSBpbm5vbHV4X3BhbmVs X3VucHJlcGFyZSwKKwkucHJlcGFyZSA9IGlubm9sdXhfcGFuZWxfcHJlcGFyZSwKKwkuZW5hYmxl ID0gaW5ub2x1eF9wYW5lbF9lbmFibGUsCisJLmdldF9tb2RlcyA9IGlubm9sdXhfcGFuZWxfZ2V0 X21vZGVzLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgaW5ub2x1eF9v Zl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAiaW5ub2x1eCxwMDc5emNhIiwgfSwKKwl7 IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBpbm5vbHV4X29mX21hdGNoKTsKKworc3Rh dGljIGludCBpbm5vbHV4X3BhbmVsX2FkZChzdHJ1Y3QgaW5ub2x1eF9wYW5lbCAqaW5ub2x1eCkK K3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaW5ub2x1eC0+bGluay0+ZGV2OworCXN0cnVjdCBk ZXZpY2Vfbm9kZSAqbnA7CisJaW50IGVycjsKKworCWlubm9sdXgtPnN1cHBseSA9IGRldm1fcmVn dWxhdG9yX2dldChkZXYsICJwb3dlciIpOworCWlmIChJU19FUlIoaW5ub2x1eC0+c3VwcGx5KSkK KwkJcmV0dXJuIFBUUl9FUlIoaW5ub2x1eC0+c3VwcGx5KTsKKworCWlubm9sdXgtPmVuYWJsZV9n cGlvID0gZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwoZGV2LCAiZW5hYmxlIiwKKwkJCQkJCSAgICAg ICBHUElPRF9PVVRfSElHSCk7CisJaWYgKElTX0VSUihpbm5vbHV4LT5lbmFibGVfZ3BpbykpIHsK KwkJZXJyID0gUFRSX0VSUihpbm5vbHV4LT5lbmFibGVfZ3Bpbyk7CisJCWRldl9kYmcoZGV2LCAi ZmFpbGVkIHRvIGdldCBlbmFibGUgZ3BpbzogJWRcbiIsIGVycik7CisJCWlubm9sdXgtPmVuYWJs ZV9ncGlvID0gTlVMTDsKKwl9CisKKwlucCA9IG9mX3BhcnNlX3BoYW5kbGUoZGV2LT5vZl9ub2Rl LCAiYmFja2xpZ2h0IiwgMCk7CisJaWYgKG5wKSB7CisJCWlubm9sdXgtPmJhY2tsaWdodCA9IG9m X2ZpbmRfYmFja2xpZ2h0X2J5X25vZGUobnApOworCQlvZl9ub2RlX3B1dChucCk7CisKKwkJaWYg KCFpbm5vbHV4LT5iYWNrbGlnaHQpCisJCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKwl9CisKKwlk cm1fcGFuZWxfaW5pdCgmaW5ub2x1eC0+YmFzZSk7CisJaW5ub2x1eC0+YmFzZS5mdW5jcyA9ICZp bm5vbHV4X3BhbmVsX2Z1bmNzOworCWlubm9sdXgtPmJhc2UuZGV2ID0gJmlubm9sdXgtPmxpbmst PmRldjsKKworCWVyciA9IGRybV9wYW5lbF9hZGQoJmlubm9sdXgtPmJhc2UpOworCWlmIChlcnIg PCAwKQorCQlnb3RvIHB1dF9iYWNrbGlnaHQ7CisKKwlyZXR1cm4gMDsKKworcHV0X2JhY2tsaWdo dDoKKwlwdXRfZGV2aWNlKCZpbm5vbHV4LT5iYWNrbGlnaHQtPmRldik7CisKKwlyZXR1cm4gZXJy OworfQorCitzdGF0aWMgdm9pZCBpbm5vbHV4X3BhbmVsX2RlbChzdHJ1Y3QgaW5ub2x1eF9wYW5l bCAqaW5ub2x1eCkKK3sKKwlpZiAoaW5ub2x1eC0+YmFzZS5kZXYpCisJCWRybV9wYW5lbF9yZW1v dmUoJmlubm9sdXgtPmJhc2UpOworCisJcHV0X2RldmljZSgmaW5ub2x1eC0+YmFja2xpZ2h0LT5k ZXYpOworfQorCitzdGF0aWMgaW50IGlubm9sdXhfcGFuZWxfcHJvYmUoc3RydWN0IG1pcGlfZHNp X2RldmljZSAqZHNpKQoreworCXN0cnVjdCBpbm5vbHV4X3BhbmVsICppbm5vbHV4OworCWludCBl cnI7CisKKwlkc2ktPmxhbmVzID0gNDsKKwlkc2ktPmZvcm1hdCA9IE1JUElfRFNJX0ZNVF9SR0I4 ODg7CisJZHNpLT5tb2RlX2ZsYWdzID0gTUlQSV9EU0lfTU9ERV9WSURFTyB8IE1JUElfRFNJX01P REVfVklERU9fU1lOQ19QVUxTRSB8CisJCQkgIE1JUElfRFNJX01PREVfTFBNOworCisJaW5ub2x1 eCA9IGRldm1fa3phbGxvYygmZHNpLT5kZXYsIHNpemVvZigqaW5ub2x1eCksIEdGUF9LRVJORUwp OworCWlmICghaW5ub2x1eCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltaXBpX2RzaV9zZXRfZHJ2 ZGF0YShkc2ksIGlubm9sdXgpOworCisJaW5ub2x1eC0+bGluayA9IGRzaTsKKworCWVyciA9IGlu bm9sdXhfcGFuZWxfYWRkKGlubm9sdXgpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwor CisJZXJyID0gbWlwaV9kc2lfYXR0YWNoKGRzaSk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGlj IGludCBpbm5vbHV4X3BhbmVsX3JlbW92ZShzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2kpCit7 CisJc3RydWN0IGlubm9sdXhfcGFuZWwgKmlubm9sdXggPSBtaXBpX2RzaV9nZXRfZHJ2ZGF0YShk c2kpOworCWludCBlcnI7CisKKwllcnIgPSBpbm5vbHV4X3BhbmVsX3VucHJlcGFyZSgmaW5ub2x1 eC0+YmFzZSk7CisJaWYgKGVyciA8IDApCisJCURSTV9ERVZfRVJST1IoJmRzaS0+ZGV2LCAiZmFp bGVkIHRvIHVucHJlcGFyZSBwYW5lbDogJWRcbiIsCisJCQkgICAgICBlcnIpOworCisJZXJyID0g aW5ub2x1eF9wYW5lbF9kaXNhYmxlKCZpbm5vbHV4LT5iYXNlKTsKKwlpZiAoZXJyIDwgMCkKKwkJ RFJNX0RFVl9FUlJPUigmZHNpLT5kZXYsICJmYWlsZWQgdG8gZGlzYWJsZSBwYW5lbDogJWRcbiIs IGVycik7CisKKwllcnIgPSBtaXBpX2RzaV9kZXRhY2goZHNpKTsKKwlpZiAoZXJyIDwgMCkKKwkJ RFJNX0RFVl9FUlJPUigmZHNpLT5kZXYsICJmYWlsZWQgdG8gZGV0YWNoIGZyb20gRFNJIGhvc3Q6 ICVkXG4iLAorCQkJICAgICAgZXJyKTsKKworCWRybV9wYW5lbF9kZXRhY2goJmlubm9sdXgtPmJh c2UpOworCWlubm9sdXhfcGFuZWxfZGVsKGlubm9sdXgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyB2b2lkIGlubm9sdXhfcGFuZWxfc2h1dGRvd24oc3RydWN0IG1pcGlfZHNpX2RldmljZSAq ZHNpKQoreworCXN0cnVjdCBpbm5vbHV4X3BhbmVsICppbm5vbHV4ID0gbWlwaV9kc2lfZ2V0X2Ry dmRhdGEoZHNpKTsKKworCWlubm9sdXhfcGFuZWxfdW5wcmVwYXJlKCZpbm5vbHV4LT5iYXNlKTsK Kwlpbm5vbHV4X3BhbmVsX2Rpc2FibGUoJmlubm9sdXgtPmJhc2UpOworfQorCitzdGF0aWMgc3Ry dWN0IG1pcGlfZHNpX2RyaXZlciBpbm5vbHV4X3BhbmVsX2RyaXZlciA9IHsKKwkuZHJpdmVyID0g eworCQkubmFtZSA9ICJwYW5lbC1pbm5vbHV4LXAwNzl6Y2EiLAorCQkub2ZfbWF0Y2hfdGFibGUg PSBpbm5vbHV4X29mX21hdGNoLAorCX0sCisJLnByb2JlID0gaW5ub2x1eF9wYW5lbF9wcm9iZSwK KwkucmVtb3ZlID0gaW5ub2x1eF9wYW5lbF9yZW1vdmUsCisJLnNodXRkb3duID0gaW5ub2x1eF9w YW5lbF9zaHV0ZG93biwKK307Cittb2R1bGVfbWlwaV9kc2lfZHJpdmVyKGlubm9sdXhfcGFuZWxf ZHJpdmVyKTsKKworTU9EVUxFX0FVVEhPUigiQ2hyaXMgWmhvbmcgPHp5d0Byb2NrLWNoaXBzLmNv bT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiSW5ub2x1eCBQMDc5WkNBIHBhbmVsIGRyaXZlciIp OworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwotLSAKMi42LjMKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJp LWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=