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: [v3] USB: serial: cp210x: Implement GPIO support for CP2102N From: Johan Hovold Message-Id: <20180720105240.24680-1-johan@kernel.org> Date: Fri, 20 Jul 2018 12:52:40 +0200 To: Johan Hovold Cc: Greg Kroah-Hartman , linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, Karoly Pados , Martyn Welch List-ID: RnJvbTogS2Fyb2x5IFBhZG9zIDxwYWRvc0BwYWRvcy5odT4KClRoaXMgaXMgdjIgb2YgdGhlIHBh dGNoIGFuZCBhZGRyZXNzZXMgYWxsIGZlZWRiYWNrIHByZXZpb3VzbHkKcmVjZWl2ZWQgZnJvbSB0 aGUgbWFpbnRhaW5lci4gTmV3IGlucHV0L291dHB1dCBzdXBwb3J0IHN0YXllZAphcyBkaXNjdXNz ZWQgb24gdGhlIGUtbWFpbCBsaXN0cyBzZXBhcmF0ZWx5LiBDUDIxMDUgaXMgYWxzbwp1c2luZyB0 aGUgbmV3IGNvZGUgc3RydWN0dXJlLCBidXQgZHVlIHRvIG1pc3Npbmcgd2F5IHRvIGdldApkZWZh dWx0IHBpbiBzdGF0ZXMgYWZ0ZXIgcmVzZXQgZnJvbSB0aGUgZGV2aWNlLCBzdXBwb3J0CmZvciB0 aGlzIGRldmljZSBpcyBiYXNpY2FsbHkgc3RpbGwgb3V0cHV0LW9ubHkgYXMgYmVmb3JlLCBhdAps ZWFzdCBpbiBuYW1lLiBCdXQgQ1AyMTA1IGFuZCBDUDIxMDJOIHBhdGhzIGFyZSB1bmlmaWVkLgoK VGhpcyBwYXRjaCBpcyBiYXNlZCBvbiB0aGUgbGF0ZXN0IHBhdGNoIHNlcmllcyBieSBKb2hhbiBq dXN0CnN1Ym1pdHRlZCB0b2RheS4KClNpZ25lZC1vZmYtYnk6IEthcm9seSBQYWRvcyA8cGFkb3NA cGFkb3MuaHU+Clsgam9oYW46IGZpeCBzdHlsZSBpc3N1ZXMgYW5kIGEgY291cGxlIG9mIG1pbm9y IGJ1Z3MgXQpDYzogTWFydHluIFdlbGNoIDxtYXJ0eW4ud2VsY2hAY29sbGFib3JhLmNvLnVrPgpT aWduZWQtb2ZmLWJ5OiBKb2hhbiBIb3ZvbGQgPGpvaGFuQGtlcm5lbC5vcmc+Ci0tLQoKVGhpcyBp cyBLYXJvbHkncyB2MiBwYXRjaCB3aXRoIHNvbWUgc3R5bGUgaXNzdWVzIGFuZCBhIGNvdXBsZSBv ZiBtaW5vcgpidWdzIGZpeGVkLiBJJ2xsIHdhaXQgZm9yIGFuIHVwZGF0ZWQgY29tbWl0IG1lc3Nh Z2UgYmVmb3JlIGFwcGx5aW5nLgoKSm9oYW4KCgogZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEweC5j IHwgMjQ1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLQogMSBmaWxlIGNoYW5n ZWQsIDIwOSBpbnNlcnRpb25zKCspLCAzNiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2 ZXJzL3VzYi9zZXJpYWwvY3AyMTB4LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTB4LmMKaW5k ZXggNGExMThlYjEzNTkwLi5iOWJjODA3MDBiZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3Nl cmlhbC9jcDIxMHguYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTB4LmMKQEAgLTIyNCw5 ICsyMjQsMTAgQEAgTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlKTsKIHN0cnVjdCBj cDIxMHhfc2VyaWFsX3ByaXZhdGUgewogI2lmZGVmIENPTkZJR19HUElPTElCCiAJc3RydWN0IGdw aW9fY2hpcAlnYzsKLQl1OAkJCWNvbmZpZzsKLQl1OAkJCWdwaW9fbW9kZTsKIAlib29sCQkJZ3Bp b19yZWdpc3RlcmVkOworCXU4CQkJZ3Bpb19wdXNocHVsbDsKKwl1OAkJCWdwaW9fYWx0ZnVuYzsK Kwl1OAkJCWdwaW9faW5wdXQ7CiAjZW5kaWYKIAl1OAkJCXBhcnRudW07CiAJc3BlZWRfdAkJCW1h eF9zcGVlZDsKQEAgLTM0Myw2ICszNDQsNyBAQCBzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZHJp dmVyICogY29uc3Qgc2VyaWFsX2RyaXZlcnNbXSA9IHsKICNkZWZpbmUgQ09OVFJPTF9XUklURV9S VFMJMHgwMjAwCiAKIC8qIENQMjEwWF9WRU5ET1JfU1BFQ0lGSUMgdmFsdWVzICovCisjZGVmaW5l IENQMjEwWF9SRUFEXzJOQ09ORklHCTB4MDAwRQogI2RlZmluZSBDUDIxMFhfUkVBRF9MQVRDSAkw eDAwQzIKICNkZWZpbmUgQ1AyMTBYX0dFVF9QQVJUTlVNCTB4MzcwQgogI2RlZmluZSBDUDIxMFhf R0VUX1BPUlRDT05GSUcJMHgzNzBDCkBAIC00NTIsNiArNDU0LDEyIEBAIHN0cnVjdCBjcDIxMHhf Y29uZmlnIHsKICNkZWZpbmUgQ1AyMTA1X0dQSU8xX1JYTEVEX01PREUJCUJJVCgxKQogI2RlZmlu ZSBDUDIxMDVfR1BJTzFfUlM0ODVfTU9ERQkJQklUKDIpCiAKKy8qIENQMjEwMk4gY29uZmlndXJh dGlvbiBhcnJheSBpbmRpY2VzICovCisjZGVmaW5lIENQMjEwWF8yTkNPTkZJR19DT05GSUdfVkVS U0lPTl9JRFgJMgorI2RlZmluZSBDUDIxMFhfMk5DT05GSUdfR1BJT19NT0RFX0lEWAkJNTgxCisj ZGVmaW5lIENQMjEwWF8yTkNPTkZJR19HUElPX1JTVExBVENIX0lEWAk1ODcKKyNkZWZpbmUgQ1Ay MTBYXzJOQ09ORklHX0dQSU9fQ09OVFJPTF9JRFgJNjAwCisKIC8qIENQMjEwWF9WRU5ET1JfU1BF Q0lGSUMsIENQMjEwWF9XUklURV9MQVRDSCBjYWxsIHdyaXRlcyB0aGVzZSAweDIgYnl0ZXMuICov CiBzdHJ1Y3QgY3AyMTB4X2dwaW9fd3JpdGUgewogCXU4CW1hc2s7CkBAIC0xMzEzLDE3ICsxMzIx LDggQEAgc3RhdGljIGludCBjcDIxMHhfZ3Bpb19yZXF1ZXN0KHN0cnVjdCBncGlvX2NoaXAgKmdj LCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBncGlv Y2hpcF9nZXRfZGF0YShnYyk7CiAJc3RydWN0IGNwMjEweF9zZXJpYWxfcHJpdmF0ZSAqcHJpdiA9 IHVzYl9nZXRfc2VyaWFsX2RhdGEoc2VyaWFsKTsKIAotCXN3aXRjaCAob2Zmc2V0KSB7Ci0JY2Fz ZSAwOgotCQlpZiAocHJpdi0+Y29uZmlnICYgQ1AyMTA1X0dQSU8wX1RYTEVEX01PREUpCi0JCQly ZXR1cm4gLUVOT0RFVjsKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCQlpZiAocHJpdi0+Y29uZmlnICYg KENQMjEwNV9HUElPMV9SWExFRF9NT0RFIHwKLQkJCQkgICAgQ1AyMTA1X0dQSU8xX1JTNDg1X01P REUpKQotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCWJyZWFrOwotCX0KKwlpZiAocHJpdi0+Z3Bpb19h bHRmdW5jICYgQklUKG9mZnNldCkpCisJCXJldHVybiAtRU5PREVWOwogCiAJcmV0dXJuIDA7CiB9 CkBAIC0xMzMxLDEwICsxMzMwLDE1IEBAIHN0YXRpYyBpbnQgY3AyMTB4X2dwaW9fcmVxdWVzdChz dHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgaW50IG9mZnNldCkKIHN0YXRpYyBpbnQgY3Ay MTB4X2dwaW9fZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBpbnQgZ3BpbykKIHsK IAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gZ3Bpb2NoaXBfZ2V0X2RhdGEoZ2MpOworCXN0 cnVjdCBjcDIxMHhfc2VyaWFsX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHNl cmlhbCk7CisJdTggcmVxX3R5cGUgPSBSRVFUWVBFX0RFVklDRV9UT19IT1NUOwogCWludCByZXN1 bHQ7CiAJdTggYnVmOwogCi0JcmVzdWx0ID0gY3AyMTB4X3JlYWRfdmVuZG9yX2Jsb2NrKHNlcmlh bCwgUkVRVFlQRV9JTlRFUkZBQ0VfVE9fSE9TVCwKKwlpZiAocHJpdi0+cGFydG51bSA9PSBDUDIx MFhfUEFSVE5VTV9DUDIxMDUpCisJCXJlcV90eXBlID0gUkVRVFlQRV9JTlRFUkZBQ0VfVE9fSE9T VDsKKworCXJlc3VsdCA9IGNwMjEweF9yZWFkX3ZlbmRvcl9ibG9jayhzZXJpYWwsIHJlcV90eXBl LAogCQkJCQkgIENQMjEwWF9SRUFEX0xBVENILCAmYnVmLCBzaXplb2YoYnVmKSk7CiAJaWYgKHJl c3VsdCA8IDApCiAJCXJldHVybiByZXN1bHQ7CkBAIC0xMzQ1LDcgKzEzNDksOSBAQCBzdGF0aWMg aW50IGNwMjEweF9ncGlvX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgaW50IGdw aW8pCiBzdGF0aWMgdm9pZCBjcDIxMHhfZ3Bpb19zZXQoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVu c2lnbmVkIGludCBncGlvLCBpbnQgdmFsdWUpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlh bCA9IGdwaW9jaGlwX2dldF9kYXRhKGdjKTsKKwlzdHJ1Y3QgY3AyMTB4X3NlcmlhbF9wcml2YXRl ICpwcml2ID0gdXNiX2dldF9zZXJpYWxfZGF0YShzZXJpYWwpOwogCXN0cnVjdCBjcDIxMHhfZ3Bp b193cml0ZSBidWY7CisJaW50IHJlc3VsdDsKIAogCWlmICh2YWx1ZSA9PSAxKQogCQlidWYuc3Rh dGUgPSBCSVQoZ3Bpbyk7CkBAIC0xMzU0LDI1ICsxMzYwLDY4IEBAIHN0YXRpYyB2b2lkIGNwMjEw eF9ncGlvX3NldChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgaW50IGdwaW8sIGludCB2 YWx1ZSkKIAogCWJ1Zi5tYXNrID0gQklUKGdwaW8pOwogCi0JY3AyMTB4X3dyaXRlX3ZlbmRvcl9i bG9jayhzZXJpYWwsIFJFUVRZUEVfSE9TVF9UT19JTlRFUkZBQ0UsCi0JCQkJICBDUDIxMFhfV1JJ VEVfTEFUQ0gsICZidWYsIHNpemVvZihidWYpKTsKKwlpZiAocHJpdi0+cGFydG51bSA9PSBDUDIx MFhfUEFSVE5VTV9DUDIxMDUpIHsKKwkJcmVzdWx0ID0gY3AyMTB4X3dyaXRlX3ZlbmRvcl9ibG9j ayhzZXJpYWwsCisJCQkJCQkgICBSRVFUWVBFX0hPU1RfVE9fSU5URVJGQUNFLAorCQkJCQkJICAg Q1AyMTBYX1dSSVRFX0xBVENILCAmYnVmLAorCQkJCQkJICAgc2l6ZW9mKGJ1ZikpOworCX0gZWxz ZSB7CisJCXUxNiB3SW5kZXggPSBidWYuc3RhdGUgPDwgOCB8IGJ1Zi5tYXNrOworCisJCXJlc3Vs dCA9IHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwKKwkJCQkJIHVzYl9zbmRjdHJscGlwZShz ZXJpYWwtPmRldiwgMCksCisJCQkJCSBDUDIxMFhfVkVORE9SX1NQRUNJRklDLAorCQkJCQkgUkVR VFlQRV9IT1NUX1RPX0RFVklDRSwKKwkJCQkJIENQMjEwWF9XUklURV9MQVRDSCwKKwkJCQkJIHdJ bmRleCwKKwkJCQkJIE5VTEwsIDAsIFVTQl9DVFJMX1NFVF9USU1FT1VUKTsKKwl9CisKKwlpZiAo cmVzdWx0IDwgMCkgeworCQlkZXZfZXJyKCZzZXJpYWwtPmludGVyZmFjZS0+ZGV2LCAiZmFpbGVk IHRvIHNldCBHUElPIHZhbHVlOiAlZFxuIiwKKwkJCQlyZXN1bHQpOworCX0KIH0KIAogc3RhdGlj IGludCBjcDIxMHhfZ3Bpb19kaXJlY3Rpb25fZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNp Z25lZCBpbnQgZ3BpbykKIHsKLQkvKiBIYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IGFuIGlucHV0 IG1vZGUgKi8KLQlyZXR1cm4gMDsKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gZ3Bpb2No aXBfZ2V0X2RhdGEoZ2MpOworCXN0cnVjdCBjcDIxMHhfc2VyaWFsX3ByaXZhdGUgKnByaXYgPSB1 c2JfZ2V0X3NlcmlhbF9kYXRhKHNlcmlhbCk7CisKKwlyZXR1cm4gcHJpdi0+Z3Bpb19pbnB1dCAm IEJJVChncGlvKTsKIH0KIAogc3RhdGljIGludCBjcDIxMHhfZ3Bpb19kaXJlY3Rpb25faW5wdXQo c3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIGludCBncGlvKQogewotCS8qIEhhcmR3YXJl IGRvZXMgbm90IHN1cHBvcnQgYW4gaW5wdXQgbW9kZSAqLwotCXJldHVybiAtRU5PVFNVUFA7CisJ c3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IGdwaW9jaGlwX2dldF9kYXRhKGdjKTsKKwlzdHJ1 Y3QgY3AyMTB4X3NlcmlhbF9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfZGF0YShzZXJp YWwpOworCisJaWYgKHByaXYtPnBhcnRudW0gPT0gQ1AyMTBYX1BBUlROVU1fQ1AyMTA1KSB7CisJ CS8qIGhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgYW4gaW5wdXQgbW9kZSAqLworCQlyZXR1cm4g LUVOT1RTVVBQOworCX0KKworCS8qIHB1c2gtcHVsbCBwaW5zIGNhbm5vdCBiZSBjaGFuZ2VkIHRv IGJlIGlucHV0cyAqLworCWlmIChwcml2LT5ncGlvX3B1c2hwdWxsICYgQklUKGdwaW8pKQorCQly ZXR1cm4gLUVJTlZBTDsKKworCS8qIG1ha2Ugc3VyZSB0byByZWxlYXNlIHBpbiBpZiBpdCBpcyBi ZWluZyBkcml2ZW4gbG93ICovCisJY3AyMTB4X2dwaW9fc2V0KGdjLCBncGlvLCAxKTsKKworCXBy aXYtPmdwaW9faW5wdXQgfD0gQklUKGdwaW8pOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBp bnQgY3AyMTB4X2dwaW9fZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5z aWduZWQgaW50IGdwaW8sCiAJCQkJCWludCB2YWx1ZSkKIHsKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAq c2VyaWFsID0gZ3Bpb2NoaXBfZ2V0X2RhdGEoZ2MpOworCXN0cnVjdCBjcDIxMHhfc2VyaWFsX3By aXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9kYXRhKHNlcmlhbCk7CisKKwlwcml2LT5ncGlv X2lucHV0ICY9IH5CSVQoZ3Bpbyk7CisJY3AyMTB4X2dwaW9fc2V0KGdjLCBncGlvLCB2YWx1ZSk7 CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTM4NSwxMSArMTQzNCwxMSBAQCBzdGF0aWMgaW50IGNw MjEweF9ncGlvX3NldF9jb25maWcoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIGludCBn cGlvLAogCiAJLyogU3VjY2VlZCBvbmx5IGlmIGluIGNvcnJlY3QgbW9kZSAodGhpcyBjYW4ndCBi ZSBzZXQgYXQgcnVudGltZSkgKi8KIAlpZiAoKHBhcmFtID09IFBJTl9DT05GSUdfRFJJVkVfUFVT SF9QVUxMKSAmJgotCSAgICAocHJpdi0+Z3Bpb19tb2RlICYgQklUKGdwaW8pKSkKKwkgICAgKHBy aXYtPmdwaW9fcHVzaHB1bGwgJiBCSVQoZ3BpbykpKQogCQlyZXR1cm4gMDsKIAogCWlmICgocGFy YW0gPT0gUElOX0NPTkZJR19EUklWRV9PUEVOX0RSQUlOKSAmJgotCSAgICAhKHByaXYtPmdwaW9f bW9kZSAmIEJJVChncGlvKSkpCisJICAgICEocHJpdi0+Z3Bpb19wdXNocHVsbCAmIEJJVChncGlv KSkpCiAJCXJldHVybiAwOwogCiAJcmV0dXJuIC1FTk9UU1VQUDsKQEAgLTE0MDIsMTIgKzE0NTEs MTMgQEAgc3RhdGljIGludCBjcDIxMHhfZ3Bpb19zZXRfY29uZmlnKHN0cnVjdCBncGlvX2NoaXAg KmdjLCB1bnNpZ25lZCBpbnQgZ3BpbywKICAqIHRoaXMgZHJpdmVyIHRoYXQgcHJvdmlkZSBHUElP IGRvIHNvIGluIGEgd2F5IHRoYXQgZG9lcyBub3QgaW1wYWN0IG90aGVyCiAgKiBzaWduYWxzIGFu ZCBhcmUgdGh1cyBleHBlY3RlZCB0byBoYXZlIHZlcnkgZGlmZmVyZW50IGluaXRpYWxpc2F0aW9u LgogICovCi1zdGF0aWMgaW50IGNwMjEwNV9zaGFyZWRfZ3Bpb19pbml0KHN0cnVjdCB1c2Jfc2Vy aWFsICpzZXJpYWwpCitzdGF0aWMgaW50IGNwMjEwNV9ncGlvY29uZl9pbml0KHN0cnVjdCB1c2Jf c2VyaWFsICpzZXJpYWwpCiB7CiAJc3RydWN0IGNwMjEweF9zZXJpYWxfcHJpdmF0ZSAqcHJpdiA9 IHVzYl9nZXRfc2VyaWFsX2RhdGEoc2VyaWFsKTsKIAlzdHJ1Y3QgY3AyMTB4X3Bpbl9tb2RlIG1v ZGU7CiAJc3RydWN0IGNwMjEweF9jb25maWcgY29uZmlnOwogCXU4IGludGZfbnVtID0gY3AyMTB4 X2ludGVyZmFjZV9udW0oc2VyaWFsKTsKKwl1OCBpZmFjZV9jb25maWc7CiAJaW50IHJlc3VsdDsK IAogCXJlc3VsdCA9IGNwMjEweF9yZWFkX3ZlbmRvcl9ibG9jayhzZXJpYWwsIFJFUVRZUEVfREVW SUNFX1RPX0hPU1QsCkBAIC0xNDI0LDIwICsxNDc0LDI2IEBAIHN0YXRpYyBpbnQgY3AyMTA1X3No YXJlZF9ncGlvX2luaXQoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKIAogCS8qICAyIGJhbmtz IG9mIEdQSU8gLSBPbmUgZm9yIHRoZSBwaW5zIHRha2VuIGZyb20gZWFjaCBzZXJpYWwgcG9ydCAq LwogCWlmIChpbnRmX251bSA9PSAwKSB7Ci0JCWlmIChtb2RlLmVjaSA9PSBDUDIxMFhfUElOX01P REVfTU9ERU0pCisJCWlmIChtb2RlLmVjaSA9PSBDUDIxMFhfUElOX01PREVfTU9ERU0pIHsKKwkJ CS8qIG1hcmsgYWxsIEdQSU9zIG9mIHRoaXMgaW50ZXJmYWNlIGFzIHJlc2VydmVkICovCisJCQlw cml2LT5ncGlvX2FsdGZ1bmMgPSAweGZmOwogCQkJcmV0dXJuIDA7CisJCX0KIAotCQlwcml2LT5j b25maWcgPSBjb25maWcuZWNpX2NmZzsKLQkJcHJpdi0+Z3Bpb19tb2RlID0gKHU4KSgobGUxNl90 b19jcHUoY29uZmlnLmdwaW9fbW9kZSkgJgorCQlpZmFjZV9jb25maWcgPSBjb25maWcuZWNpX2Nm ZzsKKwkJcHJpdi0+Z3Bpb19wdXNocHVsbCA9ICh1OCkoKGxlMTZfdG9fY3B1KGNvbmZpZy5ncGlv X21vZGUpICYKIAkJCQkJCUNQMjEwWF9FQ0lfR1BJT19NT0RFX01BU0spID4+CiAJCQkJCQlDUDIx MFhfRUNJX0dQSU9fTU9ERV9PRkZTRVQpOwogCQlwcml2LT5nYy5uZ3BpbyA9IDI7CiAJfSBlbHNl IGlmIChpbnRmX251bSA9PSAxKSB7Ci0JCWlmIChtb2RlLnNjaSA9PSBDUDIxMFhfUElOX01PREVf TU9ERU0pCisJCWlmIChtb2RlLnNjaSA9PSBDUDIxMFhfUElOX01PREVfTU9ERU0pIHsKKwkJCS8q IG1hcmsgYWxsIEdQSU9zIG9mIHRoaXMgaW50ZXJmYWNlIGFzIHJlc2VydmVkICovCisJCQlwcml2 LT5ncGlvX2FsdGZ1bmMgPSAweGZmOwogCQkJcmV0dXJuIDA7CisJCX0KIAotCQlwcml2LT5jb25m aWcgPSBjb25maWcuc2NpX2NmZzsKLQkJcHJpdi0+Z3Bpb19tb2RlID0gKHU4KSgobGUxNl90b19j cHUoY29uZmlnLmdwaW9fbW9kZSkgJgorCQlpZmFjZV9jb25maWcgPSBjb25maWcuc2NpX2NmZzsK KwkJcHJpdi0+Z3Bpb19wdXNocHVsbCA9ICh1OCkoKGxlMTZfdG9fY3B1KGNvbmZpZy5ncGlvX21v ZGUpICYKIAkJCQkJCUNQMjEwWF9TQ0lfR1BJT19NT0RFX01BU0spID4+CiAJCQkJCQlDUDIxMFhf U0NJX0dQSU9fTU9ERV9PRkZTRVQpOwogCQlwcml2LT5nYy5uZ3BpbyA9IDM7CkBAIC0xNDQ1LDYg KzE1MDEsMTI1IEBAIHN0YXRpYyBpbnQgY3AyMTA1X3NoYXJlZF9ncGlvX2luaXQoc3RydWN0IHVz Yl9zZXJpYWwgKnNlcmlhbCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCisJLyogbWFyayBhbGwg cGlucyB3aGljaCBhcmUgbm90IGluIEdQSU8gbW9kZSAqLworCWlmIChpZmFjZV9jb25maWcgJiBD UDIxMDVfR1BJTzBfVFhMRURfTU9ERSkJLyogR1BJTyAwICovCisJCXByaXYtPmdwaW9fYWx0ZnVu YyB8PSBCSVQoMCk7CisJaWYgKGlmYWNlX2NvbmZpZyAmIChDUDIxMDVfR1BJTzFfUlhMRURfTU9E RSB8CS8qIEdQSU8gMSAqLworCQkJQ1AyMTA1X0dQSU8xX1JTNDg1X01PREUpKQorCQlwcml2LT5n cGlvX2FsdGZ1bmMgfD0gQklUKDEpOworCisJLyogZHJpdmVyIGltcGxlbWVudGF0aW9uIGZvciBD UDIxMDUgb25seSBzdXBwb3J0cyBvdXRwdXRzICovCisJcHJpdi0+Z3Bpb19pbnB1dCA9IDA7CisK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjcDIxMDJuX2dwaW9jb25mX2luaXQoc3RydWN0 IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlzdHJ1Y3QgY3AyMTB4X3NlcmlhbF9wcml2YXRlICpw cml2ID0gdXNiX2dldF9zZXJpYWxfZGF0YShzZXJpYWwpOworCWNvbnN0IHUxNiBjb25maWdfc2l6 ZSA9IDB4MDJhNjsKKwl1OCBncGlvX3JzdF9sYXRjaDsKKwl1OCBjb25maWdfdmVyc2lvbjsKKwl1 OCBncGlvX3B1c2hwdWxsOworCXU4ICpjb25maWdfYnVmOworCXU4IGdwaW9fbGF0Y2g7CisJdTgg Z3Bpb19jdHJsOworCWludCByZXN1bHQ7CisJdTggaTsKKworCS8qCisJICogUmV0cmlldmUgZGV2 aWNlIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgZGV2aWNlLgorCSAqIFRoZSBhcnJheSByZWNlaXZl ZCBjb250YWlucyBhbGwgY3VzdG9taXphdGlvbiBzZXR0aW5ncyBkb25lIGF0IHRoZQorCSAqIGZh Y3RvcnkvbWFudWZhY3R1cmVyLiBGb3JtYXQgb2YgdGhlIGFycmF5IGlzIGRvY3VtZW50ZWQgYXQg dGhlCisJICogdGltZSBvZiB3cml0aW5nIGF0OgorCSAqIGh0dHBzOi8vd3d3LnNpbGFicy5jb20v Y29tbXVuaXR5L2ludGVyZmFjZS9rbm93bGVkZ2UtYmFzZS5lbnRyeS5odG1sLzIwMTcvMDMvMzEv Y3AyMTAybl9zZXRjb25maWcteHNmYQorCSAqLworCWNvbmZpZ19idWYgPSBrbWFsbG9jKGNvbmZp Z19zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNvbmZpZ19idWYpCisJCXJldHVybiAtRU5PTUVN OworCisJcmVzdWx0ID0gY3AyMTB4X3JlYWRfdmVuZG9yX2Jsb2NrKHNlcmlhbCwKKwkJCQkJICBS RVFUWVBFX0RFVklDRV9UT19IT1NULAorCQkJCQkgIENQMjEwWF9SRUFEXzJOQ09ORklHLAorCQkJ CQkgIGNvbmZpZ19idWYsCisJCQkJCSAgY29uZmlnX3NpemUpOworCWlmIChyZXN1bHQgPCAwKSB7 CisJCWtmcmVlKGNvbmZpZ19idWYpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCWNvbmZpZ192 ZXJzaW9uID0gY29uZmlnX2J1ZltDUDIxMFhfMk5DT05GSUdfQ09ORklHX1ZFUlNJT05fSURYXTsK KwlncGlvX3B1c2hwdWxsID0gY29uZmlnX2J1ZltDUDIxMFhfMk5DT05GSUdfR1BJT19NT0RFX0lE WF07CisJZ3Bpb19jdHJsID0gY29uZmlnX2J1ZltDUDIxMFhfMk5DT05GSUdfR1BJT19DT05UUk9M X0lEWF07CisJZ3Bpb19yc3RfbGF0Y2ggPSBjb25maWdfYnVmW0NQMjEwWF8yTkNPTkZJR19HUElP X1JTVExBVENIX0lEWF07CisKKwlrZnJlZShjb25maWdfYnVmKTsKKworCS8qIE1ha2Ugc3VyZSB0 aGlzIGlzIGEgY29uZmlnIGZvcm1hdCB3ZSB1bmRlcnN0YW5kLiAqLworCWlmIChjb25maWdfdmVy c2lvbiAhPSAweDAxKQorCQlyZXR1cm4gLUVOT1RTVVBQOworCisJLyoKKwkgKiBXZSBvbmx5IHN1 cHBvcnQgNCBHUElPcyBldmVuIG9uIHRoZSBRRk4yOCBwYWNrYWdlLCBiZWNhdXNlCisJICogY29u ZmlnIGxvY2F0aW9ucyBvZiBHUElPcyA0LTYgZGV0ZXJtaW5lZCB1c2luZyByZXZlcnNlCisJICog ZW5naW5lZXJpbmcgcmV2ZWFsZWQgY29uZmxpY3Rpbmcgb2Zmc2V0cyB3aXRoIG90aGVyCisJICog ZG9jdW1lbnRlZCBmdW5jdGlvbnMuIFNvIHdlJ2xsIGp1c3QgcGxheSBpdCBzYWZlIGZvciBub3cu CisJICovCisJcHJpdi0+Z2MubmdwaW8gPSA0OworCisJLyoKKwkgKiBHZXQgZGVmYXVsdCBwaW4g c3RhdGVzIGFmdGVyIHJlc2V0LiBOZWVkZWQgc28gd2UgY2FuIGRldGVybWluZQorCSAqIHRoZSBk aXJlY3Rpb24gb2YgYW4gb3Blbi1kcmFpbiBwaW4uCisJICovCisJZ3Bpb19sYXRjaCA9IChncGlv X3JzdF9sYXRjaCA+PiAzKSAmIDB4MGY7CisKKwkvKiAwIGluZGljYXRlcyBvcGVuLWRyYWluIG1v ZGUsIDEgaXMgcHVzaC1wdWxsICovCisJcHJpdi0+Z3Bpb19wdXNocHVsbCA9IChncGlvX3B1c2hw dWxsID4+IDMpICYgMHgwZjsKKworCS8qIDAgaW5kaWNhdGVzIEdQSU8gbW9kZSwgMSBpcyBhbHRl cm5hdGUgZnVuY3Rpb24gKi8KKwlwcml2LT5ncGlvX2FsdGZ1bmMgPSAoZ3Bpb19jdHJsID4+IDIp ICYgMHgwZjsKKworCS8qCisJICogVGhlIENQMjEwMk4gZG9lcyBub3Qgc3RyaWN0bHkgaGFzIGlu cHV0IGFuZCBvdXRwdXQgcGluIG1vZGVzLAorCSAqIGl0IG9ubHkga25vd3Mgb3Blbi1kcmFpbiBh bmQgcHVzaC1wdWxsIG1vZGVzIHdoaWNoIGlzIHNldCBhdAorCSAqIGZhY3RvcnkuIEFuIG9wZW4t ZHJhaW4gcGluIGNhbiBmdW5jdGlvbiBib3RoIGFzIGFuCisJICogaW5wdXQgb3IgYW4gb3V0cHV0 LiBXZSBlbXVsYXRlIGlucHV0IG1vZGUgZm9yIG9wZW4tZHJhaW4gcGlucworCSAqIGJ5IG1ha2lu ZyBzdXJlIHRoZXkgYXJlIG5vdCBkcml2ZW4gbG93LCBhbmQgd2UgZG8gbm90IGFsbG93CisJICog cHVzaC1wdWxsIHBpbnMgdG8gYmUgc2V0IGFzIGFuIGlucHV0LgorCSAqLworCWZvciAoaSA9IDA7 IGkgPCBwcml2LT5nYy5uZ3BpbzsgKytpKSB7CisJCS8qCisJCSAqIFNldCBkaXJlY3Rpb24gdG8g ImlucHV0IiBpZmYgcGluIGlzIG9wZW4tZHJhaW4gYW5kIHJlc2V0CisJCSAqIHZhbHVlIGlzIDEu CisJCSAqLworCQlpZiAoIShwcml2LT5ncGlvX3B1c2hwdWxsICYgQklUKGkpKSAmJiAoZ3Bpb19s YXRjaCAmIEJJVChpKSkpCisJCQlwcml2LT5ncGlvX2lucHV0IHw9IEJJVChpKTsKKwl9CisKKwly ZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjcDIxMHhfZ3Bpb19pbml0KHN0cnVjdCB1c2Jfc2Vy aWFsICpzZXJpYWwpCit7CisJc3RydWN0IGNwMjEweF9zZXJpYWxfcHJpdmF0ZSAqcHJpdiA9IHVz Yl9nZXRfc2VyaWFsX2RhdGEoc2VyaWFsKTsKKwlpbnQgcmVzdWx0OworCisJc3dpdGNoIChwcml2 LT5wYXJ0bnVtKSB7CisJY2FzZSBDUDIxMFhfUEFSVE5VTV9DUDIxMDU6CisJCXJlc3VsdCA9IGNw MjEwNV9ncGlvY29uZl9pbml0KHNlcmlhbCk7CisJCWJyZWFrOworCWNhc2UgQ1AyMTBYX1BBUlRO VU1fQ1AyMTAyTl9RRk4yODoKKwljYXNlIENQMjEwWF9QQVJUTlVNX0NQMjEwMk5fUUZOMjQ6CisJ Y2FzZSBDUDIxMFhfUEFSVE5VTV9DUDIxMDJOX1FGTjIwOgorCQlyZXN1bHQgPSBjcDIxMDJuX2dw aW9jb25mX2luaXQoc2VyaWFsKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJ fQorCisJaWYgKHJlc3VsdCA8IDApCisJCXJldHVybiByZXN1bHQ7CisKIAlwcml2LT5nYy5sYWJl bCA9ICJjcDIxMHgiOwogCXByaXYtPmdjLnJlcXVlc3QgPSBjcDIxMHhfZ3Bpb19yZXF1ZXN0Owog CXByaXYtPmdjLmdldF9kaXJlY3Rpb24gPSBjcDIxMHhfZ3Bpb19kaXJlY3Rpb25fZ2V0OwpAQCAt MTQ3Nyw3ICsxNjUyLDcgQEAgc3RhdGljIHZvaWQgY3AyMTB4X2dwaW9fcmVtb3ZlKHN0cnVjdCB1 c2Jfc2VyaWFsICpzZXJpYWwpCiAKICNlbHNlCiAKLXN0YXRpYyBpbnQgY3AyMTA1X3NoYXJlZF9n cGlvX2luaXQoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3N0YXRpYyBpbnQgY3AyMTB4X2dw aW9faW5pdChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQogewogCXJldHVybiAwOwogfQpAQCAt MTU4OCwxMiArMTc2MywxMCBAQCBzdGF0aWMgaW50IGNwMjEweF9hdHRhY2goc3RydWN0IHVzYl9z ZXJpYWwgKnNlcmlhbCkKIAogCWNwMjEweF9pbml0X21heF9zcGVlZChzZXJpYWwpOwogCi0JaWYg KHByaXYtPnBhcnRudW0gPT0gQ1AyMTBYX1BBUlROVU1fQ1AyMTA1KSB7Ci0JCXJlc3VsdCA9IGNw MjEwNV9zaGFyZWRfZ3Bpb19pbml0KHNlcmlhbCk7Ci0JCWlmIChyZXN1bHQgPCAwKSB7Ci0JCQlk ZXZfZXJyKCZzZXJpYWwtPmludGVyZmFjZS0+ZGV2LAotCQkJCSJHUElPIGluaXRpYWxpc2F0aW9u IGZhaWxlZCwgY29udGludWluZyB3aXRob3V0IEdQSU8gc3VwcG9ydFxuIik7Ci0JCX0KKwlyZXN1 bHQgPSBjcDIxMHhfZ3Bpb19pbml0KHNlcmlhbCk7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZGV2 X2Vycigmc2VyaWFsLT5pbnRlcmZhY2UtPmRldiwgIkdQSU8gaW5pdGlhbGlzYXRpb24gZmFpbGVk OiAlZFxuIiwKKwkJCQlyZXN1bHQpOwogCX0KIAogCXJldHVybiAwOwo=