From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marco Franchi Subject: [PATCH v2 resend] drm/panel: Add driver for Seiko 43WVF1G panel Date: Thu, 20 Jul 2017 13:12:59 -0300 Message-ID: <1500567179-6967-1-git-send-email-marco.franchi@nxp.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from NAM02-CY1-obe.outbound.protection.outlook.com (mail-cys01nam02on0056.outbound.protection.outlook.com [104.47.37.56]) by gabe.freedesktop.org (Postfix) with ESMTPS id CB2A16E162 for ; Thu, 20 Jul 2017 19:45:10 +0000 (UTC) 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, robh+dt@kernel.org Cc: marcofrk@gmail.com, thierry.reding@gmail.com, Marco Franchi List-Id: dri-devel@lists.freedesktop.org QWRkIGRyaXZlciBmb3IgU2Vpa28gSW5zdHJ1bWVudHMgSW5jLiA0LjMiIFdWR0EgKDgwMCB4IFJH QiB4IDQ4MCkKVEZUIHdpdGggVG91Y2gtUGFuZWwuCgpEYXRhc2hlZXQgYXZhaWxhYmxlIGF0Ogpo dHRwOi8vd3d3LmdseW4uZGUvZGF0YS9nbHluL21lZGlhL2RvYy80M3d2ZjFnLTAucGRmCgpTZWlr byA0M1dWRjFHIHBhbmVsIGhhcyB0d28gcG93ZXIgc3VwcGxpZXM6IGF2ZGQgYW5kIGR2ZGQgYW5k IHRoZXkKcmVxdWlyZSBhIHNwZWNpZmljIHBvd2VyIG9uL2Rvd24gc2VxdWVuY2UuCkZvciB0aGlz IHJlYXNvbiB0aGUgc2ltcGxlIHBhbmVsIGRyaXZlciBjYW5ub3QgYmUgdXNlZCB0byBkcml2ZSB0 aGlzCnBhbmVsLCBzbyBjcmVhdGUgYSBuZXcgb25lIGhlYXZpbHkgYmFzZWQgb24gc2ltcGxlIHBh bmVsLgoKQmFzZWQgb24gaW5pdGlhbCBwYXRjaCBzdWJtaXNzaW9uIGZyb20gQnJlbm8gTGltYS4K ClNpZ25lZC1vZmYtYnk6IE1hcmNvIEZyYW5jaGkgPG1hcmNvLmZyYW5jaGlAbnhwLmNvbT4KLS0t CkNoYW5nZXMgc2luY2UgdjE6Ci1DaGFuZ2Ugc3VwcGx5IG5hbWVzIHRvIGR2ZGQtc3VwcGx5IGFu ZCBhdmRkLXN1cHBseQogLi4uL2JpbmRpbmdzL2Rpc3BsYXkvcGFuZWwvc2Vpa28sNDN3dmYxZy50 eHQgICAgICAgfCAgMjMgKysKIGRyaXZlcnMvZ3B1L2RybS9wYW5lbC9LY29uZmlnICAgICAgICAg ICAgICAgICAgICAgIHwgICA5ICsKIGRyaXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtlZmlsZSAgICAg ICAgICAgICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC1zZWlr by00M3d2ZjFnLmMgICAgICAgIHwgMzcyICsrKysrKysrKysrKysrKysrKysrKwogNCBmaWxlcyBj aGFuZ2VkLCA0MDUgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IERvY3VtZW50YXRp b24vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5L3BhbmVsL3NlaWtvLDQzd3ZmMWcudHh0CiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLXNlaWtvLTQzd3Zm MWcuYwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNw bGF5L3BhbmVsL3NlaWtvLDQzd3ZmMWcudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2Jp bmRpbmdzL2Rpc3BsYXkvcGFuZWwvc2Vpa28sNDN3dmYxZy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uYWFlNTdlZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRp b24vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5L3BhbmVsL3NlaWtvLDQzd3ZmMWcudHh0CkBA IC0wLDAgKzEsMjMgQEAKK1NlaWtvIEluc3RydW1lbnRzIEluYy4gNC4zIiBXVkdBICg4MDAgeCBS R0IgeCA0ODApIFRGVCB3aXRoIFRvdWNoLVBhbmVsCisKK1JlcXVpcmVkIHByb3BlcnRpZXM6Cist IGNvbXBhdGlibGU6IHNob3VsZCBiZSAic2lpLDQzd3ZmMWciLgorLSAiZHZkZC1zdXBwbHkiOiAz djMgZGlnaXRhbCByZWd1bGF0b3IuCistICJhdmRkLXN1cHBseSI6IDV2IGFuYWxvZyByZWd1bGF0 b3IuCisKK09wdGlvbmFsIHByb3BlcnRpZXM6CistIGJhY2tsaWdodDogcGhhbmRsZSBmb3IgdGhl IGJhY2tsaWdodCBjb250cm9sLgorCitFeGFtcGxlOgorCisJcGFuZWwgeworCQljb21wYXRpYmxl ID0gInNpaSw0M3d2ZjFnIjsKKwkJYmFja2xpZ2h0ID0gPCZiYWNrbGlnaHRfZGlzcGxheT47CisJ CWR2ZGQtc3VwcGx5ID0gPCZyZWdfbGNkXzN2Mz47CisJCWF2ZGQtc3VwcGx5ID0gPCZyZWdfbGNk XzV2PjsKKwkJcG9ydCB7CisJCQlwYW5lbF9pbjogZW5kcG9pbnQgeworCQkJCXJlbW90ZS1lbmRw b2ludCA9IDwmZGlzcGxheV9vdXQ+OworCQkJfTsKKwkJfTsKKwl9OwpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZp ZwppbmRleCBkODRhMDMxLi4wOWIwNzE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcGFu ZWwvS2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZpZwpAQCAtODYsNiAr ODYsMTUgQEAgY29uZmlnIERSTV9QQU5FTF9TQU1TVU5HX1M2RThBQTAKIAlzZWxlY3QgRFJNX01J UElfRFNJCiAJc2VsZWN0IFZJREVPTU9ERV9IRUxQRVJTCiAKK2NvbmZpZyBEUk1fUEFORUxfU0VJ S09fNDNXVkYxRworCXRyaXN0YXRlICJTZWlrbyA0M1dWRjFHIHBhbmVsIgorCWRlcGVuZHMgb24g T0YKKwlkZXBlbmRzIG9uIEJBQ0tMSUdIVF9DTEFTU19ERVZJQ0UKKwlzZWxlY3QgVklERU9NT0RF X0hFTFBFUlMKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBzdXBw b3J0IGZvciB0aGUgU2Vpa28KKwkgIDQzV1ZGMUcgY29udHJvbGxlciBmb3IgODAweDQ4MCBMQ0Qg cGFuZWxzCisKIGNvbmZpZyBEUk1fUEFORUxfU0hBUlBfTFExMDFSMVNYMDEKIAl0cmlzdGF0ZSAi U2hhcnAgTFExMDFSMVNYMDEgcGFuZWwiCiAJZGVwZW5kcyBvbiBPRgpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL3BhbmVsL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL01ha2Vm aWxlCmluZGV4IDlmNjYxMGQuLjE4M2M2YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9w YW5lbC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvTWFrZWZpbGUKQEAgLTcs NiArNyw3IEBAIG9iai0kKENPTkZJR19EUk1fUEFORUxfUEFOQVNPTklDX1ZWWDEwRjAzNE4wMCkg Kz0gcGFuZWwtcGFuYXNvbmljLXZ2eDEwZjAzNG4wMC5vCiBvYmotJChDT05GSUdfRFJNX1BBTkVM X1NBTVNVTkdfTEQ5MDQwKSArPSBwYW5lbC1zYW1zdW5nLWxkOTA0MC5vCiBvYmotJChDT05GSUdf RFJNX1BBTkVMX1NBTVNVTkdfUzZFM0hBMikgKz0gcGFuZWwtc2Ftc3VuZy1zNmUzaGEyLm8KIG9i ai0kKENPTkZJR19EUk1fUEFORUxfU0FNU1VOR19TNkU4QUEwKSArPSBwYW5lbC1zYW1zdW5nLXM2 ZThhYTAubworb2JqLSQoQ09ORklHX0RSTV9QQU5FTF9TRUlLT180M1dWRjFHKSArPSBwYW5lbC1z ZWlrby00M3d2ZjFnLm8KIG9iai0kKENPTkZJR19EUk1fUEFORUxfU0hBUlBfTFExMDFSMVNYMDEp ICs9IHBhbmVsLXNoYXJwLWxxMTAxcjFzeDAxLm8KIG9iai0kKENPTkZJR19EUk1fUEFORUxfU0hB UlBfTFMwNDNUMUxFMDEpICs9IHBhbmVsLXNoYXJwLWxzMDQzdDFsZTAxLm8KIG9iai0kKENPTkZJ R19EUk1fUEFORUxfU0lUUk9OSVhfU1Q3Nzg5VikgKz0gcGFuZWwtc2l0cm9uaXgtc3Q3Nzg5di5v CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwtc2Vpa28tNDN3dmYxZy5j IGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLXNlaWtvLTQzd3ZmMWcuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWMwOWVkCi0tLSAvZGV2L251bGwKKysrIGIvZHJp dmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLXNlaWtvLTQzd3ZmMWcuYwpAQCAtMCwwICsxLDM3MiBA QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBOWFAgU2VtaWNvbmR1Y3RvcnMuCisgKiBBdXRo b3I6IE1hcmNvIEZyYW5jaGkgPG1hcmNvLmZyYW5jaGlAbnhwLmNvbT4KKyAqCisgKiBCYXNlZCBv biBQYW5lbCBTaW1wbGUgZHJpdmVyIGJ5IFRoaWVycnkgUmVkaW5nIDx0cmVkaW5nQG52aWRpYS5j b20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgorICogMiBhcyBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvYmFja2xp Z2h0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4K KyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KKworI2luY2x1ZGUgPGRybS9k cm1QLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9jcnRjLmg+CisjaW5jbHVkZSA8ZHJtL2RybV9wYW5l bC5oPgorCisjaW5jbHVkZSA8dmlkZW8vZGlzcGxheV90aW1pbmcuaD4KKyNpbmNsdWRlIDx2aWRl by92aWRlb21vZGUuaD4KKworc3RydWN0IHNlaWtvX3BhbmVsX2Rlc2MgeworCWNvbnN0IHN0cnVj dCBkcm1fZGlzcGxheV9tb2RlICptb2RlczsKKwl1bnNpZ25lZCBpbnQgbnVtX21vZGVzOworCWNv bnN0IHN0cnVjdCBkaXNwbGF5X3RpbWluZyAqdGltaW5nczsKKwl1bnNpZ25lZCBpbnQgbnVtX3Rp bWluZ3M7CisKKwl1bnNpZ25lZCBpbnQgYnBjOworCisJLyoqCisJICogQHdpZHRoOiB3aWR0aCAo aW4gbWlsbGltZXRlcnMpIG9mIHRoZSBwYW5lbCdzIGFjdGl2ZSBkaXNwbGF5IGFyZWEKKwkgKiBA aGVpZ2h0OiBoZWlnaHQgKGluIG1pbGxpbWV0ZXJzKSBvZiB0aGUgcGFuZWwncyBhY3RpdmUgZGlz cGxheSBhcmVhCisJICovCisJc3RydWN0IHsKKwkJdW5zaWduZWQgaW50IHdpZHRoOworCQl1bnNp Z25lZCBpbnQgaGVpZ2h0OworCX0gc2l6ZTsKKworCXUzMiBidXNfZm9ybWF0OworCXUzMiBidXNf ZmxhZ3M7Cit9OworCitzdHJ1Y3Qgc2Vpa29fcGFuZWwgeworCXN0cnVjdCBkcm1fcGFuZWwgYmFz ZTsKKwlib29sIHByZXBhcmVkOworCWJvb2wgZW5hYmxlZDsKKwljb25zdCBzdHJ1Y3Qgc2Vpa29f cGFuZWxfZGVzYyAqZGVzYzsKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmFja2xpZ2h0Owor CXN0cnVjdCByZWd1bGF0b3IgKmR2ZGQ7CisJc3RydWN0IHJlZ3VsYXRvciAqYXZkZDsKK307CisK K3N0YXRpYyBpbmxpbmUgc3RydWN0IHNlaWtvX3BhbmVsICp0b19zZWlrb19wYW5lbChzdHJ1Y3Qg ZHJtX3BhbmVsICpwYW5lbCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHBhbmVsLCBzdHJ1Y3Qg c2Vpa29fcGFuZWwsIGJhc2UpOworfQorCitzdGF0aWMgaW50IHNlaWtvX3BhbmVsX2dldF9maXhl ZF9tb2RlcyhzdHJ1Y3Qgc2Vpa29fcGFuZWwgKnBhbmVsKQoreworCXN0cnVjdCBkcm1fY29ubmVj dG9yICpjb25uZWN0b3IgPSBwYW5lbC0+YmFzZS5jb25uZWN0b3I7CisJc3RydWN0IGRybV9kZXZp Y2UgKmRybSA9IHBhbmVsLT5iYXNlLmRybTsKKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9k ZTsKKwl1bnNpZ25lZCBpbnQgaSwgbnVtID0gMDsKKworCWlmICghcGFuZWwtPmRlc2MpCisJCXJl dHVybiAwOworCisJZm9yIChpID0gMDsgaSA8IHBhbmVsLT5kZXNjLT5udW1fdGltaW5nczsgaSsr KSB7CisJCWNvbnN0IHN0cnVjdCBkaXNwbGF5X3RpbWluZyAqZHQgPSAmcGFuZWwtPmRlc2MtPnRp bWluZ3NbaV07CisJCXN0cnVjdCB2aWRlb21vZGUgdm07CisKKwkJdmlkZW9tb2RlX2Zyb21fdGlt aW5nKGR0LCAmdm0pOworCQltb2RlID0gZHJtX21vZGVfY3JlYXRlKGRybSk7CisJCWlmICghbW9k ZSkgeworCQkJZGV2X2Vycihkcm0tPmRldiwgImZhaWxlZCB0byBhZGQgbW9kZSAldXgldVxuIiwK KwkJCQlkdC0+aGFjdGl2ZS50eXAsIGR0LT52YWN0aXZlLnR5cCk7CisJCQljb250aW51ZTsKKwkJ fQorCisJCWRybV9kaXNwbGF5X21vZGVfZnJvbV92aWRlb21vZGUoJnZtLCBtb2RlKTsKKworCQlt b2RlLT50eXBlIHw9IERSTV9NT0RFX1RZUEVfRFJJVkVSOworCisJCWlmIChwYW5lbC0+ZGVzYy0+ bnVtX3RpbWluZ3MgPT0gMSkKKwkJCW1vZGUtPnR5cGUgfD0gRFJNX01PREVfVFlQRV9QUkVGRVJS RUQ7CisKKwkJZHJtX21vZGVfcHJvYmVkX2FkZChjb25uZWN0b3IsIG1vZGUpOworCQludW0rKzsK Kwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgcGFuZWwtPmRlc2MtPm51bV9tb2RlczsgaSsrKSB7CisJ CWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptID0gJnBhbmVsLT5kZXNjLT5tb2Rlc1tp XTsKKworCQltb2RlID0gZHJtX21vZGVfZHVwbGljYXRlKGRybSwgbSk7CisJCWlmICghbW9kZSkg eworCQkJZGV2X2Vycihkcm0tPmRldiwgImZhaWxlZCB0byBhZGQgbW9kZSAldXgldUAldVxuIiwK KwkJCQltLT5oZGlzcGxheSwgbS0+dmRpc3BsYXksIG0tPnZyZWZyZXNoKTsKKwkJCWNvbnRpbnVl OworCQl9CisKKwkJbW9kZS0+dHlwZSB8PSBEUk1fTU9ERV9UWVBFX0RSSVZFUjsKKworCQlpZiAo cGFuZWwtPmRlc2MtPm51bV9tb2RlcyA9PSAxKQorCQkJbW9kZS0+dHlwZSB8PSBEUk1fTU9ERV9U WVBFX1BSRUZFUlJFRDsKKworCQlkcm1fbW9kZV9zZXRfbmFtZShtb2RlKTsKKworCQlkcm1fbW9k ZV9wcm9iZWRfYWRkKGNvbm5lY3RvciwgbW9kZSk7CisJCW51bSsrOworCX0KKworCWNvbm5lY3Rv ci0+ZGlzcGxheV9pbmZvLmJwYyA9IHBhbmVsLT5kZXNjLT5icGM7CisJY29ubmVjdG9yLT5kaXNw bGF5X2luZm8ud2lkdGhfbW0gPSBwYW5lbC0+ZGVzYy0+c2l6ZS53aWR0aDsKKwljb25uZWN0b3It PmRpc3BsYXlfaW5mby5oZWlnaHRfbW0gPSBwYW5lbC0+ZGVzYy0+c2l6ZS5oZWlnaHQ7CisJaWYg KHBhbmVsLT5kZXNjLT5idXNfZm9ybWF0KQorCQlkcm1fZGlzcGxheV9pbmZvX3NldF9idXNfZm9y bWF0cygmY29ubmVjdG9yLT5kaXNwbGF5X2luZm8sCisJCQkJCQkgJnBhbmVsLT5kZXNjLT5idXNf Zm9ybWF0LCAxKTsKKwljb25uZWN0b3ItPmRpc3BsYXlfaW5mby5idXNfZmxhZ3MgPSBwYW5lbC0+ ZGVzYy0+YnVzX2ZsYWdzOworCisJcmV0dXJuIG51bTsKK30KKworc3RhdGljIGludCBzZWlrb19w YW5lbF9kaXNhYmxlKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQoreworCXN0cnVjdCBzZWlrb19w YW5lbCAqcCA9IHRvX3NlaWtvX3BhbmVsKHBhbmVsKTsKKworCWlmICghcC0+ZW5hYmxlZCkKKwkJ cmV0dXJuIDA7CisKKwlpZiAocC0+YmFja2xpZ2h0KSB7CisJCXAtPmJhY2tsaWdodC0+cHJvcHMu cG93ZXIgPSBGQl9CTEFOS19QT1dFUkRPV047CisJCXAtPmJhY2tsaWdodC0+cHJvcHMuc3RhdGUg fD0gQkxfQ09SRV9GQkJMQU5LOworCQliYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhwLT5iYWNrbGln aHQpOworCX0KKworCXAtPmVuYWJsZWQgPSBmYWxzZTsKKworCXJldHVybiAwOworfQorCitzdGF0 aWMgaW50IHNlaWtvX3BhbmVsX3VucHJlcGFyZShzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkKK3sK KwlzdHJ1Y3Qgc2Vpa29fcGFuZWwgKnAgPSB0b19zZWlrb19wYW5lbChwYW5lbCk7CisKKwlpZiAo IXAtPnByZXBhcmVkKQorCQlyZXR1cm4gMDsKKworCXJlZ3VsYXRvcl9kaXNhYmxlKHAtPmF2ZGQp OworCisJLyogQWRkIGEgMTAwbXMgZGVsYXkgYXMgcGVyIHRoZSBwYW5lbCBkYXRhc2hlZXQgKi8K Kwltc2xlZXAoMTAwKTsKKworCXJlZ3VsYXRvcl9kaXNhYmxlKHAtPmR2ZGQpOworCisJcC0+cHJl cGFyZWQgPSBmYWxzZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNlaWtvX3BhbmVs X3ByZXBhcmUoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCit7CisJc3RydWN0IHNlaWtvX3BhbmVs ICpwID0gdG9fc2Vpa29fcGFuZWwocGFuZWwpOworCWludCBlcnI7CisKKwlpZiAocC0+cHJlcGFy ZWQpCisJCXJldHVybiAwOworCisJZXJyID0gcmVndWxhdG9yX2VuYWJsZShwLT5kdmRkKTsKKwlp ZiAoZXJyIDwgMCkgeworCQlkZXZfZXJyKHBhbmVsLT5kZXYsICJmYWlsZWQgdG8gZW5hYmxlIGR2 ZGQ6ICVkXG4iLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIEFkZCBhIDEwMG1zIGRl bGF5IGFzIHBlciB0aGUgcGFuZWwgZGF0YXNoZWV0ICovCisJbXNsZWVwKDEwMCk7CisKKwllcnIg PSByZWd1bGF0b3JfZW5hYmxlKHAtPmF2ZGQpOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIo cGFuZWwtPmRldiwgImZhaWxlZCB0byBlbmFibGUgYXZkZDogJWRcbiIsIGVycik7CisJCWdvdG8g ZGlzYWJsZV9kdmRkOworCX0KKworCXAtPnByZXBhcmVkID0gdHJ1ZTsKKworCXJldHVybiAwOwor CitkaXNhYmxlX2R2ZGQ6CisJcmVndWxhdG9yX2Rpc2FibGUocC0+ZHZkZCk7CisJcmV0dXJuIGVy cjsKK30KKworc3RhdGljIGludCBzZWlrb19wYW5lbF9lbmFibGUoc3RydWN0IGRybV9wYW5lbCAq cGFuZWwpCit7CisJc3RydWN0IHNlaWtvX3BhbmVsICpwID0gdG9fc2Vpa29fcGFuZWwocGFuZWwp OworCisJaWYgKHAtPmVuYWJsZWQpCisJCXJldHVybiAwOworCisJaWYgKHAtPmJhY2tsaWdodCkg eworCQlwLT5iYWNrbGlnaHQtPnByb3BzLnN0YXRlICY9IH5CTF9DT1JFX0ZCQkxBTks7CisJCXAt PmJhY2tsaWdodC0+cHJvcHMucG93ZXIgPSBGQl9CTEFOS19VTkJMQU5LOworCQliYWNrbGlnaHRf dXBkYXRlX3N0YXR1cyhwLT5iYWNrbGlnaHQpOworCX0KKworCXAtPmVuYWJsZWQgPSB0cnVlOwor CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Vpa29fcGFuZWxfZ2V0X21vZGVzKHN0cnVj dCBkcm1fcGFuZWwgKnBhbmVsKQoreworCXN0cnVjdCBzZWlrb19wYW5lbCAqcCA9IHRvX3NlaWtv X3BhbmVsKHBhbmVsKTsKKworCS8qIGFkZCBoYXJkLWNvZGVkIHBhbmVsIG1vZGVzICovCisJcmV0 dXJuIHNlaWtvX3BhbmVsX2dldF9maXhlZF9tb2RlcyhwKTsKK30KKworc3RhdGljIGludCBzZWlr b19wYW5lbF9nZXRfdGltaW5ncyhzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCwKKwkJCQkgICAgdW5z aWduZWQgaW50IG51bV90aW1pbmdzLAorCQkJCSAgICBzdHJ1Y3QgZGlzcGxheV90aW1pbmcgKnRp bWluZ3MpCit7CisJc3RydWN0IHNlaWtvX3BhbmVsICpwID0gdG9fc2Vpa29fcGFuZWwocGFuZWwp OworCXVuc2lnbmVkIGludCBpOworCisJaWYgKHAtPmRlc2MtPm51bV90aW1pbmdzIDwgbnVtX3Rp bWluZ3MpCisJCW51bV90aW1pbmdzID0gcC0+ZGVzYy0+bnVtX3RpbWluZ3M7CisKKwlpZiAodGlt aW5ncykKKwkJZm9yIChpID0gMDsgaSA8IG51bV90aW1pbmdzOyBpKyspCisJCQl0aW1pbmdzW2ld ID0gcC0+ZGVzYy0+dGltaW5nc1tpXTsKKworCXJldHVybiBwLT5kZXNjLT5udW1fdGltaW5nczsK K30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fcGFuZWxfZnVuY3Mgc2Vpa29fcGFuZWxfZnVu Y3MgPSB7CisJLmRpc2FibGUgPSBzZWlrb19wYW5lbF9kaXNhYmxlLAorCS51bnByZXBhcmUgPSBz ZWlrb19wYW5lbF91bnByZXBhcmUsCisJLnByZXBhcmUgPSBzZWlrb19wYW5lbF9wcmVwYXJlLAor CS5lbmFibGUgPSBzZWlrb19wYW5lbF9lbmFibGUsCisJLmdldF9tb2RlcyA9IHNlaWtvX3BhbmVs X2dldF9tb2RlcywKKwkuZ2V0X3RpbWluZ3MgPSBzZWlrb19wYW5lbF9nZXRfdGltaW5ncywKK307 CisKK3N0YXRpYyBpbnQgc2Vpa29fcGFuZWxfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJ CQljb25zdCBzdHJ1Y3Qgc2Vpa29fcGFuZWxfZGVzYyAqZGVzYykKK3sKKwlzdHJ1Y3QgZGV2aWNl X25vZGUgKmJhY2tsaWdodDsKKwlzdHJ1Y3Qgc2Vpa29fcGFuZWwgKnBhbmVsOworCWludCBlcnI7 CisKKwlwYW5lbCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcGFuZWwpLCBHRlBfS0VSTkVM KTsKKwlpZiAoIXBhbmVsKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBhbmVsLT5lbmFibGVkID0g ZmFsc2U7CisJcGFuZWwtPnByZXBhcmVkID0gZmFsc2U7CisJcGFuZWwtPmRlc2MgPSBkZXNjOwor CisJcGFuZWwtPmR2ZGQgPSBkZXZtX3JlZ3VsYXRvcl9nZXQoZGV2LCAiZHZkZCIpOworCWlmIChJ U19FUlIocGFuZWwtPmR2ZGQpKQorCQlyZXR1cm4gUFRSX0VSUihwYW5lbC0+ZHZkZCk7CisKKwlw YW5lbC0+YXZkZCA9IGRldm1fcmVndWxhdG9yX2dldChkZXYsICJhdmRkIik7CisJaWYgKElTX0VS UihwYW5lbC0+YXZkZCkpCisJCXJldHVybiBQVFJfRVJSKHBhbmVsLT5hdmRkKTsKKworCWJhY2ts aWdodCA9IG9mX3BhcnNlX3BoYW5kbGUoZGV2LT5vZl9ub2RlLCAiYmFja2xpZ2h0IiwgMCk7CisJ aWYgKGJhY2tsaWdodCkgeworCQlwYW5lbC0+YmFja2xpZ2h0ID0gb2ZfZmluZF9iYWNrbGlnaHRf Ynlfbm9kZShiYWNrbGlnaHQpOworCQlvZl9ub2RlX3B1dChiYWNrbGlnaHQpOworCisJCWlmICgh cGFuZWwtPmJhY2tsaWdodCkKKwkJCXJldHVybiAtRVBST0JFX0RFRkVSOworCX0KKworCWRybV9w YW5lbF9pbml0KCZwYW5lbC0+YmFzZSk7CisJcGFuZWwtPmJhc2UuZGV2ID0gZGV2OworCXBhbmVs LT5iYXNlLmZ1bmNzID0gJnNlaWtvX3BhbmVsX2Z1bmNzOworCisJZXJyID0gZHJtX3BhbmVsX2Fk ZCgmcGFuZWwtPmJhc2UpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJZGV2X3Nl dF9kcnZkYXRhKGRldiwgcGFuZWwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Vp a29fcGFuZWxfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0 IHNlaWtvX3BhbmVsICpwYW5lbCA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKKworCWRy bV9wYW5lbF9kZXRhY2goJnBhbmVsLT5iYXNlKTsKKwlkcm1fcGFuZWxfcmVtb3ZlKCZwYW5lbC0+ YmFzZSk7CisKKwlzZWlrb19wYW5lbF9kaXNhYmxlKCZwYW5lbC0+YmFzZSk7CisKKwlpZiAocGFu ZWwtPmJhY2tsaWdodCkKKwkJcHV0X2RldmljZSgmcGFuZWwtPmJhY2tsaWdodC0+ZGV2KTsKKwor CXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzZWlrb19wYW5lbF9zaHV0ZG93bihzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzZWlrb19wYW5lbCAqcGFuZWwgPSBk ZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisKKwlzZWlrb19wYW5lbF9kaXNhYmxlKCZwYW5l bC0+YmFzZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGlzcGxheV90aW1pbmcgc2Vpa29f NDN3dmYxZ190aW1pbmcgPSB7CisJLnBpeGVsY2xvY2sgPSB7IDMzNTAwMDAwLCAzMzUwMDAwMCwg MzM1MDAwMDAgfSwKKwkuaGFjdGl2ZSA9IHsgODAwLCA4MDAsIDgwMCB9LAorCS5oZnJvbnRfcG9y Y2ggPSB7ICAxNjQsIDE2NCwgMTY0IH0sCisJLmhiYWNrX3BvcmNoID0geyA4OSwgODksIDg5IH0s CisJLmhzeW5jX2xlbiA9IHsgMTAsIDEwLCAxMCB9LAorCS52YWN0aXZlID0geyA0ODAsIDQ4MCwg NDgwIH0sCisJLnZmcm9udF9wb3JjaCA9IHsgMTAsIDEwLCAxMCB9LAorCS52YmFja19wb3JjaCA9 IHsgMjMsIDIzLCAyMyB9LAorCS52c3luY19sZW4gPSB7IDEwLCAxMCwgMTAgfSwKKwkuZmxhZ3Mg PSBESVNQTEFZX0ZMQUdTX0RFX0xPVywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2Vpa29f cGFuZWxfZGVzYyBzZWlrb180M3d2ZjFnID0geworCS50aW1pbmdzID0gJnNlaWtvXzQzd3ZmMWdf dGltaW5nLAorCS5udW1fdGltaW5ncyA9IDEsCisJLmJwYyA9IDgsCisJLnNpemUgPSB7CisJCS53 aWR0aCA9IDkzLAorCQkuaGVpZ2h0ID0gNTcsCisJfSwKKwkuYnVzX2Zvcm1hdCA9IE1FRElBX0JV U19GTVRfUkdCODg4XzFYMjQsCisJLmJ1c19mbGFncyA9IERSTV9CVVNfRkxBR19ERV9ISUdIIHwg RFJNX0JVU19GTEFHX1BJWERBVEFfTkVHRURHRSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg b2ZfZGV2aWNlX2lkIHBsYXRmb3JtX29mX21hdGNoW10gPSB7CisJeworCQkuY29tcGF0aWJsZSA9 ICJzaWksNDN3dmYxZyIsCisJCS5kYXRhID0gJnNlaWtvXzQzd3ZmMWcsCisJfSwgeworCQkvKiBz ZW50aW5lbCAqLworCX0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBwbGF0Zm9ybV9vZl9t YXRjaCk7CisKK3N0YXRpYyBpbnQgc2Vpa29fcGFuZWxfcGxhdGZvcm1fcHJvYmUoc3RydWN0IHBs YXRmb3JtX2RldmljZSAqcGRldikKK3sKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICppZDsK KworCWlkID0gb2ZfbWF0Y2hfbm9kZShwbGF0Zm9ybV9vZl9tYXRjaCwgcGRldi0+ZGV2Lm9mX25v ZGUpOworCWlmICghaWQpCisJCXJldHVybiAtRU5PREVWOworCisJcmV0dXJuIHNlaWtvX3BhbmVs X3Byb2JlKCZwZGV2LT5kZXYsIGlkLT5kYXRhKTsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9y bV9kcml2ZXIgc2Vpa29fcGFuZWxfcGxhdGZvcm1fZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJ CS5uYW1lID0gInNlaWtvX3BhbmVsIiwKKwkJLm9mX21hdGNoX3RhYmxlID0gcGxhdGZvcm1fb2Zf bWF0Y2gsCisJfSwKKwkucHJvYmUgPSBzZWlrb19wYW5lbF9wbGF0Zm9ybV9wcm9iZSwKKwkucmVt b3ZlID0gc2Vpa29fcGFuZWxfcmVtb3ZlLAorCS5zaHV0ZG93biA9IHNlaWtvX3BhbmVsX3NodXRk b3duLAorfTsKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoc2Vpa29fcGFuZWxfcGxhdGZvcm1fZHJp dmVyKTsKKworTU9EVUxFX0FVVEhPUigiTWFyY28gRnJhbmNoaSA8bWFyY28uZnJhbmNoaUBueHAu Y29tIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlNlaWtvIDQzV1ZGMUcgcGFuZWwgZHJpdmVyIik7 CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7Ci0tIAoyLjcuNAoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmkt ZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3Jn L21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==