From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mike Frysinger Subject: Re: [PATCH 2/2] add ad714x input driver for button/scrollwhell/slider/touchpad Date: Tue, 1 Sep 2009 15:30:31 -0400 Message-ID: <8bd0f97a0909011230r50cb532ep46db64d65cbb49e5@mail.gmail.com> References: <1251777330-16994-1-git-send-email-21cnbao@gmail.com> <1251777330-16994-2-git-send-email-21cnbao@gmail.com> <1251777330-16994-3-git-send-email-21cnbao@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1251777330-16994-3-git-send-email-21cnbao-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: uclinux-dist-devel-bounces-ZG0+EudsQA8dtHy/vicBwGD2FQJk+8+b@public.gmane.org Errors-To: uclinux-dist-devel-bounces-ZG0+EudsQA8dtHy/vicBwGD2FQJk+8+b@public.gmane.org To: Barry Song <21cnbao-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> Cc: dbrownell-Rn4VEauK+AKRv+LV9MX5uipxlwaOVQ5f@public.gmane.org, dtor-JGs/UdohzUI@public.gmane.org, dmitry.torokhov-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org, linux-input-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, uclinux-dist-devel-ZG0+EudsQA8dtHy/vicBwGD2FQJk+8+b@public.gmane.org List-Id: linux-input@vger.kernel.org T24gTW9uLCBBdWcgMzEsIDIwMDkgYXQgMjM6NTUsIEJhcnJ5IFNvbmcgd3JvdGU6Cj4gYWQ3MTQy L2FkNzE0NyBhcmUgUHJvZ3JhbW1hYmxlIENvbnRyb2xsZXJzIGZvciBDYXBhY2l0YW5jZSBUb3Vj aCBTZW5zb3JzLgo+IFRoZSBjaGlwcyBkb24ndCByZXN0cmljdCB0aGUgc3BlY2lmaWMgdXNhZ2Us IGFuZCBpdCBjYW4gYmUgdXNlZCBhcyBidXR0b24vCj4gc2xpZGVyL3Njcm9sbHdoZWVsL3RvdWNo cGFkIGV0Yy4gZGVwZW5kaW5nIG9uIHRoZSBoYXJkd2FyZSBjb25uZWN0aW9uLgo+IE9uZSBzcGVj aWFsIHRhcmdldCBib2FyZCBjYW4gaW5jbHVkZSBvbmUgb3Igc2V2ZXJhbCB0aGVzZSBjb21wb25l bnRzLgo+Cj4gVGhlIGRyaXZlciBpcyBpbmRlcGVuZGVudCBvZiBzcGVjaWFsIGJvYXJkcy4gSXQg Z2V0cyB0aGUgY29tcG9uZW50cwo+IGxheW91dCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBwbGF0Zm9y bV9kYXRhLCByZWdpc3RlcnMgcmVsYXRlZCBkZXZpY2VzLAo+IGZ1bGxmaWxscyB0aGUgYWxnb3Jp dGhtcyBhbmQgc3RhdGUgbWFjaGluZXMgZm9yIHRoZXNlIGNvbXBvbmVudHMgYW5kCj4gcmVwb3J0 IHJlbGF0ZWQgaW5wdXQgZXZlbnRzIHRvIHVwIGxldmVsLgoKc2VlbXMgeW91IGRpZG50IGFkZHJl c3MgYWxsIHRoZSBjb21tZW50cyBpIHBvc3RlZCBhZnRlciB5b3VyIGZpcnN0IGNvbW1pdCAuLi4K CnBsZWFzZSBhZGQgdGhpcyBsaW5lIGJlZm9yZSB0aGUgI2luY2x1ZGUnczoKI2RlZmluZSBwcl9m bXQoZm10KSAiYWQ3MTR4OiAiIGZtdAp0aGlzIHdpbGwgZml4IGFsbCBvZiB5b3VyIGRldl8qKCkg b3V0cHV0IHNvIHRoYXQgaXQgaXMgcHJvcGVybHkgcHJlZml4ZWQKCj4gKyNkZWZpbmUgQUQ3MTR4 X1NQSV9BRERSIMKgIMKgIMKgIMKgMHgxQwo+ICsjZGVmaW5lIEFENzE0eF9TUElfQUREUl9TSEZU IMKgIDExCj4gKyNkZWZpbmUgQUQ3MTR4X1NQSV9SRUFEIMKgIMKgIMKgIMKgMQo+ICsjZGVmaW5l IEFENzE0eF9TUElfUkVBRF9TSEZUIMKgIDEwCj4gKwo+ICsjZGVmaW5lIEFENzE0WF9QV1JfQ1RS TCDCoCDCoCDCoCDCoCDCoCAweDAKPiArI2RlZmluZSBBRDcxNHhfU1RHX0NBTF9FTl9SRUcgwqAg wqAgMHgxCj4gKyNkZWZpbmUgQUQ3MTRYX0FNQl9DT01QX0NUUkwwX1JFRyAweDIKPiArI2RlZmlu ZSBBRDcxNHhfUEFSVElEX1JFRyDCoCDCoCDCoCDCoCAweDE3Cj4gKyNkZWZpbmUgQUQ3MTQ3X1BB UlRJRCDCoCDCoCDCoCDCoCDCoCDCoCAweDE0NzAKPiArI2RlZmluZSBBRDcxNDJfUEFSVElEIMKg IMKgIMKgIMKgIMKgIMKgIDB4RTYyMAo+ICsjZGVmaW5lIEFENzE0eF9TVEFHRUNGR19SRUcgwqAg wqAgwqAgMHg4MAo+ICsjZGVmaW5lIEFENzE0eF9TWVNDRkdfUkVHIMKgIMKgIMKgIMKgIDB4MAoK eW91ciBBRDcxNFggYW5kIEFENzE0eCBuZWVkcyB0byBiZSBjb25zaXN0ZW50Cgo+ICtzdHJ1Y3Qg YWQ3MTR4X2J1dHRvbl9kcnYgewo+ICsgwqAgwqAgwqAgYWQ3MTR4X2RldmljZV9zdGF0ZSBzdGF0 ZTsKPiArIMKgIMKgIMKgIC8qIFVubGlrZSBzbGlkZXIvd2hlZWwvdG91Y2hwYWQsIGFsbCBidXR0 b25zIHBvaW50IHRvCj4gKyDCoCDCoCDCoCDCoCogc2FtZSBpbnB1dF9kZXYgaW5zdGFuY2UgKi8K CmVpdGhlciBwdXQgdGhlIGNvbW1lbnQgb24gb25lIGxpbmUgYW5kIGRvOgovKiBmb29vICovCm9y IHVzZSBwcm9wZXIgY29tbWVudCBzdHlsZSB3aGVyZSB0aGUgbGFzdCAqLyBpcyBvbiBhIGxpbmUg YnkgaXRzZWxmCi8qCiAqIGZvbwogKi8KdGhpcyBhcHBsaWVzIHRvIG1hbnkgY29tbWVudHMgaW4g dGhpcyBmaWxlCgo+ICtzdHJ1Y3QgYWQ3MTR4X2NoaXAgewo+ICsgwqAgwqAgwqAgdW5zaWduZWQg c2hvcnQgaF9zdGF0ZTsKPiArIMKgIMKgIMKgIHVuc2lnbmVkIHNob3J0IGxfc3RhdGU7Cj4gKyDC oCDCoCDCoCB1bnNpZ25lZCBzaG9ydCBjX3N0YXRlOwo+ICsgwqAgwqAgwqAgdW5zaWduZWQgc2hv cnQgYWRjX3JlZ1tTVEFHRV9OVU1dOwo+ICsgwqAgwqAgwqAgdW5zaWduZWQgc2hvcnQgYW1iX3Jl Z1tTVEFHRV9OVU1dOwo+ICsgwqAgwqAgwqAgdW5zaWduZWQgc2hvcnQgc2Vuc29yX3ZhbFtTVEFH RV9OVU1dOwo+ICsKPiArIMKgIMKgIMKgIHN0cnVjdCBhZDcxNHhfcGxhdGZvcm1fZGF0YSAqaHc7 Cj4gKyDCoCDCoCDCoCBzdHJ1Y3QgYWQ3MTR4X2RyaXZlcl9kYXRhICpzdzsKPiArCj4gKyDCoCDC oCDCoCBidXNfZGV2aWNlICpidXM7Cj4gKyDCoCDCoCDCoCBpbnQgKCpyZWFkKSAoYnVzX2Rldmlj ZSAqLCB1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgc2hvcnQgKik7Cj4gKyDCoCDCoCDCoCBpbnQg KCp3cml0ZSkgKGJ1c19kZXZpY2UgKiwgdW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIHNob3J0KTsK CnVzaW5nIGZ1bmN0aW9uIHBvaW50ZXJzIGlzIHB1cmUgb3ZlcmhlYWQgaW4geW91ciBjdXJyZW50 CmltcGxlbWVudGF0aW9uLiAgY3JlYXRlIGEgYWQ3MTR4X3JlYWQgbWFjcm8gdGhhdCBleHBhbmRz IHRvIGVpdGhlciB0aGUKc3BpIG9yIHRoZSBpMmMgdmVyc2lvbiBkZXBlbmRpbmcgb24gd2hpY2gg aXMgZW5hYmxlZC4KCj4gK3N0YXRpYyB2b2lkIHN0YWdlX3VzZV9jb21faW50KHN0cnVjdCBhZDcx NHhfY2hpcCAqYWQ3MTR4LCBpbnQgc3RhcnRfc3RhZ2UsCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDC oCBpbnQgZW5kX3N0YWdlKQo+ICt7CgphbGwgZnVuY3MgaW4gaGVyZSByZWFsbHkgc2hvdWxkIGhh dmUgYWQ3MTR4XyBzeW1ib2wgcHJlZml4ZXMuICBpZiBpCnNhdyBhIGNyYXNoIGFuZCBpdCBqdXN0 IHNhaWQgInN0YWdlX3h4eCIsIGl0IGlzbnQgaW1tZWRpYXRlbHkgb2J2aW91cwp3aGVyZSB0aGlz IHN5bWJvbCBpcyBjb21pbmcgZnJvbS4KCj4gK3N0YXRpYyBpbnQgc3RhZ2VfY2FsX2hpZ2hlc3Rf c3RhZ2Uoc3RydWN0IGFkNzE0eF9jaGlwICphZDcxNHgsIGludCBzdGFydF9zdGFnZSwKPiArIMKg IMKgIMKgIMKgIMKgIMKgIMKgIGludCBlbmRfc3RhZ2UpCj4gK3sKPiArIMKgIMKgIMKgIGludCBt YXhfcmVzID0gMDsKPiArIMKgIMKgIMKgIGludCBtYXhfaWR4ID0gMDsKPiArIMKgIMKgIMKgIGlu dCBpOwo+ICsKPiArIMKgIMKgIMKgIGZvciAoaSA9IHN0YXJ0X3N0YWdlOyBpIDw9IGVuZF9zdGFn ZTsgaSsrKSB7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAoYWQ3MTR4LT5zZW5zb3JfdmFs W2ldID4gbWF4X3Jlcykgewo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgbWF4 X3JlcyA9IGFkNzE0eC0+c2Vuc29yX3ZhbFtpXTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIG1heF9pZHggPSBpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfQo+ICsgwqAg wqAgwqAgfQoKc2hvdWxkIHRoZSBsb29wIGxpbWl0IHJlYWxseSBiZSAiPD0iIGFuZCBub3QgIjwi ID8gIHNlZW1zIHRvIGJlIHRoaXMKd2F5IHRocm91Z2hvdXQsIHNvIG1heWJlIHRoZSBsb2dpYyBp cyBjb3JyZWN0IC4uLgoKPiArc3RhdGljIGludCBzdGFnZV9jYWxfYWJzX3BvcyhzdHJ1Y3QgYWQ3 MTR4X2NoaXAgKmFkNzE0eCwgaW50IHN0YXJ0X3N0YWdlLAo+ICsgwqAgwqAgwqAgwqAgwqAgwqAg wqAgaW50IGVuZF9zdGFnZSwgaW50IGhpZ2hlc3Rfc3RhZ2UsIGludCBtYXhfY29vcmQpCj4gK3sK PiArIMKgIMKgIMKgIGludCBhX3BhcmFtLCBiX3BhcmFtOwo+ICsKPiArIMKgIMKgIMKgIGlmICho aWdoZXN0X3N0YWdlID09IHN0YXJ0X3N0YWdlKSB7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBh X3BhcmFtID0gYWQ3MTR4LT5zZW5zb3JfdmFsW3N0YXJ0X3N0YWdlICsgMV07Cj4gKyDCoCDCoCDC oCDCoCDCoCDCoCDCoCBiX3BhcmFtID0gYWQ3MTR4LT5zZW5zb3JfdmFsW3N0YXJ0X3N0YWdlXSAr Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBhZDcxNHgtPnNlbnNvcl92YWxb c3RhcnRfc3RhZ2UgKyAxXTsKPiArIMKgIMKgIMKgIH0gZWxzZSBpZiAoaGlnaGVzdF9zdGFnZSA9 PSBlbmRfc3RhZ2UpIHsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGFfcGFyYW0gPSBhZDcxNHgt PnNlbnNvcl92YWxbZW5kX3N0YWdlXSAqCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCAoZW5kX3N0YWdlIC0gc3RhcnRfc3RhZ2UpICsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIGFkNzE0eC0+c2Vuc29yX3ZhbFtlbmRfc3RhZ2UgLSAxXSAqCj4gKyDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAoZW5kX3N0YWdlIC0gc3RhcnRfc3RhZ2UgLSAx KTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGJfcGFyYW0gPSBhZDcxNHgtPnNlbnNvcl92YWxb ZW5kX3N0YWdlXSArCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBhZDcxNHgt PnNlbnNvcl92YWxbZW5kX3N0YWdlIC0gMV07Cj4gKyDCoCDCoCDCoCB9IGVsc2Ugewo+ICsgwqAg wqAgwqAgwqAgwqAgwqAgwqAgYV9wYXJhbSA9IGFkNzE0eC0+c2Vuc29yX3ZhbFtoaWdoZXN0X3N0 YWdlXSAqCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAoaGlnaGVzdF9zdGFn ZSAtIHN0YXJ0X3N0YWdlKSArCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBh ZDcxNHgtPnNlbnNvcl92YWxbaGlnaGVzdF9zdGFnZSAtIDFdICoKPiArIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIChoaWdoZXN0X3N0YWdlIC0gc3RhcnRfc3RhZ2UgLSAxKSArCj4g KyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBhZDcxNHgtPnNlbnNvcl92YWxbaGln aGVzdF9zdGFnZSArIDFdICoKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICho aWdoZXN0X3N0YWdlIC0gc3RhcnRfc3RhZ2UgKyAxKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKg IGJfcGFyYW0gPSBhZDcxNHgtPnNlbnNvcl92YWxbaGlnaGVzdF9zdGFnZV0gKwo+ICsgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgYWQ3MTR4LT5zZW5zb3JfdmFsW2hpZ2hlc3Rfc3Rh Z2UgLSAxXSArCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBhZDcxNHgtPnNl bnNvcl92YWxbaGlnaGVzdF9zdGFnZSArIDFdOwo+ICsgwqAgwqAgwqAgfQo+ICsKPiArIMKgIMKg IMKgIHJldHVybiAobWF4X2Nvb3JkIC8gKGVuZF9zdGFnZSAtIHN0YXJ0X3N0YWdlKSkgKiBhX3Bh cmFtIC8gYl9wYXJhbTsKPiArfQoKZG8gdGhlIGxvY2FsIHZhcnMgcmVhbGx5IG5lZWQgIl9zdGFn ZSIgc3VmZml4ID8gIGlmIHlvdSB0cmltbWVkIHRoYXQsCmkgaW1hZ2luZSBpdCdkIG1ha2UgdGhl IGNvZGUgYSBiaXQgZWFzaWVyIHRvIGRpZ2VzdC4KCj4gKy8qIE9uZSBidXR0b24gY2FuIGNvbm5l Y3QgdG8gbXVsdGkgcG9zdGl2ZSBhbmQgbmVnYXRpdmUgb2YgQ0RDcwo+ICsgKiBNdWx0aS1idXR0 b25zIGNhbiBjb25uZWN0IHRvIHNhbWUgcG9zdGl2ZS9uZWdhdGl2ZSBvZiBvbmUgQ0RDCgpwbGVh c2UgcnVuIGEgc3BlbGwgY2hlY2tlciBvbiB5b3VyIGNvbW1lbnRzIC4uLgpwb3N0aXZlIC0+IHBv c2l0aXZlCgo+ICtzdGF0aWMgaW50IGFkNzE0eF9od19kZXRlY3Qoc3RydWN0IGFkNzE0eF9jaGlw ICphZDcxNHgpCgpzaG91bGQgYmUgX19kZXZpbml0Cgo+ICsgwqAgwqAgwqAgZGVmYXVsdDoKPiAr IMKgIMKgIMKgIMKgIMKgIMKgIMKgIGRldl9lcnIoJmFkNzE0eC0+YnVzLT5kZXYsICJGYWlsIHRv IGRldGVjdCBBRDcxNHggY2FwdG91Y2gsXAo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgcmVhZCBJRCBpcyAlMDR4XG4iLCBkYXRhKTsKCmxpbmUgY29udGlu dWF0aW9uIGluIHN0cmluZ3MgcHJvZHVjZXMgYXdmdWwgb3V0cHV0Cgo+ICtzdGF0aWMgaW50IGFk NzE0eF9od19pbml0KHN0cnVjdCBhZDcxNHhfY2hpcCAqYWQ3MTR4KQo+IC4uLgo+ICsgICAgICAg cmV0dXJuIDA7Cj4gLi4uCj4gKyAgICAgICBhZDcxNHhfaHdfaW5pdChhZDcxNHgpOwoKY29uc2lk ZXJpbmcgeW91IGFsd2F5cyByZXR1cm4gMCBhbmQgeW91IG5ldmVyIGNoZWNrIHRoZSByZXR1cm4s IHRoaXMKc2hvdWxkIGJlIGEgdm9pZCBmdW5jdGlvbgoKYW5kIGFkNzE0eF9od19pbml0IHNob3Vs ZCBiZSBfX2RldmluaXQKCj4gKyDCoCDCoCDCoCBkcnZfZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0 cnVjdCBhZDcxNHhfZHJpdmVyX2RhdGEpLCBHRlBfS0VSTkVMKTsKCnNpemVvZigqZHJ2X2RhdGEp IC4uLiBhcHBsaWVzIHRvIGV2ZXJ5IGFsbG9jIGluIHRoaXMgZHJpdmVyCgo+ICsgaW5wdXRbYWxs b2NfaWR4LTFdLT5pZC5idXN0eXBlID0gQlVTX0kyQzsKCnlvdSBzZXQgYnVzdHlwZSB0byBJMkMg aW4gY29tbW9uIGNvZGUgZXZlbiB0aG91Z2ggdGhpcyB3aWxsIGJlCmV4ZWN1dGVkIGZvciBib3Ro IFNQSSBhbmQgSTJDIGludGVyZmFjZXMKCj4gKyDCoCDCoCDCoCBpZiAoYWQ3MTR4LT5idXMtPmly cSA+IDApIHsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJldCA9IHJlcXVlc3RfdGhyZWFkZWRf aXJxKGFkNzE0eC0+YnVzLT5pcnEsIGFkNzE0eF9pbnRlcnJ1cHQsCj4gKyDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBhZDcxNHhfaW50ZXJydXB0X3RocmVhZCwg SVJRRl9UUklHR0VSX0ZBTExJTkcsCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCAiYWQ3MTR4X2NhcHRvdWNoIiwgYWQ3MTR4KTsKPiArIMKgIMKgIMKgIMKg IMKgIMKgIMKgIGlmIChyZXQpIHsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IGRldl9lcnIoJmFkNzE0eC0+YnVzLT5kZXYsICJDYW4ndCBhbGxvY2F0ZSBpcnEgJWRcbiIsCj4g KyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCBhZDcxNHgtPmJ1cy0+aXJxKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IGdvdG8gZmFpbF9pcnE7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCB9Cj4gKyDCoCDCoCDCoCB9 IGVsc2UKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGRldl93YXJuKCZhZDcxNHgtPmJ1cy0+ZGV2 LCAiSVJRIG5vdCBjb25maWd1cmVkIVxuIik7Cj4gKwo+ICsgICAgICAgcmV0dXJuIDA7CgpzaW5j ZSB0aGUgZHJpdmVyIHJlcXVpcmVzIGFuIElSUSBpbiBvcmRlciB0byB3b3JrLCB0aGlzIHNob3Vs ZCBlcnJvcgpvdXQgcmF0aGVyIHRoYW4gd2FybiBhbmQgcmV0dXJuIHN1Y2Nlc3MKCmFsc28sIHdv dWxkbnQgaXQgbWFrZSBtb3JlIHNlbnNlIHRvIHJlcXVlc3QgdGhlIElSUSBmaXJzdCBhbmQgdGhl bgpmYWlsIHJhdGhlciB0aGFuIGRvaW5nIGFsbCB0aGUgbWVtb3J5L2lucHV0IGFsbG9jYXRpb24g b25seSB0byBmaW5kCm91dCB0aGUgSVJRIGlzIGFscmVhZHkgdGFrZW4gPwoKPiAraW50IGFkNzE0 eF9zcGlfcmVhZChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCB1bnNpZ25lZCBzaG9ydCByZWcsCj4g KyDCoCDCoCDCoCDCoCDCoCDCoCDCoCB1bnNpZ25lZCBzaG9ydCAqZGF0YSkKCnlvdSdyZSBtaXNz aW5nICJzdGF0aWMiIGhlcmUgYW5kIGluIGEgZmV3IG90aGVyIGZ1bmN0aW9ucwoKPiArewo+ICsg wqAgwqAgwqAgaW50IHJldDsKPiArIMKgIMKgIMKgIHVuc2lnbmVkIHNob3J0IHR4WzJdOwo+ICsg wqAgwqAgwqAgdW5zaWduZWQgc2hvcnQgcnhbMl07Cj4gKyDCoCDCoCDCoCBzdHJ1Y3Qgc3BpX3Ry YW5zZmVyIHQgPSB7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCAudHhfYnVmID0gdHgsCj4gKyDC oCDCoCDCoCDCoCDCoCDCoCDCoCAucnhfYnVmID0gcngsCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDC oCAubGVuID0gNCwKPiArIMKgIMKgIMKgIH07Cj4gKyDCoCDCoCDCoCBzdHJ1Y3Qgc3BpX21lc3Nh Z2UgbTsKPiArCj4gKyDCoCDCoCDCoCB0eFswXSA9IChBRDcxNHhfU1BJX0FERFIgPDwgQUQ3MTR4 X1NQSV9BRERSX1NIRlQpIHwKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIChBRDcxNHhfU1BJX1JF QUQgPDwgQUQ3MTR4X1NQSV9SRUFEX1NIRlQpIHwgcmVnOwo+ICsKPiArIMKgIMKgIMKgIHNwaV9t ZXNzYWdlX2luaXQoJm0pOwo+ICsgwqAgwqAgwqAgc3BpX21lc3NhZ2VfYWRkX3RhaWwoJnQsICZt KTsKPiArIMKgIMKgIMKgIHJldCA9IHNwaV9zeW5jKHNwaSwgJm0pOwoKY2FudCB5b3UgdXNlIHNw aV93cml0ZV90aGVuX3JlYWQoKSA/ICBkb250IGxldCB0aGUgdTgqIHByb3RvdHlwZSBzY2FyZQp5 b3UsIGl0IHNob3VsZCB3b3JrIHdpdGggd3JpdGluZyAxNmJpdHMgYW5kIHRoZW4gcmVhZGluZyAx NmJpdHMuCgo+ICtpbnQgYWQ3MTR4X3NwaV93cml0ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCB1 bnNpZ25lZCBzaG9ydCByZWcsCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCB1bnNpZ25lZCBzaG9y dCBkYXRhKQo+ICt7Cj4gKyDCoCDCoCDCoCBpbnQgcmV0ID0gMDsKPiArIMKgIMKgIMKgIHVuc2ln bmVkIHNob3J0IHR4WzJdOwo+ICsgwqAgwqAgwqAgc3RydWN0IHNwaV90cmFuc2ZlciB0ID0gewo+ ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgLnR4X2J1ZiA9IHR4LAo+ICsgwqAgwqAgwqAgwqAgwqAg wqAgwqAgLmxlbiA9IDQsCj4gKyDCoCDCoCDCoCB9Owo+ICsgwqAgwqAgwqAgc3RydWN0IHNwaV9t ZXNzYWdlIG07Cj4gKwo+ICsgwqAgwqAgwqAgdHhbMF0gPSAoQUQ3MTR4X1NQSV9BRERSIDw8IEFE NzE0eF9TUElfQUREUl9TSEZUKSB8IHJlZzsKPiArIMKgIMKgIMKgIHR4WzFdID0gZGF0YTsKPiAr Cj4gKyDCoCDCoCDCoCBzcGlfbWVzc2FnZV9pbml0KCZtKTsKPiArIMKgIMKgIMKgIHNwaV9tZXNz YWdlX2FkZF90YWlsKCZ0LCAmbSk7Cj4gKwo+ICsgwqAgwqAgwqAgcmV0ID0gc3BpX3N5bmMoc3Bp LCAmbSk7Cj4gKyDCoCDCoCDCoCBpZiAocmV0IDwgMCkKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKg IGRldl9lcnIoJnNwaS0+ZGV2LCAiU1BJIHdyaXRlIGVycm9yXG4iKTsKPiArCj4gKyDCoCDCoCDC oCByZXR1cm4gcmV0Owo+ICt9CgpzZWVtcyBsaWtlIHNwaV93cml0ZSgpIHdvdWxkIGJlIGJldHRl cgoKPiArc3RhdGljIGludCBfX2RldmV4aXQgYWQ3MTR4X2kyY19yZW1vdmUoc3RydWN0IGkyY19j bGllbnQgKmNsaWVudCkKPiArewo+ICsgICAgICAgc3RydWN0IGFkNzE0eF9jaGlwICpjaGlwID0g aTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Cj4gKyAgICAgICBhZDcxNHhfcmVtb3ZlKGNoaXAp Owo+ICsKPiArICAgICAgIHJldHVybiAwOwo+ICt9CgpyZXR1cm4gYWQ3MTR4X3JlbW92ZShjaGlw KTsKCm9mIGNvdXJzZSwgaWYgeW91IHNpbXBseSBjcmVhdGVkIGEgbWFjcm8gImFkNzE0eF9nZXRf Y2hpcGRhdGEiIGFuZCBoYWQKaXQgZXZhbHVhdGUgdG8gZWl0aGVyIHRoZSBzcGkgb3IgaTJjIHZl cnNpb24gZGVwZW5kaW5nIG9uIHRoZQppbnRlcmZhY2UgZW5hYmxlZCwgdGhpcyBmdW5jdGlvbiBj b3VsZCBiZSBpbiBjb21tb24gY29kZSByYXRoZXIgdGhhbgpkdXBsaWNhdGluZyBpdCBmb3IgdGhl IHR3byBpbnRlcmZhY2VzCgpzYW1lIGdvZXMgZm9yIHRoZSBtb2R1bGUgaW5pdC9leGl0IGZ1bmN0 aW9ucwoKPiArc3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIGFkNzE0eF9zcGlfZHJpdmVyID0gewo+ ICsgwqAgwqAgwqAgLmRyaXZlciA9IHsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIC5uYW1lIMKg ID0gImFkNzE0eF9jYXB0b3VjaCIsCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCAuYnVzIMKgIMKg PSAmc3BpX2J1c190eXBlLAo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgLm93bmVyIMKgPSBUSElT X01PRFVMRSwKPiArIMKgIMKgIMKgIH0sCgppJ20gcHJldHR5IHN1cmUgeW91IGRvbnQgbmVlZCB0 byBzZXQgLmJ1cyB5b3Vyc2VsZgoKPiArIMKgIMKgIMKgIC5wcm9iZSDCoCDCoCDCoCDCoCDCoD0g YWQ3MTR4X3NwaV9wcm9iZSwKPiArIMKgIMKgIMKgIC5yZW1vdmUgwqAgwqAgwqAgwqAgPSBfX2Rl dmV4aXRfcChhZDcxNHhfc3BpX3JlbW92ZSksCj4gKyDCoCDCoCDCoCAuc3VzcGVuZCDCoCDCoCDC oCDCoD0gYWQ3MTR4X3N1c3BlbmQsCj4gKyDCoCDCoCDCoCAucmVzdW1lIMKgIMKgIMKgIMKgID0g YWQ3MTR4X3Jlc3VtZSwKCnRoZXJlIGlzIGEgbmV3IHBvd2VyIG1hbmFnZW1lbnQgb3B0cyBzdHJ1 Y3QgaW4gMi42LjMxIHRoYXQgc2hvdWxkIGJlIHVzZWQKCj4gK3N0YXRpYyBpbnQgX19pbml0IGFk NzE0eF9pbml0KHZvaWQpCj4gK3sKPiArIMKgIMKgIMKgIGludCByZXQ7Cj4gKwo+ICsgwqAgwqAg wqAgcmV0ID0gc3BpX3JlZ2lzdGVyX2RyaXZlcigmYWQ3MTR4X3NwaV9kcml2ZXIpOwo+ICsgwqAg wqAgwqAgaWYgKHJldCAhPSAwKSB7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBwcmludGsoS0VS Tl9FUlIgIkZhaWxlZCB0byByZWdpc3RlciBhZDcxNHggU1BJIGRyaXZlcjogJWRcbiIsCj4gKyDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCByZXQpOwo+ICsgwqAg wqAgwqAgfQo+ICsKPiArIMKgIMKgIMKgIHJldHVybiByZXQ7Cgpwcl9lcnIoKSwgbm8gbmVlZCBm b3IgdGhlIGJyYWNlcywgYW5kIG5vIG5lZWQgdG8gb3V0cHV0IHRoZSByZXQgdmFsdWUuCiB0aGlz IGlzIHRoZSBtb2R1bGUgaW5pdCBmdW5jdGlvbiB3aGljaCBtZWFucyB0aGF0IGVycm9yIHdpbGwg YmUKcGFzc2VkIGJhY2sgdXAgdG8gdXNlcnNwYWNlIGFuZCBpdCBjYW4gaGFuZGxlIGRpc3BsYXlp bmcgaXQuICBpbiB0aGF0CmNhc2UsIGl0IG1pZ2h0IGFzIHdlbGwgcmVhZDoKewogICAgcmV0dXJu IHNwaV9yZWdpc3Rlcl9kcml2ZXIoJmFkNzE0eF9zcGlfZHJpdmVyKTsKfQoKPiArIMKgIMKgIMKg IHU4IHR4WzRdOwo+ICsKPiArIMKgIMKgIMKgIC8qIERvIHJhdyBJMkMsIG5vdCBzbWJ1cyBjb21w YXRpYmxlICovCj4gKyDCoCDCoCDCoCB0eFswXSA9IChyZWcgJiAweEZGMDApID4+IDg7Cj4gKyDC oCDCoCDCoCB0eFsxXSA9IChyZWcgJiAweDAwRkYpOwo+ICsgwqAgwqAgwqAgdHhbMl0gPSAoZGF0 YSAmIDB4RkYwMCkgPj4gODsKPiArIMKgIMKgIMKgIHR4WzNdID0gZGF0YSAmIDB4MDBGRjsKCnRo ZSBtYXNrcyBhcmUgcHJldHR5IHVzZWxlc3MgKGFuZCBpIHdvdWxkbnQgYmUgc3VycHJpc2VkIGlm IGdjYyBkb2VzbnQKb3B0aW1pemUgYWxsIG9mIHRoZW0gYXdheSkgc2luY2UgeW91J3JlIGFscmVh ZHkgbG9hZGluZyBpbnRvIGEgdTgKdHhbNF0gPSB7CiAgICByZWcgPj4gOCwKICAgIHJlZywKICAg IGRhdGEgPj4gOCwKICAgIGRhdGEsCn07Cgo+ICsgwqAgwqAgwqAgdTggdHhbMl07Cj4gKwo+ICsg wqAgwqAgwqAgLyogRG8gcmF3IEkyQywgbm90IHNtYnVzIGNvbXBhdGlibGUgKi8KPiArIMKgIMKg IMKgIHR4WzBdID0gKHJlZyAmIDB4RkYwMCkgPj4gODsKPiArIMKgIMKgIMKgIHR4WzFdID0gKHJl ZyAmIDB4MDBGRik7CgpzYW1lIGhlcmUKCj4gKyDCoCDCoCDCoCAqZGF0YSA9IHJ4WzBdOwo+ICsg wqAgwqAgwqAgKmRhdGEgPSAoKmRhdGEgPDwgOCkgfCByeFsxXTsKCmVybSwgdGhpcyBpcyBmdW5r eS4gIHdoeSBjYW50IHlvdSBkbyBpdCB3aXRoIG9uZSBhc3NpZ25tZW50ID8KCj4gK01PRFVMRV9E RVNDUklQVElPTigiYWQ3MTR4IGNhcHRvdWNoIGRyaXZlciIpOwoKcGxlYXNlIHVzZSBhIGRlc2Ny aXB0aW9uIGxpa2UgeW91IGRpZCBpbiB0aGUgS2NvbmZpZwotbWlrZQpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpVY2xpbnV4LWRpc3QtZGV2ZWwgbWFpbGlu ZyBsaXN0ClVjbGludXgtZGlzdC1kZXZlbEBibGFja2Zpbi51Y2xpbnV4Lm9yZwpodHRwczovL2Js YWNrZmluLnVjbGludXgub3JnL21haWxtYW4vbGlzdGluZm8vdWNsaW51eC1kaXN0LWRldmVs