From mboxrd@z Thu Jan 1 00:00:00 1970 From: Quentin Schulz Subject: [PATCH v2 20/25] power: supply: add battery driver for AXP20X and AXP22X PMICs Date: Fri, 27 Jan 2017 09:54:53 +0100 Message-ID: <20170127085458.18270-21-quentin.schulz@free-electrons.com> References: <20170127085458.18270-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: <20170127085458.18270-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: 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 VGhlIFgtUG93ZXJzIEFYUDIwWCBhbmQgQVhQMjJYIFBNSUNzIGNhbiBoYXZlIGEgYmF0dGVyeSBh cyBwb3dlciBzdXBwbHkuCgpUaGlzIHBhdGNoIGFkZHMgdGhlIGJhdHRlcnkgcG93ZXIgc3VwcGx5 IGRyaXZlciB0byBnZXQgdmFyaW91cyBkYXRhIGZyb20KdGhlIFBNSUMsIHN1Y2ggYXMgdGhlIGJh dHRlcnkgc3RhdHVzIChjaGFyZ2luZywgZGlzY2hhcmdpbmcsIGZ1bGwsCmRlYWQpLCBjdXJyZW50 IG1heCBsaW1pdCwgY3VycmVudCBjdXJyZW50LCBiYXR0ZXJ5IGNhcGFjaXR5IChpbgpwZXJjZW50 YWdlKSwgdm9sdGFnZSBtYXggYW5kIG1pbiBsaW1pdHMsIGN1cnJlbnQgdm9sdGFnZSBhbmQgYmF0 dGVyeQpjYXBhY2l0eSAoaW4gQWgpLgoKVGhpcyBiYXR0ZXJ5IGRyaXZlciB1c2VzIHRoZSBBWFAy MFgvQVhQMjJYIEFEQyBkcml2ZXIgYXMgUE1JQyBkYXRhCnByb3ZpZGVyLgoKU2lnbmVkLW9mZi1i eTogUXVlbnRpbiBTY2h1bHogPHF1ZW50aW4uc2NodWx6QGZyZWUtZWxlY3Ryb25zLmNvbT4KLS0t Cgp2MjoKIC0gY2hhbmdlZCBCSVQoeCkgdG8gMSA8PCB4IHdoZW4gZGVzY3JpYmluZyBiaXRzIHB1 cnBvc2UgZm9yIHdoaWNoIDIgPDwKIHggb3IgMyA8PCB4IGV4aXN0cywgdG8gYmUgY29uc2lzdGVu dCwKIC0gc3dpdGNoZWQgZnJvbSBQT1dFUl9TVVBQTFlfUFJPUF9DVVJSRU5UX01BWCB0bwogUE9X RVJfU1VQUExZX1BST1BfQ09OU1RBTlRfQ0hBUkdFX0NVUlJFTlQsCiAtIGFkZGVkIFBPV0VSX1NV UFBMWV9QUk9QX0NPTlNUQU5UX0NIQVJHRV9DVVJSRU5UX01BWCB0byB0aGUgbGlzdCBvZgogcmVh ZGFibGUgcHJvcGVydGllcywKIC0gcmVwbGFjZWQgwrUgY2hhcmFjdGVyIGJ5IGEgY29tbW9uIHUg Zm9yIG1pY3JvIHVuaXRzIHRvIG1ha2UgY2hlY2twYXRjaAogaGFwcHksCiAtIGZhY3Rvcml6ZWQg Y29kZSBpbiBheHAyMHhfYmF0dGVyeV9zZXRfbWF4X3ZvbHRhZ2UsCiAtIGFkZGVkIGEgYXhwMjB4 X3NldF9jb25zdGFudF9jaGFyZ2VfY3VycmVudCBmdW5jdGlvbiB0byBiZSB1c2VkIHdoZW4KIHNl dHRpbmcgdGhlIHZhbHVlIGZyb20gc3lzZnMgYW5kIGZyb20gdGhlIERULAogLSByZW1vdmVkIHNv bWUgZGVhZCBjb2RlLAogLSBhZGRlZCBhIERUIHByb3BlcnR5IHRvIHNldCBjb25zdGFudCBjdXJy ZW50IGNoYXJnZSBvZiB0aGUgYmF0dGVyeQogKHgtcG93ZXJzLGNvbnN0YW50LWNoYXJnZS1jdXJy ZW50KSwKIC0gbWlncmF0ZWQgdG8gZGV2X2dldF9yZWdtYXAgaW5zdGVhZCBvZiBtYW51YWxseSBs b29raW5nIGZvciB0aGUgcmVnbWFwCiBpbiB0aGUgZHJ2ZGF0YSBvZiB0aGUgcGFyZW50LAogLSBz d2l0Y2hlZCBmcm9tIGludCB0byB1aW50cHRyX3QgY2FzdCB0byBtYWtlIHN1cmUgdGhlIGNhc3Qg aXMgYWx3YXlzCiBmb3IgdGhlIHNhbWUgc2l6ZSB0eXBlIChtYWtlIGJ1aWxkIG9uIDY0Yml0cyBw bGF0Zm9ybXMgaGFwcHkgbWFpbmx5KSwKCiBkcml2ZXJzL3Bvd2VyL3N1cHBseS9LY29uZmlnICAg ICAgICAgIHwgIDEyICsKIGRyaXZlcnMvcG93ZXIvc3VwcGx5L01ha2VmaWxlICAgICAgICAgfCAg IDEgKwogZHJpdmVycy9wb3dlci9zdXBwbHkvYXhwMjB4X2JhdHRlcnkuYyB8IDQ3NyArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDQ5MCBpbnNlcnRp b25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9wb3dlci9zdXBwbHkvYXhwMjB4X2Jh dHRlcnkuYwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvc3VwcGx5L0tjb25maWcgYi9kcml2 ZXJzL3Bvd2VyL3N1cHBseS9LY29uZmlnCmluZGV4IGM1NTJiNGIuLjQ4NjE5ZGUgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvcG93ZXIvc3VwcGx5L0tjb25maWcKKysrIGIvZHJpdmVycy9wb3dlci9zdXBw bHkvS2NvbmZpZwpAQCAtMjI2LDYgKzIyNiwxOCBAQCBjb25maWcgQ0hBUkdFUl9BWFAyMFgKIAkg IFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1v ZHVsZSB3aWxsIGJlCiAJICBjYWxsZWQgYXhwMjB4X2FjX3Bvd2VyLgogCitjb25maWcgQkFUVEVS WV9BWFAyMFgKKwl0cmlzdGF0ZSAiWC1Qb3dlcnMgQVhQMjBYIGJhdHRlcnkgZHJpdmVyIgorCWRl cGVuZHMgb24gTUZEX0FYUDIwWAorCWRlcGVuZHMgb24gQVhQMjBYX0FEQworCWRlcGVuZHMgb24g SUlPCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBlbmFibGUgc3VwcG9ydCBmb3IgWC1Qb3dlcnMg QVhQMjBYIFBNSUNzJyBiYXR0ZXJ5IHBvd2VyCisJICBzdXBwbHkuCisKKwkgIFRoaXMgZHJpdmVy IGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZSB3aWxsIGJl CisJICBjYWxsZWQgYXhwMjB4X2JhdHRlcnkuCisKIGNvbmZpZyBBWFAyODhfQ0hBUkdFUgogCXRy aXN0YXRlICJYLVBvd2VycyBBWFAyODggQ2hhcmdlciIKIAlkZXBlbmRzIG9uIE1GRF9BWFAyMFgg JiYgRVhUQ09OX0FYUDI4OApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlci9zdXBwbHkvTWFrZWZp bGUgYi9kcml2ZXJzL3Bvd2VyL3N1cHBseS9NYWtlZmlsZQppbmRleCA3ZDIyNDE3Li41YTIxN2Iy IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bvd2VyL3N1cHBseS9NYWtlZmlsZQorKysgYi9kcml2ZXJz L3Bvd2VyL3N1cHBseS9NYWtlZmlsZQpAQCAtMTgsNiArMTgsNyBAQCBvYmotJChDT05GSUdfVEVT VF9QT1dFUikJKz0gdGVzdF9wb3dlci5vCiAKIG9iai0kKENPTkZJR19CQVRURVJZXzg4UE04NjBY KQkrPSA4OHBtODYweF9iYXR0ZXJ5Lm8KIG9iai0kKENPTkZJR19CQVRURVJZX0FDVDg5NDVBKQkr PSBhY3Q4OTQ1YV9jaGFyZ2VyLm8KK29iai0kKENPTkZJR19CQVRURVJZX0FYUDIwWCkJKz0gYXhw MjB4X2JhdHRlcnkubwogb2JqLSQoQ09ORklHX0NIQVJHRVJfQVhQMjBYKQkrPSBheHAyMHhfYWNf cG93ZXIubwogb2JqLSQoQ09ORklHX0JBVFRFUllfRFMyNzYwKQkrPSBkczI3NjBfYmF0dGVyeS5v CiBvYmotJChDT05GSUdfQkFUVEVSWV9EUzI3ODApCSs9IGRzMjc4MF9iYXR0ZXJ5Lm8KZGlmZiAt LWdpdCBhL2RyaXZlcnMvcG93ZXIvc3VwcGx5L2F4cDIweF9iYXR0ZXJ5LmMgYi9kcml2ZXJzL3Bv d2VyL3N1cHBseS9heHAyMHhfYmF0dGVyeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLmRkMDQwYjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Bvd2VyL3N1cHBseS9h eHAyMHhfYmF0dGVyeS5jCkBAIC0wLDAgKzEsNDc3IEBACisvKgorICogQmF0dGVyeSBwb3dlciBz dXBwbHkgZHJpdmVyIGZvciBYLVBvd2VycyBBWFAyMFggYW5kIEFYUDIyWCBQTUlDcworICoKKyAq IENvcHlyaWdodCAyMDE2IEZyZWUgRWxlY3Ryb25zIE5leHRUaGluZyBDby4KKyAqCVF1ZW50aW4g U2NodWx6IDxxdWVudGluLnNjaHVsekBmcmVlLWVsZWN0cm9ucy5jb20+CisgKgorICogVGhpcyBk cml2ZXIgaXMgYmFzZWQgb24gYSBwcmV2aW91cyB1cHN0cmVhbWluZyBhdHRlbXB0IGJ5OgorICoJ QnJ1bm8gUHLDqW1vbnQgPGJvbmJvbnNAbGludXgtdnNlcnZlci5vcmc+CisgKgorICogVGhpcyBm aWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2Vu ZXJhbAorICogUHVibGljIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1h aW4gZGlyZWN0b3J5IG9mIHRoaXMKKyAqIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg KiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1 ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUg PGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgv b2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVk ZSA8bGludXgvcG93ZXJfc3VwcGx5Lmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisjaW5j bHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxs aW51eC9paW8vaWlvLmg+CisjaW5jbHVkZSA8bGludXgvaWlvL2NvbnN1bWVyLmg+CisjaW5jbHVk ZSA8bGludXgvbWZkL2F4cDIweC5oPgorCisjZGVmaW5lIEFYUDIwWF9QV1JfU1RBVFVTX0JBVF9D SEFSR0lORwlCSVQoMikKKworI2RlZmluZSBBWFAyMFhfUFdSX09QX0JBVFRfUFJFU0VOVAlCSVQo NSkKKyNkZWZpbmUgQVhQMjBYX1BXUl9PUF9CQVRUX0FDVElWQVRFRAlCSVQoMykKKworI2RlZmlu ZSBBWFAyMDlfRkdfUEVSQ0VOVAkJR0VOTUFTSyg2LCAwKQorI2RlZmluZSBBWFAyMlhfRkdfVkFM SUQJCQlCSVQoNykKKworI2RlZmluZSBBWFAyMFhfQ0hSR19DVFJMMV9UR1RfVk9MVAlHRU5NQVNL KDYsIDUpCisjZGVmaW5lIEFYUDIwWF9DSFJHX0NUUkwxX1RHVF80XzFWCSgwIDw8IDUpCisjZGVm aW5lIEFYUDIwWF9DSFJHX0NUUkwxX1RHVF80XzE1VgkoMSA8PCA1KQorI2RlZmluZSBBWFAyMFhf Q0hSR19DVFJMMV9UR1RfNF8yVgkoMiA8PCA1KQorI2RlZmluZSBBWFAyMFhfQ0hSR19DVFJMMV9U R1RfNF8zNlYJKDMgPDwgNSkKKworI2RlZmluZSBBWFAyMlhfQ0hSR19DVFJMMV9UR1RfNF8yMlYJ KDEgPDwgNSkKKyNkZWZpbmUgQVhQMjJYX0NIUkdfQ1RSTDFfVEdUXzRfMjRWCSgzIDw8IDUpCisK KyNkZWZpbmUgQVhQMjBYX0NIUkdfQ1RSTDFfVEdUX0NVUlIJR0VOTUFTSygzLCAwKQorCisjZGVm aW5lIEFYUDIwWF9WX09GRl9NQVNLCQlHRU5NQVNLKDIsIDApCisKK3N0cnVjdCBheHAyMHhfYmF0 dF9wcyB7CisJc3RydWN0IHJlZ21hcCAqcmVnbWFwOworCXN0cnVjdCBwb3dlcl9zdXBwbHkgKmJh dHQ7CisJc3RydWN0IGF4cDIweF9kZXYgKmF4cDIweDsKKwlzdHJ1Y3QgaWlvX2NoYW5uZWwgKmJh dHRfY2hyZ19pOworCXN0cnVjdCBpaW9fY2hhbm5lbCAqYmF0dF9kaXNjaHJnX2k7CisJc3RydWN0 IGlpb19jaGFubmVsICpiYXR0X3Y7CisJdTggYXhwX2lkOworfTsKKworc3RhdGljIGludCBheHAy MHhfYmF0dGVyeV9nZXRfbWF4X3ZvbHRhZ2Uoc3RydWN0IGF4cDIweF9iYXR0X3BzICpheHAyMHhf YmF0dCwKKwkJCQkJICBpbnQgKnZhbCkKK3sKKwlpbnQgcmV0LCByZWc7CisKKwlyZXQgPSByZWdt YXBfcmVhZChheHAyMHhfYmF0dC0+cmVnbWFwLCBBWFAyMFhfQ0hSR19DVFJMMSwgJnJlZyk7CisJ aWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXN3aXRjaCAocmVnICYgQVhQMjBYX0NIUkdfQ1RS TDFfVEdUX1ZPTFQpIHsKKwljYXNlIEFYUDIwWF9DSFJHX0NUUkwxX1RHVF80XzFWOgorCQkqdmFs ID0gNDEwMDAwMDsKKwkJYnJlYWs7CisJY2FzZSBBWFAyMFhfQ0hSR19DVFJMMV9UR1RfNF8xNVY6 CisJCSp2YWwgPSA0MTUwMDAwOworCQlicmVhazsKKwljYXNlIEFYUDIwWF9DSFJHX0NUUkwxX1RH VF80XzJWOgorCQkqdmFsID0gNDIwMDAwMDsKKwkJYnJlYWs7CisJY2FzZSBBWFAyMFhfQ0hSR19D VFJMMV9UR1RfNF8zNlY6CisJCSp2YWwgPSA0MzYwMDAwOworCQlicmVhazsKKwlkZWZhdWx0Ogor CQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBheHAy MnhfYmF0dGVyeV9nZXRfbWF4X3ZvbHRhZ2Uoc3RydWN0IGF4cDIweF9iYXR0X3BzICpheHAyMHhf YmF0dCwKKwkJCQkJICBpbnQgKnZhbCkKK3sKKwlpbnQgcmV0LCByZWc7CisKKwlyZXQgPSByZWdt YXBfcmVhZChheHAyMHhfYmF0dC0+cmVnbWFwLCBBWFAyMFhfQ0hSR19DVFJMMSwgJnJlZyk7CisJ aWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXN3aXRjaCAocmVnICYgQVhQMjBYX0NIUkdfQ1RS TDFfVEdUX1ZPTFQpIHsKKwljYXNlIEFYUDIwWF9DSFJHX0NUUkwxX1RHVF80XzFWOgorCQkqdmFs ID0gNDEwMDAwMDsKKwkJYnJlYWs7CisJY2FzZSBBWFAyMFhfQ0hSR19DVFJMMV9UR1RfNF8yVjoK KwkJKnZhbCA9IDQyMDAwMDA7CisJCWJyZWFrOworCWNhc2UgQVhQMjJYX0NIUkdfQ1RSTDFfVEdU XzRfMjJWOgorCQkqdmFsID0gNDIyMDAwMDsKKwkJYnJlYWs7CisJY2FzZSBBWFAyMlhfQ0hSR19D VFJMMV9UR1RfNF8yNFY6CisJCSp2YWwgPSA0MjQwMDAwOworCQlicmVhazsKKwlkZWZhdWx0Ogor CQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBheHAy MHhfYmF0dGVyeV9nZXRfcHJvcChzdHJ1Y3QgcG93ZXJfc3VwcGx5ICpwc3ksCisJCQkJICAgZW51 bSBwb3dlcl9zdXBwbHlfcHJvcGVydHkgcHNwLAorCQkJCSAgIHVuaW9uIHBvd2VyX3N1cHBseV9w cm9wdmFsICp2YWwpCit7CisJc3RydWN0IGF4cDIweF9iYXR0X3BzICpheHAyMHhfYmF0dCA9IHBv d2VyX3N1cHBseV9nZXRfZHJ2ZGF0YShwc3kpOworCXN0cnVjdCBpaW9fY2hhbm5lbCAqY2hhbjsK KwlpbnQgcmV0ID0gMCwgcmVnLCB2YWwxOworCisJc3dpdGNoIChwc3ApIHsKKwljYXNlIFBPV0VS X1NVUFBMWV9QUk9QX1BSRVNFTlQ6CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9PTkxJTkU6CisJ CXJldCA9IHJlZ21hcF9yZWFkKGF4cDIweF9iYXR0LT5yZWdtYXAsIEFYUDIwWF9QV1JfT1BfTU9E RSwKKwkJCQkgICZyZWcpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQl2YWwtPmlu dHZhbCA9ICEhKHJlZyAmIEFYUDIwWF9QV1JfT1BfQkFUVF9QUkVTRU5UKTsKKwkJYnJlYWs7CisK KwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1NUQVRVUzoKKwkJcmV0ID0gcmVnbWFwX3JlYWQoYXhw MjB4X2JhdHQtPnJlZ21hcCwgQVhQMjBYX1BXUl9JTlBVVF9TVEFUVVMsCisJCQkJICAmcmVnKTsK KwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJaWYgKHJlZyAmIEFYUDIwWF9QV1JfU1RB VFVTX0JBVF9DSEFSR0lORykgeworCQkJdmFsLT5pbnR2YWwgPSBQT1dFUl9TVVBQTFlfU1RBVFVT X0NIQVJHSU5HOworCQkJcmV0dXJuIDA7CisJCX0KKworCQlyZXQgPSBpaW9fcmVhZF9jaGFubmVs X3Byb2Nlc3NlZChheHAyMHhfYmF0dC0+YmF0dF9kaXNjaHJnX2ksCisJCQkJCQkgJnZhbDEpOwor CQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlpZiAodmFsMSkgeworCQkJdmFsLT5pbnR2 YWwgPSBQT1dFUl9TVVBQTFlfU1RBVFVTX0RJU0NIQVJHSU5HOworCQkJcmV0dXJuIDA7CisJCX0K KworCQlyZXQgPSByZWdtYXBfcmVhZChheHAyMHhfYmF0dC0+cmVnbWFwLCBBWFAyMFhfRkdfUkVT LCAmdmFsMSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCS8qCisJCSAqIEZ1ZWwg R2F1Z2UgZGF0YSB0YWtlcyA3IGJpdHMgYnV0IHRoZSBzdG9yZWQgdmFsdWUgc2VlbXMgdG8gYmUK KwkJICogZGlyZWN0bHkgdGhlIHJhdyBwZXJjZW50YWdlIHdpdGhvdXQgYW55IHNjYWxpbmcgdG8g NyBiaXRzLgorCQkgKi8KKwkJaWYgKCh2YWwxICYgQVhQMjA5X0ZHX1BFUkNFTlQpID09IDEwMCkK KwkJCXZhbC0+aW50dmFsID0gUE9XRVJfU1VQUExZX1NUQVRVU19GVUxMOworCQllbHNlCisJCQl2 YWwtPmludHZhbCA9IFBPV0VSX1NVUFBMWV9TVEFUVVNfTk9UX0NIQVJHSU5HOworCQlicmVhazsK KworCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfSEVBTFRIOgorCQlyZXQgPSByZWdtYXBfcmVhZChh eHAyMHhfYmF0dC0+cmVnbWFwLCBBWFAyMFhfUFdSX09QX01PREUsCisJCQkJICAmdmFsMSk7CisJ CWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCWlmICh2YWwxICYgQVhQMjBYX1BXUl9PUF9C QVRUX0FDVElWQVRFRCkgeworCQkJdmFsLT5pbnR2YWwgPSBQT1dFUl9TVVBQTFlfSEVBTFRIX0RF QUQ7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCXZhbC0+aW50dmFsID0gUE9XRVJfU1VQUExZX0hF QUxUSF9HT09EOworCQlicmVhazsKKworCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfQ09OU1RBTlRf Q0hBUkdFX0NVUlJFTlQ6CisJCXJldCA9IHJlZ21hcF9yZWFkKGF4cDIweF9iYXR0LT5yZWdtYXAs IEFYUDIwWF9DSFJHX0NUUkwxLCAmcmVnKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisK KwkJcmVnICY9IEFYUDIwWF9DSFJHX0NUUkwxX1RHVF9DVVJSOworCQl2YWwtPmludHZhbCA9IHJl ZyAqIDEwMDAwMCArIDMwMDAwMDsKKwkJYnJlYWs7CisKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9Q X0NPTlNUQU5UX0NIQVJHRV9DVVJSRU5UX01BWDoKKwkJdmFsLT5pbnR2YWwgPSBBWFAyMFhfQ0hS R19DVFJMMV9UR1RfQ1VSUiAqIDEwMDAwMCArIDMwMDAwMDsKKwkJYnJlYWs7CisKKwljYXNlIFBP V0VSX1NVUFBMWV9QUk9QX0NVUlJFTlRfTk9XOgorCQlyZXQgPSByZWdtYXBfcmVhZChheHAyMHhf YmF0dC0+cmVnbWFwLCBBWFAyMFhfUFdSX0lOUFVUX1NUQVRVUywKKwkJCQkgICZyZWcpOworCQlp ZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlpZiAocmVnICYgQVhQMjBYX1BXUl9TVEFUVVNf QkFUX0NIQVJHSU5HKQorCQkJY2hhbiA9IGF4cDIweF9iYXR0LT5iYXR0X2NocmdfaTsKKwkJZWxz ZQorCQkJY2hhbiA9IGF4cDIweF9iYXR0LT5iYXR0X2Rpc2NocmdfaTsKKworCQlyZXQgPSBpaW9f cmVhZF9jaGFubmVsX3Byb2Nlc3NlZChjaGFuLCAmdmFsLT5pbnR2YWwpOworCQlpZiAocmV0KQor CQkJcmV0dXJuIHJldDsKKworCQkvKiBJSU8gZnJhbWV3b3JrIGdpdmVzIG1BIGJ1dCBQb3dlciBT dXBwbHkgZnJhbWV3b3JrIGdpdmVzIHVBICovCisJCXZhbC0+aW50dmFsICo9IDEwMDA7CisJCWJy ZWFrOworCisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9DQVBBQ0lUWToKKwkJLyogV2hlbiBubyBi YXR0ZXJ5IGlzIHByZXNlbnQsIHJldHVybiBjYXBhY2l0eSBpcyAxMDAlICovCisJCXJldCA9IHJl Z21hcF9yZWFkKGF4cDIweF9iYXR0LT5yZWdtYXAsIEFYUDIwWF9QV1JfT1BfTU9ERSwKKwkJCQkg ICZyZWcpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlpZiAoIShyZWcgJiBBWFAy MFhfUFdSX09QX0JBVFRfUFJFU0VOVCkpIHsKKwkJCXZhbC0+aW50dmFsID0gMTAwOworCQkJcmV0 dXJuIDA7CisJCX0KKworCQlyZXQgPSByZWdtYXBfcmVhZChheHAyMHhfYmF0dC0+cmVnbWFwLCBB WFAyMFhfRkdfUkVTLCAmcmVnKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJaWYg KGF4cDIweF9iYXR0LT5heHBfaWQgPT0gQVhQMjIxX0lEICYmCisJCSAgICAhKHJlZyAmIEFYUDIy WF9GR19WQUxJRCkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkvKgorCQkgKiBGdWVsIEdhdWdl IGRhdGEgdGFrZXMgNyBiaXRzIGJ1dCB0aGUgc3RvcmVkIHZhbHVlIHNlZW1zIHRvIGJlCisJCSAq IGRpcmVjdGx5IHRoZSByYXcgcGVyY2VudGFnZSB3aXRob3V0IGFueSBzY2FsaW5nIHRvIDcgYml0 cy4KKwkJICovCisJCXZhbC0+aW50dmFsID0gcmVnICYgQVhQMjA5X0ZHX1BFUkNFTlQ7CisJCWJy ZWFrOworCisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX01BWF9ERVNJR046CisJCWlm IChheHAyMHhfYmF0dC0+YXhwX2lkID09IEFYUDIwOV9JRCkKKwkJCXJldHVybiBheHAyMHhfYmF0 dGVyeV9nZXRfbWF4X3ZvbHRhZ2UoYXhwMjB4X2JhdHQsCisJCQkJCQkJICAgICAgJnZhbC0+aW50 dmFsKTsKKwkJcmV0dXJuIGF4cDIyeF9iYXR0ZXJ5X2dldF9tYXhfdm9sdGFnZShheHAyMHhfYmF0 dCwKKwkJCQkJCSAgICAgICZ2YWwtPmludHZhbCk7CisKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9Q X1ZPTFRBR0VfTUlOX0RFU0lHTjoKKwkJcmV0ID0gcmVnbWFwX3JlYWQoYXhwMjB4X2JhdHQtPnJl Z21hcCwgQVhQMjBYX1ZfT0ZGLCAmcmVnKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisK KwkJdmFsLT5pbnR2YWwgPSAyNjAwMDAwICsgMTAwMDAwICogKHJlZyAmIEFYUDIwWF9WX09GRl9N QVNLKTsKKwkJYnJlYWs7CisKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1ZPTFRBR0VfTk9XOgor CQlyZXQgPSBpaW9fcmVhZF9jaGFubmVsX3Byb2Nlc3NlZChheHAyMHhfYmF0dC0+YmF0dF92LAor CQkJCQkJICZ2YWwtPmludHZhbCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCS8q IElJTyBmcmFtZXdvcmsgZ2l2ZXMgbVYgYnV0IFBvd2VyIFN1cHBseSBmcmFtZXdvcmsgZ2l2ZXMg dVYgKi8KKwkJdmFsLT5pbnR2YWwgKj0gMTAwMDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQly ZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBheHAyMHhf YmF0dGVyeV9zZXRfbWF4X3ZvbHRhZ2Uoc3RydWN0IGF4cDIweF9iYXR0X3BzICpheHAyMHhfYmF0 dCwKKwkJCQkJICBpbnQgdmFsKQoreworCXN3aXRjaCAodmFsKSB7CisJY2FzZSA0MTAwMDAwOgor CQl2YWwgPSBBWFAyMFhfQ0hSR19DVFJMMV9UR1RfNF8xVjsKKwkJYnJlYWs7CisKKwljYXNlIDQx NTAwMDA6CisJCWlmIChheHAyMHhfYmF0dC0+YXhwX2lkID09IEFYUDIyMV9JRCkKKwkJCXJldHVy biAtRUlOVkFMOworCisJCXZhbCA9IEFYUDIwWF9DSFJHX0NUUkwxX1RHVF80XzE1VjsKKwkJYnJl YWs7CisKKwljYXNlIDQyMDAwMDA6CisJCXZhbCA9IEFYUDIwWF9DSFJHX0NUUkwxX1RHVF80XzJW OworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCS8qCisJCSAqIEFYUDIweCBtYXggdm9sdGFnZSBj YW4gYmUgc2V0IHRvIDQuMzZWIGFuZCBBWFAyMlggbWF4IHZvbHRhZ2UKKwkJICogY2FuIGJlIHNl dCB0byA0LjIyViBhbmQgNC4yNFYsIGJ1dCB0aGVzZSB2b2x0YWdlcyBhcmUgdG9vCisJCSAqIGhp Z2ggZm9yIExpdGhpdW0gYmFzZWQgYmF0dGVyaWVzIChBWFAgUE1JQ3MgYXJlIHN1cHBvc2VkIHRv CisJCSAqIGJlIHVzZWQgd2l0aCB0aGVzZSBraW5kcyBvZiBiYXR0ZXJ5KS4KKwkJICovCisJCXJl dHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiByZWdtYXBfdXBkYXRlX2JpdHMoYXhwMjB4X2Jh dHQtPnJlZ21hcCwgQVhQMjBYX0NIUkdfQ1RSTDEsCisJCQkJICBBWFAyMFhfQ0hSR19DVFJMMV9U R1RfVk9MVCwgdmFsKTsKK30KKworc3RhdGljIGludCBheHAyMHhfc2V0X2NvbnN0YW50X2NoYXJn ZV9jdXJyZW50KHN0cnVjdCBheHAyMHhfYmF0dF9wcyAqYXhwX2JhdHQsCisJCQkJCSAgICAgIGlu dCBjaGFyZ2VfY3VycmVudCkKK3sKKwlpZiAoYXhwX2JhdHQtPmF4cF9pZCA9PSBBWFAyMDlfSUQp CisJCWNoYXJnZV9jdXJyZW50ID0gKGNoYXJnZV9jdXJyZW50IC0gMzAwMDAwKSAvIDEwMDAwMDsK KwllbHNlCisJCWNoYXJnZV9jdXJyZW50ID0gKGNoYXJnZV9jdXJyZW50IC0gMzAwMDAwKSAvIDE1 MDAwMDsKKworCWlmIChjaGFyZ2VfY3VycmVudCA+IEFYUDIwWF9DSFJHX0NUUkwxX1RHVF9DVVJS IHx8IGNoYXJnZV9jdXJyZW50IDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gcmVn bWFwX3VwZGF0ZV9iaXRzKGF4cF9iYXR0LT5yZWdtYXAsIEFYUDIwWF9DSFJHX0NUUkwxLAorCQkJ CSAgQVhQMjBYX0NIUkdfQ1RSTDFfVEdUX0NVUlIsIGNoYXJnZV9jdXJyZW50KTsKK30KKworc3Rh dGljIGludCBheHAyMHhfYmF0dGVyeV9zZXRfcHJvcChzdHJ1Y3QgcG93ZXJfc3VwcGx5ICpwc3ks CisJCQkJICAgZW51bSBwb3dlcl9zdXBwbHlfcHJvcGVydHkgcHNwLAorCQkJCSAgIGNvbnN0IHVu aW9uIHBvd2VyX3N1cHBseV9wcm9wdmFsICp2YWwpCit7CisJc3RydWN0IGF4cDIweF9iYXR0X3Bz ICpheHAyMHhfYmF0dCA9IHBvd2VyX3N1cHBseV9nZXRfZHJ2ZGF0YShwc3kpOworCWludCB2YWwx OworCisJc3dpdGNoIChwc3ApIHsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1ZPTFRBR0VfTUlO X0RFU0lHTjoKKwkJdmFsMSA9ICh2YWwtPmludHZhbCAtIDI2MDAwMDApIC8gMTAwMDAwOworCQlp ZiAodmFsMSA8IDAgfHwgdmFsMSA+IEFYUDIwWF9WX09GRl9NQVNLKQorCQkJcmV0dXJuIC1FSU5W QUw7CisKKwkJcmV0dXJuIHJlZ21hcF91cGRhdGVfYml0cyhheHAyMHhfYmF0dC0+cmVnbWFwLCBB WFAyMFhfVl9PRkYsCisJCQkJCSAgQVhQMjBYX1ZfT0ZGX01BU0ssIHZhbDEpOworCisJY2FzZSBQ T1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX01BWF9ERVNJR046CisJCXJldHVybiBheHAyMHhfYmF0 dGVyeV9zZXRfbWF4X3ZvbHRhZ2UoYXhwMjB4X2JhdHQsIHZhbC0+aW50dmFsKTsKKworCWNhc2Ug UE9XRVJfU1VQUExZX1BST1BfQ09OU1RBTlRfQ0hBUkdFX0NVUlJFTlQ6CisJCXJldHVybiBheHAy MHhfc2V0X2NvbnN0YW50X2NoYXJnZV9jdXJyZW50KGF4cDIweF9iYXR0LAorCQkJCQkJCSAgdmFs LT5pbnR2YWwpOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCitzdGF0 aWMgZW51bSBwb3dlcl9zdXBwbHlfcHJvcGVydHkgYXhwMjB4X2JhdHRlcnlfcHJvcHNbXSA9IHsK KwlQT1dFUl9TVVBQTFlfUFJPUF9QUkVTRU5ULAorCVBPV0VSX1NVUFBMWV9QUk9QX09OTElORSwK KwlQT1dFUl9TVVBQTFlfUFJPUF9TVEFUVVMsCisJUE9XRVJfU1VQUExZX1BST1BfVk9MVEFHRV9O T1csCisJUE9XRVJfU1VQUExZX1BST1BfQ1VSUkVOVF9OT1csCisJUE9XRVJfU1VQUExZX1BST1Bf Q09OU1RBTlRfQ0hBUkdFX0NVUlJFTlQsCisJUE9XRVJfU1VQUExZX1BST1BfQ09OU1RBTlRfQ0hB UkdFX0NVUlJFTlRfTUFYLAorCVBPV0VSX1NVUFBMWV9QUk9QX0hFQUxUSCwKKwlQT1dFUl9TVVBQ TFlfUFJPUF9WT0xUQUdFX01BWF9ERVNJR04sCisJUE9XRVJfU1VQUExZX1BST1BfVk9MVEFHRV9N SU5fREVTSUdOLAorCVBPV0VSX1NVUFBMWV9QUk9QX0NBUEFDSVRZLAorfTsKKworc3RhdGljIGlu dCBheHAyMHhfYmF0dGVyeV9wcm9wX3dyaXRlYWJsZShzdHJ1Y3QgcG93ZXJfc3VwcGx5ICpwc3ks CisJCQkJCSBlbnVtIHBvd2VyX3N1cHBseV9wcm9wZXJ0eSBwc3ApCit7CisJcmV0dXJuIHBzcCA9 PSBQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX01JTl9ERVNJR04gfHwKKwkgICAgICAgcHNwID09 IFBPV0VSX1NVUFBMWV9QUk9QX1ZPTFRBR0VfTUFYX0RFU0lHTiB8fAorCSAgICAgICBwc3AgPT0g UE9XRVJfU1VQUExZX1BST1BfQ09OU1RBTlRfQ0hBUkdFX0NVUlJFTlQ7Cit9CisKK3N0YXRpYyBj b25zdCBzdHJ1Y3QgcG93ZXJfc3VwcGx5X2Rlc2MgYXhwMjB4X2JhdHRfcHNfZGVzYyA9IHsKKwku bmFtZSA9ICJheHAyMHgtYmF0dGVyeSIsCisJLnR5cGUgPSBQT1dFUl9TVVBQTFlfVFlQRV9CQVRU RVJZLAorCS5wcm9wZXJ0aWVzID0gYXhwMjB4X2JhdHRlcnlfcHJvcHMsCisJLm51bV9wcm9wZXJ0 aWVzID0gQVJSQVlfU0laRShheHAyMHhfYmF0dGVyeV9wcm9wcyksCisJLnByb3BlcnR5X2lzX3dy aXRlYWJsZSA9IGF4cDIweF9iYXR0ZXJ5X3Byb3Bfd3JpdGVhYmxlLAorCS5nZXRfcHJvcGVydHkg PSBheHAyMHhfYmF0dGVyeV9nZXRfcHJvcCwKKwkuc2V0X3Byb3BlcnR5ID0gYXhwMjB4X2JhdHRl cnlfc2V0X3Byb3AsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBheHAy MHhfYmF0dGVyeV9wc19pZFtdID0geworCXsKKwkJLmNvbXBhdGlibGUgPSAieC1wb3dlcnMsYXhw MjA5LWJhdHRlcnktcG93ZXItc3VwcGx5IiwKKwkJLmRhdGEgPSAodm9pZCAqKUFYUDIwOV9JRCwK Kwl9LCB7CisJCS5jb21wYXRpYmxlID0gIngtcG93ZXJzLGF4cDIyMS1iYXR0ZXJ5LXBvd2VyLXN1 cHBseSIsCisJCS5kYXRhID0gKHZvaWQgKilBWFAyMjFfSUQsCisJfSwgeyAvKiBzZW50aW5lbCAq LyB9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGF4cDIweF9iYXR0ZXJ5X3BzX2lkKTsK Kworc3RhdGljIGludCBheHAyMHhfcG93ZXJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldikKK3sKKwlzdHJ1Y3QgYXhwMjB4X2JhdHRfcHMgKmF4cDIweF9iYXR0OworCXN0cnVjdCBw b3dlcl9zdXBwbHlfY29uZmlnIHBzeV9jZmcgPSB7fTsKKwlpbnQgcmV0OworCXUzMiBjb25zdF9j aGFyZ2VfY3VycmVudDsKKworCWlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShwZGV2LT5kZXYu b2Zfbm9kZSkpCisJCXJldHVybiAtRU5PREVWOworCisJYXhwMjB4X2JhdHQgPSBkZXZtX2t6YWxs b2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpheHAyMHhfYmF0dCksCisJCQkJICAgR0ZQX0tFUk5FTCk7 CisJaWYgKCFheHAyMHhfYmF0dCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlheHAyMHhfYmF0dC0+ YmF0dF92ID0gZGV2bV9paW9fY2hhbm5lbF9nZXQoJnBkZXYtPmRldiwgImJhdHRfdiIpOworCWlm IChJU19FUlIoYXhwMjB4X2JhdHQtPmJhdHRfdikpIHsKKwkJaWYgKFBUUl9FUlIoYXhwMjB4X2Jh dHQtPmJhdHRfdikgPT0gLUVOT0RFVikKKwkJCXJldHVybiAtRVBST0JFX0RFRkVSOworCQlyZXR1 cm4gUFRSX0VSUihheHAyMHhfYmF0dC0+YmF0dF92KTsKKwl9CisKKwlheHAyMHhfYmF0dC0+YmF0 dF9jaHJnX2kgPSBkZXZtX2lpb19jaGFubmVsX2dldCgmcGRldi0+ZGV2LAorCQkJCQkJCSJiYXR0 X2NocmdfaSIpOworCWlmIChJU19FUlIoYXhwMjB4X2JhdHQtPmJhdHRfY2hyZ19pKSkgeworCQlp ZiAoUFRSX0VSUihheHAyMHhfYmF0dC0+YmF0dF9jaHJnX2kpID09IC1FTk9ERVYpCisJCQlyZXR1 cm4gLUVQUk9CRV9ERUZFUjsKKwkJcmV0dXJuIFBUUl9FUlIoYXhwMjB4X2JhdHQtPmJhdHRfY2hy Z19pKTsKKwl9CisKKwlheHAyMHhfYmF0dC0+YmF0dF9kaXNjaHJnX2kgPSBkZXZtX2lpb19jaGFu bmVsX2dldCgmcGRldi0+ZGV2LAorCQkJCQkJCSAgICJiYXR0X2Rpc2NocmdfaSIpOworCWlmIChJ U19FUlIoYXhwMjB4X2JhdHQtPmJhdHRfZGlzY2hyZ19pKSkgeworCQlpZiAoUFRSX0VSUihheHAy MHhfYmF0dC0+YmF0dF9kaXNjaHJnX2kpID09IC1FTk9ERVYpCisJCQlyZXR1cm4gLUVQUk9CRV9E RUZFUjsKKwkJcmV0dXJuIFBUUl9FUlIoYXhwMjB4X2JhdHQtPmJhdHRfZGlzY2hyZ19pKTsKKwl9 CisKKwlheHAyMHhfYmF0dC0+cmVnbWFwID0gZGV2X2dldF9yZWdtYXAocGRldi0+ZGV2LnBhcmVu dCwgTlVMTCk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgYXhwMjB4X2JhdHQpOworCisJ cHN5X2NmZy5kcnZfZGF0YSA9IGF4cDIweF9iYXR0OworCXBzeV9jZmcub2Zfbm9kZSA9IHBkZXYt PmRldi5vZl9ub2RlOworCisJYXhwMjB4X2JhdHQtPmF4cF9pZCA9ICh1aW50cHRyX3Qpb2ZfZGV2 aWNlX2dldF9tYXRjaF9kYXRhKCZwZGV2LT5kZXYpOworCisJaWYgKCFkZXZpY2VfcHJvcGVydHlf cmVhZF91MzIoJnBkZXYtPmRldiwKKwkJCQkgICAgICAieC1wb3dlcnMsY29uc3RhbnQtY2hhcmdl LWN1cnJlbnQiLAorCQkJCSAgICAgICZjb25zdF9jaGFyZ2VfY3VycmVudCkpIHsKKwkJcmV0ID0g YXhwMjB4X3NldF9jb25zdGFudF9jaGFyZ2VfY3VycmVudChheHAyMHhfYmF0dCwKKwkJCQkJCQkg Y29uc3RfY2hhcmdlX2N1cnJlbnQpOworCQlpZiAocmV0KQorCQkJZGV2X2VycigmcGRldi0+ZGV2 LAorCQkJCSJjb3VsZG4ndCBzZXQgY29uc3RhbnQgY2hhcmdlIGN1cnJlbnQ6ICVkXG4iLAorCQkJ CXJldCk7CisJfQorCisJYXhwMjB4X2JhdHQtPmJhdHQgPSBkZXZtX3Bvd2VyX3N1cHBseV9yZWdp c3RlcigmcGRldi0+ZGV2LAorCQkJCQkJICAgICAgICZheHAyMHhfYmF0dF9wc19kZXNjLAorCQkJ CQkJICAgICAgICZwc3lfY2ZnKTsKKwlyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKGF4cDIweF9iYXR0 LT5iYXR0KTsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXhwMjB4X2JhdHRf ZHJpdmVyID0geworCS5wcm9iZSAgICA9IGF4cDIweF9wb3dlcl9wcm9iZSwKKwkuZHJpdmVyICAg PSB7CisJCS5uYW1lICA9ICJheHAyMHgtYmF0dGVyeS1wb3dlci1zdXBwbHkiLAorCQkub2ZfbWF0 Y2hfdGFibGUgPSBheHAyMHhfYmF0dGVyeV9wc19pZCwKKwl9LAorfTsKKworbW9kdWxlX3BsYXRm b3JtX2RyaXZlcihheHAyMHhfYmF0dF9kcml2ZXIpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkJh dHRlcnkgcG93ZXIgc3VwcGx5IGRyaXZlciBmb3IgQVhQMjBYIGFuZCBBWFAyMlggUE1JQ3MiKTsK K01PRFVMRV9BVVRIT1IoIlF1ZW50aW4gU2NodWx6IDxxdWVudGluLnNjaHVsekBmcmVlLWVsZWN0 cm9ucy5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0tIAoyLjkuMwoKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwg bWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8v bGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK