From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v6] USB: serial: ftdi_sio: implement GPIO support for FT-X devices From: Johan Hovold Message-Id: <20180925100635.GC3332@localhost> Date: Tue, 25 Sep 2018 12:06:35 +0200 To: Karoly Pados Cc: Johan Hovold , Greg Kroah-Hartman , linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, Loic Poulain List-ID: T24gTW9uLCBTZXAgMjQsIDIwMTggYXQgMDQ6MzE6NTFQTSArMDIwMCwgS2Fyb2x5IFBhZG9zIHdy b3RlOgo+IFRoaXMgcGF0Y2ggYWxsb3dzIHVzaW5nIHRoZSBDQlVTIHBpbnMgb2YgRlQtWCBkZXZp Y2VzIGFzIEdQSU8gaW4gQ0JVUwo+IGJpdGJhbmdpbmcgbW9kZS4gVGhlcmUgaXMgbm8gY29uZmxp Y3QgYmV0d2VlbiB0aGUgR1BJTyBhbmQgVkNQCj4gZnVuY3Rpb25hbGl0eSBpbiB0aGlzIG1vZGUu IFRlc3RlZCBvbiBGVDIzMFggYW5kIEZUMjMxWC4KPiAKPiBBcyB0aGVyZSBpcyBubyB3YXkgdG8g cmVxdWVzdCB0aGUgY3VycmVudCBDQlVTIHJlZ2lzdGVyIGNvbmZpZ3VyYXRpb24KPiBmcm9tIHRo ZSBkZXZpY2UsIGFsbCBDQlVTIHBpbnMgYXJlIHNldCB0byBhIGtub3duIHN0YXRlIHdoZW4gdGhl IGZpcnN0Cj4gR1BJTyBpcyByZXF1ZXN0ZWQuIFRoaXMgYWxsb3dzIHVzaW5nIGxpYmZ0ZGkgdG8g c2V0IHRoZSBHUElPIHBpbnMKPiBiZWZvcmUgbG9hZGluZyB0aGlzIG1vZHVsZSBmb3IgVUFSVCBm dW5jdGlvbmFsaXR5LCBhIGJlaGF2aW9yIHRoYXQKPiBleGlzdGluZyBhcHBsaWNhdGlvbnMgbWln aHQgYmUgcmVseWluZyB1cG9uICh0aG91Z2ggbm8gc3BlY2lmaWMgY2FzZQo+IGlzIGtub3duIHRv IHRoZSBhdXRob3JzIG9mIHRoaXMgcGF0Y2gpLgo+IAo+IFNpZ25lZC1vZmYtYnk6IEthcm9seSBQ YWRvcyA8cGFkb3NAcGFkb3MuaHU+Cj4gLS0tCj4gQ2hhbmdlbG9nOgo+IC0gdjI6IEZpeCBjb21w aWxlIGVycm9yIHdoZW4gQ09ORklHX0dQSU9MSUIgaXMgbm90IGRlZmluZWQuCj4gLSB2MzogSW5j b3Jwb3JhdGUgcmV2aWV3IGZlZWRiYWNrLgo+IC0gdjQ6IEluY2x1ZGUgbGludXgvZ3Bpby9kcml2 ZXIuaCB1bmNvbmRpdGlvbmFsbHkuCj4gICAgICAgUmVwbGFjZSBhbmQgaW52ZXJ0IGdwaW9faW5w dXQgd2l0aCBncGlvX291dHB1dC4KPiAgICAgICBNYWtlIGZ0ZGlfZ3Bpb19kaXJlY3Rpb25fZ2V0 IHJldHVybiAwLzEuCj4gICAgICAgQ2hhbmdlIGRldl9lcnIgbXNnIGluIGZ0ZGlfc2V0X2JpdG1v ZGVfcmVxLgo+ICAgICAgIENoYW5nZSBmb3JtYXR0aW5nIG9mIGVycm9yIGNoZWNraW5nIGluIGZ0 ZGlfZ3Bpb19nZXQuCj4gICAgICAgRHJvcCBkZXZfZXJyIGluIGZ0ZGlfZ3Bpb19zZXQuCj4gICAg ICAgUmVtb3ZlIHNvbWUgbGluZSBicmVha3MgYW5kIGVtcHR5IGxpbmVzLgo+ICAgICAgIENoYW5n ZSBlcnJvciBoYW5kbGluZyBpbiBmdGRpX3JlYWRfZWVwcm9tIChhbmQgYWRqdXN0IGNhbGxlciku Cj4gICAgICAgUmVwbGFjZSBTSU8tPkZUWCBpbiBGVERJX1NJT19DQlVTX01VWF9HUElPIG1hY3Jv IG5hbWUuCj4gLSB2NTogUmVzZW50IHY0IHdpdGggbm8gY2hhbmdlcyBieSBtaXN0YWtlLiBQbGVh c2UgaWdub3JlLgo+IC0gdjY6IFJlYWQgb25seSA0IGJ5dGVzIGZyb20gZWVwcm9tIGluIGZ0eF9n cGlvY29uZl9pbml0Lgo+ICAgICAgIENvbXBhcmUgZnRkaV9yZWFkX2VlcHJvbSByZXN1bHQgd2l0 aCAwIGluc3RlYWQgb2YgZXEuIGNlaGNrLgo+ICAgICAgIFJlc2VydmUgNCBHUElPcyBldmVuIGZv ciBGVDIzNFguCj4gICAgICAgUmVsZWFzZSBDQlVTIGFmdGVyIGdwaW9jaGlwIGRlcmVnaXN0ZXIg dG8gYXZvaWQgcG9zc2libGUgcmFjZS4KPiAgICAgICBBZGp1c3QgY29tbWVudCBvbiBGVERJX1NJ T19TRVRfQklUTU9ERSBtYWNyby4KPiAgICAgICBQcm90ZWN0IEdQSU8gdmFsdWUvZGlyIHNldHRp bmcgd2l0aCBtdXRleC4KPiAgICAgICBBZGQgc3VwcG9ydCBmb3IgZ3Bpb2NoaXAuZ2V0X211bHRp cGxlIGFuZCBzZXRfbXVsdGlwbGUuCj4gICAgICAgQWRkIG5hbWVzIHRvIEdQSU8gbGluZXMuCj4K PiBnZXRfbXVsdGlwbGUgLyBzZXRfbXVsdGlwbGUgbWV0aG9kcyBoYXZlIGJlZW4gYWRkZWQgaW4g YWRkaXRpb24gdG8gZWFybGllcgo+IHJldmlldyBjb21tZW50cy4KCkFkZGluZyBuZXcgZmVhdHVy ZXMgbGlrZSB0aGlzIGxhdGUgaW4gYSByZXZpZXcgY3ljbGUgcmlza3MgYWRkaW5nIG5ldwpidWdz IGFuZCBjcmVhdGVzIG1vcmUgd29yayBmb3IgZXZlcnlvbmUgaW52b2x2ZWQuCgpJbiB0aGlzIGNh c2UsIHRoZXJlJ3MgYSBidWcgaW4geW91ciBzZXRfbXVsdGlwbGUoKSBpbXBsZW1lbnRhdGlvbiB0 aGF0CndpbGwgbmVlZCB0byBiZSBhZGRyZXNzZWQgaW4gYSB2Nywgc28gSSdsbCBjb21tZW50IG9u IHNvbWUgc3R5bGUgaXNzdWVzCmFzIHdlbGwgd2hpbGUgYXQgaXQuCgo+ICBkcml2ZXJzL3VzYi9z ZXJpYWwvZnRkaV9zaW8uYyB8IDM2OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyst Cj4gIGRyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5oIHwgIDI3ICsrLQo+ICAyIGZpbGVzIGNo YW5nZWQsIDM5NCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRp X3Npby5jCj4gaW5kZXggYjVjZWYzMjI4MjZmLi41NjYyODRlMmMzMTYgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKPiArKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwv ZnRkaV9zaW8uYwo+IEBAIC00MCw2ICs0MCw3IEBACj4gICNpbmNsdWRlIDxsaW51eC91c2IuaD4K PiAgI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgo+ICAjaW5jbHVkZSA8bGludXgvdXNiL3Nlcmlh bC5oPgo+ICsjaW5jbHVkZSA8bGludXgvZ3Bpby9kcml2ZXIuaD4KCk5pdDogcGxhY2UgdGhpcyBh Ym92ZSBsaW51eC91c2Ivc2VyaWFsLmggdG8ga2VlcCBhdCBsZWFzdCB0aG9zZSBpbmNsdWRlcwpz b3J0ZWQuCgo+ICAjaW5jbHVkZSAiZnRkaV9zaW8uaCIKPiAgI2luY2x1ZGUgImZ0ZGlfc2lvX2lk cy5oIgo+ICAKPiBAQCAtNzIsOCArNzMsMjMgQEAgc3RydWN0IGZ0ZGlfcHJpdmF0ZSB7Cj4gIAl1 bnNpZ25lZCBpbnQgbGF0ZW5jeTsJCS8qIGxhdGVuY3kgc2V0dGluZyBpbiB1c2UgKi8KPiAgCXVu c2lnbmVkIHNob3J0IG1heF9wYWNrZXRfc2l6ZTsKPiAgCXN0cnVjdCBtdXRleCBjZmdfbG9jazsg LyogQXZvaWQgbWVzcyBieSBwYXJhbGxlbCBjYWxscyBvZiBjb25maWcgaW9jdGwoKSBhbmQgY2hh bmdlX3NwZWVkKCkgKi8KPiArI2lmIGRlZmluZWQoQ09ORklHX0dQSU9MSUIpCgpVc2UgI2lmZGVm IGhlcmUgYW5kIGVsc2V3aGVyZSAoZGVmaW5lZCgpIGNhbiBiZSB1c2VkIGluIGFjdHVhbCBjb2Rl KS4KCj4gKwlzdHJ1Y3QgZ3Bpb19jaGlwIGdjOwo+ICsJc3RydWN0IG11dGV4ICBncGlvX2xvY2s7 ICAvKiBQcm90ZWN0IEdQSU8gc3RhdGUgYWdhaW5zdCBwYXJhbGxlbCBjYWxscyAqLwoKSnVzdCAi cHJvdGVjdHMgZ3BpbyBzdGF0ZSIsIGlmIGFueXRoaW5nLgoKPiArCWJvb2wJZ3Bpb19yZWdpc3Rl cmVkOyAgLyogaXMgdGhlIGdwaW9jaGlwIGluIGtlcm5lbCByZWdpc3RlcmVkICovCj4gKwlib29s CWdwaW9fdXNlZDsJICAvKiB0cnVlIGlmIHRoZSB1c2VyIHJlcXVlc3RlZCBhIGdwaW8gKi8KPiAr CXU4CWdwaW9fYWx0ZnVuYzsJICAvKiB3aGljaCBwaW5zIGFyZSBpbiBncGlvIG1vZGUgKi8KPiAr CXU4CWdwaW9fb3V0cHV0OwkgIC8qIHBpbiBkaXJlY3Rpb25zIGNhY2hlICovCj4gKwl1OAlncGlv X3ZhbHVlOwkgIC8qIHBpbiB2YWx1ZSBmb3Igb3V0cHV0cyAqLwoKWW91ciBtaXhpbmcgdGFicyBh bmQgc3BhY2VzIGhlYXZpbHkgYWJvdmUuIEp1c3Qgc3RpY2sgdG8gdGhlIGN1cnJlbnQKc3R5bGUg YW5kIGRyb3AgdGhlIHZhcmlhYmxlIG5hbWUgYWxpZ25tZW50LCByZW1vdmUgc3VwZXJmbHVvdXMg c3BhY2VzLAphbmQgdXNlIHRhYnMgb25seSBmb3IgaW5kZW50YXRpb24uCgo+ICsjZW5kaWYKPiAg fTsKPiAgCj4gKyNpZiBkZWZpbmVkKENPTkZJR19HUElPTElCKQo+ICtzdGF0aWMgY29uc3QgY2hh ciAqIGNvbnN0IGZ0ZGlfZnR4X2dwaW9fbmFtZXNbXSA9IHsKPiArCSJDQlVTMCIsICJDQlVTMSIs ICJDQlVTMiIsICJDQlVTMyIKPiArfTsKPiArI2VuZGlmCgpXZSB3YW50IHRvIGtlZXAgdGhlIGlm ZGVmZmVyeSB0byBhIG1pbmltdW0sIHNvIG1vdmUgdGhpcyBpbnNpZGUgdGhlCmdwaW9saWIgaWZk ZWYgYmVsb3cgKGFuZCBwb3NzaWJseSBldmVuIGludG8gdGhlIGZ1bmN0aW9uIHdoZXJlIGl0IGlz CnVzZWQpLgoKQWxzbyBub3RlIHRoYXQgdGhlc2UgbmFtZXMgYXJlIHNoYXJlZCB3aXRoIEZUMjMy UiwgYnV0IG5vdCB3aXRoIEZUMjMySC4KCj4gKwo+ICAvKiBzdHJ1Y3QgZnRkaV9zaW9fcXVpcmsg aXMgdXNlZCBieSBkZXZpY2VzIHJlcXVpcmluZyBzcGVjaWFsIGF0dGVudGlvbi4gKi8KPiAgc3Ry dWN0IGZ0ZGlfc2lvX3F1aXJrIHsKPiAgCWludCAoKnByb2JlKShzdHJ1Y3QgdXNiX3NlcmlhbCAq KTsKPiBAQCAtMTc2Niw2ICsxNzgyLDM0NyBAQCBzdGF0aWMgdm9pZCByZW1vdmVfc3lzZnNfYXR0 cnMoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKPiAgCj4gIH0KPiAgCj4gKyNpZiBkZWZp bmVkKENPTkZJR19HUElPTElCKQo+ICsKPiArc3RhdGljIGludCBmdGRpX3NldF9iaXRtb2RlX3Jl cShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCB1OCBtb2RlKQoKTml0OiBwbGVhc2UgZHJv cCB0aGUgX3JlcSBzdWZmaXggaGVyZS4KCj4gK3sKPiArCXN0cnVjdCBmdGRpX3ByaXZhdGUgKnBy aXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7Cj4gKwlzdHJ1Y3QgdXNiX3Nlcmlh bCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwo+ICsJaW50IHJlc3VsdDsKPiArCXUxNiB2YWw7Cj4g Kwo+ICsJdmFsID0gKG1vZGUgPDwgOCkgfCAocHJpdi0+Z3Bpb19vdXRwdXQgPDwgNCkgfCBwcml2 LT5ncGlvX3ZhbHVlOwo+ICsJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LAo+ ICsJCQkJIHVzYl9zbmRjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCj4gKwkJCQkgRlRESV9TSU9f U0VUX0JJVE1PREVfUkVRVUVTVCwKPiArCQkJCSBGVERJX1NJT19TRVRfQklUTU9ERV9SRVFVRVNU X1RZUEUsIHZhbCwKPiArCQkJCSBwcml2LT5pbnRlcmZhY2UsIE5VTEwsIDAsIFdEUl9USU1FT1VU KTsKPiArCWlmIChyZXN1bHQgPCAwKSB7Cj4gKwkJZGV2X2Vycigmc2VyaWFsLT5pbnRlcmZhY2Ut PmRldiwKPiArCQkJImJpdG1vZGUgcmVxdWVzdCBmYWlsZWQgZm9yIHZhbHVlIDB4JTA0eDogJWRc biIsCj4gKwkJCXZhbCwgcmVzdWx0KTsKPiArCX0KPiArCj4gKwlyZXR1cm4gcmVzdWx0Owo+ICt9 Cgo+ICtzdGF0aWMgaW50IGZ0ZGlfcmVhZF9jYnVzX3BpbnMoc3RydWN0IHVzYl9zZXJpYWxfcG9y dCAqcG9ydCkKPiArewo+ICsJc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2Vy aWFsX3BvcnRfZGF0YShwb3J0KTsKPiArCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0 LT5zZXJpYWw7Cj4gKwl1bnNpZ25lZCBjaGFyICpyY3ZidWY7CgpOaXQ6IFBsZWFzZSByZW5hbWUg c2ltcGx5IGJ1Ziwgd2hpY2ggaXMgbW9yZSBjb21tb24gYW5kIGltcHJvdmVzCnJlYWRhYmlsaXR5 IGJ5IGJlaW5nIGVhc2llciB0byB0ZWxsIGFwYXJ0IGZyb20gcmVzdWx0LgoKPiArCWludCByZXN1 bHQ7Cj4gKwo+ICsJcmN2YnVmID0ga21hbGxvYygxLCBHRlBfS0VSTkVMKTsKPiArCWlmICghcmN2 YnVmKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCXJlc3VsdCA9IHVzYl9jb250cm9sX21z ZyhzZXJpYWwtPmRldiwKPiArCQkJCSB1c2JfcmN2Y3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAo+ ICsJCQkJIEZURElfU0lPX1JFQURfUElOU19SRVFVRVNULAo+ICsJCQkJIEZURElfU0lPX1JFQURf UElOU19SRVFVRVNUX1RZUEUsIDAsCj4gKwkJCQkgcHJpdi0+aW50ZXJmYWNlLCByY3ZidWYsIDEs IFdEUl9USU1FT1VUKTsKPiArCWlmIChyZXN1bHQgPCAxKSB7Cj4gKwkJaWYgKHJlc3VsdCA+PSAw KQo+ICsJCQlyZXN1bHQgPSAtRUlPOwo+ICsJfSBlbHNlIHsKPiArCQlyZXN1bHQgPSByY3ZidWZb MF07Cj4gKwl9Cj4gKwo+ICsJa2ZyZWUocmN2YnVmKTsKPiArCj4gKwlyZXR1cm4gcmVzdWx0Owo+ ICt9Cgo+ICtzdGF0aWMgdm9pZCBmdGRpX2dwaW9fc2V0X211bHRpcGxlKHN0cnVjdCBncGlvX2No aXAgKmdjLAo+ICsJCQkJICAgdW5zaWduZWQgbG9uZyAqbWFzaywgdW5zaWduZWQgbG9uZyAqYml0 cykKPiArewo+ICsJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IGdwaW9jaGlwX2dldF9k YXRhKGdjKTsKPiArCXN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9w b3J0X2RhdGEocG9ydCk7Cj4gKwo+ICsJbXV0ZXhfbG9jaygmcHJpdi0+Z3Bpb19sb2NrKTsKPiAr Cj4gKwlwcml2LT5ncGlvX3ZhbHVlICY9IH4oKm1hc2spOwo+ICsJcHJpdi0+Z3Bpb192YWx1ZSB8 PSAqYml0czsKCmdwaW9saWIgZG9lc24ndCBjbGVhciBiaXRzIG5vdCBpbiBtYXNrIGZvciB5b3Us IHNvIHlvdSBuZWVkIHRvIE9SIHdpdGgKKm1hc2sgaGVyZSB0byBhdm9pZCBzZXR0aW5nIHJhbmRv bSBvdGhlciBiaXRzLgoKPiArCWZ0ZGlfc2V0X2NidXNfcGlucyhwb3J0KTsKPiArCj4gKwltdXRl eF91bmxvY2soJnByaXYtPmdwaW9fbG9jayk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZnRkaV9n cGlvX2RpcmVjdGlvbl9nZXQoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIGludCBncGlv KQo+ICt7Cj4gKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gZ3Bpb2NoaXBfZ2V0X2Rh dGEoZ2MpOwo+ICsJc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3Bv cnRfZGF0YShwb3J0KTsKPiArCj4gKwlpZiAocHJpdi0+Z3Bpb19vdXRwdXQgJiBCSVQoZ3Bpbykp Cj4gKwkJcmV0dXJuIDA7Cj4gKwllbHNlCj4gKwkJcmV0dXJuIDE7CgpUaGlzIGNvdWxkIGp1c3Qg c2ltcGxpZmllZCB1c2luZyBuZWdhdGlvbiAoISksIGJ1dCBwZXJoYXBzIHRoaXMgaXMKZWFzaWVy IHRvIHBhcnNlIGFzIGl0IHN0YW5kcy4KCj4gK30KCj4gK3N0YXRpYyBpbnQgZnRkaV9ncGlvX2lu aXQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKPiArewo+ICsJc3RydWN0IGZ0ZGlfcHJp dmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKPiArCXN0cnVjdCB1 c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7Cj4gKwlpbnQgcmVzdWx0Owo+ICsKPiAr CS8qIERldmljZS1zcGVjaWZpYyBpbml0aWFsaXphdGlvbnMgKi8KPiArCXN3aXRjaCAocHJpdi0+ Y2hpcF90eXBlKSB7Cj4gKwljYXNlIEZUWDoKPiArCQlyZXN1bHQgPSBmdHhfZ3Bpb2NvbmZfaW5p dChwb3J0KTsKPiArCQlicmVhazsKPiArCWRlZmF1bHQ6Cj4gKwkJcmV0dXJuIDA7Cj4gKwl9Cj4g Kwo+ICsJaWYgKHJlc3VsdCA8IDApCj4gKwkJcmV0dXJuIHJlc3VsdDsKPiArCj4gKwltdXRleF9p bml0KCZwcml2LT5ncGlvX2xvY2spOwo+ICsKPiArCS8qIFJlZ2lzdGVyIEdQSU8gY2hpcCB0byBr ZXJuZWwgKi8KPiArCXByaXYtPmdjLmxhYmVsID0gImZ0ZGktY2J1cyI7Cj4gKwlwcml2LT5nYy5y ZXF1ZXN0ID0gZnRkaV9ncGlvX3JlcXVlc3Q7Cj4gKwlwcml2LT5nYy5nZXRfZGlyZWN0aW9uID0g ZnRkaV9ncGlvX2RpcmVjdGlvbl9nZXQ7Cj4gKwlwcml2LT5nYy5kaXJlY3Rpb25faW5wdXQgPSBm dGRpX2dwaW9fZGlyZWN0aW9uX2lucHV0Owo+ICsJcHJpdi0+Z2MuZGlyZWN0aW9uX291dHB1dCA9 IGZ0ZGlfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0Owo+ICsJcHJpdi0+Z2MuZ2V0ID0gZnRkaV9ncGlv X2dldDsKPiArCXByaXYtPmdjLnNldCA9IGZ0ZGlfZ3Bpb19zZXQ7Cj4gKwlwcml2LT5nYy5nZXRf bXVsdGlwbGUgPSBmdGRpX2dwaW9fZ2V0X211bHRpcGxlOwo+ICsJcHJpdi0+Z2Muc2V0X211bHRp cGxlID0gZnRkaV9ncGlvX3NldF9tdWx0aXBsZTsKPiArCXByaXYtPmdjLm93bmVyID0gVEhJU19N T0RVTEU7Cj4gKwlwcml2LT5nYy5wYXJlbnQgPSAmc2VyaWFsLT5pbnRlcmZhY2UtPmRldjsKPiAr CXByaXYtPmdjLmJhc2UgPSAtMTsKPiArCXByaXYtPmdjLmNhbl9zbGVlcCA9IHRydWU7Cj4gKwlw cml2LT5nYy5uYW1lcyA9IGZ0ZGlfZnR4X2dwaW9fbmFtZXM7CgpBcyBub3RlZCBhYm92ZSwgdGhl c2UgbmFtZXMgYXJlIHNoYXJlZCB3aXRoIGZ0MjMyciBidXQgbm90IHdpdGggZnQyMzJoLAphbmQg dGhpcyBuZWVkcyB0byBiZSBzZXQgaW4gdGhlIGRldmljZSBzcGVjaWZpYyBpbml0IGZ1bmN0aW9u LApzcGVjaWZpY2FsbHksIGFzIHRoZSBhcnJheSBzaXplIG11c3QgYWx3YXlzIG1hdGNoIChvciBh dCBsZWFzdCBiZSBhcwpsYXJnZSBhcykgbmdwaW8uCgo+ICsKPiArCXJlc3VsdCA9IGdwaW9jaGlw X2FkZF9kYXRhKCZwcml2LT5nYywgcG9ydCk7Cj4gKwlpZiAoIXJlc3VsdCkKPiArCQlwcml2LT5n cGlvX3JlZ2lzdGVyZWQgPSB0cnVlOwo+ICsKPiArCXJldHVybiByZXN1bHQ7Cj4gK30KCkpvaGFu Cg==