From mboxrd@z Thu Jan 1 00:00:00 1970 From: Linus Walleij Subject: [PATCH 07/22] gpio: Add a driver for Cortina Systems Gemini GPIO Date: Sun, 22 Jan 2017 13:18:44 +0100 Message-ID: <20170122121844.10386-1-linus.walleij@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: openwrt-devel-bounces@lists.openwrt.org Sender: "openwrt-devel" To: linux-arm-kernel@lists.infradead.org, Hans Ulli Kroll , Florian Fainelli , Linus Walleij , Alexandre Courbot Cc: openwrt-devel@openwrt.org, Paulius Zaleckas , Arnd Bergmann , linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org, Janos Laube List-Id: linux-gpio@vger.kernel.org VGhpcyBpcyBhIGhlYXZ5IGVkaXQvcmV3cml0ZSBvZiB0aGUgR1BJTyBkcml2ZXIgZm9yIHRoZSBH ZW1pbmkKU29DIGZyb20gYXJjaC9hcm0vbWFjaC1nZW1pbmkvZ3Bpby5jLgoKVGhpcyByZXdyaXRl IHVzZXMgYWxsIHRoZSBiZXN0LWluLWNsYXNzIGhlbHBlciBsaWtlIGdlbmVyaWMKR1BJTyBhbmQg R1BJT0xJQl9JUlFDSElQIGFuZCBoYXMgYmVlbiB0ZXN0ZWQgb24gSVRpYW4gU3F1YXJlIE9uZQpH ZW1pbmktYmFzZWQgTkFTL3JvdXRlci4KCkNjOiBKYW5vcyBMYXViZSA8amFub3MuZGV2QGdtYWls LmNvbT4KQ2M6IFBhdWxpdXMgWmFsZWNrYXMgPHBhdWxpdXMuemFsZWNrYXNAZ21haWwuY29tPgpD YzogSGFucyBVbGxpIEtyb2xsIDx1bGxpLmtyb2xsQGdvb2dsZW1haWwuY29tPgpDYzogRmxvcmlh biBGYWluZWxsaSA8Zi5mYWluZWxsaUBnbWFpbC5jb20+ClNpZ25lZC1vZmYtYnk6IExpbnVzIFdh bGxlaWogPGxpbnVzLndhbGxlaWpAbGluYXJvLm9yZz4KLS0tCk5vdGUgdG8gc2VsZjoganVzdCBh cHBseSB0aGlzIHRvIHRoZSBHUElPIHRyZWUgd2hlbiBkaXNjdXNzaW9uIGlzIG92ZXIuCi0tLQog ZHJpdmVycy9ncGlvL0tjb25maWcgICAgICAgfCAgIDkgKysKIGRyaXZlcnMvZ3Bpby9NYWtlZmls ZSAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3Bpby9ncGlvLWdlbWluaS5jIHwgMjM2ICsrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCAy NDYgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3Bpby9ncGlvLWdl bWluaS5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL0tjb25maWcgYi9kcml2ZXJzL2dwaW8v S2NvbmZpZwppbmRleCBkNWQzNjU0OWVjYzEuLjcwMTgwOWIxYTEwNSAxMDA2NDQKLS0tIGEvZHJp dmVycy9ncGlvL0tjb25maWcKKysrIGIvZHJpdmVycy9ncGlvL0tjb25maWcKQEAgLTE5Nyw2ICsx OTcsMTUgQEAgY29uZmlnIEdQSU9fR0VfRlBHQQogCSAgYW5kIHdyaXRlIHBpbiBzdGF0ZSkgZm9y IEdQSU8gaW1wbGVtZW50ZWQgaW4gYSBudW1iZXIgb2YgR0Ugc2luZ2xlCiAJICBib2FyZCBjb21w dXRlcnMuCiAKK2NvbmZpZyBHUElPX0dFTUlOSQorCWJvb2wgIkdlbWluaSBHUElPIgorCWRlcGVu ZHMgb24gQVJDSF9HRU1JTkkKKwlkZXBlbmRzIG9uIE9GX0dQSU8KKwlzZWxlY3QgR1BJT19HRU5F UklDCisJc2VsZWN0IEdQSU9MSUJfSVJRQ0hJUAorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIGNvbW1v biBHUElPcyBmb3VuZCBpbiBDb3J0aW5hIHN5c3RlbXMgR2VtaW5pIHBsYXRmb3Jtcy4KKwogY29u ZmlnIEdQSU9fR0VORVJJQ19QTEFURk9STQogCXRyaXN0YXRlICJHZW5lcmljIG1lbW9yeS1tYXBw ZWQgR1BJTyBjb250cm9sbGVyIHN1cHBvcnQgKE1NSU8gcGxhdGZvcm0gZGV2aWNlKSIKIAlzZWxl Y3QgR1BJT19HRU5FUklDCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vTWFrZWZpbGUgYi9kcml2 ZXJzL2dwaW8vTWFrZWZpbGUKaW5kZXggYTc2NzZiODJkZTZmLi5kZTQ1OTU3YjliNjIgMTAwNjQ0 Ci0tLSBhL2RyaXZlcnMvZ3Bpby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwaW8vTWFrZWZpbGUK QEAgLTQ4LDYgKzQ4LDcgQEAgb2JqLSQoQ09ORklHX0dQSU9fRVA5M1hYKQkrPSBncGlvLWVwOTN4 eC5vCiBvYmotJChDT05GSUdfR1BJT19FVFJBWEZTKQkrPSBncGlvLWV0cmF4ZnMubwogb2JqLSQo Q09ORklHX0dQSU9fRjcxODhYKQkrPSBncGlvLWY3MTg4eC5vCiBvYmotJChDT05GSUdfR1BJT19H RV9GUEdBKQkrPSBncGlvLWdlLm8KK29iai0kKENPTkZJR19HUElPX0dFTUlOSSkJKz0gZ3Bpby1n ZW1pbmkubwogb2JqLSQoQ09ORklHX0dQSU9fR1BJT19NTSkJKz0gZ3Bpby1ncGlvLW1tLm8KIG9i ai0kKENPTkZJR19HUElPX0dSR1BJTykJKz0gZ3Bpby1ncmdwaW8ubwogb2JqLSQoQ09ORklHX0hU Q19FR1BJTykJCSs9IGdwaW8taHRjLWVncGlvLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9n cGlvLWdlbWluaS5jIGIvZHJpdmVycy9ncGlvL2dwaW8tZ2VtaW5pLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi45NjI0ODUxNjNiN2YKLS0tIC9kZXYvbnVsbAorKysg Yi9kcml2ZXJzL2dwaW8vZ3Bpby1nZW1pbmkuYwpAQCAtMCwwICsxLDIzNiBAQAorLyoKKyAqIEdl bWluaSBncGlvY2hpcCBhbmQgaW50ZXJydXB0IHJvdXRpbmVzCisgKiBDb3B5cmlnaHQgKEMpIDIw MTcgTGludXMgV2FsbGVpaiA8bGludXMud2FsbGVpakBsaW5hcm8ub3JnPgorICoKKyAqIEJhc2Vk IG9uIGFyY2gvYXJtL21hY2gtZ2VtaW5pL2dwaW8uYzoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0y MDA5IFBhdWxpdXMgWmFsZWNrYXMgPHBhdWxpdXMuemFsZWNrYXNAdGVsdG9uaWthLmx0PgorICoK KyAqIEJhc2VkIG9uIHBsYXQtbXhjL2dwaW8uYzoKKyAqIE1YQyBHUElPIHN1cHBvcnQuIChjKSAy MDA4IERhbmllbCBNYWNrIDxkYW5pZWxAY2FpYXEuZGU+CisgKiBDb3B5cmlnaHQgMjAwOCBKdWVy Z2VuIEJlaXNlcnQsIGtlcm5lbEBwZW5ndXRyb25peC5kZQorICovCisjaW5jbHVkZSA8bGludXgv Z3Bpby9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lu dGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUg PGxpbnV4L29mX2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKworLyogR1BJTyBy ZWdpc3RlcnMgZGVmaW5pdGlvbiAqLworI2RlZmluZSBHUElPX0RBVEFfT1VUCQkweDAwCisjZGVm aW5lIEdQSU9fREFUQV9JTgkJMHgwNAorI2RlZmluZSBHUElPX0RJUgkJMHgwOAorI2RlZmluZSBH UElPX0RBVEFfU0VUCQkweDEwCisjZGVmaW5lIEdQSU9fREFUQV9DTFIJCTB4MTQKKyNkZWZpbmUg R1BJT19QVUxMX0VOCQkweDE4CisjZGVmaW5lIEdQSU9fUFVMTF9UWVBFCQkweDFDCisjZGVmaW5l IEdQSU9fSU5UX0VOCQkweDIwCisjZGVmaW5lIEdQSU9fSU5UX1NUQVQJCTB4MjQKKyNkZWZpbmUg R1BJT19JTlRfTUFTSwkJMHgyQworI2RlZmluZSBHUElPX0lOVF9DTFIJCTB4MzAKKyNkZWZpbmUg R1BJT19JTlRfVFlQRQkJMHgzNAorI2RlZmluZSBHUElPX0lOVF9CT1RIX0VER0UJMHgzOAorI2Rl ZmluZSBHUElPX0lOVF9MRVZFTAkJMHgzQworI2RlZmluZSBHUElPX0RFQk9VTkNFX0VOCTB4NDAK KyNkZWZpbmUgR1BJT19ERUJPVU5DRV9QUkVTQ0FMRQkweDQ0CisKKy8qKgorICogc3RydWN0IGdl bWluaV9ncGlvIC0gR2VtaW5pIEdQSU8gc3RhdGUgY29udGFpbmVyCisgKiBAZGV2OiBjb250YWlu aW5nIGRldmljZSBmb3IgdGhpcyBpbnN0YW5jZQorICogQGdjOiBncGlvY2hpcCBmb3IgdGhpcyBp bnN0YW5jZQorICovCitzdHJ1Y3QgZ2VtaW5pX2dwaW8geworCXN0cnVjdCBkZXZpY2UgKmRldjsK KwlzdHJ1Y3QgZ3Bpb19jaGlwIGdjOworCXZvaWQgX19pb21lbSAqYmFzZTsKK307CisKK3N0YXRp YyB2b2lkIGdlbWluaV9ncGlvX2Fja19pcnEoc3RydWN0IGlycV9kYXRhICpkKQoreworCXN0cnVj dCBncGlvX2NoaXAgKmdjID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CisJc3RydWN0 IGdlbWluaV9ncGlvICpnID0gZ3Bpb2NoaXBfZ2V0X2RhdGEoZ2MpOworCisJd3JpdGVsKEJJVChp cnFkX3RvX2h3aXJxKGQpKSwgZy0+YmFzZSArIEdQSU9fSU5UX0NMUik7Cit9CisKK3N0YXRpYyB2 b2lkIGdlbWluaV9ncGlvX21hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3sKKwlzdHJ1Y3Qg Z3Bpb19jaGlwICpnYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOworCXN0cnVjdCBn ZW1pbmlfZ3BpbyAqZyA9IGdwaW9jaGlwX2dldF9kYXRhKGdjKTsKKwl1MzIgdmFsOworCisJdmFs ID0gcmVhZGwoZy0+YmFzZSArIEdQSU9fSU5UX0VOKTsKKwl2YWwgJj0gfkJJVChpcnFkX3RvX2h3 aXJxKGQpKTsKKwl3cml0ZWwodmFsLCBnLT5iYXNlICsgR1BJT19JTlRfRU4pOworfQorCitzdGF0 aWMgdm9pZCBnZW1pbmlfZ3Bpb191bm1hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3sKKwlz dHJ1Y3QgZ3Bpb19jaGlwICpnYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOworCXN0 cnVjdCBnZW1pbmlfZ3BpbyAqZyA9IGdwaW9jaGlwX2dldF9kYXRhKGdjKTsKKwl1MzIgdmFsOwor CisJdmFsID0gcmVhZGwoZy0+YmFzZSArIEdQSU9fSU5UX0VOKTsKKwl2YWwgfD0gQklUKGlycWRf dG9faHdpcnEoZCkpOworCXdyaXRlbCh2YWwsIGctPmJhc2UgKyBHUElPX0lOVF9FTik7Cit9CisK K3N0YXRpYyBpbnQgZ2VtaW5pX2dwaW9fc2V0X2lycV90eXBlKHN0cnVjdCBpcnFfZGF0YSAqZCwg dW5zaWduZWQgaW50IHR5cGUpCit7CisJc3RydWN0IGdwaW9fY2hpcCAqZ2MgPSBpcnFfZGF0YV9n ZXRfaXJxX2NoaXBfZGF0YShkKTsKKwlzdHJ1Y3QgZ2VtaW5pX2dwaW8gKmcgPSBncGlvY2hpcF9n ZXRfZGF0YShnYyk7CisJdTMyIG1hc2sgPSBCSVQoaXJxZF90b19od2lycShkKSk7CisJdTMyIHJl Z19ib3RoLCByZWdfbGV2ZWwsIHJlZ190eXBlOworCisJcmVnX3R5cGUgPSByZWFkbChnLT5iYXNl ICsgR1BJT19JTlRfVFlQRSk7CisJcmVnX2xldmVsID0gcmVhZGwoZy0+YmFzZSArIEdQSU9fSU5U X0xFVkVMKTsKKwlyZWdfYm90aCA9IHJlYWRsKGctPmJhc2UgKyBHUElPX0lOVF9CT1RIX0VER0Up OworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBJUlFfVFlQRV9FREdFX0JPVEg6CisJCWlycV9z ZXRfaGFuZGxlcl9sb2NrZWQoZCwgaGFuZGxlX2VkZ2VfaXJxKTsKKwkJcmVnX3R5cGUgJj0gfm1h c2s7CisJCXJlZ19ib3RoIHw9IG1hc2s7CisJCWJyZWFrOworCWNhc2UgSVJRX1RZUEVfRURHRV9S SVNJTkc6CisJCWlycV9zZXRfaGFuZGxlcl9sb2NrZWQoZCwgaGFuZGxlX2VkZ2VfaXJxKTsKKwkJ cmVnX3R5cGUgJj0gfm1hc2s7CisJCXJlZ19ib3RoICY9IH5tYXNrOworCQlyZWdfbGV2ZWwgJj0g fm1hc2s7CisJCWJyZWFrOworCWNhc2UgSVJRX1RZUEVfRURHRV9GQUxMSU5HOgorCQlpcnFfc2V0 X2hhbmRsZXJfbG9ja2VkKGQsIGhhbmRsZV9lZGdlX2lycSk7CisJCXJlZ190eXBlICY9IH5tYXNr OworCQlyZWdfYm90aCAmPSB+bWFzazsKKwkJcmVnX2xldmVsIHw9IG1hc2s7CisJCWJyZWFrOwor CWNhc2UgSVJRX1RZUEVfTEVWRUxfSElHSDoKKwkJaXJxX3NldF9oYW5kbGVyX2xvY2tlZChkLCBo YW5kbGVfbGV2ZWxfaXJxKTsKKwkJcmVnX3R5cGUgfD0gbWFzazsKKwkJcmVnX2xldmVsICY9IH5t YXNrOworCQlicmVhazsKKwljYXNlIElSUV9UWVBFX0xFVkVMX0xPVzoKKwkJaXJxX3NldF9oYW5k bGVyX2xvY2tlZChkLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKwkJcmVnX3R5cGUgfD0gbWFzazsKKwkJ cmVnX2xldmVsIHw9IG1hc2s7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWlycV9zZXRfaGFuZGxl cl9sb2NrZWQoZCwgaGFuZGxlX2JhZF9pcnEpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl3 cml0ZWwocmVnX3R5cGUsIGctPmJhc2UgKyBHUElPX0lOVF9UWVBFKTsKKwl3cml0ZWwocmVnX2xl dmVsLCBnLT5iYXNlICsgR1BJT19JTlRfTEVWRUwpOworCXdyaXRlbChyZWdfYm90aCwgZy0+YmFz ZSArIEdQSU9fSU5UX0JPVEhfRURHRSk7CisKKwlnZW1pbmlfZ3Bpb19hY2tfaXJxKGQpOworCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgZ2VtaW5pX2dwaW9faXJxY2hp cCA9IHsKKwkubmFtZSA9ICJHUElPIiwKKwkuaXJxX2FjayA9IGdlbWluaV9ncGlvX2Fja19pcnEs CisJLmlycV9tYXNrID0gZ2VtaW5pX2dwaW9fbWFza19pcnEsCisJLmlycV91bm1hc2sgPSBnZW1p bmlfZ3Bpb191bm1hc2tfaXJxLAorCS5pcnFfc2V0X3R5cGUgPSBnZW1pbmlfZ3Bpb19zZXRfaXJx X3R5cGUsCit9OworCitzdGF0aWMgdm9pZCBnZW1pbmlfZ3Bpb19pcnFfaGFuZGxlcihzdHJ1Y3Qg aXJxX2Rlc2MgKmRlc2MpCit7CisJc3RydWN0IGdwaW9fY2hpcCAqZ2MgPSBpcnFfZGVzY19nZXRf aGFuZGxlcl9kYXRhKGRlc2MpOworCXN0cnVjdCBnZW1pbmlfZ3BpbyAqZyA9IGdwaW9jaGlwX2dl dF9kYXRhKGdjKTsKKwlzdHJ1Y3QgaXJxX2NoaXAgKmlycWNoaXAgPSBpcnFfZGVzY19nZXRfY2hp cChkZXNjKTsKKwlpbnQgb2Zmc2V0OworCXVuc2lnbmVkIGxvbmcgc3RhdDsKKworCWNoYWluZWRf aXJxX2VudGVyKGlycWNoaXAsIGRlc2MpOworCisJc3RhdCA9IHJlYWRsKGctPmJhc2UgKyBHUElP X0lOVF9TVEFUKTsKKwlpZiAoc3RhdCkKKwkJZm9yX2VhY2hfc2V0X2JpdChvZmZzZXQsICZzdGF0 LCBnYy0+bmdwaW8pCisJCQlnZW5lcmljX2hhbmRsZV9pcnEoaXJxX2ZpbmRfbWFwcGluZyhnYy0+ aXJxZG9tYWluLAorCQkJCQkJCSAgICBvZmZzZXQpKTsKKworCWNoYWluZWRfaXJxX2V4aXQoaXJx Y2hpcCwgZGVzYyk7Cit9CisKK3N0YXRpYyBpbnQgZ2VtaW5pX2dwaW9fcHJvYmUoc3RydWN0IHBs YXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2 OworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXN0cnVjdCBnZW1pbmlfZ3BpbyAqZzsKKwlpbnQg aXJxOworCWludCByZXQ7CisKKwlnID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpnKSwgR0ZQ X0tFUk5FTCk7CisJaWYgKCFnKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWctPmRldiA9IGRldjsK KworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7 CisJZy0+YmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJlcyk7CisJaWYgKElTX0VS UihnLT5iYXNlKSkKKwkJcmV0dXJuIFBUUl9FUlIoZy0+YmFzZSk7CisKKwlpcnEgPSBwbGF0Zm9y bV9nZXRfaXJxKHBkZXYsIDApOworCWlmICghaXJxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJl dCA9IGJncGlvX2luaXQoJmctPmdjLCBkZXYsIDQsCisJCQkgZy0+YmFzZSArIEdQSU9fREFUQV9J TiwKKwkJCSBnLT5iYXNlICsgR1BJT19EQVRBX1NFVCwKKwkJCSBnLT5iYXNlICsgR1BJT19EQVRB X0NMUiwKKwkJCSBnLT5iYXNlICsgR1BJT19ESVIsCisJCQkgTlVMTCwKKwkJCSAwKTsKKwlpZiAo cmV0KSB7CisJCWRldl9lcnIoZGV2LCAidW5hYmxlIHRvIGluaXQgZ2VuZXJpYyBHUElPXG4iKTsK KwkJcmV0dXJuIHJldDsKKwl9CisJZy0+Z2MubGFiZWwgPSAiR2VtaW5pIjsKKwlnLT5nYy5iYXNl ID0gLTE7CisJZy0+Z2MucGFyZW50ID0gZGV2OworCWctPmdjLm93bmVyID0gVEhJU19NT0RVTEU7 CisJLyogbmdwaW8gaXMgc2V0IGJ5IGJncGlvX2luaXQoKSAqLworCisJcmV0ID0gZGV2bV9ncGlv Y2hpcF9hZGRfZGF0YShkZXYsICZnLT5nYywgZyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsK KworCS8qIERpc2FibGUsIHVubWFzayBhbmQgY2xlYXIgYWxsIGludGVycnVwdHMgKi8KKwl3cml0 ZWwoMHgwLCBnLT5iYXNlICsgR1BJT19JTlRfRU4pOworCXdyaXRlbCgweDAsIGctPmJhc2UgKyBH UElPX0lOVF9NQVNLKTsKKwl3cml0ZWwofjB4MCwgZy0+YmFzZSArIEdQSU9fSU5UX0NMUik7CisK KwlyZXQgPSBncGlvY2hpcF9pcnFjaGlwX2FkZCgmZy0+Z2MsICZnZW1pbmlfZ3Bpb19pcnFjaGlw LAorCQkJCSAgIDAsIGhhbmRsZV9iYWRfaXJxLAorCQkJCSAgIElSUV9UWVBFX05PTkUpOworCWlm IChyZXQpIHsKKwkJZGV2X2luZm8oZGV2LCAiY291bGQgbm90IGFkZCBpcnFjaGlwXG4iKTsKKwkJ cmV0dXJuIHJldDsKKwl9CisJZ3Bpb2NoaXBfc2V0X2NoYWluZWRfaXJxY2hpcCgmZy0+Z2MsICZn ZW1pbmlfZ3Bpb19pcnFjaGlwLAorCQkJCSAgICAgaXJxLCBnZW1pbmlfZ3Bpb19pcnFfaGFuZGxl cik7CisKKwlkZXZfaW5mbyhkZXYsICJHZW1pbmkgR1BJTyBAJXAgcmVnaXN0ZXJlZFxuIiwgZy0+ YmFzZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2Vf aWQgZ2VtaW5pX2dwaW9fb2ZfbWF0Y2hbXSA9IHsKKwl7CisJCS5jb21wYXRpYmxlID0gImNvcnRp bmEsZ2VtaW5pLWdwaW8iLAorCX0sCisJe30sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3Jt X2RyaXZlciBnZW1pbmlfZ3Bpb19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJCT0g ImdlbWluaS1ncGlvIiwKKwkJLm9mX21hdGNoX3RhYmxlID0gb2ZfbWF0Y2hfcHRyKGdlbWluaV9n cGlvX29mX21hdGNoKSwKKwl9LAorCS5wcm9iZQk9IGdlbWluaV9ncGlvX3Byb2JlLAorfTsKK2J1 aWx0aW5fcGxhdGZvcm1fZHJpdmVyKGdlbWluaV9ncGlvX2RyaXZlcik7Ci0tIAoyLjkuMwpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpvcGVud3J0LWRldmVs IG1haWxpbmcgbGlzdApvcGVud3J0LWRldmVsQGxpc3RzLm9wZW53cnQub3JnCmh0dHBzOi8vbGlz dHMub3BlbndydC5vcmcvY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL29wZW53cnQtZGV2ZWwK