From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marco Franchi Subject: [PATCH] drm/panel: Add driver for Seiko 43WVF1G panel Date: Tue, 25 Apr 2017 13:18:35 -0300 Message-ID: <1493137115-10757-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 NAM01-BN3-obe.outbound.protection.outlook.com (mail-bn3nam01on0068.outbound.protection.outlook.com [104.47.33.68]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1FCF06E2F0 for ; Tue, 25 Apr 2017 17:51:02 +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 Cc: robh+dt@kernel.org, Marco Franchi List-Id: dri-devel@lists.freedesktop.org QWRkIGRyaXZlciBmb3IgU2Vpa28gSW5zdHJ1bWVudHMgSW5jLiA0LjMiIFdWR0EgKDgwMCB4IFJH QiB4IDQ4MCkKVEZUIHdpdGggVG91Y2gtUGFuZWwuCgpEYXRhc2hlZXQgYXZhaWxhYmxlIGF0Ogpo dHRwOi8vd3d3LmdseW4uZGUvZGF0YS9nbHluL21lZGlhL2RvYy80M3d2ZjFnLTAucGRmCgpTZWlr byA0M1dWRjFHIHBhbmVsIGhhcyB0d28gcG93ZXIgc3VwcGxpZXM6IEFWREQgYW5kIERWREQgYW5k IHRoZXkKcmVxdWlyZSBhIHNwZWNpZmljIHBvd2VyIG9uL2Rvd24gc2VxdWVuY2UuCkZvciB0aGlz IHJlYXNvbiB0aGUgc2ltcGxlIHBhbmVsIGRyaXZlciBjYW5ub3QgYmUgdXNlZCB0byBkcml2ZSB0 aGlzCnBhbmVsLCBzbyBjcmVhdGUgYSBuZXcgb25lIGhlYXZpbHkgYmFzZWQgb24gc2ltcGxlIHBh bmVsLgoKQmFzZWQgb24gaW5pdGlhbCBwYXRjaCBzdWJtaXNzaW9uIGZyb20gQnJlbm8gTGltYS4K ClNpZ25lZC1vZmYtYnk6IE1hcmNvIEZyYW5jaGkgPG1hcmNvLmZyYW5jaGlAbnhwLmNvbT4KLS0t CiAuLi4vYmluZGluZ3MvZGlzcGxheS9wYW5lbC9zZWlrbyw0M3d2ZjFnLnR4dCAgICAgICB8ICAy MyArKwogZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcgICAgICAgICAgICAgICAgICAgICAg fCAgIDkgKwogZHJpdmVycy9ncHUvZHJtL3BhbmVsL01ha2VmaWxlICAgICAgICAgICAgICAgICAg ICAgfCAgIDEgKwogZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLXNlaWtvLTQzd3ZmMWcuYyAg ICAgICAgfCAzNzIgKysrKysrKysrKysrKysrKysrKysrCiA0IGZpbGVzIGNoYW5nZWQsIDQwNSBp bnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVl L2JpbmRpbmdzL2Rpc3BsYXkvcGFuZWwvc2Vpa28sNDN3dmYxZy50eHQKIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwtc2Vpa28tNDN3dmYxZy5jCgpkaWZmIC0t Z2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Rpc3BsYXkvcGFuZWwvc2Vp a28sNDN3dmYxZy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZGlzcGxh eS9wYW5lbC9zZWlrbyw0M3d2ZjFnLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi5jZDFlZWRhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVl L2JpbmRpbmdzL2Rpc3BsYXkvcGFuZWwvc2Vpa28sNDN3dmYxZy50eHQKQEAgLTAsMCArMSwyMyBA QAorU2Vpa28gSW5zdHJ1bWVudHMgSW5jLiA0LjMiIFdWR0EgKDgwMCB4IFJHQiB4IDQ4MCkgVEZU IHdpdGggVG91Y2gtUGFuZWwKKworUmVxdWlyZWQgcHJvcGVydGllczoKKy0gY29tcGF0aWJsZTog c2hvdWxkIGJlICJzaWksNDN3dmYxZyIuCistICJEVkRELXN1cHBseSI6IDN2MyBkaWdpdGFsIHJl Z3VsYXRvci4KKy0gIkFWREQtc3VwcGx5IjogNXYgYW5hbG9nIHJlZ3VsYXRvci4KKworT3B0aW9u YWwgcHJvcGVydGllczoKKy0gYmFja2xpZ2h0OiBwaGFuZGxlIGZvciB0aGUgYmFja2xpZ2h0IGNv bnRyb2wuCisKK0V4YW1wbGU6CisKKwlwYW5lbCB7CisJCWNvbXBhdGlibGUgPSAic2lpLDQzd3Zm MWciOworCQliYWNrbGlnaHQgPSA8JmJhY2tsaWdodF9kaXNwbGF5PjsKKwkJRFZERC1zdXBwbHkg PSA8JnJlZ19sY2RfM3YzPjsKKwkJQVZERC1zdXBwbHkgPSA8JnJlZ19sY2RfNXY+OworCQlwb3J0 IHsKKwkJCXBhbmVsX2luOiBlbmRwb2ludCB7CisJCQkJcmVtb3RlLWVuZHBvaW50ID0gPCZkaXNw bGF5X291dD47CisJCQl9OworCQl9OworCX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v cGFuZWwvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9LY29uZmlnCmluZGV4IDNlMjlh OTkuLjJmNTAzMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9LY29uZmlnCisr KyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9LY29uZmlnCkBAIC03NCw2ICs3NCwxNSBAQCBjb25m aWcgRFJNX1BBTkVMX1NBTVNVTkdfUzZFOEFBMAogCXNlbGVjdCBEUk1fTUlQSV9EU0kKIAlzZWxl Y3QgVklERU9NT0RFX0hFTFBFUlMKIAorY29uZmlnIERSTV9QQU5FTF9TRUlLT180M1dWRjFHCisJ dHJpc3RhdGUgIlNlaWtvIDQzV1ZGMUcgcGFuZWwiCisJZGVwZW5kcyBvbiBPRgorCWRlcGVuZHMg b24gQkFDS0xJR0hUX0NMQVNTX0RFVklDRQorCXNlbGVjdCBWSURFT01PREVfSEVMUEVSUworCWhl bHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBT ZWlrbworCSAgNDNXVkYxRyBjb250cm9sbGVyIGZvciA4MDB4NDgwIExDRCBwYW5lbHMKKwogY29u ZmlnIERSTV9QQU5FTF9TSEFSUF9MUTEwMVIxU1gwMQogCXRyaXN0YXRlICJTaGFycCBMUTEwMVIx U1gwMSBwYW5lbCIKIAlkZXBlbmRzIG9uIE9GCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v cGFuZWwvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvTWFrZWZpbGUKaW5kZXggMjky YjNjNy4uYTkzZDA0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL01ha2VmaWxl CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9NYWtlZmlsZQpAQCAtNiw2ICs2LDcgQEAgb2Jq LSQoQ09ORklHX0RSTV9QQU5FTF9QQU5BU09OSUNfVlZYMTBGMDM0TjAwKSArPSBwYW5lbC1wYW5h c29uaWMtdnZ4MTBmMDM0bjAwLm8KIG9iai0kKENPTkZJR19EUk1fUEFORUxfU0FNU1VOR19MRDkw NDApICs9IHBhbmVsLXNhbXN1bmctbGQ5MDQwLm8KIG9iai0kKENPTkZJR19EUk1fUEFORUxfU0FN U1VOR19TNkUzSEEyKSArPSBwYW5lbC1zYW1zdW5nLXM2ZTNoYTIubwogb2JqLSQoQ09ORklHX0RS TV9QQU5FTF9TQU1TVU5HX1M2RThBQTApICs9IHBhbmVsLXNhbXN1bmctczZlOGFhMC5vCitvYmot JChDT05GSUdfRFJNX1BBTkVMX1NFSUtPXzQzV1ZGMUcpICs9IHBhbmVsLXNlaWtvLTQzd3ZmMWcu bwogb2JqLSQoQ09ORklHX0RSTV9QQU5FTF9TSEFSUF9MUTEwMVIxU1gwMSkgKz0gcGFuZWwtc2hh cnAtbHExMDFyMXN4MDEubwogb2JqLSQoQ09ORklHX0RSTV9QQU5FTF9TSEFSUF9MUzA0M1QxTEUw MSkgKz0gcGFuZWwtc2hhcnAtbHMwNDN0MWxlMDEubwogb2JqLSQoQ09ORklHX0RSTV9QQU5FTF9T SVRST05JWF9TVDc3ODlWKSArPSBwYW5lbC1zaXRyb25peC1zdDc3ODl2Lm8KZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9wYW5lbC1zZWlrby00M3d2ZjFnLmMgYi9kcml2ZXJzL2dw dS9kcm0vcGFuZWwvcGFuZWwtc2Vpa28tNDN3dmYxZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLjJlNThhYmUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0v cGFuZWwvcGFuZWwtc2Vpa28tNDN3dmYxZy5jCkBAIC0wLDAgKzEsMzcyIEBACisvKgorICogQ29w eXJpZ2h0IChDKSAyMDE3IE5YUCBTZW1pY29uZHVjdG9ycy4KKyAqIEF1dGhvcjogTWFyY28gRnJh bmNoaSA8bWFyY28uZnJhbmNoaUBueHAuY29tPgorICoKKyAqIEJhc2VkIG9uIFBhbmVsIFNpbXBs ZSBkcml2ZXIgYnkgVGhpZXJyeSBSZWRpbmcgPHRyZWRpbmdAbnZpZGlhLmNvbT4KKyAqCisgKiBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSB2ZXJzaW9uCisgKiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9iYWNrbGlnaHQuaD4KKyNpbmNs dWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxp bnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgorCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNs dWRlIDxkcm0vZHJtX2NydGMuaD4KKyNpbmNsdWRlIDxkcm0vZHJtX3BhbmVsLmg+CisKKyNpbmNs dWRlIDx2aWRlby9kaXNwbGF5X3RpbWluZy5oPgorI2luY2x1ZGUgPHZpZGVvL3ZpZGVvbW9kZS5o PgorCitzdHJ1Y3Qgc2Vpa29fcGFuZWxfZGVzYyB7CisJY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5 X21vZGUgKm1vZGVzOworCXVuc2lnbmVkIGludCBudW1fbW9kZXM7CisJY29uc3Qgc3RydWN0IGRp c3BsYXlfdGltaW5nICp0aW1pbmdzOworCXVuc2lnbmVkIGludCBudW1fdGltaW5nczsKKworCXVu c2lnbmVkIGludCBicGM7CisKKwkvKioKKwkgKiBAd2lkdGg6IHdpZHRoIChpbiBtaWxsaW1ldGVy cykgb2YgdGhlIHBhbmVsJ3MgYWN0aXZlIGRpc3BsYXkgYXJlYQorCSAqIEBoZWlnaHQ6IGhlaWdo dCAoaW4gbWlsbGltZXRlcnMpIG9mIHRoZSBwYW5lbCdzIGFjdGl2ZSBkaXNwbGF5IGFyZWEKKwkg Ki8KKwlzdHJ1Y3QgeworCQl1bnNpZ25lZCBpbnQgd2lkdGg7CisJCXVuc2lnbmVkIGludCBoZWln aHQ7CisJfSBzaXplOworCisJdTMyIGJ1c19mb3JtYXQ7CisJdTMyIGJ1c19mbGFnczsKK307CisK K3N0cnVjdCBzZWlrb19wYW5lbCB7CisJc3RydWN0IGRybV9wYW5lbCBiYXNlOworCWJvb2wgcHJl cGFyZWQ7CisJYm9vbCBlbmFibGVkOworCWNvbnN0IHN0cnVjdCBzZWlrb19wYW5lbF9kZXNjICpk ZXNjOworCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiYWNrbGlnaHQ7CisJc3RydWN0IHJlZ3Vs YXRvciAqRFZERDsKKwlzdHJ1Y3QgcmVndWxhdG9yICpBVkREOworfTsKKworc3RhdGljIGlubGlu ZSBzdHJ1Y3Qgc2Vpa29fcGFuZWwgKnRvX3NlaWtvX3BhbmVsKHN0cnVjdCBkcm1fcGFuZWwgKnBh bmVsKQoreworCXJldHVybiBjb250YWluZXJfb2YocGFuZWwsIHN0cnVjdCBzZWlrb19wYW5lbCwg YmFzZSk7Cit9CisKK3N0YXRpYyBpbnQgc2Vpa29fcGFuZWxfZ2V0X2ZpeGVkX21vZGVzKHN0cnVj dCBzZWlrb19wYW5lbCAqcGFuZWwpCit7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rv ciA9IHBhbmVsLT5iYXNlLmNvbm5lY3RvcjsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtID0gcGFu ZWwtPmJhc2UuZHJtOworCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlOworCXVuc2lnbmVk IGludCBpLCBudW0gPSAwOworCisJaWYgKCFwYW5lbC0+ZGVzYykKKwkJcmV0dXJuIDA7CisKKwlm b3IgKGkgPSAwOyBpIDwgcGFuZWwtPmRlc2MtPm51bV90aW1pbmdzOyBpKyspIHsKKwkJY29uc3Qg c3RydWN0IGRpc3BsYXlfdGltaW5nICpkdCA9ICZwYW5lbC0+ZGVzYy0+dGltaW5nc1tpXTsKKwkJ c3RydWN0IHZpZGVvbW9kZSB2bTsKKworCQl2aWRlb21vZGVfZnJvbV90aW1pbmcoZHQsICZ2bSk7 CisJCW1vZGUgPSBkcm1fbW9kZV9jcmVhdGUoZHJtKTsKKwkJaWYgKCFtb2RlKSB7CisJCQlkZXZf ZXJyKGRybS0+ZGV2LCAiZmFpbGVkIHRvIGFkZCBtb2RlICV1eCV1XG4iLAorCQkJCWR0LT5oYWN0 aXZlLnR5cCwgZHQtPnZhY3RpdmUudHlwKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJZHJtX2Rp c3BsYXlfbW9kZV9mcm9tX3ZpZGVvbW9kZSgmdm0sIG1vZGUpOworCisJCW1vZGUtPnR5cGUgfD0g RFJNX01PREVfVFlQRV9EUklWRVI7CisKKwkJaWYgKHBhbmVsLT5kZXNjLT5udW1fdGltaW5ncyA9 PSAxKQorCQkJbW9kZS0+dHlwZSB8PSBEUk1fTU9ERV9UWVBFX1BSRUZFUlJFRDsKKworCQlkcm1f bW9kZV9wcm9iZWRfYWRkKGNvbm5lY3RvciwgbW9kZSk7CisJCW51bSsrOworCX0KKworCWZvciAo aSA9IDA7IGkgPCBwYW5lbC0+ZGVzYy0+bnVtX21vZGVzOyBpKyspIHsKKwkJY29uc3Qgc3RydWN0 IGRybV9kaXNwbGF5X21vZGUgKm0gPSAmcGFuZWwtPmRlc2MtPm1vZGVzW2ldOworCisJCW1vZGUg PSBkcm1fbW9kZV9kdXBsaWNhdGUoZHJtLCBtKTsKKwkJaWYgKCFtb2RlKSB7CisJCQlkZXZfZXJy KGRybS0+ZGV2LCAiZmFpbGVkIHRvIGFkZCBtb2RlICV1eCV1QCV1XG4iLAorCQkJCW0tPmhkaXNw bGF5LCBtLT52ZGlzcGxheSwgbS0+dnJlZnJlc2gpOworCQkJY29udGludWU7CisJCX0KKworCQlt b2RlLT50eXBlIHw9IERSTV9NT0RFX1RZUEVfRFJJVkVSOworCisJCWlmIChwYW5lbC0+ZGVzYy0+ bnVtX21vZGVzID09IDEpCisJCQltb2RlLT50eXBlIHw9IERSTV9NT0RFX1RZUEVfUFJFRkVSUkVE OworCisJCWRybV9tb2RlX3NldF9uYW1lKG1vZGUpOworCisJCWRybV9tb2RlX3Byb2JlZF9hZGQo Y29ubmVjdG9yLCBtb2RlKTsKKwkJbnVtKys7CisJfQorCisJY29ubmVjdG9yLT5kaXNwbGF5X2lu Zm8uYnBjID0gcGFuZWwtPmRlc2MtPmJwYzsKKwljb25uZWN0b3ItPmRpc3BsYXlfaW5mby53aWR0 aF9tbSA9IHBhbmVsLT5kZXNjLT5zaXplLndpZHRoOworCWNvbm5lY3Rvci0+ZGlzcGxheV9pbmZv LmhlaWdodF9tbSA9IHBhbmVsLT5kZXNjLT5zaXplLmhlaWdodDsKKwlpZiAocGFuZWwtPmRlc2Mt PmJ1c19mb3JtYXQpCisJCWRybV9kaXNwbGF5X2luZm9fc2V0X2J1c19mb3JtYXRzKCZjb25uZWN0 b3ItPmRpc3BsYXlfaW5mbywKKwkJCQkJCSAmcGFuZWwtPmRlc2MtPmJ1c19mb3JtYXQsIDEpOwor CWNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLmJ1c19mbGFncyA9IHBhbmVsLT5kZXNjLT5idXNfZmxh Z3M7CisKKwlyZXR1cm4gbnVtOworfQorCitzdGF0aWMgaW50IHNlaWtvX3BhbmVsX2Rpc2FibGUo c3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCit7CisJc3RydWN0IHNlaWtvX3BhbmVsICpwID0gdG9f c2Vpa29fcGFuZWwocGFuZWwpOworCisJaWYgKCFwLT5lbmFibGVkKQorCQlyZXR1cm4gMDsKKwor CWlmIChwLT5iYWNrbGlnaHQpIHsKKwkJcC0+YmFja2xpZ2h0LT5wcm9wcy5wb3dlciA9IEZCX0JM QU5LX1BPV0VSRE9XTjsKKwkJcC0+YmFja2xpZ2h0LT5wcm9wcy5zdGF0ZSB8PSBCTF9DT1JFX0ZC QkxBTks7CisJCWJhY2tsaWdodF91cGRhdGVfc3RhdHVzKHAtPmJhY2tsaWdodCk7CisJfQorCisJ cC0+ZW5hYmxlZCA9IGZhbHNlOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Vpa29f cGFuZWxfdW5wcmVwYXJlKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQoreworCXN0cnVjdCBzZWlr b19wYW5lbCAqcCA9IHRvX3NlaWtvX3BhbmVsKHBhbmVsKTsKKworCWlmICghcC0+cHJlcGFyZWQp CisJCXJldHVybiAwOworCisJcmVndWxhdG9yX2Rpc2FibGUocC0+QVZERCk7CisKKwkvKiBBZGQg YSAxMDBtcyBkZWxheSBhcyBwZXIgdGhlIHBhbmVsIGRhdGFzaGVldCAqLworCW1zbGVlcCgxMDAp OworCisJcmVndWxhdG9yX2Rpc2FibGUocC0+RFZERCk7CisKKwlwLT5wcmVwYXJlZCA9IGZhbHNl OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Vpa29fcGFuZWxfcHJlcGFyZShzdHJ1 Y3QgZHJtX3BhbmVsICpwYW5lbCkKK3sKKwlzdHJ1Y3Qgc2Vpa29fcGFuZWwgKnAgPSB0b19zZWlr b19wYW5lbChwYW5lbCk7CisJaW50IGVycjsKKworCWlmIChwLT5wcmVwYXJlZCkKKwkJcmV0dXJu IDA7CisKKwllcnIgPSByZWd1bGF0b3JfZW5hYmxlKHAtPkRWREQpOworCWlmIChlcnIgPCAwKSB7 CisJCWRldl9lcnIocGFuZWwtPmRldiwgImZhaWxlZCB0byBlbmFibGUgRFZERDogJWRcbiIsIGVy cik7CisJCXJldHVybiBlcnI7CisJfQorCisJLyogQWRkIGEgMTAwbXMgZGVsYXkgYXMgcGVyIHRo ZSBwYW5lbCBkYXRhc2hlZXQgKi8KKwltc2xlZXAoMTAwKTsKKworCWVyciA9IHJlZ3VsYXRvcl9l bmFibGUocC0+QVZERCk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2VycihwYW5lbC0+ZGV2LCAi ZmFpbGVkIHRvIGVuYWJsZSBBVkREOiAlZFxuIiwgZXJyKTsKKwkJZ290byBkaXNhYmxlX2R2ZGQ7 CisJfQorCisJcC0+cHJlcGFyZWQgPSB0cnVlOworCisJcmV0dXJuIDA7CisKK2Rpc2FibGVfZHZk ZDoKKwlyZWd1bGF0b3JfZGlzYWJsZShwLT5EVkREKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0 aWMgaW50IHNlaWtvX3BhbmVsX2VuYWJsZShzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkKK3sKKwlz dHJ1Y3Qgc2Vpa29fcGFuZWwgKnAgPSB0b19zZWlrb19wYW5lbChwYW5lbCk7CisKKwlpZiAocC0+ ZW5hYmxlZCkKKwkJcmV0dXJuIDA7CisKKwlpZiAocC0+YmFja2xpZ2h0KSB7CisJCXAtPmJhY2ts aWdodC0+cHJvcHMuc3RhdGUgJj0gfkJMX0NPUkVfRkJCTEFOSzsKKwkJcC0+YmFja2xpZ2h0LT5w cm9wcy5wb3dlciA9IEZCX0JMQU5LX1VOQkxBTks7CisJCWJhY2tsaWdodF91cGRhdGVfc3RhdHVz KHAtPmJhY2tsaWdodCk7CisJfQorCisJcC0+ZW5hYmxlZCA9IHRydWU7CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGludCBzZWlrb19wYW5lbF9nZXRfbW9kZXMoc3RydWN0IGRybV9wYW5lbCAq cGFuZWwpCit7CisJc3RydWN0IHNlaWtvX3BhbmVsICpwID0gdG9fc2Vpa29fcGFuZWwocGFuZWwp OworCisJLyogYWRkIGhhcmQtY29kZWQgcGFuZWwgbW9kZXMgKi8KKwlyZXR1cm4gc2Vpa29fcGFu ZWxfZ2V0X2ZpeGVkX21vZGVzKHApOworfQorCitzdGF0aWMgaW50IHNlaWtvX3BhbmVsX2dldF90 aW1pbmdzKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgbnVt X3RpbWluZ3MsCisJCQkJICAgIHN0cnVjdCBkaXNwbGF5X3RpbWluZyAqdGltaW5ncykKK3sKKwlz dHJ1Y3Qgc2Vpa29fcGFuZWwgKnAgPSB0b19zZWlrb19wYW5lbChwYW5lbCk7CisJdW5zaWduZWQg aW50IGk7CisKKwlpZiAocC0+ZGVzYy0+bnVtX3RpbWluZ3MgPCBudW1fdGltaW5ncykKKwkJbnVt X3RpbWluZ3MgPSBwLT5kZXNjLT5udW1fdGltaW5nczsKKworCWlmICh0aW1pbmdzKQorCQlmb3Ig KGkgPSAwOyBpIDwgbnVtX3RpbWluZ3M7IGkrKykKKwkJCXRpbWluZ3NbaV0gPSBwLT5kZXNjLT50 aW1pbmdzW2ldOworCisJcmV0dXJuIHAtPmRlc2MtPm51bV90aW1pbmdzOworfQorCitzdGF0aWMg Y29uc3Qgc3RydWN0IGRybV9wYW5lbF9mdW5jcyBzZWlrb19wYW5lbF9mdW5jcyA9IHsKKwkuZGlz YWJsZSA9IHNlaWtvX3BhbmVsX2Rpc2FibGUsCisJLnVucHJlcGFyZSA9IHNlaWtvX3BhbmVsX3Vu cHJlcGFyZSwKKwkucHJlcGFyZSA9IHNlaWtvX3BhbmVsX3ByZXBhcmUsCisJLmVuYWJsZSA9IHNl aWtvX3BhbmVsX2VuYWJsZSwKKwkuZ2V0X21vZGVzID0gc2Vpa29fcGFuZWxfZ2V0X21vZGVzLAor CS5nZXRfdGltaW5ncyA9IHNlaWtvX3BhbmVsX2dldF90aW1pbmdzLAorfTsKKworc3RhdGljIGlu dCBzZWlrb19wYW5lbF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCWNvbnN0IHN0cnVj dCBzZWlrb19wYW5lbF9kZXNjICpkZXNjKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqYmFja2xp Z2h0OworCXN0cnVjdCBzZWlrb19wYW5lbCAqcGFuZWw7CisJaW50IGVycjsKKworCXBhbmVsID0g ZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwYW5lbCksIEdGUF9LRVJORUwpOworCWlmICghcGFu ZWwpCisJCXJldHVybiAtRU5PTUVNOworCisJcGFuZWwtPmVuYWJsZWQgPSBmYWxzZTsKKwlwYW5l bC0+cHJlcGFyZWQgPSBmYWxzZTsKKwlwYW5lbC0+ZGVzYyA9IGRlc2M7CisKKwlwYW5lbC0+RFZE RCA9IGRldm1fcmVndWxhdG9yX2dldChkZXYsICJEVkREIik7CisJaWYgKElTX0VSUihwYW5lbC0+ RFZERCkpCisJCXJldHVybiBQVFJfRVJSKHBhbmVsLT5EVkREKTsKKworCXBhbmVsLT5BVkREID0g ZGV2bV9yZWd1bGF0b3JfZ2V0KGRldiwgIkFWREQiKTsKKwlpZiAoSVNfRVJSKHBhbmVsLT5BVkRE KSkKKwkJcmV0dXJuIFBUUl9FUlIocGFuZWwtPkFWREQpOworCisJYmFja2xpZ2h0ID0gb2ZfcGFy c2VfcGhhbmRsZShkZXYtPm9mX25vZGUsICJiYWNrbGlnaHQiLCAwKTsKKwlpZiAoYmFja2xpZ2h0 KSB7CisJCXBhbmVsLT5iYWNrbGlnaHQgPSBvZl9maW5kX2JhY2tsaWdodF9ieV9ub2RlKGJhY2ts aWdodCk7CisJCW9mX25vZGVfcHV0KGJhY2tsaWdodCk7CisKKwkJaWYgKCFwYW5lbC0+YmFja2xp Z2h0KQorCQkJcmV0dXJuIC1FUFJPQkVfREVGRVI7CisJfQorCisJZHJtX3BhbmVsX2luaXQoJnBh bmVsLT5iYXNlKTsKKwlwYW5lbC0+YmFzZS5kZXYgPSBkZXY7CisJcGFuZWwtPmJhc2UuZnVuY3Mg PSAmc2Vpa29fcGFuZWxfZnVuY3M7CisKKwllcnIgPSBkcm1fcGFuZWxfYWRkKCZwYW5lbC0+YmFz ZSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlkZXZfc2V0X2RydmRhdGEoZGV2 LCBwYW5lbCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZWlrb19wYW5lbF9yZW1v dmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc2Vpa29fcGFuZWwg KnBhbmVsID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCisJZHJtX3BhbmVsX2RldGFj aCgmcGFuZWwtPmJhc2UpOworCWRybV9wYW5lbF9yZW1vdmUoJnBhbmVsLT5iYXNlKTsKKworCXNl aWtvX3BhbmVsX2Rpc2FibGUoJnBhbmVsLT5iYXNlKTsKKworCWlmIChwYW5lbC0+YmFja2xpZ2h0 KQorCQlwdXRfZGV2aWNlKCZwYW5lbC0+YmFja2xpZ2h0LT5kZXYpOworCisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyB2b2lkIHNlaWtvX3BhbmVsX3NodXRkb3duKHN0cnVjdCBwbGF0Zm9ybV9kZXZp Y2UgKnBkZXYpCit7CisJc3RydWN0IHNlaWtvX3BhbmVsICpwYW5lbCA9IGRldl9nZXRfZHJ2ZGF0 YSgmcGRldi0+ZGV2KTsKKworCXNlaWtvX3BhbmVsX2Rpc2FibGUoJnBhbmVsLT5iYXNlKTsKK30K Kworc3RhdGljIGNvbnN0IHN0cnVjdCBkaXNwbGF5X3RpbWluZyBzZWlrb180M3d2ZjFnX3RpbWlu ZyA9IHsKKwkucGl4ZWxjbG9jayA9IHsgMzM1MDAwMDAsIDMzNTAwMDAwLCAzMzUwMDAwMCB9LAor CS5oYWN0aXZlID0geyA4MDAsIDgwMCwgODAwIH0sCisJLmhmcm9udF9wb3JjaCA9IHsgIDE2NCwg MTY0LCAxNjQgfSwKKwkuaGJhY2tfcG9yY2ggPSB7IDg5LCA4OSwgODkgfSwKKwkuaHN5bmNfbGVu ID0geyAxMCwgMTAsIDEwIH0sCisJLnZhY3RpdmUgPSB7IDQ4MCwgNDgwLCA0ODAgfSwKKwkudmZy b250X3BvcmNoID0geyAxMCwgMTAsIDEwIH0sCisJLnZiYWNrX3BvcmNoID0geyAyMywgMjMsIDIz IH0sCisJLnZzeW5jX2xlbiA9IHsgMTAsIDEwLCAxMCB9LAorCS5mbGFncyA9IERJU1BMQVlfRkxB R1NfREVfTE9XLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzZWlrb19wYW5lbF9kZXNjIHNl aWtvXzQzd3ZmMWcgPSB7CisJLnRpbWluZ3MgPSAmc2Vpa29fNDN3dmYxZ190aW1pbmcsCisJLm51 bV90aW1pbmdzID0gMSwKKwkuYnBjID0gOCwKKwkuc2l6ZSA9IHsKKwkJLndpZHRoID0gOTMsCisJ CS5oZWlnaHQgPSA1NywKKwl9LAorCS5idXNfZm9ybWF0ID0gTUVESUFfQlVTX0ZNVF9SR0I4ODhf MVgyNCwKKwkuYnVzX2ZsYWdzID0gRFJNX0JVU19GTEFHX0RFX0hJR0ggfCBEUk1fQlVTX0ZMQUdf UElYREFUQV9ORUdFREdFLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQg cGxhdGZvcm1fb2ZfbWF0Y2hbXSA9IHsKKwl7CisJCS5jb21wYXRpYmxlID0gInNpaSw0M3d2ZjFn IiwKKwkJLmRhdGEgPSAmc2Vpa29fNDN3dmYxZywKKwl9LCB7CisJCS8qIHNlbnRpbmVsICovCisJ fQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHBsYXRmb3JtX29mX21hdGNoKTsKKworc3Rh dGljIGludCBzZWlrb19wYW5lbF9wbGF0Zm9ybV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICpwZGV2KQoreworCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKmlkOworCisJaWQgPSBvZl9t YXRjaF9ub2RlKHBsYXRmb3JtX29mX21hdGNoLCBwZGV2LT5kZXYub2Zfbm9kZSk7CisJaWYgKCFp ZCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXR1cm4gc2Vpa29fcGFuZWxfcHJvYmUoJnBkZXYt PmRldiwgaWQtPmRhdGEpOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzZWlr b19wYW5lbF9wbGF0Zm9ybV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAic2Vp a29fcGFuZWwiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBwbGF0Zm9ybV9vZl9tYXRjaCwKKwl9LAor CS5wcm9iZSA9IHNlaWtvX3BhbmVsX3BsYXRmb3JtX3Byb2JlLAorCS5yZW1vdmUgPSBzZWlrb19w YW5lbF9yZW1vdmUsCisJLnNodXRkb3duID0gc2Vpa29fcGFuZWxfc2h1dGRvd24sCit9OworbW9k dWxlX3BsYXRmb3JtX2RyaXZlcihzZWlrb19wYW5lbF9wbGF0Zm9ybV9kcml2ZXIpOworCitNT0RV TEVfQVVUSE9SKCJNYXJjbyBGcmFuY2hpIDxtYXJjby5mcmFuY2hpQG54cC5jb20iKTsKK01PRFVM RV9ERVNDUklQVElPTigiU2Vpa28gNDNXVkYxRyBwYW5lbCBkcml2ZXIiKTsKK01PRFVMRV9MSUNF TlNFKCJHUEwgdjIiKTsKLS0gCjIuNy40CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9kcmktZGV2ZWwK