From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sam Ravnborg Subject: Re: [PATCH 09/10] drm/panel: Add Feiyang FY07024DI26A30-D MIPI-DSI LCD panel Date: Sun, 4 Nov 2018 21:43:54 +0100 Message-ID: <20181104204354.GA12651@ravnborg.org> References: <20181103100900.30313-1-jagan@amarulasolutions.com> <20181103100900.30313-10-jagan@amarulasolutions.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20181103100900.30313-10-jagan@amarulasolutions.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Jagan Teki Cc: Mark Rutland , devicetree@vger.kernel.org, Jernej Skrabec , Maxime Ripard , linux-sunxi@googlegroups.com, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Vasily Khoruzhick , David Airlie , Chen-Yu Tsai , Rob Herring , Thierry Reding , TL Lim , Michael Trimarchi , Sean Paul , linux-arm-kernel@lists.infradead.org, Icenowy Zheng List-Id: devicetree@vger.kernel.org SGkgSmFnYW4uCgpSZWFkaW5nIHRocm91Z2ggdGhlIGRyaXZlciB0cmlnZ2VyZWQgYSBmZXcgY29t bWVudHMuClJlYWQgYW5kIGRlY2lkZSB3aGF0IGlzIHVzZWZ1bGwuCgoJU2FtCgo+IEFkZCBwYW5l bCBkcml2ZXIgZm9yIGl0Lgo+IAo+IFNpZ25lZC1vZmYtYnk6IEphZ2FuIFRla2kgPGphZ2FuQGFt YXJ1bGFzb2x1dGlvbnMuY29tPgo+IC0tLQo+IE5vdGU6IGluaXQgc2VxdWVuY2UgaXMgcmVmZXJl bmNlZCBmcm9tIAo+IGh0dHBzOi8vZ2l0aHViLmNvbS9sb25nc2xlZXAvbGludXgtcGluZTY0L2Js b2IvcGluZTY0LWhhY2tzLTEuMi9kcml2ZXJzL3ZpZGVvL3N1bnhpL2Rpc3AyL2Rpc3AvbGNkL21i NzA5X21pcGkuYwoKVGhpcyBub3RlIHNob3VsZCBwZXJmZXJhYmx5IGJlIHBhcnQgb2YgdGhlIGNv bW1pdCBtZXNzYWdlIG9yIG1heWJlIGluY2x1ZGVkCmluIHRoZSBjb2RlIHNvIGl0IGlzIGVhc2ll IHRvIHRyYWNrIGJhY2suCgoKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwtZmVp eWFuZy1meTA3MDI0ZGkyNmEzMGQuYwo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTggQW1h cnVsYSBTb2x1dGlvbnMKPiArICogQXV0aG9yOiBKYWdhbiBUZWtpIDxqYWdhbkBhbWFydWxhc29s dXRpb25zLmNvbT4KPiArICovCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+Cj4g KyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgo+ICsjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Cj4g KyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Cj4gKyNp bmNsdWRlIDxsaW51eC9mYi5oPgo+ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Cj4gKyNpbmNs dWRlIDxsaW51eC9tb2R1bGUuaD4KPiArCj4gKyNpbmNsdWRlIDxsaW51eC9ncGlvL2NvbnN1bWVy Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KPiArCj4gKyNpbmNs dWRlIDxkcm0vZHJtX21pcGlfZHNpLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX21vZGVzLmg+Cj4g KyNpbmNsdWRlIDxkcm0vZHJtX3BhbmVsLmg+Cj4gKwoKCgo+ICsjaW5jbHVkZSA8dmlkZW8vbWlw aV9kaXNwbGF5Lmg+CgpJIGNhbm5vdCBzZWUgdGhpcyBpbmNsdWRlIGlzIHVzZWQgYW55d2hlcmUg aW4gdGhpcyAuYyBmaWxlLgpUaGUgZmV3IE1JUElfIGNvbnN0YW50cyBvcmlnaW5hdGVzIGZyb20g PGRybS9kcm1fbWlwaV9kc2kuaD4KYW5kIEkgdGhpbmsgdGhlIGluY2x1ZGUgY2FuIGJlIGRyb3Bw ZWQuCgo+ICtzdHJ1Y3QgZnkwNzAyNGRpMjZhMzBkIHsKPiArCXN0cnVjdCBkcm1fcGFuZWwJcGFu ZWw7Cj4gKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlCSpkc2k7Cj4gKwo+ICsJc3RydWN0IGJhY2ts aWdodF9kZXZpY2UJKmJhY2tsaWdodDsKPiArCXN0cnVjdCByZWd1bGF0b3IJKmR2ZGQ7Cj4gKwlz dHJ1Y3QgcmVndWxhdG9yCSphdmRkOwo+ICsJc3RydWN0IGdwaW9fZGVzYwkqcmVzZXQ7Cj4gKwo+ ICsJYm9vbAkJCWlzX2VuYWJsZWQ7Cj4gKwlib29sCQkJaXNfcHJlcGFyZWQ7Cj4gK307Ck1heWJl IGJpa2VzaGVkZGluZyBhIGxpdHRsZSBoZXJlLgpCdXQgdGhlIHVzZSBvZiBuYW1lcyBsaWtlIGZ5 MDcwMjRkaTI2YTMwZCBkb2VzIG5vdCBoZWxwIHJlYWRhYmlsaXR5LgpKdXN0IG5hbWUgaXQgZmVp eWFuZyBsaWtlIGZvciBleGFtcGxlIHdlIHNlZSBpbiBwYW5lbC1pbm5vbHV4LXAwNzl6Y2EuYwp3 aGVyZSB0aGlzIGRyaXZlcyBpcyBzb21laG93IGluc3BpcmVkIGZyb20uIChIZXJlIHRoZSBuYW1l IGlzIGlubm9sdXgpLgoKCgo+ICsKPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgZnkwNzAyNGRpMjZh MzBkICpwYW5lbF90b19meTA3MDI0ZGkyNmEzMGQoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCj4g K3sKPiArCXJldHVybiBjb250YWluZXJfb2YocGFuZWwsIHN0cnVjdCBmeTA3MDI0ZGkyNmEzMGQs IHBhbmVsKTsKPiArfQo+ICsKPiArc3RydWN0IGZ5MDcwMjRkaTI2YTMwZF9pbml0X2NtZCB7Cj4g KwlzaXplX3QgbGVuOwo+ICsJY29uc3QgY2hhciAqZGF0YTsKPiArfTsKPiArCj4gKyNkZWZpbmUg RlkwNzAyNERJMjZBMzBEKC4uLikgeyBcCj4gKwkubGVuID0gc2l6ZW9mKChjaGFyW10pe19fVkFf QVJHU19ffSksIFwKPiArCS5kYXRhID0gKGNoYXJbXSl7X19WQV9BUkdTX199IH0KPiArCj4gK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgZnkwNzAyNGRpMjZhMzBkX2luaXRfY21kIGZ5MDcwMjRkaTI2YTMw ZF9pbml0X2NtZHNbXSA9IHsKPiArCUZZMDcwMjRESTI2QTMwRCgweDgwLCAweDU4KSwKPiArCUZZ MDcwMjRESTI2QTMwRCgweDgxLCAweDQ3KSwKPiArCUZZMDcwMjRESTI2QTMwRCgweDgyLCAweEQ0 KSwKPiArCUZZMDcwMjRESTI2QTMwRCgweDgzLCAweDg4KSwKPiArCUZZMDcwMjRESTI2QTMwRCgw eDg0LCAweEE5KSwKPiArCUZZMDcwMjRESTI2QTMwRCgweDg1LCAweEMzKSwKPiArCUZZMDcwMjRE STI2QTMwRCgweDg2LCAweDgyKSwKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgZnkwNzAyNGRpMjZh MzBkX3ByZXBhcmUoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCj4gK3sKPiArCXN0cnVjdCBmeTA3 MDI0ZGkyNmEzMGQgKmN0eCA9IHBhbmVsX3RvX2Z5MDcwMjRkaTI2YTMwZChwYW5lbCk7Cj4gKwlz dHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkc2kgPSBjdHgtPmRzaTsKPiArCXVuc2lnbmVkIGludCBp Owo+ICsJaW50IHJldDsKPiArCj4gKwlpZiAoY3R4LT5pc19wcmVwYXJlZCkKPiArCQlyZXR1cm4g MDsKPiArCj4gKwlncGlvZF9zZXRfdmFsdWUoY3R4LT5yZXNldCwgMSk7Cj4gKwltc2xlZXAoNTAp Owo+ICsKPiArCWdwaW9kX3NldF92YWx1ZShjdHgtPnJlc2V0LCAwKTsKPiArCW1zbGVlcCgyMCk7 Cj4gKwo+ICsJZ3Bpb2Rfc2V0X3ZhbHVlKGN0eC0+cmVzZXQsIDEpOwo+ICsJbXNsZWVwKDIwMCk7 Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZnkwNzAyNGRpMjZhMzBkX2luaXRf Y21kcyk7IGkrKykgewo+ICsJCWNvbnN0IHN0cnVjdCBmeTA3MDI0ZGkyNmEzMGRfaW5pdF9jbWQg KmNtZCA9Cj4gKwkJCQkJCSZmeTA3MDI0ZGkyNmEzMGRfaW5pdF9jbWRzW2ldOwo+ICsKPiArCQly ZXQgPSBtaXBpX2RzaV9kY3Nfd3JpdGVfYnVmZmVyKGRzaSwgY21kLT5kYXRhLCBjbWQtPmxlbik7 Cj4gKwkJaWYgKHJldCA8IDApCj4gKwkJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0g bWlwaV9kc2lfZGNzX3NldF9kaXNwbGF5X29uKGRzaSk7Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJ CWRldl9lcnIocGFuZWwtPmRldiwgImZhaWxlZCB0byBzZXQgZGlzcGxheSBvbjogJWRcbiIsIHJl dCk7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KR2VuZXJhbCBjb21tZW50LgpDb25zaWRlciB1c2lu ZyBEUk1fREVWX0VSUk9SKC4uLikgdG8gYmUgY29uc2lzdGVudCB3aXRoCndoYXQgaXMgdXNlZCBp biBtYW55IG90aGVyIGRybSBkcml2ZXJzLgoKCj4gK3N0YXRpYyBpbnQgZnkwNzAyNGRpMjZhMzBk X2VuYWJsZShzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkKPiArewo+ICsJc3RydWN0IGZ5MDcwMjRk aTI2YTMwZCAqY3R4ID0gcGFuZWxfdG9fZnkwNzAyNGRpMjZhMzBkKHBhbmVsKTsKPiArCj4gKwlp ZiAoY3R4LT5pc19lbmFibGVkKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCW1zbGVlcCgxMjApOwpU aGlzIG1zbGVlcCgpIGxvb2tzIHVuanVzdGlmaWVkLCBhcyBubyBvdGhlciBzdGF0ZW1lbnQgcHJl Y2VlZCBpdC4KSWYgcHJlcGFyZSgpIHJlcXVpcmVzIGEgZGVsYXkgdGhlbiBtYXliZSB0aGUgZGVs YXkgc2hvdWxkIGJlIHRoZXJlPwoKPiArCj4gK3N0YXRpYyBpbnQgZnkwNzAyNGRpMjZhMzBkX3Vu cHJlcGFyZShzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkKPiArewo+ICsJc3RydWN0IGZ5MDcwMjRk aTI2YTMwZCAqY3R4ID0gcGFuZWxfdG9fZnkwNzAyNGRpMjZhMzBkKHBhbmVsKTsKPiArCWludCBy ZXQ7Cj4gKwo+ICsJaWYgKCFjdHgtPmlzX3ByZXBhcmVkKQo+ICsJCXJldHVybiAwOwo+ICsKPiAr CXJldCA9IG1pcGlfZHNpX2Rjc19zZXRfZGlzcGxheV9vZmYoY3R4LT5kc2kpOwo+ICsJaWYgKHJl dCA8IDApCj4gKwkJZGV2X2VycihwYW5lbC0+ZGV2LCAiZmFpbGVkIHRvIHNldCBkaXNwbGF5IG9m ZjogJWRcbiIsIHJldCk7Cj4gKwo+ICsJcmV0ID0gbWlwaV9kc2lfZGNzX2VudGVyX3NsZWVwX21v ZGUoY3R4LT5kc2kpOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJZGV2X2VycihwYW5lbC0+ZGV2LCAi ZmFpbGVkIHRvIGVudGVyIHNsZWVwIG1vZGU6ICVkXG4iLCByZXQpOwo+ICsKPiArCW1zbGVlcCgx MDApOwo+ICsKPiArCXJlZ3VsYXRvcl9kaXNhYmxlKGN0eC0+YXZkZCk7Cj4gKwo+ICsJcmVndWxh dG9yX2Rpc2FibGUoY3R4LT5kdmRkKTsKPiArCj4gKwlncGlvZF9zZXRfdmFsdWUoY3R4LT5yZXNl dCwgMCk7Cj4gKwo+ICsJZ3Bpb2Rfc2V0X3ZhbHVlKGN0eC0+cmVzZXQsIDEpOwo+ICsKPiArCWdw aW9kX3NldF92YWx1ZShjdHgtPnJlc2V0LCAwKTsKCkluIHByZXBhcmUoKSB0aGVyZSBhcmUgZGVh bHlzIGFyb3VuZCBhc3NlcnRpbmcgcmVzZXQgYW5kIHJlbGVhc2luZyBhZ2Fpbi4KQ29uc2lkZXIg dXNpbmcgYSBzbWFsbCBoZWxwZXIgZnVuY3Rpb24gYW5kIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUK ZGVsYXlzLgoKPiArCj4gKwljdHgtPmlzX3ByZXBhcmVkID0gZmFsc2U7Cj4gKwo+ICsJcmV0dXJu IDA7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBmeTA3 MDI0ZGkyNmEzMGRfZGVmYXVsdF9tb2RlID0gewo+ICsJLmNsb2NrID0gNTUwMDAsCj4gKwkudnJl ZnJlc2ggPSA2MCwKPiArCj4gKwkuaGRpc3BsYXkgPSAxMDI0LAo+ICsJLmhzeW5jX3N0YXJ0ID0g MTAyNCArIDM5NiwKPiArCS5oc3luY19lbmQgPSAxMDI0ICsgMzk2ICsgMjAsCj4gKwkuaHRvdGFs ID0gMTAyNCArIDM5NiArIDIwICsgMTAwLAo+ICsKPiArCS52ZGlzcGxheSA9IDYwMCwKPiArCS52 c3luY19zdGFydCA9IDYwMCArIDEyLAo+ICsJLnZzeW5jX2VuZCA9IDYwMCArIDEyICsgMiwKPiAr CS52dG90YWwgPSA2MDAgKyAxMiArIDIgKyAyMSwKPiArfTsKQ29uc2lkZXIgdG8gYXNzaWduIC5m bGFncyAtIGlmIGZvciBub3RoaWduIGVsc2UgdGhlbiB0byBkb2N1bWVudAp0aGUgZGVmYXVsdCB2 YWx1ZXMuCk1hbnkgcGFuZWxzIGhhdmUgc3RhcnRlZCB0byBkbyBzbyBpbiBwYW5lbC1zaW1wbGUu YyBmb3IgaW5zdGFuY2UuCgpUaGlzIGlzIGFsc28gYSBwcm9wZXIgcGxhY2UgdG8gc3BlY2lmeSB0 aGUgd2lkdGhfbW0gYW5kIGhlaWdodF9tbSwKc28gdGhlIHBoeXNpY2FsIHNpemUgaXMgYXZhaWxh YmxlLgpBc3N1bWluZyB0aGlzIGlzIGtub3duLgoKPiArCj4gK3N0YXRpYyBpbnQgZnkwNzAyNGRp MjZhMzBkX2dldF9tb2RlcyhzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkKPiArewo+ICsJc3RydWN0 IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9IHBhbmVsLT5jb25uZWN0b3I7Cj4gKwlzdHJ1Y3Qg ZnkwNzAyNGRpMjZhMzBkICpjdHggPSBwYW5lbF90b19meTA3MDI0ZGkyNmEzMGQocGFuZWwpOwo+ ICsJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGU7Cj4gKwo+ICsJbW9kZSA9IGRybV9tb2Rl X2R1cGxpY2F0ZShwYW5lbC0+ZHJtLCAmZnkwNzAyNGRpMjZhMzBkX2RlZmF1bHRfbW9kZSk7Cj4g KwlpZiAoIW1vZGUpIHsKPiArCQlkZXZfZXJyKCZjdHgtPmRzaS0+ZGV2LCAiZmFpbGVkIHRvIGFk ZCBtb2RlICV1eCV1eEAldVxuIiwKPiArCQkJZnkwNzAyNGRpMjZhMzBkX2RlZmF1bHRfbW9kZS5o ZGlzcGxheSwKPiArCQkJZnkwNzAyNGRpMjZhMzBkX2RlZmF1bHRfbW9kZS52ZGlzcGxheSwKPiAr CQkJZnkwNzAyNGRpMjZhMzBkX2RlZmF1bHRfbW9kZS52cmVmcmVzaCk7Cj4gKwkJcmV0dXJuIC1F Tk9NRU07Cj4gKwl9Cj4gKwo+ICsJZHJtX21vZGVfc2V0X25hbWUobW9kZSk7Cj4gKwo+ICsJbW9k ZS0+dHlwZSA9IERSTV9NT0RFX1RZUEVfRFJJVkVSIHwgRFJNX01PREVfVFlQRV9QUkVGRVJSRUQ7 Cj4gKwlkcm1fbW9kZV9wcm9iZWRfYWRkKGNvbm5lY3RvciwgbW9kZSk7Cj4gKwo+ICsJcmV0dXJu IDE7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX3BhbmVsX2Z1bmNzIGZ5MDcw MjRkaTI2YTMwZF9mdW5jcyA9IHsKPiArCS5kaXNhYmxlID0gZnkwNzAyNGRpMjZhMzBkX2Rpc2Fi bGUsCj4gKwkudW5wcmVwYXJlID0gZnkwNzAyNGRpMjZhMzBkX3VucHJlcGFyZSwKPiArCS5wcmVw YXJlID0gZnkwNzAyNGRpMjZhMzBkX3ByZXBhcmUsCj4gKwkuZW5hYmxlID0gZnkwNzAyNGRpMjZh MzBkX2VuYWJsZSwKPiArCS5nZXRfbW9kZXMgPSBmeTA3MDI0ZGkyNmEzMGRfZ2V0X21vZGVzLAo+ ICt9Owo+ICsKPiArc3RhdGljIGludCBmeTA3MDI0ZGkyNmEzMGRfZHNpX3Byb2JlKHN0cnVjdCBt aXBpX2RzaV9kZXZpY2UgKmRzaSkKPiArewo+ICsJc3RydWN0IGRldmljZV9ub2RlICpucDsKPiAr CXN0cnVjdCBmeTA3MDI0ZGkyNmEzMGQgKmN0eDsKPiArCWludCByZXQ7Cj4gKwo+ICsJY3R4ID0g ZGV2bV9remFsbG9jKCZkc2ktPmRldiwgc2l6ZW9mKCpjdHgpLCBHRlBfS0VSTkVMKTsKPiArCWlm ICghY3R4KQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsJbWlwaV9kc2lfc2V0X2RydmRhdGEoZHNp LCBjdHgpOwo+ICsJY3R4LT5kc2kgPSBkc2k7Cj4gKwo+ICsJZHJtX3BhbmVsX2luaXQoJmN0eC0+ cGFuZWwpOwo+ICsJY3R4LT5wYW5lbC5kZXYgPSAmZHNpLT5kZXY7Cj4gKwljdHgtPnBhbmVsLmZ1 bmNzID0gJmZ5MDcwMjRkaTI2YTMwZF9mdW5jczsKPiArCj4gKwljdHgtPmR2ZGQgPSBkZXZtX3Jl Z3VsYXRvcl9nZXQoJmRzaS0+ZGV2LCAiZHZkZCIpOwo+ICsJaWYgKElTX0VSUihjdHgtPmR2ZGQp KSB7Cj4gKwkJZGV2X2VycigmZHNpLT5kZXYsICJDb3VsZG4ndCBnZXQgZHZkZCByZWd1bGF0b3Jc biIpOwo+ICsJCXJldHVybiBQVFJfRVJSKGN0eC0+ZHZkZCk7Cj4gKwl9Cj4gKwo+ICsJY3R4LT5h dmRkID0gZGV2bV9yZWd1bGF0b3JfZ2V0KCZkc2ktPmRldiwgImF2ZGQiKTsKPiArCWlmIChJU19F UlIoY3R4LT5hdmRkKSkgewo+ICsJCWRldl9lcnIoJmRzaS0+ZGV2LCAiQ291bGRuJ3QgZ2V0IGF2 ZGQgcmVndWxhdG9yXG4iKTsKPiArCQlyZXR1cm4gUFRSX0VSUihjdHgtPmF2ZGQpOwo+ICsJfQo+ ICsKPiArCXJldCA9IHJlZ3VsYXRvcl9lbmFibGUoY3R4LT5kdmRkKTsKPiArCWlmIChyZXQpCj4g KwkJcmV0dXJuIHJldDsKPiArCj4gKwltc2xlZXAoMTAwKTsKPiArCj4gKwlyZXQgPSByZWd1bGF0 b3JfZW5hYmxlKGN0eC0+YXZkZCk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ ICsJbXNsZWVwKDUpOwpUaGUgcmVndWxhdG9ycyBhcmUgb25seSBlbmFibGVkIGluIHRoZSBwcm9i ZSBmdW5jdGlvbi4KQnV0IGRpc2FibGVkIGluIHRoZSB1bnByZXBhcmUoKSBmdW5jdGlvbi4KCkxv b2tpbmcgYXQgb3RoZXIgZHJpdmVycyBpcyBzZWVtcyB0aGF0IHRoZSBjb21tb24gd2F5IGlzCnRv IGVuYWJsZSB0aGVzZSBpbiBwcmVwYXJlKCkgYW5kIGRpc2FibGUgdGhlc2UgaW4gdW5wcmVwYXJl KCkuCkFueSBwYXJ0aWN1bGFyIHJlYXNvbiB0aGUgcmVndWxhdG9ycyBhcmUgZW5hYmxlZCBpbiBw cm9iZSgpPwpNYXliZSBzb21ldGhpbmcgdG8gZG8gd2l0aCBiYWNrbGlnaHQ/CklmIHNvLCB0aGVu IHBsZWFzZSBwdXQgYSBjb21tZW50LgpBbHNvIGNvbnNpZGVyIGlmIHRoZXJlIGlzIHNvbWV0aGln biBtaXNzaW5nLCBhcyB0aGUgcGFuZWwgY2Fubm90CmJlIHVzZWQgYW55bW9yZSBhZnRlciBhbiB1 bnByZWFyZSgpCgoKPiArCj4gKwljdHgtPnJlc2V0ID0gZGV2bV9ncGlvZF9nZXQoJmRzaS0+ZGV2 LCAicmVzZXQiLCBHUElPRF9PVVRfTE9XKTsKPiArCWlmIChJU19FUlIoY3R4LT5yZXNldCkpIHsK PiArCQlkZXZfZXJyKCZkc2ktPmRldiwgIkNvdWxkbid0IGdldCBvdXIgcmVzZXQgR1BJT1xuIik7 Cj4gKwkJcmV0dXJuIFBUUl9FUlIoY3R4LT5yZXNldCk7Cj4gKwl9Cj4gKwo+ICsJbnAgPSBvZl9w YXJzZV9waGFuZGxlKGRzaS0+ZGV2Lm9mX25vZGUsICJiYWNrbGlnaHQiLCAwKTsKPiArCWlmIChu cCkgewo+ICsJCWN0eC0+YmFja2xpZ2h0ID0gb2ZfZmluZF9iYWNrbGlnaHRfYnlfbm9kZShucCk7 Cj4gKwkJb2Zfbm9kZV9wdXQobnApOwo+ICsKPiArCQlpZiAoIWN0eC0+YmFja2xpZ2h0KQo+ICsJ CQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKPiArCX0KPiArCj4gKwlyZXQgPSBkcm1fcGFuZWxfYWRk KCZjdHgtPnBhbmVsKTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJ ZHNpLT5tb2RlX2ZsYWdzID0gTUlQSV9EU0lfTU9ERV9WSURFT19CVVJTVDsKPiArCWRzaS0+Zm9y bWF0ID0gTUlQSV9EU0lfRk1UX1JHQjg4ODsKPiArCWRzaS0+bGFuZXMgPSA0Owo+ICsKPiArCXJl dHVybiBtaXBpX2RzaV9hdHRhY2goZHNpKTsKU2V2ZXJhbCBkcml2ZXJzIHVuZG8gdGhlIGRybV9w YW5lbF9hZGQoKSBpZiBtaXBpX2RzaV9hdHRhY2goKSBmYWlscy4KSSBkdW5ubyBpZiB0aGlzIGlz IGNvcnJlY3QgYW5kIHdoZW4gaXQgbWF5IGZhaWwuCgoKPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJG ZWl5YW5nIEZZMDcwMjRESTI2QTMwLUQgTUlQSS1EU0kgTENEIHBhbmVsIik7Cgo+ICtNT0RVTEVf TElDRU5TRSgiR1BMIHYyIik7ClRoZSBTUERYIHRhZyBtZW50aW9uZWQgTUlUIC0gc28gdGhlIGFi b3ZlIG1heSBub3QgYmUgY29ycmVjdC4KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2RyaS1kZXZlbAo=