From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sam Ravnborg Subject: Re: [2/2] drm/panel: support for AUO kd101n80-45na wuxga dsi video mode panel Date: Sun, 9 Jun 2019 13:51:05 +0200 Message-ID: <20190609115105.GA31079@ravnborg.org> References: <20190608112342.64416-1-jitao.shi@mediatek.com> <20190608112342.64416-2-jitao.shi@mediatek.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20190608112342.64416-2-jitao.shi@mediatek.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Jitao Shi Cc: Mark Rutland , devicetree@vger.kernel.org, David Airlie , stonea168@163.com, dri-devel@lists.freedesktop.org, Ajay Kumar , Vincent Palatin , cawa.cheng@mediatek.com, yingjoe.chen@mediatek.com, Thierry Reding , Sean Paul , linux-pwm@vger.kernel.org, Pawel Moll , Ian Campbell , Rob Herring , linux-mediatek@lists.infradead.org, Russell King , Matthias Brugger , eddie.huang@mediatek.com, linux-arm-kernel@lists.infradead.org, Rahul Sharma , srv_heupstream@mediatek.com, linux-kernel@vger.kernel.org, Sascha Hauer , Andy Yan List-Id: devicetree@vger.kernel.org SGkgSml0YW8uCgpUaGFua3MgZm9yIGFub3RoZXIgcGFuZWwgZHJpdmVyLgoKVGhlIGNvbW1lbnRz IGZvciB0aGUgcGFuZWwtYm9lLXR2MTAxd3VtLW5sNiBkaXZlciB0byBleHRlbnQKYXBwbGllcyB0 byB0aGlzIGRyaXZlciB0b28uClBsZWFzZSBhZGRyZXNzIHRoZXNlIGFuZCBJIHdpbGwgZG8gYSBw cm9wZXIgcmV2aWV3IG9mIHRoZSBuZXh0IHZlcnNpb24uCgpJIG5vdGljZSB0aGF0IGVycm9yIGhh bmRsaWduIGlzIGEgbGl0dGxlIGJpdCBsZXNzIGluIHRoaXMgZHJpdmVyLgpjb25zaWVyIHdoYXQg YXBwcm9jaCB0byB1c2UgYW5kIHNlZSBpZiB5b3UgY2FuIGFsaWduIGJldHdlZW4gdGhlc2UKZHJp dmVycywgYW5kIGlmIGluIGRvdWJ0IHVzZSBwYW5lbC1zaW1wbGUgYXMgeW91ciByb2xlIG1vZGVs LgoKCVNhbQoKT24gU2F0LCBKdW4gMDgsIDIwMTkgYXQgMDc6MjM6NDJQTSArMDgwMCwgSml0YW8g U2hpIHdyb3RlOgo+IEFkZCBkcml2ZXIgZm9yIEFVTyBrZDEwMW44MC00NW5hIHBhbmVsLgo+IFRo aXMgcGFuZWwgc3VwcG9ydHMgdGhlIHJlc29sdXRpb24gMTIwMHgxOTIwLCBkc2kgdmlkZW8gbW9k ZQo+IGFuZCA0IGxhbmVzLgo+IAo+IFNpZ25lZC1vZmYtYnk6IEppdGFvIFNoaSA8aml0YW8uc2hp QG1lZGlhdGVrLmNvbT4KPiAtLS0KPiAgZHJpdmVycy9ncHUvZHJtL3BhbmVsL0tjb25maWcgICAg ICAgICAgICAgICAgIHwgIDEwICsKPiAgZHJpdmVycy9ncHUvZHJtL3BhbmVsL01ha2VmaWxlICAg ICAgICAgICAgICAgIHwgICAxICsKPiAgLi4uL2dwdS9kcm0vcGFuZWwvcGFuZWwtYXVvLWtkMTAx bjgwLTQ1bmEuYyAgIHwgMzUyICsrKysrKysrKysrKysrKysrKwo+ICAzIGZpbGVzIGNoYW5nZWQs IDM2MyBpbnNlcnRpb25zKCspCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v cGFuZWwvcGFuZWwtYXVvLWtkMTAxbjgwLTQ1bmEuYwo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vcGFuZWwvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9wYW5lbC9LY29uZmlnCj4g aW5kZXggZTM2ZGJiNGRmODY3Li5mNWNkNWFmOWNlNDIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL3BhbmVsL0tjb25maWcKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvS2NvbmZp Zwo+IEBAIC0yNzIsNCArMjcyLDE0IEBAIGNvbmZpZyBEUk1fUEFORUxfVFJVTFlfTlQzNTU5N19X UVhHQQo+ICAJaGVscAo+ICAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBzdXBw b3J0IGZvciBUcnVseSBOVDM1NTk3IFdRWEdBIER1YWwgRFNJCj4gIAkgIFZpZGVvIE1vZGUgcGFu ZWwKPiArCj4gK2NvbmZpZyBEUk1fUEFORUxfQVVPX0tEMTAxTjgwXzQ1TkEKPiArCXRyaXN0YXRl ICJBVU8gS0QxMDFOODBfNDVOQSAxMjAweDE5MjAgcGFuZWwiCj4gKwlkZXBlbmRzIG9uIE9GCj4g KwlkZXBlbmRzIG9uIERSTV9NSVBJX0RTSQo+ICsJZGVwZW5kcyBvbiBCQUNLTElHSFRfQ0xBU1Nf REVWSUNFCj4gKwloZWxwCj4gKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gc3VwcG9ydCBm b3IgQVVPIEtEMTAxTjgwXzQ1TkEgV1VYR0EgUEFORUwKPiArCSAgRFNJIFZpZGVvIE1vZGUgcGFu ZWwKPiArCj4gIGVuZG1lbnUKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL01h a2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL01ha2VmaWxlCj4gaW5kZXggNzhlM2RjMzc2 YmRkLi4xMDU2OTMzYmRmMmUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL01h a2VmaWxlCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVsL01ha2VmaWxlCj4gQEAgLTI4LDMg KzI4LDQgQEAgb2JqLSQoQ09ORklHX0RSTV9QQU5FTF9TSVRST05JWF9TVDc3MDEpICs9IHBhbmVs LXNpdHJvbml4LXN0NzcwMS5vCj4gIG9iai0kKENPTkZJR19EUk1fUEFORUxfU0lUUk9OSVhfU1Q3 Nzg5VikgKz0gcGFuZWwtc2l0cm9uaXgtc3Q3Nzg5di5vCj4gIG9iai0kKENPTkZJR19EUk1fUEFO RUxfVFBPX1RQRzExMCkgKz0gcGFuZWwtdHBvLXRwZzExMC5vCj4gIG9iai0kKENPTkZJR19EUk1f UEFORUxfVFJVTFlfTlQzNTU5N19XUVhHQSkgKz0gcGFuZWwtdHJ1bHktbnQzNTU5Ny5vCj4gK29i ai0kKENPTkZJR19EUk1fUEFORUxfQVVPX0tEMTAxTjgwXzQ1TkEpICs9IHBhbmVsLWF1by1rZDEw MW44MC00NW5hLm8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3BhbmVsL3BhbmVsLWF1 by1rZDEwMW44MC00NW5hLmMgYi9kcml2ZXJzL2dwdS9kcm0vcGFuZWwvcGFuZWwtYXVvLWtkMTAx bjgwLTQ1bmEuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi5h YjdiZmMwNTllOGEKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3BhbmVs L3BhbmVsLWF1by1rZDEwMW44MC00NW5hLmMKPiBAQCAtMCwwICsxLDM1MiBAQAo+ICsvLyBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIw MTggTWVkaWFUZWsgSW5jLgo+ICsgKiBBdXRob3I6IEppdGFvIFNoaSA8aml0YW8uc2hpQG1lZGlh dGVrLmNvbT4KPiArICovCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+Cj4gKyNp bmNsdWRlIDxsaW51eC9ncGlvL2NvbnN1bWVyLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUu aD4KPiArI2luY2x1ZGUgPGxpbnV4L29mLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3Iv Y29uc3VtZXIuaD4KPiArCj4gKyNpbmNsdWRlIDxkcm0vZHJtUC5oPgo+ICsjaW5jbHVkZSA8ZHJt L2RybV9jcnRjLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX21pcGlfZHNpLmg+Cj4gKyNpbmNsdWRl IDxkcm0vZHJtX3BhbmVsLmg+Cj4gKwo+ICsjaW5jbHVkZSA8dmlkZW8vbWlwaV9kaXNwbGF5Lmg+ Cj4gKwo+ICtzdHJ1Y3QgYXVvX3BhbmVsIHsKPiArCXN0cnVjdCBkcm1fcGFuZWwgYmFzZTsKPiAr CXN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaTsKPiArCj4gKwlzdHJ1Y3QgYmFja2xpZ2h0X2Rl dmljZSAqYmFja2xpZ2h0Owo+ICsJc3RydWN0IHJlZ3VsYXRvciAqcHAxODAwOwo+ICsJc3RydWN0 IHJlZ3VsYXRvciAqYXZlZTsKPiArCXN0cnVjdCByZWd1bGF0b3IgKmF2ZGQ7Cj4gKwlzdHJ1Y3Qg Z3Bpb19kZXNjICplbmFibGVfZ3BpbzsKPiArCj4gKwlib29sIHByZXBhcmVkOwo+ICsJYm9vbCBl bmFibGVkOwo+ICsKPiArCWNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlOwo+ICt9 Owo+ICsKPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgYXVvX3BhbmVsICp0b19hdW9fcGFuZWwoc3Ry dWN0IGRybV9wYW5lbCAqcGFuZWwpCj4gK3sKPiArCXJldHVybiBjb250YWluZXJfb2YocGFuZWws IHN0cnVjdCBhdW9fcGFuZWwsIGJhc2UpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGF1b19wYW5l bF9pbml0KHN0cnVjdCBhdW9fcGFuZWwgKmF1bykKPiArewo+ICsJc3RydWN0IGRybV9wYW5lbCAq cGFuZWwgPSAmYXVvLT5iYXNlOwo+ICsJaW50IGVycjsKPiArCj4gKwllcnIgPSBtaXBpX2RzaV9k Y3NfZXhpdF9zbGVlcF9tb2RlKGF1by0+ZHNpKTsKPiArCWlmIChlcnIgPCAwKSB7Cj4gKwkJRFJN X0RFVl9FUlJPUihwYW5lbC0+ZGV2LCAiZmFpbGVkIHRvIGV4aXQgc2xlZXAgbW9kZTogJWRcbiIs Cj4gKwkJCSAgICAgIGVycik7Cj4gKwkJcmV0dXJuIGVycjsKPiArCX0KPiArCj4gKwkvKiBUMy4x Ki8KPiArCW1zbGVlcCgxMjApOwo+ICsKPiArCWVyciA9IG1pcGlfZHNpX2Rjc19zZXRfZGlzcGxh eV9vbihhdW8tPmRzaSk7Cj4gKwlpZiAoZXJyIDwgMCkgewo+ICsJCURSTV9ERVZfRVJST1IocGFu ZWwtPmRldiwgImZhaWxlZCB0byBzZXQgZGlzcGxheSBvbjogJWRcbiIsCj4gKwkJCSAgICAgIGVy cik7Cj4gKwl9Cj4gKwkvKiBUMy4xICsgVDMuMjogPiAyMDBtcyAqLwo+ICsJbXNsZWVwKDEyMCk7 Cj4gKwo+ICsJcmV0dXJuIGVycjsKPiArfQo+ICsKPiArc3RhdGljIGludCBhdW9fcGFuZWxfb2Zm KHN0cnVjdCBhdW9fcGFuZWwgKmF1bykKPiArewo+ICsJc3RydWN0IG1pcGlfZHNpX2RldmljZSAq ZHNpID0gYXVvLT5kc2k7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWRzaS0+bW9kZV9mbGFncyAmPSB+ TUlQSV9EU0lfTU9ERV9MUE07Cj4gKwo+ICsJcmV0ID0gbWlwaV9kc2lfZGNzX3NldF9kaXNwbGF5 X29mZihkc2kpOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlyZXQg PSBtaXBpX2RzaV9kY3NfZW50ZXJfc2xlZXBfbW9kZShkc2kpOwo+ICsJaWYgKHJldCA8IDApCj4g KwkJcmV0dXJuIHJldDsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBh dW9fcGFuZWxfZGlzYWJsZShzdHJ1Y3QgZHJtX3BhbmVsICpwYW5lbCkKPiArewo+ICsJc3RydWN0 IGF1b19wYW5lbCAqYXVvID0gdG9fYXVvX3BhbmVsKHBhbmVsKTsKPiArCj4gKwlpZiAoIWF1by0+ ZW5hYmxlZCkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwliYWNrbGlnaHRfZGlzYWJsZShhdW8tPmJh Y2tsaWdodCk7Cj4gKwo+ICsJYXVvLT5lbmFibGVkID0gZmFsc2U7Cj4gKwo+ICsJcmV0dXJuIDA7 Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgYXVvX3BhbmVsX3VucHJlcGFyZShzdHJ1Y3QgZHJtX3Bh bmVsICpwYW5lbCkKPiArewo+ICsJc3RydWN0IGF1b19wYW5lbCAqYXVvID0gdG9fYXVvX3BhbmVs KHBhbmVsKTsKPiArCWludCByZXQ7Cj4gKwo+ICsJaWYgKCFhdW8tPnByZXBhcmVkKQo+ICsJCXJl dHVybiAwOwo+ICsKPiArCXJldCA9IGF1b19wYW5lbF9vZmYoYXVvKTsKPiArCWlmIChyZXQgPCAw KSB7Cj4gKwkJZGV2X2VycihwYW5lbC0+ZGV2LCAiZmFpbGVkIHRvIHNldCBwYW5lbCBvZmY6ICVk XG4iLCByZXQpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJbXNsZWVwKDE1MCk7Cj4g KwlyZWd1bGF0b3JfZGlzYWJsZShhdW8tPmF2ZWUpOwo+ICsJcmVndWxhdG9yX2Rpc2FibGUoYXVv LT5hdmRkKTsKPiArCXVzbGVlcF9yYW5nZSg1MDAwLCA3MDAwKTsKPiArCXJlZ3VsYXRvcl9kaXNh YmxlKGF1by0+cHAxODAwKTsKPiArCWlmIChhdW8tPmVuYWJsZV9ncGlvKQo+ICsJCWdwaW9kX3Nl dF92YWx1ZShhdW8tPmVuYWJsZV9ncGlvLCAwKTsKPiArCj4gKwlhdW8tPnByZXBhcmVkID0gZmFs c2U7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgYXVvX3BhbmVsX3By ZXBhcmUoc3RydWN0IGRybV9wYW5lbCAqcGFuZWwpCj4gK3sKPiArCXN0cnVjdCBhdW9fcGFuZWwg KmF1byA9IHRvX2F1b19wYW5lbChwYW5lbCk7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWlmIChhdW8t PnByZXBhcmVkKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCWlmIChhdW8tPmVuYWJsZV9ncGlvKSB7 Cj4gKwkJZ3Bpb2Rfc2V0X3ZhbHVlKGF1by0+ZW5hYmxlX2dwaW8sIDApOwo+ICsJCXVzbGVlcF9y YW5nZSgxMDAwLCAxNTAwKTsKPiArCX0KPiArCj4gKwlyZXQgPSByZWd1bGF0b3JfZW5hYmxlKGF1 by0+cHAxODAwKTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCXJldHVybiByZXQ7Cj4gKwlyZXQgPSBy ZWd1bGF0b3JfZW5hYmxlKGF1by0+YXZkZCk7Cj4gKwlpZiAocmV0IDwgMCkKPiArCQlnb3RvIHBv d2Vyb2ZmMXY4Owo+ICsJcmV0ID0gcmVndWxhdG9yX2VuYWJsZShhdW8tPmF2ZWUpOwo+ICsJaWYg KHJldCA8IDApCj4gKwkJZ290byBwb3dlcm9mZmF2ZGQ7Cj4gKwo+ICsJaWYgKGF1by0+ZW5hYmxl X2dwaW8pIHsKPiArCQlncGlvZF9zZXRfdmFsdWUoYXVvLT5lbmFibGVfZ3BpbywgMSk7Cj4gKwkJ dXNsZWVwX3JhbmdlKDEwMDAwLCAxMjAwMCk7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gYXVvX3BhbmVs X2luaXQoYXVvKTsKPiArCWlmIChyZXQgPCAwKSB7Cj4gKwkJZGV2X2VycihwYW5lbC0+ZGV2LCAi ZmFpbGVkIHRvIGluaXQgcGFuZWw6ICVkXG4iLCByZXQpOwo+ICsJCWdvdG8gcG93ZXJvZmY7Cj4g Kwl9Cj4gKwo+ICsJYXVvLT5wcmVwYXJlZCA9IHRydWU7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gKwo+ ICtwb3dlcm9mZjoKPiArCXJlZ3VsYXRvcl9kaXNhYmxlKGF1by0+YXZlZSk7Cj4gK3Bvd2Vyb2Zm YXZkZDoKPiArCXJlZ3VsYXRvcl9kaXNhYmxlKGF1by0+YXZkZCk7Cj4gK3Bvd2Vyb2ZmMXY4Ogo+ ICsJdXNsZWVwX3JhbmdlKDUwMDAsIDcwMDApOwo+ICsJcmVndWxhdG9yX2Rpc2FibGUoYXVvLT5w cDE4MDApOwo+ICsJaWYgKGF1by0+ZW5hYmxlX2dwaW8pCj4gKwkJZ3Bpb2Rfc2V0X3ZhbHVlKGF1 by0+ZW5hYmxlX2dwaW8sIDApOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGlu dCBhdW9fcGFuZWxfZW5hYmxlKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQo+ICt7Cj4gKwlzdHJ1 Y3QgYXVvX3BhbmVsICphdW8gPSB0b19hdW9fcGFuZWwocGFuZWwpOwo+ICsJaW50IHJldDsKPiAr Cj4gKwlpZiAoYXVvLT5lbmFibGVkKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCXJldCA9IGJhY2ts aWdodF9lbmFibGUoYXVvLT5iYWNrbGlnaHQpOwo+ICsJaWYgKHJldCkgewo+ICsJCURSTV9ERVZf RVJST1IocGFuZWwtPmRybS0+ZGV2LAo+ICsJCQkgICAgICAiRmFpbGVkIHRvIGVuYWJsZSBiYWNr bGlnaHQgJWRcbiIsIHJldCk7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwlhdW8tPmVu YWJsZWQgPSB0cnVlOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qg c3RydWN0IGRybV9kaXNwbGF5X21vZGUgZGVmYXVsdF9tb2RlID0gewo+ICsJLmNsb2NrID0gMTU3 MDAwLAo+ICsJLmhkaXNwbGF5ID0gMTIwMCwKPiArCS5oc3luY19zdGFydCA9IDEyMDAgKyA4MCwK PiArCS5oc3luY19lbmQgPSAxMjAwICsgODAgKyAyNCwKPiArCS5odG90YWwgPSAxMjAwICsgODAg KyAyNCArIDM2LAo+ICsJLnZkaXNwbGF5ID0gMTkyMCwKPiArCS52c3luY19zdGFydCA9IDE5MjAg KyAxNiwKPiArCS52c3luY19lbmQgPSAxOTIwICsgMTYgKyA0LAo+ICsJLnZ0b3RhbCA9IDE5MjAg KyAxNiArIDQgKyAxNiwKPiArCS52cmVmcmVzaCA9IDYwLAo+ICt9Owo+ICsKPiArc3RhdGljIGlu dCBhdW9fcGFuZWxfZ2V0X21vZGVzKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVsKQo+ICt7Cj4gKwlz dHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTsKPiArCj4gKwltb2RlID0gZHJtX21vZGVfZHVw bGljYXRlKHBhbmVsLT5kcm0sICZkZWZhdWx0X21vZGUpOwo+ICsJaWYgKCFtb2RlKSB7Cj4gKwkJ ZGV2X2VycihwYW5lbC0+ZHJtLT5kZXYsICJmYWlsZWQgdG8gYWRkIG1vZGUgJXV4JXV4QCV1XG4i LAo+ICsJCQlkZWZhdWx0X21vZGUuaGRpc3BsYXksIGRlZmF1bHRfbW9kZS52ZGlzcGxheSwKPiAr CQkJZGVmYXVsdF9tb2RlLnZyZWZyZXNoKTsKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCX0KPiAr Cj4gKwlkcm1fbW9kZV9zZXRfbmFtZShtb2RlKTsKPiArCj4gKwlkcm1fbW9kZV9wcm9iZWRfYWRk KHBhbmVsLT5jb25uZWN0b3IsIG1vZGUpOwo+ICsKPiArCXBhbmVsLT5jb25uZWN0b3ItPmRpc3Bs YXlfaW5mby53aWR0aF9tbSA9IDEzNTsKPiArCXBhbmVsLT5jb25uZWN0b3ItPmRpc3BsYXlfaW5m by5oZWlnaHRfbW0gPSAyMTY7Cj4gKwlwYW5lbC0+Y29ubmVjdG9yLT5kaXNwbGF5X2luZm8uYnBj ID0gODsKPiArCj4gKwlyZXR1cm4gMTsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBk cm1fcGFuZWxfZnVuY3MgYXVvX3BhbmVsX2Z1bmNzID0gewo+ICsJLmRpc2FibGUgPSBhdW9fcGFu ZWxfZGlzYWJsZSwKPiArCS51bnByZXBhcmUgPSBhdW9fcGFuZWxfdW5wcmVwYXJlLAo+ICsJLnBy ZXBhcmUgPSBhdW9fcGFuZWxfcHJlcGFyZSwKPiArCS5lbmFibGUgPSBhdW9fcGFuZWxfZW5hYmxl LAo+ICsJLmdldF9tb2RlcyA9IGF1b19wYW5lbF9nZXRfbW9kZXMsCj4gK307Cj4gKwo+ICtzdGF0 aWMgaW50IGF1b19wYW5lbF9hZGQoc3RydWN0IGF1b19wYW5lbCAqYXVvKQo+ICt7Cj4gKwlzdHJ1 Y3QgZGV2aWNlICpkZXYgPSAmYXVvLT5kc2ktPmRldjsKPiArCj4gKwlhdW8tPmF2ZGQgPSBkZXZt X3JlZ3VsYXRvcl9nZXQoZGV2LCAiYXZkZCIpOwo+ICsJaWYgKElTX0VSUihhdW8tPmF2ZGQpKQo+ ICsJCXJldHVybiBQVFJfRVJSKGF1by0+YXZkZCk7Cj4gKwo+ICsJYXVvLT5hdmVlID0gZGV2bV9y ZWd1bGF0b3JfZ2V0KGRldiwgImF2ZWUiKTsKPiArCWlmIChJU19FUlIoYXVvLT5hdmVlKSkKPiAr CQlyZXR1cm4gUFRSX0VSUihhdW8tPmF2ZWUpOwo+ICsKPiArCWF1by0+cHAxODAwID0gZGV2bV9y ZWd1bGF0b3JfZ2V0KGRldiwgInBwMTgwMCIpOwo+ICsJaWYgKElTX0VSUihhdW8tPnBwMTgwMCkp Cj4gKwkJcmV0dXJuIFBUUl9FUlIoYXVvLT5wcDE4MDApOwo+ICsKPiArCWF1by0+ZW5hYmxlX2dw aW8gPSBkZXZtX2dwaW9kX2dldChkZXYsICJlbmFibGUiLCBHUElPRF9PVVRfTE9XKTsKPiArCWlm IChJU19FUlIoYXVvLT5lbmFibGVfZ3BpbykpIHsKPiArCQlkZXZfZXJyKGRldiwgImNhbm5vdCBn ZXQgcmVzZXQtZ3Bpb3MgJWxkXG4iLAo+ICsJCQlQVFJfRVJSKGF1by0+ZW5hYmxlX2dwaW8pKTsK PiArCQlhdW8tPmVuYWJsZV9ncGlvID0gTlVMTDsKPiArCX0gZWxzZSB7Cj4gKwkJZ3Bpb2Rfc2V0 X3ZhbHVlKGF1by0+ZW5hYmxlX2dwaW8sIDApOwo+ICsJfQo+ICsKPiArCWF1by0+YmFja2xpZ2h0 ID0gZGV2bV9vZl9maW5kX2JhY2tsaWdodChkZXYpOwo+ICsJaWYgKElTX0VSUihhdW8tPmJhY2ts aWdodCkpCj4gKwkJcmV0dXJuIFBUUl9FUlIoYXVvLT5iYWNrbGlnaHQpOwo+ICsKPiArCWRybV9w YW5lbF9pbml0KCZhdW8tPmJhc2UpOwo+ICsJYXVvLT5iYXNlLmZ1bmNzID0gJmF1b19wYW5lbF9m dW5jczsKPiArCWF1by0+YmFzZS5kZXYgPSAmYXVvLT5kc2ktPmRldjsKPiArCj4gKwlyZXR1cm4g ZHJtX3BhbmVsX2FkZCgmYXVvLT5iYXNlKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgYXVvX3Bh bmVsX2RlbChzdHJ1Y3QgYXVvX3BhbmVsICphdW8pCj4gK3sKPiArCWlmIChhdW8tPmJhc2UuZGV2 KQo+ICsJCWRybV9wYW5lbF9yZW1vdmUoJmF1by0+YmFzZSk7Cj4gK30KPiArCj4gK3N0YXRpYyBp bnQgYXVvX3BhbmVsX3Byb2JlKHN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRzaSkKPiArewo+ICsJ c3RydWN0IGF1b19wYW5lbCAqYXVvOwo+ICsJaW50IHJldDsKPiArCj4gKwlkc2ktPmxhbmVzID0g NDsKPiArCWRzaS0+Zm9ybWF0ID0gTUlQSV9EU0lfRk1UX1JHQjg4ODsKPiArCWRzaS0+bW9kZV9m bGFncyA9IE1JUElfRFNJX01PREVfVklERU8gfCBNSVBJX0RTSV9NT0RFX1ZJREVPX1NZTkNfUFVM U0UgfAo+ICsJCSBNSVBJX0RTSV9NT0RFX0xQTTsKPiArCj4gKwlhdW8gPSBkZXZtX2t6YWxsb2Mo JmRzaS0+ZGV2LCBzaXplb2YoKmF1byksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFhdW8pCj4gKwkJ cmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJbWlwaV9kc2lfc2V0X2RydmRhdGEoZHNpLCBhdW8pOwo+ ICsKPiArCWF1by0+ZHNpID0gZHNpOwo+ICsKPiArCXJldCA9IGF1b19wYW5lbF9hZGQoYXVvKTsK PiArCWlmIChyZXQgPCAwKQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJcmV0dXJuIG1pcGlfZHNp X2F0dGFjaChkc2kpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGF1b19wYW5lbF9yZW1vdmUoc3Ry dWN0IG1pcGlfZHNpX2RldmljZSAqZHNpKQo+ICt7Cj4gKwlzdHJ1Y3QgYXVvX3BhbmVsICphdW8g PSBtaXBpX2RzaV9nZXRfZHJ2ZGF0YShkc2kpOwo+ICsJaW50IHJldDsKPiArCj4gKwlyZXQgPSBh dW9fcGFuZWxfZGlzYWJsZSgmYXVvLT5iYXNlKTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCWRldl9l cnIoJmRzaS0+ZGV2LCAiZmFpbGVkIHRvIGRpc2FibGUgcGFuZWw6ICVkXG4iLCByZXQpOwo+ICsK PiArCXJldCA9IG1pcGlfZHNpX2RldGFjaChkc2kpOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJZGV2 X2VycigmZHNpLT5kZXYsICJmYWlsZWQgdG8gZGV0YWNoIGZyb20gRFNJIGhvc3Q6ICVkXG4iLCBy ZXQpOwo+ICsKPiArCWF1b19wYW5lbF9kZWwoYXVvKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ ICsKPiArc3RhdGljIHZvaWQgYXVvX3BhbmVsX3NodXRkb3duKHN0cnVjdCBtaXBpX2RzaV9kZXZp Y2UgKmRzaSkKPiArewo+ICsJc3RydWN0IGF1b19wYW5lbCAqYXVvID0gbWlwaV9kc2lfZ2V0X2Ry dmRhdGEoZHNpKTsKPiArCj4gKwlhdW9fcGFuZWxfZGlzYWJsZSgmYXVvLT5iYXNlKTsKPiArfQo+ ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYXVvX29mX21hdGNoW10gPSB7 Cj4gKwl7IC5jb21wYXRpYmxlID0gImF1byxrZDEwMW44MC00NW5hIiwgfSwKPiArCXsgfQo+ICt9 Owo+ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBhdW9fb2ZfbWF0Y2gpOwo+ICsKPiArc3RhdGlj IHN0cnVjdCBtaXBpX2RzaV9kcml2ZXIgYXVvX3BhbmVsX2RyaXZlciA9IHsKPiArCS5kcml2ZXIg PSB7Cj4gKwkJLm5hbWUgPSAicGFuZWwtYXVvLWtkMTAxbjgwLTQ1bmEiLAo+ICsJCS5vZl9tYXRj aF90YWJsZSA9IGF1b19vZl9tYXRjaCwKPiArCX0sCj4gKwkucHJvYmUgPSBhdW9fcGFuZWxfcHJv YmUsCj4gKwkucmVtb3ZlID0gYXVvX3BhbmVsX3JlbW92ZSwKPiArCS5zaHV0ZG93biA9IGF1b19w YW5lbF9zaHV0ZG93biwKPiArfTsKPiArbW9kdWxlX21pcGlfZHNpX2RyaXZlcihhdW9fcGFuZWxf ZHJpdmVyKTsKPiArCj4gK01PRFVMRV9BVVRIT1IoIkppdGFvIFNoaSA8aml0YW8uc2hpQG1lZGlh dGVrLmNvbT4iKTsKPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJBVU8ga2QxMDFuODAtNDVuYSB3dXhn YSAoMTIwMHgxOTIwKSB2aWRlbyBtb2RlIHBhbmVsIGRyaXZlciIpOwo+ICtNT0RVTEVfTElDRU5T RSgiR1BMIHYyIik7Cj4gKwo+IC0tIAo+IDIuMjEuMAo+IAo+IF9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gZHJpLWRldmVsIG1haWxpbmcgbGlzdAo+IGRy aS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9w Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbApfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBs aXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9kcmktZGV2ZWw=