From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefan Wahren Subject: Re: [PATCH RFC 3/6] hwmon: Add support for RPi voltage sensor Date: Wed, 16 May 2018 21:59:01 +0200 (CEST) Message-ID: <1560428919.21731.1526500741266@email.1und1.de> References: <1526477827-10859-1-git-send-email-stefan.wahren@i2se.com> <1526477827-10859-4-git-send-email-stefan.wahren@i2se.com> <20180516182144.GB22705@roeck-us.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180516182144.GB22705@roeck-us.net> 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: Guenter Roeck Cc: Mark Rutland , devicetree@vger.kernel.org, Jean Delvare , Florian Fainelli , Scott Branden , Ray Jui , Phil Elwell , Rob Herring , Eric Anholt , =?UTF-8?Q?Noralf_Tr=C3=B8nnes?= , bcm-kernel-feedback-list@broadcom.com, linux-rpi-kernel@lists.infradead.org, linux-hwmon@vger.kernel.org, linux-arm-kernel@lists.infradead.org List-Id: devicetree@vger.kernel.org SGkgR3VlbnRlciwKCj4gR3VlbnRlciBSb2VjayA8bGludXhAcm9lY2stdXMubmV0PiBoYXQgYW0g MTYuIE1haSAyMDE4IHVtIDIwOjIxIGdlc2NocmllYmVuOgo+IAo+IAo+IE9uIFdlZCwgTWF5IDE2 LCAyMDE4IGF0IDAzOjM3OjA0UE0gKzAyMDAsIFN0ZWZhbiBXYWhyZW4gd3JvdGU6Cj4gPiBDdXJy ZW50bHkgdGhlcmUgaXMgbm8gZWFzeSB3YXkgdG8gZGV0ZWN0IHVuZGVyLXZvbHRhZ2UgY29uZGl0 aW9ucyBvbiBhIHJlbW90ZQo+ID4gUmFzcGJlcnJ5IFBpLiBUaGlzIGh3bW9uIGRyaXZlciByZXRy aWV2ZXMgdGhlIHN0YXRlIG9mIHRoZSB1bmRlci12b2x0YWdlIHNlbnNvcgo+ID4gdmlhIG1haWxi b3ggaW50ZXJmYWNlLiBUaGUgaGFuZGxpbmcgYmFzZWQgb24gTm9yYWxmJ3MgbW9kaWZpY2F0aW9u cyB0byB0aGUKPiA+IGRvd25zdHJlYW0gZmlybXdhcmUgZHJpdmVyLiBJbiBjYXNlIG9mIGFuIHVu ZGVyLXZvbHRhZ2UgY29uZGl0aW9uIG9ubHkgYW4gZW50cnkKPiA+IGlzIHdyaXR0ZW4gdG8gdGhl IGtlcm5lbCBsb2cuCj4gPiAKPiAKPiBNeSBtYWpvciBjb25jZXJuIGlzIGhvdyB0aGlzIGlzIGRp c3BsYXllZCB3aXRoIHRoZSAnc2Vuc29ycycgY29tbWFuZC4KPiBDYW4geW91IHRlc3QgYW5kIHJl cG9ydCA/CgpJIGdldCB0aGUgZm9sbG93aW5nIG91dHB1dDoKcnBpX3ZvbHQtaXNhLTAwMDAKQWRh cHRlcjogSVNBIGFkYXB0ZXIKaW4wOiAgICAgICAgICAgICAgTi9BICAKCj4gCj4gT2YgY291cnNl LCBpdCB3b3VsZCBiZSBtdWNoIGJldHRlciBpZiB0aGUgZmlybXdhcmUgd291bGQgYWxzbyByZXBv cnQKPiB0aGUgYWN0dWFsIHZvbHRhZ2UsIGJ1dCBJIGd1ZXNzIHdlIGNhbid0IGhhdmUgZXZlcnl0 aGluZy4KCkkgdGhpbmsgdGhpcyBpc24ndCBwb3NzaWJsZSBiZWNhdXNlIHRoZSBoYXJkd2FyZSBv bmx5IHByb3ZpZGUgYSBiaW5hcnkgdmFsdWUgKEdQSU8pLgoKPiAKPiBNb3JlIGNvbW1lbnRzIGlu bGluZS4KPiAKPiBUaGFua3MsCj4gR3VlbnRlcgo+IAo+ID4gQ0M6ICJOb3JhbGYgVHLDuG5uZXMi IDxub3JhbGZAdHJvbm5lcy5vcmc+Cj4gPiBTaWduZWQtb2ZmLWJ5OiBTdGVmYW4gV2FocmVuIDxz dGVmYW4ud2FocmVuQGkyc2UuY29tPgo+ID4gLS0tCj4gPiAgZHJpdmVycy9od21vbi9LY29uZmln ICAgICAgICAgICAgIHwgIDEwICsrCj4gPiAgZHJpdmVycy9od21vbi9NYWtlZmlsZSAgICAgICAg ICAgIHwgICAxICsKPiA+ICBkcml2ZXJzL2h3bW9uL3Jhc3BiZXJyeXBpLWh3bW9uLmMgfCAyMDcg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAKPiBQbGVhc2UgYWxzbyBw cm92aWRlIERvY3VtZW50YXRpb24vaHdtb24vcmFzcGJlcnJ5cGktaHdtb24uCj4gCj4gPiAgMyBm aWxlcyBjaGFuZ2VkLCAyMTggaW5zZXJ0aW9ucygrKQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL2h3bW9uL3Jhc3BiZXJyeXBpLWh3bW9uLmMKPiA+IAo+ID4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvaHdtb24vS2NvbmZpZyBiL2RyaXZlcnMvaHdtb24vS2NvbmZpZwo+ID4gaW5kZXggNzY4 YWVkNS4uN2Y5MzVjZiAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvaHdtb24vS2NvbmZpZwo+ID4g KysrIGIvZHJpdmVycy9od21vbi9LY29uZmlnCj4gPiBAQCAtMTI5OCw2ICsxMjk4LDE2IEBAIGNv bmZpZyBTRU5TT1JTX1BXTV9GQU4KPiA+ICAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWls dCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCj4gPiAgCSAgd2lsbCBiZSBjYWxsZWQg cHdtLWZhbi4KPiA+ICAKPiA+ICtjb25maWcgU0VOU09SU19SQVNQQkVSUllQSV9IV01PTgo+ID4g Kwl0cmlzdGF0ZSAiUmFzcGJlcnJ5IFBpIHZvbHRhZ2UgbW9uaXRvciIKPiA+ICsJZGVwZW5kcyBv biAoQVJDSF9CQ00yODM1ICYmIFJBU1BCRVJSWVBJX0ZJUk1XQVJFKSB8fCAoQ09NUElMRV9URVNU ICYmICFSQVNQQkVSUllQSV9GSVJNV0FSRSkKPiA+ICsJaGVscAo+ID4gKwkgIElmIHlvdSBzYXkg eWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB2b2x0YWdlIHNlbnNvciBvbiB0aGUKPiA+ICsJ ICBSYXNwYmVycnkgUGkuCj4gPiArCj4gPiArCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVp bHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlCj4gPiArCSAgd2lsbCBiZSBjYWxsZWQg cmFzcGJlcnJ5cGktaHdtb24uCj4gPiArCj4gPiAgY29uZmlnIFNFTlNPUlNfU0hUMTUKPiA+ICAJ dHJpc3RhdGUgIlNlbnNpcm9uIGh1bWlkaXR5IGFuZCB0ZW1wZXJhdHVyZSBzZW5zb3JzLiBTSFQx NSBhbmQgY29tcGF0LiIKPiA+ICAJZGVwZW5kcyBvbiBHUElPTElCIHx8IENPTVBJTEVfVEVTVAo+ ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUgYi9kcml2ZXJzL2h3bW9uL01h a2VmaWxlCj4gPiBpbmRleCBlN2Q1MmEzLi5hOTI5NzcwIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVy cy9od21vbi9NYWtlZmlsZQo+ID4gKysrIGIvZHJpdmVycy9od21vbi9NYWtlZmlsZQo+ID4gQEAg LTE0MSw2ICsxNDEsNyBAQCBvYmotJChDT05GSUdfU0VOU09SU19QQzg3NDI3KQkrPSBwYzg3NDI3 Lm8KPiA+ICBvYmotJChDT05GSUdfU0VOU09SU19QQ0Y4NTkxKQkrPSBwY2Y4NTkxLm8KPiA+ICBv YmotJChDT05GSUdfU0VOU09SU19QT1dSMTIyMCkgICs9IHBvd3IxMjIwLm8KPiA+ICBvYmotJChD T05GSUdfU0VOU09SU19QV01fRkFOKQkrPSBwd20tZmFuLm8KPiA+ICtvYmotJChDT05GSUdfU0VO U09SU19SQVNQQkVSUllQSV9IV01PTikJKz0gcmFzcGJlcnJ5cGktaHdtb24ubwo+ID4gIG9iai0k KENPTkZJR19TRU5TT1JTX1MzQykJKz0gczNjLWh3bW9uLm8KPiA+ICBvYmotJChDT05GSUdfU0VO U09SU19TQ0g1NlhYX0NPTU1PTikrPSBzY2g1Nnh4LWNvbW1vbi5vCj4gPiAgb2JqLSQoQ09ORklH X1NFTlNPUlNfU0NINTYyNykJKz0gc2NoNTYyNy5vCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9o d21vbi9yYXNwYmVycnlwaS1od21vbi5jIGIvZHJpdmVycy9od21vbi9yYXNwYmVycnlwaS1od21v bi5jCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMC4uMjAwM2Y2Ywo+ ID4gLS0tIC9kZXYvbnVsbAo+ID4gKysrIGIvZHJpdmVycy9od21vbi9yYXNwYmVycnlwaS1od21v bi5jCj4gPiBAQCAtMCwwICsxLDIwNyBAQAo+ID4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBHUEwtMi4wKwo+ID4gKy8qCj4gPiArICogUmFzcGJlcnJ5IFBpIHZvbHRhZ2Ugc2Vuc29yIGRy aXZlcgo+ID4gKyAqCj4gPiArICogQmFzZWQgb24gZmlybXdhcmUvcmFzcGJlcnJ5cGkuYyBieSBO b3JhbGYgVHLDuG5uZXMKPiA+ICsgKgo+ID4gKyAqIENvcHlyaWdodCAoQykgMjAxOCBTdGVmYW4g V2FocmVuIDxzdGVmYW4ud2FocmVuQGkyc2UuY29tPgo+ID4gKyAqLwo+ID4gKyNpbmNsdWRlIDxs aW51eC9kZXZpY2UuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvZXJyLmg+Cj4gPiArI2luY2x1ZGUg PGxpbnV4L2h3bW9uLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L2h3bW9uLXN5c2ZzLmg+Cj4gCj4g VW5uZWNlc3NhcnkgaW5jbHVkZQo+IAo+ID4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiA+ ICsjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L3BsYXRm b3JtX2RldmljZS5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Cj4gPiArI2luY2x1ZGUg PGxpbnV4L3dvcmtxdWV1ZS5oPgo+ID4gKyNpbmNsdWRlIDxzb2MvYmNtMjgzNS9yYXNwYmVycnlw aS1maXJtd2FyZS5oPgo+ID4gKwo+ID4gKyNkZWZpbmUgVU5ERVJWT0xUQUdFX1NUSUNLWV9CSVQJ QklUKDE2KQo+ID4gKwo+ID4gK3N0cnVjdCBycGlfaHdtb25fZGF0YSB7Cj4gPiArCXN0cnVjdCBk ZXZpY2UgKmh3bW9uX2RldjsKPiA+ICsJc3RydWN0IHJwaV9maXJtd2FyZSAqZnc7Cj4gPiArCXUz MiBsYXN0X3Rocm90dGxlZDsKPiA+ICsJc3RydWN0IGRlbGF5ZWRfd29yayBnZXRfdmFsdWVzX3Bv bGxfd29yazsKPiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIHJwaV9maXJtd2FyZV9nZXRf dGhyb3R0bGVkKHN0cnVjdCBycGlfaHdtb25fZGF0YSAqZGF0YSkKPiA+ICt7Cj4gPiArCXUzMiBu ZXdfdXYsIG9sZF91diwgdmFsdWU7Cj4gPiArCWludCByZXQ7Cj4gPiArCj4gPiArCS8qIENsZWFy IHN0aWNreSBiaXRzICovCj4gCj4gUGxlYXNlIG1ha2UgbW9yZSBleHBsaWNpdCB0aGF0IHRoaXMg aXMgYSByZXF1ZXN0L2NvbW1hbmQgc2VudCB0byB0aGUgZmlybXdhcmUuCj4gCj4gPiArCXZhbHVl ID0gMHhmZmZmOwo+ID4gKwo+ID4gKwlyZXQgPSBycGlfZmlybXdhcmVfcHJvcGVydHkoZGF0YS0+ ZncsIFJQSV9GSVJNV0FSRV9HRVRfVEhST1RUTEVELAo+ID4gKwkJCQkgICAgJnZhbHVlLCBzaXpl b2YodmFsdWUpKTsKPiA+ICsJaWYgKHJldCkgewo+ID4gKwkJZGV2X2Vycl9vbmNlKGRhdGEtPmh3 bW9uX2RldiwgIiVzOiBGYWlsZWQgdG8gZ2V0IHRocm90dGxlZCAoJWQpXG4iLAo+ID4gKwkJCSAg ICAgX19mdW5jX18sIHJldCk7Cj4gCj4gVGhlIGZ1bmN0aW9uIG5hbWUgc2VlbXMgdW5uZWNlc3Nh cnkuCj4gCj4gPiArCQlyZXR1cm47Cj4gPiArCX0KPiA+ICsKPiA+ICsJbmV3X3V2ID0gdmFsdWUg JiBVTkRFUlZPTFRBR0VfU1RJQ0tZX0JJVDsKPiA+ICsJb2xkX3V2ID0gZGF0YS0+bGFzdF90aHJv dHRsZWQgJiBVTkRFUlZPTFRBR0VfU1RJQ0tZX0JJVDsKPiA+ICsJZGF0YS0+bGFzdF90aHJvdHRs ZWQgPSB2YWx1ZTsKPiA+ICsKPiA+ICsJaWYgKG5ld191diA9PSBvbGRfdXYpCj4gPiArCQlyZXR1 cm47Cj4gPiArCj4gPiArCWlmIChuZXdfdXYpCj4gPiArCQlkZXZfY3JpdChkYXRhLT5od21vbl9k ZXYsICJVbmRlci12b2x0YWdlIGRldGVjdGVkISAoMHglMDh4KVxuIiwKPiA+ICsJCQkgdmFsdWUp Owo+ID4gKwllbHNlCj4gPiArCQlkZXZfaW5mbyhkYXRhLT5od21vbl9kZXYsICJWb2x0YWdlIG5v cm1hbGlzZWQgKDB4JTA4eClcbiIsCj4gPiArCQkJIHZhbHVlKTsKPiAKPiBXaGF0IHZhbHVlIGRv IHRob3NlIGhleCB2YWx1ZXMgcHJvdmlkZSB0byB0aGUgdXNlciA/CgpUaGUgYWN0dWFsIGRlZmlu aXRpb24gb2YgdGhlIGJpdHMgY2FuIGJlIGZvdW5kIGluIHRoZSBjb21taXQgbG9nIG9mIHBhdGNo ICMxLiBCdXQgdGhpcyBpc24ndCB2ZXJ5IGhlbHBmdWwgZm9yIGFuIGVuZCB1c2VyLgoKPiAKPiA+ ICsKPiA+ICsJc3lzZnNfbm90aWZ5KCZkYXRhLT5od21vbl9kZXYtPmtvYmosIE5VTEwsICJpbjBf bGNyaXRfYWxhcm0iKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgZ2V0X3ZhbHVlc19w b2xsKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKPiA+ICt7Cj4gPiArCXN0cnVjdCBycGlfaHdt b25fZGF0YSAqZGF0YTsKPiA+ICsKPiA+ICsJZGF0YSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1 Y3QgcnBpX2h3bW9uX2RhdGEsCj4gPiArCQkJICAgIGdldF92YWx1ZXNfcG9sbF93b3JrLndvcmsp Owo+ID4gKwo+ID4gKwlycGlfZmlybXdhcmVfZ2V0X3Rocm90dGxlZChkYXRhKTsKPiA+ICsKPiA+ ICsJLyoKPiA+ICsJICogV2UgY2FuJ3QgcnVuIGZhc3RlciB0aGFuIHRoZSBzdGlja3kgc2hpZnQg KDEwMG1zKSBzaW5jZSB3ZSBnZXQKPiA+ICsJICogZmxpcHBpbmcgaW4gdGhlIHN0aWNreSBiaXRz IHRoYXQgYXJlIGNsZWFyZWQuCj4gPiArCSAqLwo+ID4gKwlzY2hlZHVsZV9kZWxheWVkX3dvcmso JmRhdGEtPmdldF92YWx1ZXNfcG9sbF93b3JrLCAyICogSFopOwo+ID4gK30KPiA+ICsKPiA+ICtz dGF0aWMgaW50IHJwaV9yZWFkKHN0cnVjdCBkZXZpY2UgKmRldiwgZW51bSBod21vbl9zZW5zb3Jf dHlwZXMgdHlwZSwKPiA+ICsJCSAgICB1MzIgYXR0ciwgaW50IGNoYW5uZWwsIGxvbmcgKnZhbCkK PiA+ICt7Cj4gPiArCXN0cnVjdCBycGlfaHdtb25fZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0 YShkZXYpOwo+ID4gKwo+ID4gKwlpZiAodHlwZSAhPSBod21vbl9pbikKPiA+ICsJCXJldHVybiAt RU9QTk9UU1VQUDsKPiA+ICsKPiA+ICsJaWYgKGF0dHIgIT0gaHdtb25faW5fbGNyaXRfYWxhcm0p Cj4gPiArCQlyZXR1cm4gLUVPUE5PVFNVUFA7Cj4gPiArCj4gPiArCWlmIChjaGFubmVsKQo+ID4g KwkJcmV0dXJuIC1FT1BOT1RTVVBQOwo+ID4gKwo+IFRoZXJlIGlzIG9ubHkgb25lIGNoYW5uZWws IG9uZSBhdHRyaWJ1dGUsIGFuZCBvbmUgdHlwZSBzdXBwb3J0ZWQuCj4gQXMgc3VjaCwgdGhlIGNo ZWNrcyBhcmUgdW5uZWNlc3NhcnkuCj4gCj4gPiArCSp2YWwgPSAhIShkYXRhLT5sYXN0X3Rocm90 dGxlZCAmIFVOREVSVk9MVEFHRV9TVElDS1lfQklUKTsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ ID4gKwo+ID4gK3N0YXRpYyB1bW9kZV90IHJwaV9pc192aXNpYmxlKGNvbnN0IHZvaWQgKl9kYXRh LCBlbnVtIGh3bW9uX3NlbnNvcl90eXBlcyB0eXBlLAo+ID4gKwkJCSAgICAgIHUzMiBhdHRyLCBp bnQgY2hhbm5lbCkKPiA+ICt7Cj4gPiArCWlmICh0eXBlICE9IGh3bW9uX2luKQo+ID4gKwkJcmV0 dXJuIDA7Cj4gPiArCj4gPiArCWlmIChhdHRyICE9IGh3bW9uX2luX2xjcml0X2FsYXJtKQo+ID4g KwkJcmV0dXJuIDA7Cj4gPiArCj4gPiArCWlmIChjaGFubmVsKQo+ID4gKwkJcmV0dXJuIDA7Cj4g Cj4gU2FtZSBhcyBhYm92ZS4gSW4gdGhlIGxpc3QgYmVsb3csIHRoZXJlIGlzIG5vdCBhIHNpbmds ZSBjb25kaXRpb25hbCBhdHRyaWJ1dGUuCj4gR2l2ZW4gdGhhdCwgdGhlIGNoZWNrcyBzaG91bGQg YmUgdW5uZWNlc3NhcnksIGFuZCBpdCBzaG91bGQgYmUgc3VmZmljaWVudCB0bwo+IGp1c3QgcmV0 dXJuIDA0NDQuCj4gCj4gPiArCj4gPiArCXJldHVybiAwNDQ0Owo+ID4gK30KPiA+ICsKPiA+ICtz dGF0aWMgY29uc3QgdTMyIHJwaV9pbl9jb25maWdbXSA9IHsKPiA+ICsJSFdNT05fSV9MQ1JJVF9B TEFSTSwKPiA+ICsJMAo+ID4gK307Cj4gPiArCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBod21v bl9jaGFubmVsX2luZm8gcnBpX2luID0gewo+ID4gKwkudHlwZSA9IGh3bW9uX2luLAo+ID4gKwku Y29uZmlnID0gcnBpX2luX2NvbmZpZywKPiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRpYyBjb25zdCBz dHJ1Y3QgaHdtb25fY2hhbm5lbF9pbmZvICpycGlfaW5mb1tdID0gewo+ID4gKwkmcnBpX2luLAo+ ID4gKwlOVUxMCj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGh3bW9uX29w cyBycGlfaHdtb25fb3BzID0gewo+ID4gKwkuaXNfdmlzaWJsZSA9IHJwaV9pc192aXNpYmxlLAo+ ID4gKwkucmVhZCA9IHJwaV9yZWFkLAo+ID4gK307Cj4gPiArCj4gPiArc3RhdGljIGNvbnN0IHN0 cnVjdCBod21vbl9jaGlwX2luZm8gcnBpX2NoaXBfaW5mbyA9IHsKPiA+ICsJLm9wcyA9ICZycGlf aHdtb25fb3BzLAo+ID4gKwkuaW5mbyA9IHJwaV9pbmZvLAo+ID4gK307Cj4gPiArCj4gPiArc3Rh dGljIGludCBycGlfaHdtb25fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiA+ ICt7Cj4gPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7Cj4gPiArCXN0cnVjdCBk ZXZpY2Vfbm9kZSAqZndfbm9kZTsKPiA+ICsJc3RydWN0IHJwaV9od21vbl9kYXRhICpkYXRhOwo+ ID4gKwlpbnQgcmV0Owo+ID4gKwo+ID4gKwlkYXRhID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9m KCpkYXRhKSwgR0ZQX0tFUk5FTCk7Cj4gPiArCWlmICghZGF0YSkKPiA+ICsJCXJldHVybiAtRU5P TUVNOwo+ID4gKwo+ID4gKwlmd19ub2RlID0gb2ZfZ2V0X3BhcmVudChkZXYtPm9mX25vZGUpOwo+ ID4gKwlpZiAoIWZ3X25vZGUpIHsKPiA+ICsJCWRldl9lcnIoZGV2LCAiTWlzc2luZyBmaXJtd2Fy ZSBub2RlXG4iKTsKPiA+ICsJCXJldHVybiAtRU5PRU5UOwo+ID4gKwl9Cj4gPiArCj4gPiArCWRh dGEtPmZ3ID0gcnBpX2Zpcm13YXJlX2dldChmd19ub2RlKTsKPiA+ICsJb2Zfbm9kZV9wdXQoZndf bm9kZSk7Cj4gPiArCWlmICghZGF0YS0+ZncpCj4gPiArCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsK PiA+ICsKPiA+ICsJcmV0ID0gcnBpX2Zpcm13YXJlX3Byb3BlcnR5KGRhdGEtPmZ3LCBSUElfRklS TVdBUkVfR0VUX1RIUk9UVExFRCwKPiA+ICsJCQkJICAgICZkYXRhLT5sYXN0X3Rocm90dGxlZCwK PiA+ICsJCQkJICAgIHNpemVvZihkYXRhLT5sYXN0X3Rocm90dGxlZCkpOwo+ID4gKwlpZiAocmV0 KSB7Cj4gPiArCQlkZXZfaW5mbyhkZXYsICJGaXJtd2FyZSBkb2Vzbid0IHN1cHBvcnQgR0VUX1RI Uk9UVExFRFxuIik7Cj4gCj4gSWYgdGhpcyBpcyBhbiBlcnJvciAtPiBkZXZfZXJyKCkuCgpJIHdh c24ndCBzdXJlLiBJZiB0aGUgZmlybXdhcmUgaXMgdG9vIG9sZCwgd2UgY2Fubm90IHByb3ZpZGUg dGhpcyBmZWF0dXJlIGFuZCBpdCdzIGEgd2FzdGUgb2YgcmVzb3VyY2VzIHRvIGxvYWQgdGhpcyBk cml2ZXIuIE9uIHRoZSBvdGhlciBzaWRlIGkgZG9uJ3Qgd2FudCB0byBjb25mdXNlIHBlb3BsZSB0 aGlzIGlzIHNvbWV0aGluZyBiYWQuCgpTdGVmYW4KCj4gCj4gPiArCQlyZXR1cm4gLUVPUE5PVFNV UFA7Cj4gCj4gb3IgcmV0dXJuIC1FTk9ERVYuCj4gCj4gPiArCX0KPiA+ICsKPiA+ICsJZGF0YS0+ aHdtb25fZGV2ID0gZGV2bV9od21vbl9kZXZpY2VfcmVnaXN0ZXJfd2l0aF9pbmZvKGRldiwgInJw aV92b2x0IiwKPiA+ICsJCQkJCQkJICAgICAgIGRhdGEsCj4gPiArCQkJCQkJCSAgICAgICAmcnBp X2NoaXBfaW5mbywKPiA+ICsJCQkJCQkJICAgICAgIE5VTEwpOwo+ID4gKwo+ID4gKwlJTklUX0RF TEFZRURfV09SSygmZGF0YS0+Z2V0X3ZhbHVlc19wb2xsX3dvcmssIGdldF92YWx1ZXNfcG9sbCk7 Cj4gPiArCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRhdGEpOwo+ID4gKwo+ID4gKwlpZiAo IVBUUl9FUlJfT1JfWkVSTyhkYXRhLT5od21vbl9kZXYpKQo+ID4gKwkJc2NoZWR1bGVfZGVsYXll ZF93b3JrKCZkYXRhLT5nZXRfdmFsdWVzX3BvbGxfd29yaywgMiAqIEhaKTsKPiA+ICsKPiA+ICsJ cmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhkYXRhLT5od21vbl9kZXYpOwo+ID4gK30KPiA+ICsKPiA+ ICtzdGF0aWMgaW50IHJwaV9od21vbl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRl dikKPiA+ICt7Cj4gPiArCXN0cnVjdCBycGlfaHdtb25fZGF0YSAqZGF0YSA9IHBsYXRmb3JtX2dl dF9kcnZkYXRhKHBkZXYpOwo+ID4gKwo+ID4gKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmRh dGEtPmdldF92YWx1ZXNfcG9sbF93b3JrKTsKPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArfQo+ ID4gKwo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHJwaV9od21vbl9vZl9t YXRjaFtdID0gewo+ID4gKwl7IC5jb21wYXRpYmxlID0gInJhc3BiZXJyeXBpLGJjbTI4MzUtaHdt b24iLCB9LAo+ID4gKwl7IC8qIHNlbnRpbmVsICovfSwKPiA+ICt9Owo+ID4gK01PRFVMRV9ERVZJ Q0VfVEFCTEUob2YsIHJwaV9od21vbl9vZl9tYXRjaCk7Cj4gPiArCj4gPiArc3RhdGljIHN0cnVj dCBwbGF0Zm9ybV9kcml2ZXIgcnBpX2h3bW9uX2RyaXZlciA9IHsKPiA+ICsJLnByb2JlID0gcnBp X2h3bW9uX3Byb2JlLAo+ID4gKwkucmVtb3ZlID0gcnBpX2h3bW9uX3JlbW92ZSwKPiA+ICsJLmRy aXZlciA9IHsKPiA+ICsJCS5uYW1lID0gInJhc3BiZXJyeXBpLWh3bW9uIiwKPiA+ICsJCS5vZl9t YXRjaF90YWJsZSA9IHJwaV9od21vbl9vZl9tYXRjaCwKPiA+ICsJfSwKPiA+ICt9Owo+ID4gK21v ZHVsZV9wbGF0Zm9ybV9kcml2ZXIocnBpX2h3bW9uX2RyaXZlcik7Cj4gPiArCj4gPiArTU9EVUxF X0FVVEhPUigiU3RlZmFuIFdhaHJlbiA8c3RlZmFuLndhaHJlbkBpMnNlLmNvbT4iKTsKPiA+ICtN T0RVTEVfREVTQ1JJUFRJT04oIlJhc3BiZXJyeSBQaSB2b2x0YWdlIHNlbnNvciBkcml2ZXIiKTsK PiA+ICtNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7Cj4gPiAtLSAKPiA+IDIuNy40Cj4gPiAKPiA+ IC0tCj4gPiBUbyB1bnN1YnNjcmliZSBmcm9tIHRoaXMgbGlzdDogc2VuZCB0aGUgbGluZSAidW5z dWJzY3JpYmUgbGludXgtaHdtb24iIGluCj4gPiB0aGUgYm9keSBvZiBhIG1lc3NhZ2UgdG8gbWFq b3Jkb21vQHZnZXIua2VybmVsLm9yZwo+ID4gTW9yZSBtYWpvcmRvbW8gaW5mbyBhdCAgaHR0cDov L3ZnZXIua2VybmVsLm9yZy9tYWpvcmRvbW8taW5mby5odG1sCj4gCj4gX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBsaW51eC1hcm0ta2VybmVsIG1haWxp bmcgbGlzdAo+IGxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwo+IGh0dHA6Ly9s aXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtl cm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0 dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5l bAo=