From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sam Ravnborg Subject: Re: [PATCH 4/4] drm/panel: Add Rondo RB070D30 panel Date: Sat, 26 Jan 2019 16:39:46 +0100 Message-ID: <20190126153946.GB17756@ravnborg.org> References: <15b81a58eddd5d3fbfa418293cf1c817ef46423a.1548236066.git-series.maxime.ripard@bootlin.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from asavdk3.altibox.net (asavdk3.altibox.net [109.247.116.14]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1CF5B6E124 for ; Sat, 26 Jan 2019 15:39:52 +0000 (UTC) Content-Disposition: inline In-Reply-To: <15b81a58eddd5d3fbfa418293cf1c817ef46423a.1548236066.git-series.maxime.ripard@bootlin.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Maxime Ripard Cc: Konstantin Sudakov , bbrezillon@kernel.org, dri-devel@lists.freedesktop.org, Paul Kocialkowski , Chen-Yu Tsai , Sean Paul , Thomas Petazzoni , Jagan Teki , linux-arm-kernel@lists.infradead.org List-Id: dri-devel@lists.freedesktop.org SGkgTWF4aW1lIC8gS29uc3RhbnRpbi4KCk5pY2Ugd2Vsc3RydWN0dXJlZCBhbmQgc21hbGwgZHJp dmVyLgpQbGVhc2Ugc2VlIGEgZmV3IGNvbW1lbnRzIGJlbG93CgpTb21lIG9mIHRoZSBjb21tZW50 cyBpbiB0aGUgZm9sbG93aW5nIGFwcGx5IHRvIGEgbG90IG9mCnRoZSBleGlzdGluZyBwYW5lbCBk cml2ZXJzIGFzIHdlbGwuCkJ1dCBsZXRzIHNlZSBpZiB3ZSBjYW4gZ2V0IG5ldyBkcml2ZXJzIHRv IGJlIGV2ZW4gYmV0dGVyLgoKCVNhbSAKCk9uIFdlZCwgSmFuIDIzLCAyMDE5IGF0IDA0OjU0OjI0 UE0gKzAxMDAsIE1heGltZSBSaXBhcmQgd3JvdGU6Cj4gRnJvbTogS29uc3RhbnRpbiBTdWRha292 IDxrLnN1ZGFrb3ZAaW50ZWdyYXNvdXJjZXMuY29tPgo+IAo+IFRoZSBSb25kbyBSQjA3MEQzMCBw YW5lbCBpcyBhIE1JUEktRFNJIHBhbmVsIGJhc2VkIG9uIGEgRml0aXBvd2VyIEVLNzkwMDcKPiBj b250cm9sbGVyIGFuZCBhIDEwMjR4NjAwIHBhbmVsLgo+IAo+IFNpZ25lZC1vZmYtYnk6IEtvbnN0 YW50aW4gU3VkYWtvdiA8ay5zdWRha292QGludGVncmFzb3VyY2VzLmNvbT4KPiBTaWduZWQtb2Zm LWJ5OiBNYXhpbWUgUmlwYXJkIDxtYXhpbWUucmlwYXJkQGJvb3RsaW4uY29tPgo+IC0tLQo+ICBk cml2ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZpZyAgICAgICAgICAgICAgICB8ICAgOSArLQo+ICBk cml2ZXJzL2dwdS9kcm0vcGFuZWwvTWFrZWZpbGUgICAgICAgICAgICAgICB8ICAgMSArLQo+ICBk cml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwtcm9uZG8tcmIwNzBkMzAuYyB8IDI1OCArKysrKysr KysrKysrKysrKysrKy0KPiAgMyBmaWxlcyBjaGFuZ2VkLCAyNjggaW5zZXJ0aW9ucygrKQo+ICBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLXJvbmRvLXJiMDcw ZDMwLmMKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLXJvbmRv LXJiMDcwZDMwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwtcm9uZG8tcmIwNzBkMzAu Ywo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi40ZjhlNjNmMzY3 YjEKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLXJv bmRvLXJiMDcwZDMwLmMKPiBAQCAtMCwwICsxLDI1OCBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogR1BMLTIuMCsKPiArLyoKPiArICogQ29weXJpZ2h0IChDKSAyMDE4LCBCcmlkZ2Ug U3lzdGVtcyBCVgo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTgsIEJvb3RsaW4KPiArICogQ29weXJp Z2h0IChDKSAyMDE3LCBGcmVlIEVsZWN0cm9ucwo+ICsgKgo+ICsgKiBUaGlzIGZpbGUgYmFzZWQg b24gcGFuZWwtaWxpdGVrLWlsaTk4ODFjLmMKPiArICovCj4gKwo+ICsjaW5jbHVkZSA8bGludXgv YmFja2xpZ2h0Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgo+ICsjaW5jbHVkZSA8bGlu dXgvZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KPiArI2luY2x1ZGUgPGxpbnV4 L2Vycm5vLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9mYi5oPgo+ICsjaW5jbHVkZSA8bGludXgva2Vy bmVsLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiArCj4gKyNpbmNsdWRlIDxsaW51 eC9ncGlvL2NvbnN1bWVyLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIu aD4KPiArCj4gKyNpbmNsdWRlIDxkcm0vZHJtX21pcGlfZHNpLmg+Cj4gKyNpbmNsdWRlIDxkcm0v ZHJtUC5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9wYW5lbC5oPgpQbGVhc2UgZG8gbm90IHVzZSBk cm1QLmggaW4gbmV3IGRyaXZlcnMuIFdlIGFyZSB0cnlpbmcgdG8gZ2V0IHJpZCBvZiBpdC4KCj4g Kwo+ICsjaW5jbHVkZSA8dmlkZW8vbWlwaV9kaXNwbGF5Lmg+Cj4gKyNpbmNsdWRlIDx2aWRlby9v Zl9kaXNwbGF5X3RpbWluZy5oPgo+ICsjaW5jbHVkZSA8dmlkZW8vdmlkZW9tb2RlLmg+Cj4gKwo+ ICtzdHJ1Y3QgcmIwNzBkMzBfcGFuZWwgewo+ICsJc3RydWN0IGRybV9wYW5lbCBwYW5lbDsKPiAr CXN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaTsKPiArCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNl ICpiYWNrbGlnaHQ7Cj4gKwlzdHJ1Y3QgcmVndWxhdG9yICpzdXBwbHk7Cj4gKwo+ICsJc3RydWN0 IHsKPiArCQlzdHJ1Y3QgZ3Bpb19kZXNjICpwb3dlcjsKPiArCQlzdHJ1Y3QgZ3Bpb19kZXNjICpy ZXNldDsKPiArCQlzdHJ1Y3QgZ3Bpb19kZXNjICp1cGRuOwo+ICsJCXN0cnVjdCBncGlvX2Rlc2Mg KnNobHI7Cj4gKwl9IGdwaW9zOwo+ICt9Owo+ICsKPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgcmIw NzBkMzBfcGFuZWwgKnBhbmVsX3RvX3JiMDcwZDMwX3BhbmVsKHN0cnVjdCBkcm1fcGFuZWwgKnBh bmVsKQo+ICt7Cj4gKwlyZXR1cm4gY29udGFpbmVyX29mKHBhbmVsLCBzdHJ1Y3QgcmIwNzBkMzBf cGFuZWwsIHBhbmVsKTsKPiArfQo+ICsKPiArc3RhdGljIGludCByYjA3MGQzMF9wYW5lbF9wcmVw YXJlKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQo+ICt7Cj4gKwlzdHJ1Y3QgcmIwNzBkMzBfcGFu ZWwgKmN0eCA9IHBhbmVsX3RvX3JiMDcwZDMwX3BhbmVsKHBhbmVsKTsKPiArCWludCByZXQ7Cj4g Kwo+ICsJcmV0ID0gcmVndWxhdG9yX2VuYWJsZShjdHgtPnN1cHBseSk7Cj4gKwlpZiAocmV0IDwg MCkgewo+ICsJCWRldl9lcnIoJmN0eC0+ZHNpLT5kZXYsICJGYWlsZWQgdG8gZW5hYmxlIHN1cHBs eTogJWRcbiIsIHJldCk7ClVzZSBEUk1fREVWX0VSUk9SKC4uLikgdG8gaGF2ZSBjb25zaXN0ZW50 IGVycm9yIG1lc3NhZ2UgZm9yIHRoZSBkcm0gZHJpdmVycy4KVGhpcyBpcyBnZW5lcmFsIGZvciB0 aGUgd2hvbGUgZmlsZS4KCj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwkvKiBSZXNldCAq Lwo+ICsJbXNsZWVwKDIwKTsKPiArCWdwaW9kX3NldF92YWx1ZShjdHgtPmdwaW9zLnBvd2VyLCAx KTsKPiArCW1zbGVlcCgyMCk7Cj4gKwlncGlvZF9zZXRfdmFsdWUoY3R4LT5ncGlvcy5yZXNldCwg MSk7Cj4gKwltc2xlZXAoMjApOwo+ICsJcmV0dXJuIDA7Cj4gK30KVG8gdmVyaWZ5IHRoZSBhYm92 ZSBwb2ludGVyIHRvIGEgZGF0YXNoZWV0IHdvdWxkIGJlIG5pY2UuCgoKPiArCj4gK3N0YXRpYyBp bnQgcmIwNzBkMzBfcGFuZWxfdW5wcmVwYXJlKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQo+ICt7 Cj4gKwlzdHJ1Y3QgcmIwNzBkMzBfcGFuZWwgKmN0eCA9IHBhbmVsX3RvX3JiMDcwZDMwX3BhbmVs KHBhbmVsKTsKPiArCj4gKwlncGlvZF9zZXRfdmFsdWUoY3R4LT5ncGlvcy5wb3dlciwgMCk7Cj4g KwlncGlvZF9zZXRfdmFsdWUoY3R4LT5ncGlvcy5yZXNldCwgMCk7Cj4gKwlyZWd1bGF0b3JfZGlz YWJsZShjdHgtPnN1cHBseSk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KVGhlcmUgaXMgc29tZXRp bWVzIHRpbWluZyBjb25zdHJhaW5zIGFmdGVyIGRlYXNzZXJ0IHJlc2V0Li4KVGhlIG9yZGVyIGlz IG5vdCBzdHJpY3RseSByZXZlcnNlIG9mIHByZXBhcmUgLSBpcyB0aGF0IG9uIHB1cnBvc2U/CgoK PiArCj4gK3N0YXRpYyBpbnQgcmIwNzBkMzBfcGFuZWxfZW5hYmxlKHN0cnVjdCBkcm1fcGFuZWwg KnBhbmVsKQo+ICt7Cj4gKwlzdHJ1Y3QgcmIwNzBkMzBfcGFuZWwgKmN0eCA9IHBhbmVsX3RvX3Ji MDcwZDMwX3BhbmVsKHBhbmVsKTsKPiArCWludCByZXQ7Cj4gKwo+ICsJcmV0ID0gbWlwaV9kc2lf ZGNzX2V4aXRfc2xlZXBfbW9kZShjdHgtPmRzaSk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiBy ZXQ7Cj4gKwo+ICsJcmV0ID0gYmFja2xpZ2h0X2VuYWJsZShjdHgtPmJhY2tsaWdodCk7Cj4gKwlp ZiAocmV0KQo+ICsJCWdvdG8gb3V0Owo+ICsKPiArCXJldHVybiAwOwo+ICsKPiArb3V0Ogo+ICsJ bWlwaV9kc2lfZGNzX2VudGVyX3NsZWVwX21vZGUoY3R4LT5kc2kpOwo+ICsJcmV0dXJuIHJldDsK PiArfQo+ICsKPiArc3RhdGljIGludCByYjA3MGQzMF9wYW5lbF9kaXNhYmxlKHN0cnVjdCBkcm1f cGFuZWwgKnBhbmVsKQo+ICt7Cj4gKwlzdHJ1Y3QgcmIwNzBkMzBfcGFuZWwgKmN0eCA9IHBhbmVs X3RvX3JiMDcwZDMwX3BhbmVsKHBhbmVsKTsKPiArCj4gKwliYWNrbGlnaHRfZGlzYWJsZShjdHgt PmJhY2tsaWdodCk7Cj4gKwlyZXR1cm4gbWlwaV9kc2lfZGNzX2VudGVyX3NsZWVwX21vZGUoY3R4 LT5kc2kpOwo+ICt9Cj4gKwo+ICsvKiBEZWZhdWx0IHRpbWluZ3MgKi8KPiArc3RhdGljIGNvbnN0 IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlIGRlZmF1bHRfbW9kZSA9IHsKPiArCS5jbG9jawkJPSA1 MTIwNiwKPiArCS5oZGlzcGxheQk9IDEwMjQsCj4gKwkuaHN5bmNfc3RhcnQJPSAxMDI0ICsgMTYw LAo+ICsJLmhzeW5jX2VuZAk9IDEwMjQgKyAxNjAgKyA4MCwKPiArCS5odG90YWwJCT0gMTAyNCAr IDE2MCArIDgwICsgODAsCj4gKwkudmRpc3BsYXkJPSA2MDAsCj4gKwkudnN5bmNfc3RhcnQJPSA2 MDAgKyAxMiwKPiArCS52c3luY19lbmQJPSA2MDAgKyAxMiArIDEwLAo+ICsJLnZ0b3RhbAkJPSA2 MDAgKyAxMiArIDEwICsgMTMsCj4gKwkudnJlZnJlc2gJPSA2MCwKPiArfTsKaGVpZ2h0IGFuZCB3 aWR0aCBtaXNzaW5nIGhlcmUuIFNlZW1zIGJldHRlciB0byBhZGQgdGhlbSBoZXJlIHRoYW4gaGlk aW5nIGluIGNvZGUgYmVsb3cuCklzIGl0IG9uIHB1cnBvc2UgdGhhdCBubyBmbGFncyBhcmUgc3Bl Y2lmaWVkPwoKPiArCj4gK3N0YXRpYyBpbnQgcmIwNzBkMzBfcGFuZWxfZ2V0X21vZGVzKHN0cnVj dCBkcm1fcGFuZWwgKnBhbmVsKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yID0gcGFuZWwtPmNvbm5lY3RvcjsKPiArCXN0cnVjdCByYjA3MGQzMF9wYW5lbCAqY3R4ID0g cGFuZWxfdG9fcmIwNzBkMzBfcGFuZWwocGFuZWwpOwo+ICsJc3RydWN0IGRybV9kaXNwbGF5X21v ZGUgKm1vZGU7Cj4gKwlzdGF0aWMgY29uc3QgdTMyIGJ1c19mb3JtYXQgPSBNRURJQV9CVVNfRk1U X1JHQjg4OF8xWDI0Owo+ICsKPiArCW1vZGUgPSBkcm1fbW9kZV9kdXBsaWNhdGUocGFuZWwtPmRy bSwgJmRlZmF1bHRfbW9kZSk7Cj4gKwlpZiAoIW1vZGUpIHsKPiArCQlkZXZfZXJyKCZjdHgtPmRz aS0+ZGV2LCAiZmFpbGVkIHRvIGFkZCBtb2RlICV1eCV1eEAldVxuIiwKPiArCQkJZGVmYXVsdF9t b2RlLmhkaXNwbGF5LCBkZWZhdWx0X21vZGUudmRpc3BsYXksCj4gKwkJCWRlZmF1bHRfbW9kZS52 cmVmcmVzaCk7ClVzZSIKCQlEUk1fREVWX0VSUk9SKCZjdHgtPmRzaS0+ZGV2LAoJCQkgICAgICAi ZmFpbGVkIHRvIGFkZCBtb2RlIiBEUk1fTU9ERV9GTVQsCgkJCSAgICAgIERSTV9NT0RFX0FSRyht b2RlKSk7Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwl9Cj4gKwo+ICsJZHJtX21vZGVfc2V0X25h bWUobW9kZSk7Cj4gKwo+ICsJbW9kZS0+dHlwZSA9IERSTV9NT0RFX1RZUEVfRFJJVkVSIHwgRFJN X01PREVfVFlQRV9QUkVGRVJSRUQ7Cj4gKwlkcm1fbW9kZV9wcm9iZWRfYWRkKGNvbm5lY3Rvciwg bW9kZSk7Cj4gKwo+ICsJcGFuZWwtPmNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLmJwYyA9IDg7Cj4g KwlwYW5lbC0+Y29ubmVjdG9yLT5kaXNwbGF5X2luZm8ud2lkdGhfbW0gPSAxNTQ7Cj4gKwlwYW5l bC0+Y29ubmVjdG9yLT5kaXNwbGF5X2luZm8uaGVpZ2h0X21tID0gODU7ClNlZSBjb21tZW50IG9u IGhlaWdodCBhYm92ZS4KU2FtZSBnb2VzIGZvciBicGMKCj4gKwlkcm1fZGlzcGxheV9pbmZvX3Nl dF9idXNfZm9ybWF0cygmY29ubmVjdG9yLT5kaXNwbGF5X2luZm8sCj4gKwkJCQkJICZidXNfZm9y bWF0LCAxKTsKPiArCj4gKwlyZXR1cm4gMTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVj dCBkcm1fcGFuZWxfZnVuY3MgcmIwNzBkMzBfcGFuZWxfZnVuY3MgPSB7Cj4gKwkuZ2V0X21vZGVz CT0gcmIwNzBkMzBfcGFuZWxfZ2V0X21vZGVzLAo+ICsJLnByZXBhcmUJPSByYjA3MGQzMF9wYW5l bF9wcmVwYXJlLAo+ICsJLmVuYWJsZQkJPSByYjA3MGQzMF9wYW5lbF9lbmFibGUsCj4gKwkuZGlz YWJsZQk9IHJiMDcwZDMwX3BhbmVsX2Rpc2FibGUsCj4gKwkudW5wcmVwYXJlCT0gcmIwNzBkMzBf cGFuZWxfdW5wcmVwYXJlLAo+ICt9Owo+ICsKPiArc3RhdGljIGludCByYjA3MGQzMF9wYW5lbF9k c2lfcHJvYmUoc3RydWN0IG1pcGlfZHNpX2RldmljZSAqZHNpKQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2 aWNlX25vZGUgKm5wOwo+ICsJc3RydWN0IHJiMDcwZDMwX3BhbmVsICpjdHg7Cj4gKwlpbnQgcmV0 Owo+ICsKPiArCWN0eCA9IGRldm1fa3phbGxvYygmZHNpLT5kZXYsIHNpemVvZigqY3R4KSwgR0ZQ X0tFUk5FTCk7Cj4gKwlpZiAoIWN0eCkKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwljdHgt PnN1cHBseSA9IGRldm1fcmVndWxhdG9yX2dldCgmZHNpLT5kZXYsICJ2Y2MtbGNkIik7Cj4gKwlp ZiAoSVNfRVJSKGN0eC0+c3VwcGx5KSkKPiArCQlyZXR1cm4gUFRSX0VSUihjdHgtPnN1cHBseSk7 Cj4gKwo+ICsJbWlwaV9kc2lfc2V0X2RydmRhdGEoZHNpLCBjdHgpOwo+ICsJY3R4LT5kc2kgPSBk c2k7Cj4gKwo+ICsJZHJtX3BhbmVsX2luaXQoJmN0eC0+cGFuZWwpOwo+ICsJY3R4LT5wYW5lbC5k ZXYgPSAmZHNpLT5kZXY7Cj4gKwljdHgtPnBhbmVsLmZ1bmNzID0gJnJiMDcwZDMwX3BhbmVsX2Z1 bmNzOwo+ICsKPiArCWN0eC0+Z3Bpb3MucmVzZXQgPSBkZXZtX2dwaW9kX2dldCgmZHNpLT5kZXYs ICJyZXNldCIsIEdQSU9EX09VVF9MT1cpOwo+ICsJaWYgKElTX0VSUihjdHgtPmdwaW9zLnJlc2V0 KSkgewo+ICsJCWRldl9lcnIoJmRzaS0+ZGV2LCAiQ291bGRuJ3QgZ2V0IG91ciByZXNldCBHUElP XG4iKTsKPiArCQlyZXR1cm4gUFRSX0VSUihjdHgtPmdwaW9zLnJlc2V0KTsKPiArCX0KPiArCj4g KwljdHgtPmdwaW9zLnBvd2VyID0gZGV2bV9ncGlvZF9nZXQoJmRzaS0+ZGV2LCAicG93ZXIiLCBH UElPRF9PVVRfTE9XKTsKPiArCWlmIChJU19FUlIoY3R4LT5ncGlvcy5wb3dlcikpIHsKPiArCQlk ZXZfZXJyKCZkc2ktPmRldiwgIkNvdWxkbid0IGdldCBvdXIgcG93ZXIgR1BJT1xuIik7Cj4gKwkJ cmV0dXJuIFBUUl9FUlIoY3R4LT5ncGlvcy5wb3dlcik7Cj4gKwl9Cj4gKwo+ICsJY3R4LT5ncGlv cy51cGRuID0gZGV2bV9ncGlvZF9nZXQoJmRzaS0+ZGV2LCAidXBkbiIsIEdQSU9EX09VVF9MT1cp Owo+ICsJaWYgKElTX0VSUihjdHgtPmdwaW9zLnVwZG4pKSB7Cj4gKwkJZGV2X2VycigmZHNpLT5k ZXYsICJDb3VsZG4ndCBnZXQgb3VyIHVwZG4gR1BJT1xuIik7Cj4gKwkJcmV0dXJuIFBUUl9FUlIo Y3R4LT5ncGlvcy51cGRuKTsKPiArCX0KVGhpcyBncGlvIGlzIG5ldmVyIHVzZWQsIGl0IGlzIG9u bHkgcmVhZCBmcm9tIERUCgoKPiArCj4gKwljdHgtPmdwaW9zLnNobHIgPSBkZXZtX2dwaW9kX2dl dCgmZHNpLT5kZXYsICJzaGxyIiwgR1BJT0RfT1VUX0xPVyk7Cj4gKwlpZiAoSVNfRVJSKGN0eC0+ Z3Bpb3Muc2hscikpIHsKPiArCQlkZXZfZXJyKCZkc2ktPmRldiwgIkNvdWxkbid0IGdldCBvdXIg c2hsciBHUElPXG4iKTsKPiArCQlyZXR1cm4gUFRSX0VSUihjdHgtPmdwaW9zLnNobHIpOwo+ICsJ fQpUaGlzIGdwaW8gaXMgbmV2ZXIgdXNlZCwgaXQgaXMgb25seSByZWFkIGZyb20gRFQKCj4gKwo+ ICsJbnAgPSBvZl9wYXJzZV9waGFuZGxlKGRzaS0+ZGV2Lm9mX25vZGUsICJiYWNrbGlnaHQiLCAw KTsKPiArCWlmIChucCkgewo+ICsJCWN0eC0+YmFja2xpZ2h0ID0gb2ZfZmluZF9iYWNrbGlnaHRf Ynlfbm9kZShucCk7Cj4gKwkJb2Zfbm9kZV9wdXQobnApOwo+ICsKPiArCQlpZiAoIWN0eC0+YmFj a2xpZ2h0KQo+ICsJCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKPiArCX0KVXNlIGRldm1fb2ZfZmlu ZF9iYWNrbGlnaHQoKQoKPiArCj4gKwlyZXQgPSBkcm1fcGFuZWxfYWRkKCZjdHgtPnBhbmVsKTsK PiArCWlmIChyZXQgPCAwKQo+ICsJCWdvdG8gZnJlZV9iYWNrbGlnaHQ7Cj4gKwo+ICsJZHNpLT5t b2RlX2ZsYWdzID0gTUlQSV9EU0lfTU9ERV9WSURFTyB8IE1JUElfRFNJX01PREVfVklERU9fQlVS U1QgfCBNSVBJX0RTSV9NT0RFX0xQTTsKPiArCWRzaS0+Zm9ybWF0ID0gTUlQSV9EU0lfRk1UX1JH Qjg4ODsKPiArCWRzaS0+bGFuZXMgPSA0Owo+ICsKPiArCXJldHVybiBtaXBpX2RzaV9hdHRhY2go ZHNpKTsKPiArCj4gK2ZyZWVfYmFja2xpZ2h0Ogo+ICsJYmFja2xpZ2h0X3B1dChjdHgtPmJhY2ts aWdodCk7CklmIGRldm1fb2ZfZmluZF9iYWNrbGlnaHQoKSBpcyB1c2VkIHRoaXMgY2FuIGdvLgoK PiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgcmIwNzBkMzBfcGFuZWxfZHNp X3JlbW92ZShzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2kpCj4gK3sKPiArCXN0cnVjdCByYjA3 MGQzMF9wYW5lbCAqY3R4ID0gbWlwaV9kc2lfZ2V0X2RydmRhdGEoZHNpKTsKPiArCj4gKwltaXBp X2RzaV9kZXRhY2goZHNpKTsKPiArCWRybV9wYW5lbF9yZW1vdmUoJmN0eC0+cGFuZWwpOwo+ICsJ YmFja2xpZ2h0X3B1dChjdHgtPmJhY2tsaWdodCk7CklmIGRldm1fb2ZfZmluZF9iYWNrbGlnaHQo KSBpcyB1c2VkIHRoaXMgY2FuIGdvLgoKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3Rh dGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgcmIwNzBkMzBfcGFuZWxfb2ZfbWF0Y2hbXSA9 IHsKPiArCXsgLmNvbXBhdGlibGUgPSAicm9uZG8scmIwNzBkMzAiIH0sCj4gKwl7IC8qIHNlbnRp bmVsICovIH0sCj4gK307Cj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHJiMDcwZDMwX3BhbmVs X29mX21hdGNoKTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgbWlwaV9kc2lfZHJpdmVyIHJiMDcwZDMw X3BhbmVsX2RyaXZlciA9IHsKPiArCS5wcm9iZSA9IHJiMDcwZDMwX3BhbmVsX2RzaV9wcm9iZSwK PiArCS5yZW1vdmUgPSByYjA3MGQzMF9wYW5lbF9kc2lfcmVtb3ZlLAo+ICsJLmRyaXZlciA9IHsK PiArCQkubmFtZSA9ICJwYW5lbC1yb25kby1yYjA3MGQzMCIsCj4gKwkJLm9mX21hdGNoX3RhYmxl CT0gcmIwNzBkMzBfcGFuZWxfb2ZfbWF0Y2gsCj4gKwl9LAo+ICt9Owo+ICttb2R1bGVfbWlwaV9k c2lfZHJpdmVyKHJiMDcwZDMwX3BhbmVsX2RyaXZlcik7Cj4gKwo+ICtNT0RVTEVfQVVUSE9SKCJC b3JpcyBCcmV6aWxsb24gPGJvcmlzLmJyZXppbGxvbkBib290bGluLmNvbT4iKTsKPiArTU9EVUxF X0FVVEhPUigiS29uc3RhbnRpbiBTdWRha292IDxrLnN1ZGFrb3ZAaW50ZWdyYXNvdXJjZXMuY29t PiIpOwo+ICtNT0RVTEVfREVTQ1JJUFRJT04oIlJvbmRvIFJCMDcwRDMwIFBhbmVsIERyaXZlciIp Owo+ICtNT0RVTEVfTElDRU5TRSgiR1BMIik7Cj4gLS0gCj4gZ2l0LXNlcmllcyAwLjkuMQo+IF9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gZHJpLWRldmVs IG1haWxpbmcgbGlzdAo+IGRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbApfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGlu ZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK