From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sam Ravnborg Subject: Re: [PATCH 2/2] drm/panel: Add support for Raydium RM67191 panel driver Date: Fri, 14 Jun 2019 17:10:18 +0200 Message-ID: <20190614151018.GA28829@ravnborg.org> References: <1560513063-24995-1-git-send-email-robert.chiras@nxp.com> <1560513063-24995-3-git-send-email-robert.chiras@nxp.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1560513063-24995-3-git-send-email-robert.chiras@nxp.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Robert Chiras Cc: Mark Rutland , devicetree@vger.kernel.org, David Airlie , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Rob Herring , Thierry Reding , linux-imx@nxp.com List-Id: devicetree@vger.kernel.org SGkgUm9iZXJ0LgoKT24gdG9wIG9mIHRoZSBmZWVkYmFjayBmcm9tIEZhYmlvIGhlcmUgaXMgYSBi aXQgbW9yZS4KCj4gKwo+ICsjaW5jbHVkZSA8ZHJtL2RybVAuaD4KPiArI2luY2x1ZGUgPGRybS9k cm1fY3J0Yy5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9taXBpX2RzaS5oPgo+ICsjaW5jbHVkZSA8 ZHJtL2RybV9wYW5lbC5oPgo+ICsjaW5jbHVkZSA8bGludXgvZ3Bpby9jb25zdW1lci5oPgo+ICsj aW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9vZi5oPgo+ICsjaW5j bHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+Cj4gKyNpbmNsdWRlIDx2aWRlby9taXBp X2Rpc3BsYXkuaD4KPiArI2luY2x1ZGUgPHZpZGVvL29mX3ZpZGVvbW9kZS5oPgo+ICsjaW5jbHVk ZSA8dmlkZW8vdmlkZW9tb2RlLmg+CgpEaXZpZGUgaW5jbHVkZSB1cCBpbiBibG9jayBpbiBmb2xs b3dpbmcgb3JkZXI6CgojaW5jbHVkZSA8bGludXgvKj4KCiNpbmNsdWRlIDx2aWRlby8qPgoKI2lu Y3VkZSA8ZHJtLyo+CgpXaXRoaW4gZWFjaCBibG9jayBzb3J0IGFscGhhYmV0aWNhbGx5LgpEbyBu b3QgdXNlIHRoZSBkZXByZWNhdGVkIGRybVAuaCAtIHJlcGxhY2UgaXQgd2l0aCB0aGUgbmVjZXNz YXJ5CmluY2x1ZGVzLgpVc2UgYW4gZW1wdHkgbGluZSBiZXR3ZWVuIGVhY2ggaW5jbHVkZSBibG9j ay4KCj4gKwo+ICsvKiBXcml0ZSBNYW51ZmFjdHVyZSBDb21tYW5kIFNldCBDb250cm9sICovCj4g KyNkZWZpbmUgV1JNQVVDQ1RSIDB4RkUKPiArCj4gKy8qIE1hbnVmYWN0dXJlciBDb21tYW5kIFNl dCBwYWdlcyAoQ01EMikgKi8KPiArc3RydWN0IGNtZF9zZXRfZW50cnkgewo+ICsJdTggY21kOwo+ ICsJdTggcGFyYW07Cj4gK307Cj4gKwo+ICsvKgo+ICsgKiBUaGVyZSBpcyBubyBkZXNjcmlwdGlv biBpbiB0aGUgUmVmZXJlbmNlIE1hbnVhbCBhYm91dCB0aGVzZSBjb21tYW5kcy4KPiArICogV2Ug cmVjZWl2ZWQgdGhlbSBmcm9tIHZlbmRvciwgc28ganVzdCB1c2UgdGhlbSBhcyBpcy4KPiArICov Cj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY21kX3NldF9lbnRyeSBtYW51ZmFjdHVyZXJfY21kX3Nl dFtdID0gewo+ICsJezB4RkUsIDB4MEJ9LAo+ICsJezB4MjgsIDB4NDB9LAo+ICsJezB4MjksIDB4 NEZ9LAouLi4KPiArCXsweDUxLCAweDA0fSwKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCB1MzIg cmFkX2J1c19mb3JtYXRzW10gPSB7Cj4gKwlNRURJQV9CVVNfRk1UX1JHQjg4OF8xWDI0LAo+ICsJ TUVESUFfQlVTX0ZNVF9SR0I2NjZfMVgxOCwKPiArCU1FRElBX0JVU19GTVRfUkdCNTY1XzFYMTYs Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgcmFkX3BhbmVsIHsKPiArCXN0cnVjdCBkcm1fcGFuZWwgYmFz ZTsKSW4gdGhlIG90aGVyIHJheWRpdW0gZHJpdmVyIHdlIG5hbWUgdGhpcyAicGFuZWwiLCB3aGlj aCBpcyBhIG1vcmUKZGVzY3JpcHRpdmUgbmFtZS4KCj4gKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNl ICpkc2k7Cj4gKwo+ICsJc3RydWN0IGdwaW9fZGVzYyAqcmVzZXQ7Cj4gKwlzdHJ1Y3QgYmFja2xp Z2h0X2RldmljZSAqYmFja2xpZ2h0Owo+ICsKPiArCWJvb2wgcHJlcGFyZWQ7Cj4gKwlib29sIGVu YWJsZWQ7Cj4gKwo+ICsJc3RydWN0IHZpZGVvbW9kZSB2bTsKPiArCXUzMiB3aWR0aF9tbTsKPiAr CXUzMiBoZWlnaHRfbW07Cj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IHJhZF9wYW5lbF9wcmVwYXJl KHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQo+ICt7Cj4gKwlzdHJ1Y3QgcmFkX3BhbmVsICpyYWQg PSB0b19yYWRfcGFuZWwocGFuZWwpOwo+ICsKPiArCWlmIChyYWQtPnByZXBhcmVkKQo+ICsJCXJl dHVybiAwOwo+ICsKPiArCWlmIChyYWQtPnJlc2V0KSB7Cj4gKwkJZ3Bpb2Rfc2V0X3ZhbHVlKHJh ZC0+cmVzZXQsIDApOwo+ICsJCXVzbGVlcF9yYW5nZSg1MDAwLCAxMDAwMCk7Cj4gKwkJZ3Bpb2Rf c2V0X3ZhbHVlKHJhZC0+cmVzZXQsIDEpOwo+ICsJCXVzbGVlcF9yYW5nZSgyMDAwMCwgMjUwMDAp Owo+ICsJfQo+ICsKPiArCXJhZC0+cHJlcGFyZWQgPSB0cnVlOwo+ICsKPiArCXJldHVybiAwOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHJhZF9wYW5lbF91bnByZXBhcmUoc3RydWN0IGRybV9wYW5l bCAqcGFuZWwpCj4gK3sKPiArCXN0cnVjdCByYWRfcGFuZWwgKnJhZCA9IHRvX3JhZF9wYW5lbChw YW5lbCk7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcmFkLT5kc2ktPmRldjsKPiArCj4gKwlp ZiAoIXJhZC0+cHJlcGFyZWQpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJaWYgKHJhZC0+ZW5hYmxl ZCkgewo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiUGFuZWwgc3RpbGwgZW5hYmxlZCFcbiIpOwo+ ICsJCXJldHVybiAtRVBFUk07Cj4gKwl9ClRoaXMgc2VlbXMgbGlrZSBvdmVya2lsbCwgd2hhdCBz aG91bGQgdHJpZ2dlciB0aGlzPwoKPiArCj4gKwlpZiAocmFkLT5yZXNldCkgewo+ICsJCWdwaW9k X3NldF92YWx1ZShyYWQtPnJlc2V0LCAwKTsKPiArCQl1c2xlZXBfcmFuZ2UoMTUwMDAsIDE3MDAw KTsKPiArCQlncGlvZF9zZXRfdmFsdWUocmFkLT5yZXNldCwgMSk7Cj4gKwl9Cj4gKwo+ICsJcmFk LT5wcmVwYXJlZCA9IGZhbHNlOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMg aW50IHJhZF9wYW5lbF9lbmFibGUoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCj4gK3sKPiArCXN0 cnVjdCByYWRfcGFuZWwgKnJhZCA9IHRvX3JhZF9wYW5lbChwYW5lbCk7Cj4gKwlzdHJ1Y3QgbWlw aV9kc2lfZGV2aWNlICpkc2kgPSByYWQtPmRzaTsKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZk c2ktPmRldjsKPiArCWludCBjb2xvcl9mb3JtYXQgPSBjb2xvcl9mb3JtYXRfZnJvbV9kc2lfZm9y bWF0KGRzaS0+Zm9ybWF0KTsKPiArCXUxNiBicmlnaHRuZXNzOwo+ICsJaW50IHJldDsKPiArCj4g KwlpZiAocmFkLT5lbmFibGVkKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCWlmICghcmFkLT5wcmVw YXJlZCkgewo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiUGFuZWwgbm90IHByZXBhcmVkIVxuIik7 Cj4gKwkJcmV0dXJuIC1FUEVSTTsKPiArCX0KU2VlbXMgbGlrZSBvdmVya2lsbC4KCj4gKwo+ICsJ ZHNpLT5tb2RlX2ZsYWdzIHw9IE1JUElfRFNJX01PREVfTFBNOwo+ICsKPiArCXJldCA9IHJhZF9w YW5lbF9wdXNoX2NtZF9saXN0KGRzaSk7Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJCURSTV9ERVZf RVJST1IoZGV2LCAiRmFpbGVkIHRvIHNlbmQgTUNTICglZClcbiIsIHJldCk7Cj4gKwkJZ290byBm YWlsOwo+ICsJfQo+ICsKPiArCS8qIFNlbGVjdCBVc2VyIENvbW1hbmQgU2V0IHRhYmxlIChDTUQx KSAqLwo+ICsJcmV0ID0gbWlwaV9kc2lfZ2VuZXJpY193cml0ZShkc2ksICh1OFtdKXsgV1JNQVVD Q1RSLCAweDAwIH0sIDIpOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJZ290byBmYWlsOwo+ICsKPiAr CS8qIFNvZnR3YXJlIHJlc2V0ICovCj4gKwlyZXQgPSBtaXBpX2RzaV9kY3Nfc29mdF9yZXNldChk c2kpOwo+ICsJaWYgKHJldCA8IDApIHsKPiArCQlEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0 byBkbyBTb2Z0d2FyZSBSZXNldCAoJWQpXG4iLCByZXQpOwo+ICsJCWdvdG8gZmFpbDsKPiArCX0K PiArCj4gKwl1c2xlZXBfcmFuZ2UoMTUwMDAsIDE3MDAwKTsKPiArCj4gKwkvKiBTZXQgRFNJIG1v ZGUgKi8KPiArCXJldCA9IG1pcGlfZHNpX2dlbmVyaWNfd3JpdGUoZHNpLCAodThbXSl7IDB4QzIs IDB4MEIgfSwgMik7Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAi RmFpbGVkIHRvIHNldCBEU0kgbW9kZSAoJWQpXG4iLCByZXQpOwo+ICsJCWdvdG8gZmFpbDsKPiAr CX0KPiArCS8qIFNldCB0ZWFyIE9OICovCj4gKwlyZXQgPSBtaXBpX2RzaV9kY3Nfc2V0X3RlYXJf b24oZHNpLCBNSVBJX0RTSV9EQ1NfVEVBUl9NT0RFX1ZCTEFOSyk7Cj4gKwlpZiAocmV0IDwgMCkg ewo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIHNldCB0ZWFyIE9OICglZClcbiIs IHJldCk7Cj4gKwkJZ290byBmYWlsOwo+ICsJfQo+ICsJLyogU2V0IHRlYXIgc2NhbmxpbmUgKi8K PiArCXJldCA9IG1pcGlfZHNpX2Rjc19zZXRfdGVhcl9zY2FubGluZShkc2ksIDB4MzgwKTsKPiAr CWlmIChyZXQgPCAwKSB7Cj4gKwkJRFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gc2V0IHRl YXIgc2NhbmxpbmUgKCVkKVxuIiwgcmV0KTsKPiArCQlnb3RvIGZhaWw7Cj4gKwl9Cj4gKwkvKiBT ZXQgcGl4ZWwgZm9ybWF0ICovCj4gKwlyZXQgPSBtaXBpX2RzaV9kY3Nfc2V0X3BpeGVsX2Zvcm1h dChkc2ksIGNvbG9yX2Zvcm1hdCk7Cj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJJbnRl cmZhY2UgY29sb3IgZm9ybWF0IHNldCB0byAweCV4XG4iLAo+ICsJCQkgICAgIGNvbG9yX2Zvcm1h dCk7Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRv IHNldCBwaXhlbCBmb3JtYXQgKCVkKVxuIiwgcmV0KTsKPiArCQlnb3RvIGZhaWw7Cj4gKwl9Cj4g KwkvKiBTZXQgZGlzcGxheSBicmlnaHRuZXNzICovCj4gKwlicmlnaHRuZXNzID0gcmFkLT5iYWNr bGlnaHQtPnByb3BzLmJyaWdodG5lc3M7Cj4gKwlyZXQgPSBtaXBpX2RzaV9kY3Nfc2V0X2Rpc3Bs YXlfYnJpZ2h0bmVzcyhkc2ksIGJyaWdodG5lc3MpOwo+ICsJaWYgKHJldCA8IDApIHsKPiArCQlE Uk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBzZXQgZGlzcGxheSBicmlnaHRuZXNzICglZClc biIsCj4gKwkJCSAgICAgIHJldCk7Cj4gKwkJZ290byBmYWlsOwo+ICsJfQpicmlnaHRuZXNzIGlz IHdyaXR0ZW4gdG8gYWdhaW4gd2hlbiB5b3UgZW5hYmxlIGJhY2tsaWdodCBiZWxvdy4KU2VlbXMg cmVkdW5kYW50IHRvIGRvIHNvIHR3aWNlLgoKCj4gKwkvKiBFeGl0IHNsZWVwIG1vZGUgKi8KPiAr CXJldCA9IG1pcGlfZHNpX2Rjc19leGl0X3NsZWVwX21vZGUoZHNpKTsKPiArCWlmIChyZXQgPCAw KSB7Cj4gKwkJRFJNX0RFVl9FUlJPUihkZXYsICJGYWlsZWQgdG8gZXhpdCBzbGVlcCBtb2RlICgl ZClcbiIsIHJldCk7Cj4gKwkJZ290byBmYWlsOwo+ICsJfQo+ICsKPiArCXVzbGVlcF9yYW5nZSg1 MDAwLCAxMDAwMCk7Cj4gKwo+ICsJcmV0ID0gbWlwaV9kc2lfZGNzX3NldF9kaXNwbGF5X29uKGRz aSk7Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRv IHNldCBkaXNwbGF5IE9OICglZClcbiIsIHJldCk7Cj4gKwkJZ290byBmYWlsOwo+ICsJfQo+ICsK PiArCWJhY2tsaWdodF9lbmFibGUocmFkLT5iYWNrbGlnaHQpOwo+ICsKPiArCXJhZC0+ZW5hYmxl ZCA9IHRydWU7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gKwo+ICtmYWlsOgo+ICsJaWYgKHJhZC0+cmVz ZXQpCj4gKwkJZ3Bpb2Rfc2V0X3ZhbHVlKHJhZC0+cmVzZXQsIDApOwo+ICsKPiArCXJldHVybiBy ZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgcmFkX3BhbmVsX2Rpc2FibGUoc3RydWN0IGRybV9w YW5lbCAqcGFuZWwpCj4gK3sKPiArCXN0cnVjdCByYWRfcGFuZWwgKnJhZCA9IHRvX3JhZF9wYW5l bChwYW5lbCk7Cj4gKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2kgPSByYWQtPmRzaTsKPiAr CXN0cnVjdCBkZXZpY2UgKmRldiA9ICZkc2ktPmRldjsKPiArCWludCByZXQ7Cj4gKwo+ICsJaWYg KCFyYWQtPmVuYWJsZWQpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJZHNpLT5tb2RlX2ZsYWdzIHw9 IE1JUElfRFNJX01PREVfTFBNOwo+ICsKPiArCWJhY2tsaWdodF9kaXNhYmxlKHJhZC0+YmFja2xp Z2h0KTsKPiArCj4gKwl1c2xlZXBfcmFuZ2UoMTAwMDAsIDE1MDAwKTsKPiArCj4gKwlyZXQgPSBt aXBpX2RzaV9kY3Nfc2V0X2Rpc3BsYXlfb2ZmKGRzaSk7Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJ CURSTV9ERVZfRVJST1IoZGV2LCAiRmFpbGVkIHRvIHNldCBkaXNwbGF5IE9GRiAoJWQpXG4iLCBy ZXQpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJdXNsZWVwX3JhbmdlKDUwMDAsIDEw MDAwKTsKPiArCj4gKwlyZXQgPSBtaXBpX2RzaV9kY3NfZW50ZXJfc2xlZXBfbW9kZShkc2kpOwo+ ICsJaWYgKHJldCA8IDApIHsKPiArCQlEUk1fREVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBlbnRl ciBzbGVlcCBtb2RlICglZClcbiIsIHJldCk7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4g KwlyYWQtPmVuYWJsZWQgPSBmYWxzZTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3Rh dGljIGludCByYWRfcGFuZWxfZ2V0X21vZGVzKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQo+ICt7 Cj4gKwlzdHJ1Y3QgcmFkX3BhbmVsICpyYWQgPSB0b19yYWRfcGFuZWwocGFuZWwpOwo+ICsJc3Ry dWN0IGRldmljZSAqZGV2ID0gJnJhZC0+ZHNpLT5kZXY7Cj4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3Rv ciAqY29ubmVjdG9yID0gcGFuZWwtPmNvbm5lY3RvcjsKPiArCXN0cnVjdCBkcm1fZGlzcGxheV9t b2RlICptb2RlOwo+ICsJdTMyICpidXNfZmxhZ3MgPSAmY29ubmVjdG9yLT5kaXNwbGF5X2luZm8u YnVzX2ZsYWdzOwo+ICsJaW50IHJldDsKPiArCj4gKwltb2RlID0gZHJtX21vZGVfY3JlYXRlKGNv bm5lY3Rvci0+ZGV2KTsKPiArCWlmICghbW9kZSkgewo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAi RmFpbGVkIHRvIGNyZWF0ZSBkaXNwbGF5IG1vZGUhXG4iKTsKPiArCQlyZXR1cm4gMDsKPiArCX0K PiArCj4gKwlkcm1fZGlzcGxheV9tb2RlX2Zyb21fdmlkZW9tb2RlKCZyYWQtPnZtLCBtb2RlKTsK PiArCW1vZGUtPndpZHRoX21tID0gcmFkLT53aWR0aF9tbTsKPiArCW1vZGUtPmhlaWdodF9tbSA9 IHJhZC0+aGVpZ2h0X21tOwo+ICsJY29ubmVjdG9yLT5kaXNwbGF5X2luZm8ud2lkdGhfbW0gPSBy YWQtPndpZHRoX21tOwo+ICsJY29ubmVjdG9yLT5kaXNwbGF5X2luZm8uaGVpZ2h0X21tID0gcmFk LT5oZWlnaHRfbW07Cj4gKwltb2RlLT50eXBlID0gRFJNX01PREVfVFlQRV9EUklWRVIgfCBEUk1f TU9ERV9UWVBFX1BSRUZFUlJFRDsKPiArCj4gKwlpZiAocmFkLT52bS5mbGFncyAmIERJU1BMQVlf RkxBR1NfREVfSElHSCkKPiArCQkqYnVzX2ZsYWdzIHw9IERSTV9CVVNfRkxBR19ERV9ISUdIOwo+ ICsJaWYgKHJhZC0+dm0uZmxhZ3MgJiBESVNQTEFZX0ZMQUdTX0RFX0xPVykKPiArCQkqYnVzX2Zs YWdzIHw9IERSTV9CVVNfRkxBR19ERV9MT1c7Cj4gKwlpZiAocmFkLT52bS5mbGFncyAmIERJU1BM QVlfRkxBR1NfUElYREFUQV9ORUdFREdFKQo+ICsJCSpidXNfZmxhZ3MgfD0gRFJNX0JVU19GTEFH X1BJWERBVEFfTkVHRURHRTsKPiArCWlmIChyYWQtPnZtLmZsYWdzICYgRElTUExBWV9GTEFHU19Q SVhEQVRBX1BPU0VER0UpCj4gKwkJKmJ1c19mbGFncyB8PSBEUk1fQlVTX0ZMQUdfUElYREFUQV9Q T1NFREdFOwo+ICsKPiArCXJldCA9IGRybV9kaXNwbGF5X2luZm9fc2V0X2J1c19mb3JtYXRzKCZj b25uZWN0b3ItPmRpc3BsYXlfaW5mbywKPiArCQkJCQkgICAgICAgcmFkX2J1c19mb3JtYXRzLAo+ ICsJCQkJCSAgICAgICBBUlJBWV9TSVpFKHJhZF9idXNfZm9ybWF0cykpOwo+ICsJaWYgKHJldCkK PiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCWRybV9tb2RlX3Byb2JlZF9hZGQocGFuZWwtPmNvbm5l Y3RvciwgbW9kZSk7Cj4gKwo+ICsJcmV0dXJuIDE7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgcmFk X2JsX2dldF9icmlnaHRuZXNzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibCkKPiArewo+ICsJ c3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpID0gYmxfZ2V0X2RhdGEoYmwpOwo+ICsJc3RydWN0 IHJhZF9wYW5lbCAqcmFkID0gbWlwaV9kc2lfZ2V0X2RydmRhdGEoZHNpKTsKPiArCXN0cnVjdCBk ZXZpY2UgKmRldiA9ICZkc2ktPmRldjsKPiArCXUxNiBicmlnaHRuZXNzOwo+ICsJaW50IHJldDsK PiArCj4gKwlpZiAoIXJhZC0+cHJlcGFyZWQpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJRFJNX0RF Vl9ERUJVR19EUklWRVIoZGV2LCAiXG4iKTsKPiArCj4gKwlkc2ktPm1vZGVfZmxhZ3MgJj0gfk1J UElfRFNJX01PREVfTFBNOwo+ICsKPiArCXJldCA9IG1pcGlfZHNpX2Rjc19nZXRfZGlzcGxheV9i cmlnaHRuZXNzKGRzaSwgJmJyaWdodG5lc3MpOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJcmV0dXJu IHJldDsKPiArCj4gKwlibC0+cHJvcHMuYnJpZ2h0bmVzcyA9IGJyaWdodG5lc3M7Cj4gKwo+ICsJ cmV0dXJuIGJyaWdodG5lc3MgJiAweGZmOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHJhZF9ibF91 cGRhdGVfc3RhdHVzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibCkKPiArewo+ICsJc3RydWN0 IG1pcGlfZHNpX2RldmljZSAqZHNpID0gYmxfZ2V0X2RhdGEoYmwpOwo+ICsJc3RydWN0IHJhZF9w YW5lbCAqcmFkID0gbWlwaV9kc2lfZ2V0X2RydmRhdGEoZHNpKTsKPiArCXN0cnVjdCBkZXZpY2Ug KmRldiA9ICZkc2ktPmRldjsKPiArCWludCByZXQgPSAwOwo+ICsKPiArCWlmICghcmFkLT5wcmVw YXJlZCkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlEUk1fREVWX0RFQlVHX0RSSVZFUihkZXYsICJO ZXcgYnJpZ2h0bmVzczogJWRcbiIsIGJsLT5wcm9wcy5icmlnaHRuZXNzKTsKPiArCj4gKwlkc2kt Pm1vZGVfZmxhZ3MgJj0gfk1JUElfRFNJX01PREVfTFBNOwo+ICsKPiArCXJldCA9IG1pcGlfZHNp X2Rjc19zZXRfZGlzcGxheV9icmlnaHRuZXNzKGRzaSwgYmwtPnByb3BzLmJyaWdodG5lc3MpOwo+ ICsJaWYgKHJldCA8IDApCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBiYWNrbGlnaHRfb3BzIHJhZF9ibF9vcHMgPSB7Cj4g KwkudXBkYXRlX3N0YXR1cyA9IHJhZF9ibF91cGRhdGVfc3RhdHVzLAo+ICsJLmdldF9icmlnaHRu ZXNzID0gcmFkX2JsX2dldF9icmlnaHRuZXNzLAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0 cnVjdCBkcm1fcGFuZWxfZnVuY3MgcmFkX3BhbmVsX2Z1bmNzID0gewo+ICsJLnByZXBhcmUgPSBy YWRfcGFuZWxfcHJlcGFyZSwKPiArCS51bnByZXBhcmUgPSByYWRfcGFuZWxfdW5wcmVwYXJlLAo+ ICsJLmVuYWJsZSA9IHJhZF9wYW5lbF9lbmFibGUsCj4gKwkuZGlzYWJsZSA9IHJhZF9wYW5lbF9k aXNhYmxlLAo+ICsJLmdldF9tb2RlcyA9IHJhZF9wYW5lbF9nZXRfbW9kZXMsCj4gK307Cj4gKwo+ ICsvKgo+ICsgKiBUaGUgY2xvY2sgbWlnaHQgcmFuZ2UgZnJvbSA2Nk1IeiAoMzBIeiByZWZyZXNo IHJhdGUpCj4gKyAqIHRvIDEzMk1IeiAoNjBIeiByZWZyZXNoIHJhdGUpCj4gKyAqLwo+ICtzdGF0 aWMgY29uc3Qgc3RydWN0IGRpc3BsYXlfdGltaW5nIHJhZF9kZWZhdWx0X3RpbWluZyA9IHsKPiAr CS5waXhlbGNsb2NrID0geyA2NjAwMDAwMCwgMTMyMDAwMDAwLCAxMzIwMDAwMDAgfSwKPiArCS5o YWN0aXZlID0geyAxMDgwLCAxMDgwLCAxMDgwIH0sCj4gKwkuaGZyb250X3BvcmNoID0geyAyMCwg MjAsIDIwIH0sCj4gKwkuaHN5bmNfbGVuID0geyAyLCAyLCAyIH0sCj4gKwkuaGJhY2tfcG9yY2gg PSB7IDM0LCAzNCwgMzQgfSwKPiArCS52YWN0aXZlID0geyAxOTIwLCAxOTIwLCAxOTIwIH0sCj4g KwkudmZyb250X3BvcmNoID0geyAxMCwgMTAsIDEwIH0sCj4gKwkudnN5bmNfbGVuID0geyAyLCAy LCAyIH0sCj4gKwkudmJhY2tfcG9yY2ggPSB7IDQsIDQsIDQgfSwKPiArCS5mbGFncyA9IERJU1BM QVlfRkxBR1NfSFNZTkNfTE9XIHwKPiArCQkgRElTUExBWV9GTEFHU19WU1lOQ19MT1cgfAo+ICsJ CSBESVNQTEFZX0ZMQUdTX0RFX0xPVyB8Cj4gKwkJIERJU1BMQVlfRkxBR1NfUElYREFUQV9ORUdF REdFLAo+ICt9Owo+ICsKPiArc3RhdGljIGludCByYWRfcGFuZWxfcHJvYmUoc3RydWN0IG1pcGlf ZHNpX2RldmljZSAqZHNpKQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZHNpLT5kZXY7 Cj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5vZl9ub2RlOwo+ICsJc3RydWN0IGRl dmljZV9ub2RlICp0aW1pbmdzOwo+ICsJc3RydWN0IHJhZF9wYW5lbCAqcGFuZWw7Cj4gKwlzdHJ1 Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMgYmxfcHJvcHM7Cj4gKwlpbnQgcmV0Owo+ICsJdTMyIHZp ZGVvX21vZGU7Cj4gKwo+ICsJcGFuZWwgPSBkZXZtX2t6YWxsb2MoJmRzaS0+ZGV2LCBzaXplb2Yo KnBhbmVsKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIXBhbmVsKQo+ICsJCXJldHVybiAtRU5PTUVN Owo+ICsKPiArCW1pcGlfZHNpX3NldF9kcnZkYXRhKGRzaSwgcGFuZWwpOwo+ICsKPiArCXBhbmVs LT5kc2kgPSBkc2k7Cj4gKwo+ICsJZHNpLT5mb3JtYXQgPSBNSVBJX0RTSV9GTVRfUkdCODg4Owo+ ICsJZHNpLT5tb2RlX2ZsYWdzID0gIE1JUElfRFNJX01PREVfVklERU9fSFNFIHwgTUlQSV9EU0lf TU9ERV9WSURFTyB8Cj4gKwkJCSAgIE1JUElfRFNJX0NMT0NLX05PTl9DT05USU5VT1VTOwo+ICsK PiArCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAidmlkZW8tbW9kZSIsICZ2aWRlb19t b2RlKTsKPiArCWlmICghcmV0KSB7Cj4gKwkJc3dpdGNoICh2aWRlb19tb2RlKSB7Cj4gKwkJY2Fz ZSAwOgo+ICsJCQkvKiBidXJzdCBtb2RlICovCj4gKwkJCWRzaS0+bW9kZV9mbGFncyB8PSBNSVBJ X0RTSV9NT0RFX1ZJREVPX0JVUlNUOwo+ICsJCQlicmVhazsKPiArCQljYXNlIDE6Cj4gKwkJCS8q IG5vbi1idXJzdCBtb2RlIHdpdGggc3luYyBldmVudCAqLwo+ICsJCQlicmVhazsKPiArCQljYXNl IDI6Cj4gKwkJCS8qIG5vbi1idXJzdCBtb2RlIHdpdGggc3luYyBwdWxzZSAqLwo+ICsJCQlkc2kt Pm1vZGVfZmxhZ3MgfD0gTUlQSV9EU0lfTU9ERV9WSURFT19TWU5DX1BVTFNFOwo+ICsJCQlicmVh azsKPiArCQlkZWZhdWx0Ogo+ICsJCQlkZXZfd2FybihkZXYsICJpbnZhbGlkIHZpZGVvIG1vZGUg JWRcbiIsIHZpZGVvX21vZGUpOwo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJcmV0 ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJkc2ktbGFuZXMiLCAmZHNpLT5sYW5lcyk7Cj4g KwlpZiAocmV0IDwgMCkgewo+ICsJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBkc2ktbGFu ZXMgcHJvcGVydHkgKCVkKVxuIiwgcmV0KTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiAr CS8qCj4gKwkgKiAnZGlzcGxheS10aW1pbmdzJyBpcyBvcHRpb25hbCwgc28gdmVyaWZ5IGlmIHRo ZSBub2RlIGlzIHByZXNlbnQKPiArCSAqIGJlZm9yZSBjYWxsaW5nIG9mX2dldF92aWRlb21vZGUg c28gd2Ugd29uJ3QgZ2V0IGNvbnNvbGUgZXJyb3IKPiArCSAqIG1lc3NhZ2VzCj4gKwkgKi8KPiAr CXRpbWluZ3MgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShucCwgImRpc3BsYXktdGltaW5ncyIpOwo+ ICsJaWYgKHRpbWluZ3MpIHsKPiArCQlvZl9ub2RlX3B1dCh0aW1pbmdzKTsKPiArCQlyZXQgPSBv Zl9nZXRfdmlkZW9tb2RlKG5wLCAmcGFuZWwtPnZtLCAwKTsKPiArCX0gZWxzZSB7Cj4gKwkJdmlk ZW9tb2RlX2Zyb21fdGltaW5nKCZyYWRfZGVmYXVsdF90aW1pbmcsICZwYW5lbC0+dm0pOwo+ICsJ fQo+ICsJaWYgKHJldCA8IDApCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlvZl9wcm9wZXJ0eV9y ZWFkX3UzMihucCwgIndpZHRoLW1tIiwgJnBhbmVsLT53aWR0aF9tbSk7Cj4gKwlvZl9wcm9wZXJ0 eV9yZWFkX3UzMihucCwgImhlaWdodC1tbSIsICZwYW5lbC0+aGVpZ2h0X21tKTsKPiArCj4gKwlw YW5lbC0+cmVzZXQgPSBkZXZtX2dwaW9kX2dldChkZXYsICJyZXNldCIsIEdQSU9EX09VVF9ISUdI KTsKPiArCj4gKwlpZiAoSVNfRVJSKHBhbmVsLT5yZXNldCkpCj4gKwkJcGFuZWwtPnJlc2V0ID0g TlVMTDsKPiArCWVsc2UKPiArCQlncGlvZF9zZXRfdmFsdWUocGFuZWwtPnJlc2V0LCAwKTsKPiAr Cj4gKwltZW1zZXQoJmJsX3Byb3BzLCAwLCBzaXplb2YoYmxfcHJvcHMpKTsKPiArCWJsX3Byb3Bz LnR5cGUgPSBCQUNLTElHSFRfUkFXOwo+ICsJYmxfcHJvcHMuYnJpZ2h0bmVzcyA9IDI1NTsKPiAr CWJsX3Byb3BzLm1heF9icmlnaHRuZXNzID0gMjU1Owo+ICsKPiArCXBhbmVsLT5iYWNrbGlnaHQg PSBkZXZtX2JhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoZGV2LCBkZXZfbmFtZShkZXYpLAo+ICsJ CQkJCQkJICBkZXYsIGRzaSwKPiArCQkJCQkJCSAgJnJhZF9ibF9vcHMsCj4gKwkJCQkJCQkgICZi bF9wcm9wcyk7Cj4gKwlpZiAoSVNfRVJSKHBhbmVsLT5iYWNrbGlnaHQpKSB7Cj4gKwkJcmV0ID0g UFRSX0VSUihwYW5lbC0+YmFja2xpZ2h0KTsKPiArCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBy ZWdpc3RlciBiYWNrbGlnaHQgKCVkKVxuIiwgcmV0KTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ ICsKPiArCWRybV9wYW5lbF9pbml0KCZwYW5lbC0+YmFzZSk7Cj4gKwlwYW5lbC0+YmFzZS5mdW5j cyA9ICZyYWRfcGFuZWxfZnVuY3M7Cj4gKwlwYW5lbC0+YmFzZS5kZXYgPSBkZXY7Cj4gKwlkZXZf c2V0X2RydmRhdGEoZGV2LCBwYW5lbCk7Cj4gKwo+ICsJcmV0ID0gZHJtX3BhbmVsX2FkZCgmcGFu ZWwtPmJhc2UpOwo+ICsKPiArCWlmIChyZXQgPCAwKQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJ cmV0ID0gbWlwaV9kc2lfYXR0YWNoKGRzaSk7Cj4gKwlpZiAocmV0IDwgMCkKPiArCQlkcm1fcGFu ZWxfcmVtb3ZlKCZwYW5lbC0+YmFzZSk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiAr c3RhdGljIGludCByYWRfcGFuZWxfcmVtb3ZlKHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaSkK PiArewo+ICsJc3RydWN0IHJhZF9wYW5lbCAqcmFkID0gbWlwaV9kc2lfZ2V0X2RydmRhdGEoZHNp KTsKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZkc2ktPmRldjsKPiArCWludCByZXQ7Cj4gKwo+ ICsJcmV0ID0gbWlwaV9kc2lfZGV0YWNoKGRzaSk7Cj4gKwlpZiAocmV0IDwgMCkKPiArCQlEUk1f REVWX0VSUk9SKGRldiwgIkZhaWxlZCB0byBkZXRhY2ggZnJvbSBob3N0ICglZClcbiIsCj4gKwkJ CSAgICAgIHJldCk7Cj4gKwo+ICsJZHJtX3BhbmVsX3JlbW92ZSgmcmFkLT5iYXNlKTsKPiArCj4g KwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgcmFkX3BhbmVsX3NodXRkb3duKHN0 cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaSkKPiArewo+ICsJc3RydWN0IHJhZF9wYW5lbCAqcmFk ID0gbWlwaV9kc2lfZ2V0X2RydmRhdGEoZHNpKTsKPiArCj4gKwlyYWRfcGFuZWxfZGlzYWJsZSgm cmFkLT5iYXNlKTsKPiArCXJhZF9wYW5lbF91bnByZXBhcmUoJnJhZC0+YmFzZSk7Cj4gK30KPiAr Cj4gKyNpZmRlZiBDT05GSUdfUE0KPiArc3RhdGljIGludCByYWRfcGFuZWxfc3VzcGVuZChzdHJ1 Y3QgZGV2aWNlICpkZXYpCj4gK3sKPiArCXN0cnVjdCByYWRfcGFuZWwgKnJhZCA9IGRldl9nZXRf ZHJ2ZGF0YShkZXYpOwo+ICsKPiArCWlmICghcmFkLT5yZXNldCkKPiArCQlyZXR1cm4gMDsKPiAr Cj4gKwlkZXZtX2dwaW9kX3B1dChkZXYsIHJhZC0+cmVzZXQpOwo+ICsJcmFkLT5yZXNldCA9IE5V TEw7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgcmFkX3BhbmVsX3Jl c3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gK3sKPiArCXN0cnVjdCByYWRfcGFuZWwgKnJhZCA9 IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+ICsKPiArCWlmIChyYWQtPnJlc2V0KQo+ICsJCXJldHVy biAwOwo+ICsKPiArCXJhZC0+cmVzZXQgPSBkZXZtX2dwaW9kX2dldChkZXYsICJyZXNldCIsIEdQ SU9EX09VVF9ISUdIKTsKPiArCWlmIChJU19FUlIocmFkLT5yZXNldCkpCj4gKwkJcmFkLT5yZXNl dCA9IE5VTEw7Cj4gKwo+ICsJcmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhyYWQtPnJlc2V0KTsKPiAr fQo+ICsKPiArI2VuZGlmCk5vIG90aGVyIHBhbmVscyBoYXZlIHN1c3BlbmQvcmVzdW1lLgpJcyBp dCByZWxldmFudD8KCgo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHJhZF9w bV9vcHMgPSB7Cj4gKwlTRVRfUlVOVElNRV9QTV9PUFMocmFkX3BhbmVsX3N1c3BlbmQsIHJhZF9w YW5lbF9yZXN1bWUsIE5VTEwpCj4gKwlTRVRfU1lTVEVNX1NMRUVQX1BNX09QUyhyYWRfcGFuZWxf c3VzcGVuZCwgcmFkX3BhbmVsX3Jlc3VtZSkKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1 Y3Qgb2ZfZGV2aWNlX2lkIHJhZF9vZl9tYXRjaFtdID0gewo+ICsJeyAuY29tcGF0aWJsZSA9ICJy YXlkaXVtLHJtNjcxOTEiLCB9LAo+ICsJeyB9Cj4gK307Cj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUo b2YsIHJhZF9vZl9tYXRjaCk7Cj4gKwo+ICtzdGF0aWMgc3RydWN0IG1pcGlfZHNpX2RyaXZlciBy YWRfcGFuZWxfZHJpdmVyID0gewo+ICsJLmRyaXZlciA9IHsKPiArCQkubmFtZSA9ICJwYW5lbC1y YXlkaXVtLXJtNjcxOTEiLAo+ICsJCS5vZl9tYXRjaF90YWJsZSA9IHJhZF9vZl9tYXRjaCwKPiAr CQkucG0JPSAmcmFkX3BtX29wcywKPiArCX0sCj4gKwkucHJvYmUgPSByYWRfcGFuZWxfcHJvYmUs Cj4gKwkucmVtb3ZlID0gcmFkX3BhbmVsX3JlbW92ZSwKPiArCS5zaHV0ZG93biA9IHJhZF9wYW5l bF9zaHV0ZG93biwKPiArfTsKPiArbW9kdWxlX21pcGlfZHNpX2RyaXZlcihyYWRfcGFuZWxfZHJp dmVyKTsKPiArCj4gK01PRFVMRV9BVVRIT1IoIlJvYmVydCBDaGlyYXMgPHJvYmVydC5jaGlyYXNA bnhwLmNvbT4iKTsKPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJEUk0gRHJpdmVyIGZvciBSYXlkaXVt IFJNNjcxOTEgTUlQSSBEU0kgcGFuZWwiKTsKPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwoK CglTYW0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJp LWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBz Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs