From mboxrd@z Thu Jan 1 00:00:00 1970 From: Quentin Schulz Subject: [PATCH 08/22] power: supply: add AC power supply driver for AXP20X and AXP22X PMICs Date: Mon, 2 Jan 2017 17:37:08 +0100 Message-ID: <20170102163723.7939-9-quentin.schulz@free-electrons.com> References: <20170102163723.7939-1-quentin.schulz@free-electrons.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20170102163723.7939-1-quentin.schulz@free-electrons.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.infradead.org To: jic23@kernel.org, knaack.h@gmx.de, lars@metafoo.de, pmeerw@pmeerw.net, robh+dt@kernel.org, mark.rutland@arm.com, wens@csie.org, sre@kernel.org, linux@armlinux.org.uk, maxime.ripard@free-electrons.com, lee.jones@linaro.org Cc: thomas.petazzoni@free-electrons.com, devicetree@vger.kernel.org, linux-pm@vger.kernel.org, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, Quentin Schulz , bonbons@linux-vserver.org, icenowy@aosc.xyz, linux-arm-kernel@lists.infradead.org List-Id: devicetree@vger.kernel.org VGhlIFgtUG93ZXJzIEFYUDIwWCBhbmQgQVhQMjJYIFBNSUNzIGV4cG9zZSB0aGUgc3RhdHVzIG9m IEFDIHBvd2VyCnN1cHBseS4KCk1vcmVvdmVyLCB0aGUgQVhQMjBYIGNhbiBhbHNvIGV4cG9zZSB0 aGUgY3VycmVudCBjdXJyZW50IGFuZCB2b2x0YWdlCnZhbHVlcyBvZiB0aGUgQUMgcG93ZXIgc3Vw cGx5LgoKVGhpcyBhZGRzIHRoZSBkcml2ZXIgd2hpY2ggZXhwb3NlcyB0aGUgc3RhdHVzIG9mIHRo ZSBBQyBwb3dlciBzdXBwbHkgb2YKdGhlIEFYUDIwWCBhbmQgQVhQMjJYIFBNSUNzLgoKU2lnbmVk LW9mZi1ieTogUXVlbnRpbiBTY2h1bHogPHF1ZW50aW4uc2NodWx6QGZyZWUtZWxlY3Ryb25zLmNv bT4KLS0tCiBkcml2ZXJzL3Bvd2VyL3N1cHBseS9LY29uZmlnICAgICAgICAgICB8ICAxMiArKwog ZHJpdmVycy9wb3dlci9zdXBwbHkvTWFrZWZpbGUgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9w b3dlci9zdXBwbHkvYXhwMjB4X2FjX3Bvd2VyLmMgfCAyNTEgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDI2NCBpbnNlcnRpb25zKCspCiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9wb3dlci9zdXBwbHkvYXhwMjB4X2FjX3Bvd2VyLmMKCmRpZmYg LS1naXQgYS9kcml2ZXJzL3Bvd2VyL3N1cHBseS9LY29uZmlnIGIvZHJpdmVycy9wb3dlci9zdXBw bHkvS2NvbmZpZwppbmRleCA3NjgwNmEwLi5jNTUyYjRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bv d2VyL3N1cHBseS9LY29uZmlnCisrKyBiL2RyaXZlcnMvcG93ZXIvc3VwcGx5L0tjb25maWcKQEAg LTIxNCw2ICsyMTQsMTggQEAgY29uZmlnIEJBVFRFUllfREE5MTUwCiAJICBUaGlzIGRyaXZlciBj YW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUgd2lsbCBiZQog CSAgY2FsbGVkIGRhOTE1MC1mZy4KIAorY29uZmlnIENIQVJHRVJfQVhQMjBYCisJdHJpc3RhdGUg IlgtUG93ZXJzIEFYUDIwWCBhbmQgQVhQMjJYIEFDIHBvd2VyIHN1cHBseSBkcml2ZXIiCisJZGVw ZW5kcyBvbiBNRkRfQVhQMjBYCisJZGVwZW5kcyBvbiBBWFAyMFhfQURDCisJZGVwZW5kcyBvbiBJ SU8KKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIGVuYWJsZSBzdXBwb3J0IGZvciBYLVBvd2VycyBB WFAyMFggYW5kIEFYUDIyWCBQTUlDcycgQUMKKwkgIHBvd2VyIHN1cHBseS4KKworCSAgVGhpcyBk cml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlIHdp bGwgYmUKKwkgIGNhbGxlZCBheHAyMHhfYWNfcG93ZXIuCisKIGNvbmZpZyBBWFAyODhfQ0hBUkdF UgogCXRyaXN0YXRlICJYLVBvd2VycyBBWFAyODggQ2hhcmdlciIKIAlkZXBlbmRzIG9uIE1GRF9B WFAyMFggJiYgRVhUQ09OX0FYUDI4OApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlci9zdXBwbHkv TWFrZWZpbGUgYi9kcml2ZXJzL3Bvd2VyL3N1cHBseS9NYWtlZmlsZQppbmRleCAzNmM1OTlkLi43 ZDIyNDE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bvd2VyL3N1cHBseS9NYWtlZmlsZQorKysgYi9k cml2ZXJzL3Bvd2VyL3N1cHBseS9NYWtlZmlsZQpAQCAtMTgsNiArMTgsNyBAQCBvYmotJChDT05G SUdfVEVTVF9QT1dFUikJKz0gdGVzdF9wb3dlci5vCiAKIG9iai0kKENPTkZJR19CQVRURVJZXzg4 UE04NjBYKQkrPSA4OHBtODYweF9iYXR0ZXJ5Lm8KIG9iai0kKENPTkZJR19CQVRURVJZX0FDVDg5 NDVBKQkrPSBhY3Q4OTQ1YV9jaGFyZ2VyLm8KK29iai0kKENPTkZJR19DSEFSR0VSX0FYUDIwWCkJ Kz0gYXhwMjB4X2FjX3Bvd2VyLm8KIG9iai0kKENPTkZJR19CQVRURVJZX0RTMjc2MCkJKz0gZHMy NzYwX2JhdHRlcnkubwogb2JqLSQoQ09ORklHX0JBVFRFUllfRFMyNzgwKQkrPSBkczI3ODBfYmF0 dGVyeS5vCiBvYmotJChDT05GSUdfQkFUVEVSWV9EUzI3ODEpCSs9IGRzMjc4MV9iYXR0ZXJ5Lm8K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvc3VwcGx5L2F4cDIweF9hY19wb3dlci5jIGIvZHJp dmVycy9wb3dlci9zdXBwbHkvYXhwMjB4X2FjX3Bvd2VyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uZDdiYzI1YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcG93ZXIv c3VwcGx5L2F4cDIweF9hY19wb3dlci5jCkBAIC0wLDAgKzEsMjUxIEBACisvKgorICogQVhQMjBY IGFuZCBBWFAyMlggUE1JQ3MnIEFDSU4gcG93ZXIgc3VwcGx5IGRyaXZlcgorICoKKyAqIENvcHly aWdodCAoQykgMjAxNiBGcmVlIEVsZWN0cm9ucworICoJUXVlbnRpbiBTY2h1bHogPHF1ZW50aW4u c2NodWx6QGZyZWUtZWxlY3Ryb25zLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5k ZXIgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9u IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJz aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9p bml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgva2Vy bmVsLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL2F4cDIweC5oPgorI2luY2x1ZGUgPGxpbnV4L21v ZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNl Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgv cG93ZXJfc3VwcGx5Lmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisjaW5jbHVkZSA8bGlu dXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2lpby9jb25zdW1lci5oPgorCisjZGVmaW5lIEFY UDIwWF9QV1JfU1RBVFVTX0FDSU5fUFJFU0VOVAlCSVQoNykKKyNkZWZpbmUgQVhQMjBYX1BXUl9T VEFUVVNfQUNJTl9BVkFJTAlCSVQoNikKKworI2RlZmluZSBEUlZOQU1FICJheHAyMHgtYWMtcG93 ZXItc3VwcGx5IgorCitzdHJ1Y3QgYXhwMjB4X2FjX3Bvd2VyIHsKKwlzdHJ1Y3QgZGV2aWNlX25v ZGUgKm5wOworCXN0cnVjdCByZWdtYXAgKnJlZ21hcDsKKwlzdHJ1Y3QgcG93ZXJfc3VwcGx5ICpz dXBwbHk7CisJaW50IGF4cDIweF9pZDsKKwlzdHJ1Y3QgaWlvX2NoYW5uZWwgKmFjaW5fdjsKKwlz dHJ1Y3QgaWlvX2NoYW5uZWwgKmFjaW5faTsKK307CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBheHAy MHhfYWNfcG93ZXJfaXJxKGludCBpcnEsIHZvaWQgKmRldmlkKQoreworCXN0cnVjdCBheHAyMHhf YWNfcG93ZXIgKnBvd2VyID0gZGV2aWQ7CisKKwlwb3dlcl9zdXBwbHlfY2hhbmdlZChwb3dlci0+ c3VwcGx5KTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBheHAyMHhf YWNfcG93ZXJfZ2V0X3Byb3BlcnR5KHN0cnVjdCBwb3dlcl9zdXBwbHkgKnBzeSwKKwkJCQkJZW51 bSBwb3dlcl9zdXBwbHlfcHJvcGVydHkgcHNwLAorCQkJCQl1bmlvbiBwb3dlcl9zdXBwbHlfcHJv cHZhbCAqdmFsKQoreworCXN0cnVjdCBheHAyMHhfYWNfcG93ZXIgKnBvd2VyID0gcG93ZXJfc3Vw cGx5X2dldF9kcnZkYXRhKHBzeSk7CisJaW50IHJldCwgcmVnOworCisJc3dpdGNoIChwc3ApIHsK KwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX0hFQUxUSDoKKwkJcmV0ID0gcmVnbWFwX3JlYWQocG93 ZXItPnJlZ21hcCwgQVhQMjBYX1BXUl9JTlBVVF9TVEFUVVMsICZyZWcpOworCQlpZiAocmV0KQor CQkJcmV0dXJuIHJldDsKKworCQlpZiAocmVnICYgQVhQMjBYX1BXUl9TVEFUVVNfQUNJTl9QUkVT RU5UKSB7CisJCQl2YWwtPmludHZhbCA9IFBPV0VSX1NVUFBMWV9IRUFMVEhfR09PRDsKKwkJCXJl dHVybiAwOworCQl9CisKKwkJdmFsLT5pbnR2YWwgPSBQT1dFUl9TVVBQTFlfSEVBTFRIX1VOS05P V047CisJCXJldHVybiAwOworCisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9QUkVTRU5UOgorCQly ZXQgPSByZWdtYXBfcmVhZChwb3dlci0+cmVnbWFwLCBBWFAyMFhfUFdSX0lOUFVUX1NUQVRVUywg JnJlZyk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCXZhbC0+aW50dmFsID0gISEo cmVnICYgQVhQMjBYX1BXUl9TVEFUVVNfQUNJTl9QUkVTRU5UKTsKKwkJcmV0dXJuIDA7CisKKwlj YXNlIFBPV0VSX1NVUFBMWV9QUk9QX09OTElORToKKwkJcmV0ID0gcmVnbWFwX3JlYWQocG93ZXIt PnJlZ21hcCwgQVhQMjBYX1BXUl9JTlBVVF9TVEFUVVMsICZyZWcpOworCQlpZiAocmV0KQorCQkJ cmV0dXJuIHJldDsKKworCQl2YWwtPmludHZhbCA9ICEhKHJlZyAmIEFYUDIwWF9QV1JfU1RBVFVT X0FDSU5fQVZBSUwpOworCQlyZXR1cm4gMDsKKworCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfVk9M VEFHRV9OT1c6CisJCXJldCA9IGlpb19yZWFkX2NoYW5uZWxfcHJvY2Vzc2VkKHBvd2VyLT5hY2lu X3YsICZ2YWwtPmludHZhbCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCS8qCisJ CSAqIElJTyBmcmFtZXdvcmsgZ2l2ZXMgbVYgYnV0IFBvd2VyIFN1cHBseSBmcmFtZXdvcmsgZ2l2 ZXMgwrVWLgorCQkgKi8KKwkJdmFsLT5pbnR2YWwgKj0gMTAwMDsKKworCQlyZXR1cm4gMDsKKwor CWNhc2UgUE9XRVJfU1VQUExZX1BST1BfQ1VSUkVOVF9OT1c6CisJCXJldCA9IGlpb19yZWFkX2No YW5uZWxfcHJvY2Vzc2VkKHBvd2VyLT5hY2luX2ksICZ2YWwtPmludHZhbCk7CisJCWlmIChyZXQp CisJCQlyZXR1cm4gcmV0OworCisJCS8qCisJCSAqIElJTyBmcmFtZXdvcmsgZ2l2ZXMgbVYgYnV0 IFBvd2VyIFN1cHBseSBmcmFtZXdvcmsgZ2l2ZXMgwrVWLgorCQkgKi8KKwkJdmFsLT5pbnR2YWwg Kj0gMTAwMDsKKworCQlyZXR1cm4gMDsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOwor CX0KKworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgZW51bSBwb3dlcl9zdXBwbHlfcHJv cGVydHkgYXhwMjB4X2FjX3Bvd2VyX3Byb3BlcnRpZXNbXSA9IHsKKwlQT1dFUl9TVVBQTFlfUFJP UF9IRUFMVEgsCisJUE9XRVJfU1VQUExZX1BST1BfUFJFU0VOVCwKKwlQT1dFUl9TVVBQTFlfUFJP UF9PTkxJTkUsCisJUE9XRVJfU1VQUExZX1BST1BfVk9MVEFHRV9OT1csCisJUE9XRVJfU1VQUExZ X1BST1BfQ1VSUkVOVF9OT1csCit9OworCitzdGF0aWMgZW51bSBwb3dlcl9zdXBwbHlfcHJvcGVy dHkgYXhwMjJ4X2FjX3Bvd2VyX3Byb3BlcnRpZXNbXSA9IHsKKwlQT1dFUl9TVVBQTFlfUFJPUF9I RUFMVEgsCisJUE9XRVJfU1VQUExZX1BST1BfUFJFU0VOVCwKKwlQT1dFUl9TVVBQTFlfUFJPUF9P TkxJTkUsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBvd2VyX3N1cHBseV9kZXNjIGF4cDIw eF9hY19wb3dlcl9kZXNjID0geworCS5uYW1lID0gImF4cDIweC1hYyIsCisJLnR5cGUgPSBQT1dF Ul9TVVBQTFlfVFlQRV9NQUlOUywKKwkucHJvcGVydGllcyA9IGF4cDIweF9hY19wb3dlcl9wcm9w ZXJ0aWVzLAorCS5udW1fcHJvcGVydGllcyA9IEFSUkFZX1NJWkUoYXhwMjB4X2FjX3Bvd2VyX3By b3BlcnRpZXMpLAorCS5nZXRfcHJvcGVydHkgPSBheHAyMHhfYWNfcG93ZXJfZ2V0X3Byb3BlcnR5 LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwb3dlcl9zdXBwbHlfZGVzYyBheHAyMnhfYWNf cG93ZXJfZGVzYyA9IHsKKwkubmFtZSA9ICJheHAyMngtYWMiLAorCS50eXBlID0gUE9XRVJfU1VQ UExZX1RZUEVfTUFJTlMsCisJLnByb3BlcnRpZXMgPSBheHAyMnhfYWNfcG93ZXJfcHJvcGVydGll cywKKwkubnVtX3Byb3BlcnRpZXMgPSBBUlJBWV9TSVpFKGF4cDIyeF9hY19wb3dlcl9wcm9wZXJ0 aWVzKSwKKwkuZ2V0X3Byb3BlcnR5ID0gYXhwMjB4X2FjX3Bvd2VyX2dldF9wcm9wZXJ0eSwKK307 CisKK3N0YXRpYyBpbnQgYXhwMjB4X2FjX3Bvd2VyX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZp Y2UgKnBkZXYpCit7CisJc3RydWN0IGF4cDIweF9kZXYgKmF4cDIweCA9IGRldl9nZXRfZHJ2ZGF0 YShwZGV2LT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgcG93ZXJfc3VwcGx5X2NvbmZpZyBwc3lfY2Zn ID0ge307CisJc3RydWN0IGF4cDIweF9hY19wb3dlciAqcG93ZXI7CisJc3RhdGljIGNvbnN0IGNo YXIgKiBjb25zdCBheHAyMHhfaXJxX25hbWVzW10gPSB7ICJBQ0lOX1BMVUdJTiIsCisJCSJBQ0lO X1JFTU9WQUwiLCBOVUxMIH07CisJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCAqaXJxX25hbWVz OworCWNvbnN0IHN0cnVjdCBwb3dlcl9zdXBwbHlfZGVzYyAqYWNfcG93ZXJfZGVzYzsKKwlpbnQg aSwgaXJxLCByZXQ7CisKKwlpZiAoIW9mX2RldmljZV9pc19hdmFpbGFibGUocGRldi0+ZGV2Lm9m X25vZGUpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICghYXhwMjB4KSB7CisJCWRldl9lcnIo JnBkZXYtPmRldiwgIlBhcmVudCBkcnZkYXRhIG5vdCBzZXRcbiIpOworCQlyZXR1cm4gLUVJTlZB TDsKKwl9CisKKwlwb3dlciA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKnBvd2Vy KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwb3dlcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwb3dl ci0+YXhwMjB4X2lkID0gKGludClvZl9kZXZpY2VfZ2V0X21hdGNoX2RhdGEoJnBkZXYtPmRldik7 CisKKwlpcnFfbmFtZXMgPSBheHAyMHhfaXJxX25hbWVzOworCisJaWYgKHBvd2VyLT5heHAyMHhf aWQgPT0gQVhQMjAyX0lEKSB7CisJCWFjX3Bvd2VyX2Rlc2MgPSAmYXhwMjB4X2FjX3Bvd2VyX2Rl c2M7CisKKwkJcG93ZXItPmFjaW5fdiA9IGRldm1faWlvX2NoYW5uZWxfZ2V0KCZwZGV2LT5kZXYs ICJhY2luX3YiKTsKKwkJaWYgKElTX0VSUihwb3dlci0+YWNpbl92KSkgeworCQkJaWYgKFBUUl9F UlIocG93ZXItPmFjaW5fdikgPT0gLUVOT0RFVikKKwkJCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsK KwkJCXJldHVybiBQVFJfRVJSKHBvd2VyLT5hY2luX3YpOworCQl9CisKKwkJcG93ZXItPmFjaW5f aSA9IGRldm1faWlvX2NoYW5uZWxfZ2V0KCZwZGV2LT5kZXYsICJhY2luX2kiKTsKKwkJaWYgKElT X0VSUihwb3dlci0+YWNpbl9pKSkgeworCQkJaWYgKFBUUl9FUlIocG93ZXItPmFjaW5faSkgPT0g LUVOT0RFVikKKwkJCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKwkJCXJldHVybiBQVFJfRVJSKHBv d2VyLT5hY2luX2kpOworCQl9CisJfSBlbHNlIHsKKwkJYWNfcG93ZXJfZGVzYyA9ICZheHAyMnhf YWNfcG93ZXJfZGVzYzsKKwl9CisKKwlwb3dlci0+bnAgPSBwZGV2LT5kZXYub2Zfbm9kZTsKKwlw b3dlci0+cmVnbWFwID0gYXhwMjB4LT5yZWdtYXA7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShw ZGV2LCBwb3dlcik7CisKKwlwc3lfY2ZnLm9mX25vZGUgPSBwZGV2LT5kZXYub2Zfbm9kZTsKKwlw c3lfY2ZnLmRydl9kYXRhID0gcG93ZXI7CisKKwlwb3dlci0+c3VwcGx5ID0gZGV2bV9wb3dlcl9z dXBwbHlfcmVnaXN0ZXIoJnBkZXYtPmRldiwgYWNfcG93ZXJfZGVzYywKKwkJCQkJCSAgICZwc3lf Y2ZnKTsKKwlpZiAoSVNfRVJSKHBvd2VyLT5zdXBwbHkpKQorCQlyZXR1cm4gUFRSX0VSUihwb3dl ci0+c3VwcGx5KTsKKworCS8qIFJlcXVlc3QgaXJxcyBhZnRlciByZWdpc3RlcmluZywgYXMgaXJx cyBtYXkgdHJpZ2dlciBpbW1lZGlhdGVseSAqLworCWZvciAoaSA9IDA7IGlycV9uYW1lc1tpXTsg aSsrKSB7CisJCWlycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsIGlycV9uYW1lc1tp XSk7CisJCWlmIChpcnEgPCAwKSB7CisJCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiTm8gSVJRIGZv ciAlczogJWRcbiIsCisJCQkJIGlycV9uYW1lc1tpXSwgaXJxKTsKKwkJCWNvbnRpbnVlOworCQl9 CisJCWlycSA9IHJlZ21hcF9pcnFfZ2V0X3ZpcnEoYXhwMjB4LT5yZWdtYXBfaXJxYywgaXJxKTsK KwkJcmV0ID0gZGV2bV9yZXF1ZXN0X2FueV9jb250ZXh0X2lycSgmcGRldi0+ZGV2LCBpcnEsCisJ CQkJCQkgICBheHAyMHhfYWNfcG93ZXJfaXJxLCAwLAorCQkJCQkJICAgRFJWTkFNRSwgcG93ZXIp OworCQlpZiAocmV0IDwgMCkKKwkJCWRldl93YXJuKCZwZGV2LT5kZXYsICJFcnJvciByZXF1ZXN0 aW5nICVzIElSUTogJWRcbiIsCisJCQkJIGlycV9uYW1lc1tpXSwgcmV0KTsKKwl9CisKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYXhwMjB4X2FjX3Bv d2VyX21hdGNoW10gPSB7CisJeworCQkuY29tcGF0aWJsZSA9ICJ4LXBvd2VycyxheHAyMDItYWMt cG93ZXItc3VwcGx5IiwKKwkJLmRhdGEgPSAodm9pZCAqKUFYUDIwMl9JRCwKKwl9LCB7CisJCS5j b21wYXRpYmxlID0gIngtcG93ZXJzLGF4cDIyMS1hYy1wb3dlci1zdXBwbHkiLAorCQkuZGF0YSA9 ICh2b2lkICopQVhQMjIxX0lELAorCX0sIHsgLyogc2VudGluZWwgKi8gfQorfTsKK01PRFVMRV9E RVZJQ0VfVEFCTEUob2YsIGF4cDIweF9hY19wb3dlcl9tYXRjaCk7CisKK3N0YXRpYyBzdHJ1Y3Qg cGxhdGZvcm1fZHJpdmVyIGF4cDIweF9hY19wb3dlcl9kcml2ZXIgPSB7CisJLnByb2JlID0gYXhw MjB4X2FjX3Bvd2VyX3Byb2JlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gRFJWTkFNRSwKKwkJ Lm9mX21hdGNoX3RhYmxlID0gYXhwMjB4X2FjX3Bvd2VyX21hdGNoLAorCX0sCit9OworCittb2R1 bGVfcGxhdGZvcm1fZHJpdmVyKGF4cDIweF9hY19wb3dlcl9kcml2ZXIpOworCitNT0RVTEVfQVVU SE9SKCJRdWVudGluIFNjaHVseiA8cXVlbnRpbi5zY2h1bHpAZnJlZS1lbGVjdHJvbnMuY29tPiIp OworTU9EVUxFX0RFU0NSSVBUSU9OKCJBWFAyMFggYW5kIEFYUDIyWCBQTUlDcycgQUMgcG93ZXIg c3VwcGx5IGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotLSAKMi45LjMKCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2Vy bmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0 cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVs Cg==