From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v13,2/2] usb: typec: ucsi: add support for Cypress CCGx From: Heikki Krogerus Message-Id: <20181023093554.GA2034@kuha.fi.intel.com> Date: Tue, 23 Oct 2018 12:35:54 +0300 To: Ajay Gupta Cc: wsa@the-dreams.de, peda@axentia.se, linux-usb@vger.kernel.org, linux-i2c@vger.kernel.org, Andy Shevchenko List-ID: SGkgQWpheSwKCkkgc3RpbGwgaGF2ZSBhIGZldyBtb3JlIGNvbW1lbnRzIGJlbG93Li4KCk9uIFdl ZCwgT2N0IDAzLCAyMDE4IGF0IDExOjI3OjI4QU0gLTA3MDAsIEFqYXkgR3VwdGEgd3JvdGU6Cj4g TGF0ZXN0IE5WSURJQSBHUFUgY2FyZHMgaGF2ZSBhIEN5cHJlc3MgQ0NHeCBUeXBlLUMgY29udHJv bGxlcgo+IG92ZXIgSTJDIGludGVyZmFjZS4KPiAKPiBUaGlzIFVDU0kgSTJDIGRyaXZlciB1c2Vz IEkyQyBidXMgZHJpdmVyIGludGVyZmFjZSBmb3IgY29tbXVuaWNhdGluZwo+IHdpdGggVHlwZS1D IGNvbnRyb2xsZXIuCj4gCj4gU2lnbmVkLW9mZi1ieTogQWpheSBHdXB0YSA8YWpheWdAbnZpZGlh LmNvbT4KPiBSZXZpZXdlZC1ieTogQW5keSBTaGV2Y2hlbmtvIDxhbmR5LnNoZXZjaGVua29AZ21h aWwuY29tPgo+IEFja2VkLWJ5OiBIZWlra2kgS3JvZ2VydXMgPGhlaWtraS5rcm9nZXJ1c0BsaW51 eC5pbnRlbC5jb20+Cj4gLS0tCj4gQ2hhbmdlcyBmcm9tIHYxIC0+IHYyCj4gCUZpeGVkIGlkZW50 YXRpb24gaW4gZHJpdmVycy91c2IvdHlwZWMvdWNzaS9LY29uZmlnCj4gQ2hhbmdlcyBmcm9tIHYy IC0+IHYzCj4gCUZpeGVkIG1vc3Qgb2YgY29tbWVudHMgZnJvbSBIZWlra2kKPiAJUmVuYW1lIHVj c2lfaTJjX2NjZy5jIC0+IHVjc2lfY2NnLmMKPiBDaGFuZ2VzIGZyb20gdjMgLT4gdjQKPiAJRml4 ZWQgY29tbWVudHMgZnJvbSBBbmR5Cj4gQ2hhbmdlcyBmcm9tIHY0IC0+IHY1Cj4gCUZpeGVkIGNv bW1lbnRzIGZyb20gQW5keQo+IENoYW5nZXMgZnJvbSB2NSAtPiB2Ngo+IAlGaXhlZCByZXZpZXcg Y29tbWVudHMgZnJvbSBHcmVnIAo+IENoYW5nZXMgZnJvbSB2NiAtPiB2Nwo+IAlOb25lCj4gQ2hh bmdlcyBmcm9tIHY3IC0+IHY4Cj4gCUZpeGVkIHJldmlldyBjb21tZW50cyBmcm9tIFBldGVyIAo+ IAktIFJlbW92ZWQgZW1wdHkgU1RPUCBtZXNzYWdlCj4gCS0gVXNpbmcgc3RhY2sgbWVtb3J5IGZv ciBpMmNfdHJhbnNmZXIoKQo+IENoYW5nZXMgZnJvbSB2OCAtPiB2OQo+IAlOb25lCj4gQ2hhbmdl cyBmcm9tIHY5IC0+IHYxMAo+IAlGaXhlZCByZXZpZXcgY29tbWVudHMgZnJvbSBQZXRlciAKPiAJ LSBVc2UgVUNTSSBtYWNyb3MKPiAJLSBDbGVhbnVwcwo+IENoYW5nZXMgZnJvbSB2MTAgLT4gdjEx Cj4gCUZpeGVkIHJldmlldyBjb21tZW50cyBmcm9tIFBldGVyIAo+IAktIENvbWJpbmVkIHR3byB3 cml0ZXMgaW50byBvbmUKPiAJLSBVc2VkIG9mZnNldG9mKCkgZm9yIHVjc2lfZGF0YSBzdHJ1Y3QK PiBDaGFuZ2VzIGZyb20gdjExIC0+IHYxMgo+IAktIHNvbWUgY2xlYW51cAo+IENoYW5nZXMgZnJv bSB2MTIgLT4gdjEzCj4gCS0gY2hhbmdlZCAidTggYnVmWzFdIiAtPiAidTggZGF0YSIKPiAKPiAg ZHJpdmVycy91c2IvdHlwZWMvdWNzaS9LY29uZmlnICAgIHwgIDEwICsrCj4gIGRyaXZlcnMvdXNi L3R5cGVjL3Vjc2kvTWFrZWZpbGUgICB8ICAgMiArCj4gIGRyaXZlcnMvdXNiL3R5cGVjL3Vjc2kv dWNzaV9jY2cuYyB8IDMwNSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ ICAzIGZpbGVzIGNoYW5nZWQsIDMxNyBpbnNlcnRpb25zKCspCj4gIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL3VzYi90eXBlYy91Y3NpL3Vjc2lfY2NnLmMKPiAKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy91c2IvdHlwZWMvdWNzaS9LY29uZmlnIGIvZHJpdmVycy91c2IvdHlwZWMvdWNzaS9LY29u ZmlnCj4gaW5kZXggZTM2ZDZjNy4uNzgxMTg4OCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL3VzYi90 eXBlYy91Y3NpL0tjb25maWcKPiArKysgYi9kcml2ZXJzL3VzYi90eXBlYy91Y3NpL0tjb25maWcK PiBAQCAtMjMsNiArMjMsMTYgQEAgY29uZmlnIFRZUEVDX1VDU0kKPiAgCj4gIGlmIFRZUEVDX1VD U0kKPiAgCj4gK2NvbmZpZyBVQ1NJX0NDRwo+ICsJdHJpc3RhdGUgIlVDU0kgSW50ZXJmYWNlIERy aXZlciBmb3IgQ3lwcmVzcyBDQ0d4Igo+ICsJZGVwZW5kcyBvbiBJMkMKPiArCWhlbHAKPiArCSAg VGhpcyBkcml2ZXIgZW5hYmxlcyBVQ1NJIHN1cHBvcnQgb24gcGxhdGZvcm1zIHRoYXQgZXhwb3Nl IGEKPiArCSAgQ3lwcmVzcyBDQ0d4IFR5cGUtQyBjb250cm9sbGVyIG92ZXIgSTJDIGludGVyZmFj ZS4KPiArCj4gKwkgIFRvIGNvbXBpbGUgdGhlIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0g aGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlCj4gKwkgIGNhbGxlZCB1Y3NpX2NjZy4KPiArCj4gIGNv bmZpZyBVQ1NJX0FDUEkKPiAgCXRyaXN0YXRlICJVQ1NJIEFDUEkgSW50ZXJmYWNlIERyaXZlciIK PiAgCWRlcGVuZHMgb24gQUNQSQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi90eXBlYy91Y3Np L01ha2VmaWxlIGIvZHJpdmVycy91c2IvdHlwZWMvdWNzaS9NYWtlZmlsZQo+IGluZGV4IDdhZmJl YTUuLjJmNDkwMGIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy91c2IvdHlwZWMvdWNzaS9NYWtlZmls ZQo+ICsrKyBiL2RyaXZlcnMvdXNiL3R5cGVjL3Vjc2kvTWFrZWZpbGUKPiBAQCAtOCwzICs4LDUg QEAgdHlwZWNfdWNzaS15CQkJOj0gdWNzaS5vCj4gIHR5cGVjX3Vjc2ktJChDT05GSUdfVFJBQ0lO RykJKz0gdHJhY2Uubwo+ICAKPiAgb2JqLSQoQ09ORklHX1VDU0lfQUNQSSkJCSs9IHVjc2lfYWNw aS5vCj4gKwo+ICtvYmotJChDT05GSUdfVUNTSV9DQ0cpCQkrPSB1Y3NpX2NjZy5vCj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvdXNiL3R5cGVjL3Vjc2kvdWNzaV9jY2cuYyBiL2RyaXZlcnMvdXNiL3R5 cGVjL3Vjc2kvdWNzaV9jY2cuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAw MC4uMGUwYmFjMQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL3VzYi90eXBlYy91Y3Np L3Vjc2lfY2NnLmMKPiBAQCAtMCwwICsxLDMwNSBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogR1BMLTIuMAo+ICsvKgo+ICsgKiBVQ1NJIGRyaXZlciBmb3IgQ3lwcmVzcyBDQ0d4IFR5 cGUtQyBjb250cm9sbGVyCj4gKyAqCj4gKyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDE4IE5WSURJ QSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiArICogQXV0aG9yOiBBamF5IEd1 cHRhIDxhamF5Z0BudmlkaWEuY29tPgo+ICsgKgo+ICsgKiBTb21lIGNvZGUgYm9ycm93ZWQgZnJv bSBkcml2ZXJzL3VzYi90eXBlYy91Y3NpL3Vjc2lfYWNwaS5jCj4gKyAqLwo+ICsjaW5jbHVkZSA8 bGludXgvYWNwaS5oPgo+ICsjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KPiArI2luY2x1ZGUgPGxp bnV4L2kyYy5oPgo+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gKyNpbmNsdWRlIDxsaW51 eC9wY2kuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgo+ICsKPiArI2lu Y2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KPiArI2luY2x1ZGUgInVjc2kuaCIKPiArCj4gK3N0cnVj dCB1Y3NpX2NjZyB7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4gKwlzdHJ1Y3QgdWNzaSAqdWNz aTsKPiArCXN0cnVjdCB1Y3NpX3BwbSBwcG07Cj4gKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50 Owo+ICsJaW50IGlycTsKClRoYXQgbWVtYmVyIGlzIGFjdHVhbGx5IHVzZWxlc3MuCgo+ICt9Owo+ ICsKPiArI2RlZmluZSBDQ0dYX1JBQl9JTlRSX1JFRwkJCTB4MDYKPiArI2RlZmluZSBDQ0dYX1JB Ql9VQ1NJX0NPTlRST0wJCQkweDM5Cj4gKyNkZWZpbmUgQ0NHWF9SQUJfVUNTSV9DT05UUk9MX1NU QVJUCQlCSVQoMCkKPiArI2RlZmluZSBDQ0dYX1JBQl9VQ1NJX0NPTlRST0xfU1RPUAkJQklUKDEp Cj4gKyNkZWZpbmUgQ0NHWF9SQUJfVUNTSV9EQVRBX0JMT0NLKG9mZnNldCkJKDB4ZjAwMCB8ICgo b2Zmc2V0KSAmIDB4ZmYpKQo+ICsKPiArc3RhdGljIGludCBjY2dfcmVhZChzdHJ1Y3QgdWNzaV9j Y2cgKnVjLCB1MTYgcmFiLCB1OCAqZGF0YSwgdTMyIGxlbikKPiArewo+ICsJc3RydWN0IGkyY19j bGllbnQgKmNsaWVudCA9IHVjLT5jbGllbnQ7Cj4gKwl1bnNpZ25lZCBjaGFyIGJ1ZlsyXTsKPiAr CXN0cnVjdCBpMmNfbXNnIG1zZ3NbXSA9IHsKPiArCQl7Cj4gKwkJCS5hZGRyCT0gY2xpZW50LT5h ZGRyLAo+ICsJCQkuZmxhZ3MgID0gMHgwLAo+ICsJCQkubGVuCT0gc2l6ZW9mKGJ1ZiksCj4gKwkJ CS5idWYJPSBidWYsCj4gKwkJfSwKPiArCQl7Cj4gKwkJCS5hZGRyCT0gY2xpZW50LT5hZGRyLAo+ ICsJCQkuZmxhZ3MgID0gSTJDX01fUkQsCj4gKwkJCS5idWYJPSBkYXRhLAo+ICsJCX0sCj4gKwl9 Owo+ICsJdTMyIHJsZW4sIHJlbV9sZW4gPSBsZW47Cj4gKwlpbnQgc3RhdHVzOwo+ICsKPiArCS8q IGkyYyBhZGFwdGVyIChjY2d4LXVjc2kpIGNhbiByZWFkIDQgYnl0ZSBtYXggKi8KCkJ5ICJpMmMg YWRhcHRlciIgZG8geW91IG1lYW4gdGhpcyBDeXByZXNzIENDR3ggY29udHJvbGxlciwgb3IgdGhl Ck5WSURJQSBJMkMgaG9zdCBhZGFwdGVyPwoKPiArCXdoaWxlIChyZW1fbGVuID4gMCkgewo+ICsJ CW1zZ3NbMV0uYnVmID0gJmRhdGFbbGVuIC0gcmVtX2xlbl07Cj4gKwkJcmxlbiA9IG1pbl90KHUx NiwgcmVtX2xlbiwgNCk7CgpJIGd1ZXNzIHRoaXMgaXMgd2hlcmUgeW91IGNoZWNrIGZvciB0aGF0 IDQgYnl0ZXMuCgpJJ20gZ3Vlc3NpbmcgdGhpcyBsaW1pdGF0aW9uIGlzIGZvciB0aGUgTlZJRElB IEkyQyBob3N0IGFkYXB0ZXIuIElmCnRoYXQgaXMgdGhlIGNhc2UgdGhhbiB0aGlzIGRyaXZlciBy ZWFsbHkgc2hvdWxkIG5vdCBjYXJlIGFib3V0IGl0LiBXZQptb3N0IGxpa2VseSBuZWVkIHRvIHVz ZSB0aGlzIGRyaXZlciBvbiBvdGhlciBwbGF0Zm9ybXMgYXMgd2VsbCB3aGVyZQp0aGUgSTJDIGhv c3QgaXMgc29tZXRoaW5nIGVsc2UuCgo+ICsJCW1zZ3NbMV0ubGVuID0gcmxlbjsKPiArCQlwdXRf dW5hbGlnbmVkX2xlMTYocmFiLCBidWYpOwo+ICsJCXN0YXR1cyA9IGkyY190cmFuc2ZlcihjbGll bnQtPmFkYXB0ZXIsIG1zZ3MsIEFSUkFZX1NJWkUobXNncykpOwo+ICsJCWlmIChzdGF0dXMgPCAw KSB7Cj4gKwkJCWRldl9lcnIodWMtPmRldiwgImkyY190cmFuc2ZlciBmYWlsZWQgJWRcbiIsIHN0 YXR1cyk7Cj4gKwkJCXJldHVybiBzdGF0dXM7Cj4gKwkJfQo+ICsJCXJhYiArPSBybGVuOwo+ICsJ CXJlbV9sZW4gLT0gcmxlbjsKPiArCX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3Rh dGljIGludCBjY2dfd3JpdGUoc3RydWN0IHVjc2lfY2NnICp1YywgdTE2IHJhYiwgdTggKmRhdGEs IHUzMiBsZW4pCj4gK3sKPiArCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB1Yy0+Y2xpZW50 Owo+ICsJdW5zaWduZWQgY2hhciAqYnVmOwo+ICsJc3RydWN0IGkyY19tc2cgbXNnc1tdID0gewo+ ICsJCXsKPiArCQkJLmFkZHIJPSBjbGllbnQtPmFkZHIsCj4gKwkJCS5mbGFncyAgPSAweDAsCj4g KwkJfQo+ICsJfTsKPiArCWludCBzdGF0dXM7Cj4gKwo+ICsJYnVmID0ga3phbGxvYyhsZW4gKyBz aXplb2YocmFiKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIWJ1ZikKPiArCQlyZXR1cm4gLUVOT01F TTsKPiArCj4gKwlwdXRfdW5hbGlnbmVkX2xlMTYocmFiLCBidWYpOwo+ICsJbWVtY3B5KGJ1ZiAr IHNpemVvZihyYWIpLCBkYXRhLCBsZW4pOwo+ICsKPiArCW1zZ3NbMF0ubGVuID0gbGVuICsgc2l6 ZW9mKHJhYik7Cj4gKwltc2dzWzBdLmJ1ZiA9IGJ1ZjsKPiArCj4gKwlzdGF0dXMgPSBpMmNfdHJh bnNmZXIoY2xpZW50LT5hZGFwdGVyLCBtc2dzLCBBUlJBWV9TSVpFKG1zZ3MpKTsKPiArCWlmIChz dGF0dXMgPCAwKSB7Cj4gKwkJZGV2X2Vycih1Yy0+ZGV2LCAiaTJjX3RyYW5zZmVyIGZhaWxlZCAl ZFxuIiwgc3RhdHVzKTsKPiArCQlrZnJlZShidWYpOwo+ICsJCXJldHVybiBzdGF0dXM7Cj4gKwl9 Cj4gKwo+ICsJa2ZyZWUoYnVmKTsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50 IHVjc2lfY2NnX2luaXQoc3RydWN0IHVjc2lfY2NnICp1YykKPiArewo+ICsJdW5zaWduZWQgaW50 IGNvdW50ID0gMTA7Cj4gKwl1OCBkYXRhOwo+ICsJaW50IHN0YXR1czsKPiArCj4gKwlkYXRhID0g Q0NHWF9SQUJfVUNTSV9DT05UUk9MX1NUT1A7Cj4gKwlzdGF0dXMgPSBjY2dfd3JpdGUodWMsIEND R1hfUkFCX1VDU0lfQ09OVFJPTCwgJmRhdGEsIHNpemVvZihkYXRhKSk7Cj4gKwlpZiAoc3RhdHVz IDwgMCkKPiArCQlyZXR1cm4gc3RhdHVzOwo+ICsKPiArCWRhdGEgPSBDQ0dYX1JBQl9VQ1NJX0NP TlRST0xfU1RBUlQ7Cj4gKwlzdGF0dXMgPSBjY2dfd3JpdGUodWMsIENDR1hfUkFCX1VDU0lfQ09O VFJPTCwgJmRhdGEsIHNpemVvZihkYXRhKSk7Cj4gKwlpZiAoc3RhdHVzIDwgMCkKPiArCQlyZXR1 cm4gc3RhdHVzOwo+ICsKPiArCS8qCj4gKwkgKiBGbHVzaCBDQ0d4IFJFU1BPTlNFIHF1ZXVlIGJ5 IGFja2luZyBpbnRlcnJ1cHRzLiBBYm92ZSB1Y3NpIGNvbnRyb2wKPiArCSAqIHJlZ2lzdGVyIHdy aXRlIHdpbGwgcHVzaCByZXNwb25zZSB3aGljaCBtdXN0IGJlIGNsZWFyZWQuCj4gKwkgKi8KPiAr CXN0YXR1cyA9IGNjZ19yZWFkKHVjLCBDQ0dYX1JBQl9JTlRSX1JFRywgJmRhdGEsIHNpemVvZihk YXRhKSk7Cj4gKwlpZiAoc3RhdHVzIDwgMCkKPiArCQlyZXR1cm4gc3RhdHVzOwo+ICsJZG8gewo+ ICsJCXN0YXR1cyA9IGNjZ193cml0ZSh1YywgQ0NHWF9SQUJfSU5UUl9SRUcsICZkYXRhLCBzaXpl b2YoZGF0YSkpOwo+ICsJCWlmIChzdGF0dXMgPCAwKQo+ICsJCQlyZXR1cm4gc3RhdHVzOwo+ICsK PiArCQl1c2xlZXBfcmFuZ2UoMTAwMDAsIDExMDAwKTsKPiArCj4gKwkJc3RhdHVzID0gY2NnX3Jl YWQodWMsIENDR1hfUkFCX0lOVFJfUkVHLCAmZGF0YSwgc2l6ZW9mKGRhdGEpKTsKPiArCQlpZiAo c3RhdHVzIDwgMCkKPiArCQkJcmV0dXJuIHN0YXR1czsKPiArCX0gd2hpbGUgKChkYXRhICE9IDB4 MDApICYmIGNvdW50LS0pOwoKV2hhdCdzIHRoZSBzaWduaWZpY2FuY2Ugb2YgdGhhdCBjb3VudD8g U2hvdWxkbid0IHlvdSByZXR1cm4gLUVUSU1FRE9VVAppZiBjb3VudCA9PSAwPwoKU29tZXRoaW5n IGxpa2U6CgogICAgICAgIC4uLgogICAgICAgIHdoaWxlIChjb3VudC0tKQoJCXN0YXR1cyA9IGNj Z19yZWFkKHVjLCBDQ0dYX1JBQl9JTlRSX1JFRywgJmRhdGEsIHNpemVvZihkYXRhKSk7CgkJaWYg KHN0YXR1cyA8IDApCgkJCXJldHVybiBzdGF0dXM7CiAgICAgICAgICAgICAgICBpZiAoIWRhdGEp CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwoJfQoKICAgICAgICByZXR1cm4gLUVU SU1FRE9VVDsKCk9yIGRvZXMgdGhlIGNvdW50IG9mIDEwIGhhdmUgc29tZSBzcGVjaWZpYyBtZWFu aW5nPwoKPiArfQo+ICsKPiArc3RhdGljIGludCB1Y3NpX2NjZ19zZW5kX2RhdGEoc3RydWN0IHVj c2lfY2NnICp1YykKPiArewo+ICsJdTggKnBwbSA9ICh1OCAqKXVjLT5wcG0uZGF0YTsKPiArCWlu dCBzdGF0dXM7Cj4gKwl1MTYgcmFiOwo+ICsKPiArCXJhYiA9IENDR1hfUkFCX1VDU0lfREFUQV9C TE9DSyhvZmZzZXRvZihzdHJ1Y3QgdWNzaV9kYXRhLCBtZXNzYWdlX291dCkpOwo+ICsJc3RhdHVz ID0gY2NnX3dyaXRlKHVjLCByYWIsIHBwbSArCj4gKwkJCSAgIG9mZnNldG9mKHN0cnVjdCB1Y3Np X2RhdGEsIG1lc3NhZ2Vfb3V0KSwKPiArCQkJICAgc2l6ZW9mKHVjLT5wcG0uZGF0YS0+bWVzc2Fn ZV9vdXQpKTsKPiArCWlmIChzdGF0dXMgPCAwKQo+ICsJCXJldHVybiBzdGF0dXM7Cj4gKwo+ICsJ cmFiID0gQ0NHWF9SQUJfVUNTSV9EQVRBX0JMT0NLKG9mZnNldG9mKHN0cnVjdCB1Y3NpX2RhdGEs IGN0cmwpKTsKPiArCXJldHVybiBjY2dfd3JpdGUodWMsIHJhYiwgcHBtICsgb2Zmc2V0b2Yoc3Ry dWN0IHVjc2lfZGF0YSwgY3RybCksCj4gKwkJCSBzaXplb2YodWMtPnBwbS5kYXRhLT5jdHJsKSk7 Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdWNzaV9jY2dfcmVjdl9kYXRhKHN0cnVjdCB1Y3NpX2Nj ZyAqdWMpCj4gK3sKPiArCXU4ICpwcG0gPSAodTggKil1Yy0+cHBtLmRhdGE7Cj4gKwlpbnQgc3Rh dHVzOwo+ICsJdTE2IHJhYjsKPiArCj4gKwlyYWIgPSBDQ0dYX1JBQl9VQ1NJX0RBVEFfQkxPQ0so b2Zmc2V0b2Yoc3RydWN0IHVjc2lfZGF0YSwgY2NpKSk7Cj4gKwlzdGF0dXMgPSBjY2dfcmVhZCh1 YywgcmFiLCBwcG0gKyBvZmZzZXRvZihzdHJ1Y3QgdWNzaV9kYXRhLCBjY2kpLAo+ICsJCQkgIHNp emVvZih1Yy0+cHBtLmRhdGEtPmNjaSkpOwo+ICsJaWYgKHN0YXR1cyA8IDApCj4gKwkJcmV0dXJu IHN0YXR1czsKPiArCj4gKwlyYWIgPSBDQ0dYX1JBQl9VQ1NJX0RBVEFfQkxPQ0sob2Zmc2V0b2Yo c3RydWN0IHVjc2lfZGF0YSwgbWVzc2FnZV9pbikpOwo+ICsJcmV0dXJuIGNjZ19yZWFkKHVjLCBy YWIsIHBwbSArIG9mZnNldG9mKHN0cnVjdCB1Y3NpX2RhdGEsIG1lc3NhZ2VfaW4pLAo+ICsJCQlz aXplb2YodWMtPnBwbS5kYXRhLT5tZXNzYWdlX2luKSk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg dWNzaV9jY2dfYWNrX2ludGVycnVwdChzdHJ1Y3QgdWNzaV9jY2cgKnVjKQo+ICt7Cj4gKwlpbnQg c3RhdHVzOwo+ICsJdW5zaWduZWQgY2hhciBkYXRhOwo+ICsKPiArCXN0YXR1cyA9IGNjZ19yZWFk KHVjLCBDQ0dYX1JBQl9JTlRSX1JFRywgJmRhdGEsIHNpemVvZihkYXRhKSk7Cj4gKwlpZiAoc3Rh dHVzIDwgMCkKPiArCQlyZXR1cm4gc3RhdHVzOwo+ICsKPiArCXJldHVybiBjY2dfd3JpdGUodWMs IENDR1hfUkFCX0lOVFJfUkVHLCAmZGF0YSwgc2l6ZW9mKGRhdGEpKTsKPiArfQo+ICsKPiArc3Rh dGljIGludCB1Y3NpX2NjZ19zeW5jKHN0cnVjdCB1Y3NpX3BwbSAqcHBtKQo+ICt7Cj4gKwlzdHJ1 Y3QgdWNzaV9jY2cgKnVjID0gY29udGFpbmVyX29mKHBwbSwgc3RydWN0IHVjc2lfY2NnLCBwcG0p Owo+ICsJaW50IHN0YXR1czsKPiArCj4gKwlzdGF0dXMgPSB1Y3NpX2NjZ19yZWN2X2RhdGEodWMp Owo+ICsJaWYgKHN0YXR1cyA8IDApCj4gKwkJcmV0dXJuIHN0YXR1czsKPiArCj4gKwkvKiBhY2sg aW50ZXJydXB0IHRvIGFsbG93IG5leHQgY29tbWFuZCB0byBydW4gKi8KPiArCXJldHVybiB1Y3Np X2NjZ19hY2tfaW50ZXJydXB0KHVjKTsKPiArfQo+ICsKPiArc3RhdGljIGludCB1Y3NpX2NjZ19j bWQoc3RydWN0IHVjc2lfcHBtICpwcG0sIHN0cnVjdCB1Y3NpX2NvbnRyb2wgKmN0cmwpCj4gK3sK PiArCXN0cnVjdCB1Y3NpX2NjZyAqdWMgPSBjb250YWluZXJfb2YocHBtLCBzdHJ1Y3QgdWNzaV9j Y2csIHBwbSk7Cj4gKwo+ICsJcHBtLT5kYXRhLT5jdHJsLnJhd19jbWQgPSBjdHJsLT5yYXdfY21k Owo+ICsJcmV0dXJuIHVjc2lfY2NnX3NlbmRfZGF0YSh1Yyk7Cj4gK30KPiArCj4gK3N0YXRpYyBp cnFyZXR1cm5fdCBjY2dfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSkKPiArewo+ICsJ c3RydWN0IHVjc2lfY2NnICp1YyA9IGRhdGE7Cj4gKwo+ICsJdWNzaV9ub3RpZnkodWMtPnVjc2kp Owo+ICsKPiArCXJldHVybiBJUlFfSEFORExFRDsKPiArfQo+ICsKPiArc3RhdGljIGludCB1Y3Np X2NjZ19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAo+ICsJCQkgIGNvbnN0IHN0cnVj dCBpMmNfZGV2aWNlX2lkICppZCkKPiArewo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJmNsaWVu dC0+ZGV2Owo+ICsJc3RydWN0IHVjc2lfY2NnICp1YzsKPiArCWludCBzdGF0dXM7Cj4gKwl1MTYg cmFiOwo+ICsKPiArCXVjID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCp1YyksIEdGUF9LRVJO RUwpOwo+ICsJaWYgKCF1YykKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwl1Yy0+cHBtLmRh dGEgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2Yoc3RydWN0IHVjc2lfZGF0YSksIEdGUF9LRVJO RUwpOwo+ICsJaWYgKCF1Yy0+cHBtLmRhdGEpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJ dWMtPnBwbS5jbWQgPSB1Y3NpX2NjZ19jbWQ7Cj4gKwl1Yy0+cHBtLnN5bmMgPSB1Y3NpX2NjZ19z eW5jOwo+ICsJdWMtPmRldiA9IGRldjsKPiArCXVjLT5jbGllbnQgPSBjbGllbnQ7Cj4gKwo+ICsJ LyogcmVzZXQgY2NnIGRldmljZSBhbmQgaW5pdGlhbGl6ZSB1Y3NpICovCj4gKwlzdGF0dXMgPSB1 Y3NpX2NjZ19pbml0KHVjKTsKPiArCWlmIChzdGF0dXMgPCAwKSB7Cj4gKwkJZGV2X2Vycih1Yy0+ ZGV2LCAidWNzaV9jY2dfaW5pdCBmYWlsZWQgLSAlZFxuIiwgc3RhdHVzKTsKPiArCQlyZXR1cm4g c3RhdHVzOwo+ICsJfQo+ICsKPiArCXVjLT5pcnEgPSBjbGllbnQtPmlycTsKPiArCj4gKwlzdGF0 dXMgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKGRldiwgdWMtPmlycSwgTlVMTCwgY2NnX2ly cV9oYW5kbGVyLAo+ICsJCQkJCSAgIElSUUZfT05FU0hPVCB8IElSUUZfVFJJR0dFUl9ISUdILAo+ ICsJCQkJCSAgIGRldl9uYW1lKGRldiksIHVjKTsKPiArCWlmIChzdGF0dXMgPCAwKSB7Cj4gKwkJ ZGV2X2Vycih1Yy0+ZGV2LCAicmVxdWVzdF90aHJlYWRlZF9pcnEgZmFpbGVkIC0gJWRcbiIsIHN0 YXR1cyk7Cj4gKwkJcmV0dXJuIHN0YXR1czsKPiArCX0KPiArCj4gKwl1Yy0+dWNzaSA9IHVjc2lf cmVnaXN0ZXJfcHBtKGRldiwgJnVjLT5wcG0pOwo+ICsJaWYgKElTX0VSUih1Yy0+dWNzaSkpIHsK PiArCQlkZXZfZXJyKHVjLT5kZXYsICJ1Y3NpX3JlZ2lzdGVyX3BwbSBmYWlsZWRcbiIpOwo+ICsJ CXJldHVybiBQVFJfRVJSKHVjLT51Y3NpKTsKPiArCX0KPiArCj4gKwlyYWIgPSBDQ0dYX1JBQl9V Q1NJX0RBVEFfQkxPQ0sob2Zmc2V0b2Yoc3RydWN0IHVjc2lfZGF0YSwgdmVyc2lvbikpOwo+ICsJ c3RhdHVzID0gY2NnX3JlYWQodWMsIHJhYiwgKHU4ICopKHVjLT5wcG0uZGF0YSkgKwo+ICsJCQkg IG9mZnNldG9mKHN0cnVjdCB1Y3NpX2RhdGEsIHZlcnNpb24pLAo+ICsJCQkgIHNpemVvZih1Yy0+ cHBtLmRhdGEtPnZlcnNpb24pKTsKPiArCWlmIChzdGF0dXMgPCAwKSB7Cj4gKwkJdWNzaV91bnJl Z2lzdGVyX3BwbSh1Yy0+dWNzaSk7Cj4gKwkJcmV0dXJuIHN0YXR1czsKPiArCX0KPiArCj4gKwlp MmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCB1Yyk7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiAr c3RhdGljIGludCB1Y3NpX2NjZ19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKPiAr ewo+ICsJc3RydWN0IHVjc2lfY2NnICp1YyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwo+ ICsKPiArCXVjc2lfdW5yZWdpc3Rlcl9wcG0odWMtPnVjc2kpOwo+ICsKPiArCXJldHVybiAwOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgdWNzaV9jY2dfZGV2 aWNlX2lkW10gPSB7Cj4gKwl7ImNjZ3gtdWNzaSIsIDB9LAo+ICsJe30KPiArfTsKPiArTU9EVUxF X0RFVklDRV9UQUJMRShpMmMsIHVjc2lfY2NnX2RldmljZV9pZCk7Cj4gKwo+ICtzdGF0aWMgc3Ry dWN0IGkyY19kcml2ZXIgdWNzaV9jY2dfZHJpdmVyID0gewo+ICsJLmRyaXZlciA9IHsKPiArCQku bmFtZSA9ICJ1Y3NpX2NjZyIsCj4gKwl9LAo+ICsJLnByb2JlID0gdWNzaV9jY2dfcHJvYmUsCj4g KwkucmVtb3ZlID0gdWNzaV9jY2dfcmVtb3ZlLAo+ICsJLmlkX3RhYmxlID0gdWNzaV9jY2dfZGV2 aWNlX2lkLAo+ICt9Owo+ICsKPiArbW9kdWxlX2kyY19kcml2ZXIodWNzaV9jY2dfZHJpdmVyKTsK PiArCj4gK01PRFVMRV9BVVRIT1IoIkFqYXkgR3VwdGEgPGFqYXlnQG52aWRpYS5jb20+Iik7Cj4g K01PRFVMRV9ERVNDUklQVElPTigiVUNTSSBkcml2ZXIgZm9yIEN5cHJlc3MgQ0NHeCBUeXBlLUMg Y29udHJvbGxlciIpOwo+ICtNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CgpJJ20gc3RpbGwgd29y cmllZCBhYm91dCBob3cgdGhpcyBkcml2ZXIgd29ya3Mgb24gb3RoZXIgcGxhdGZvcm1zLiBJdApq dXN0IGxvb2tzIGxpa2UgeW91IGhhdmUgd3JpdHRlbiBjY2dfcmVhZC93cml0ZSgpIGZ1bmN0aW9u cyBmb3Igb25seQp5b3VyIEkyQyBob3N0LgoKSSB3b3VsZCBmZWVsIG11Y2ggbW9yZSBjb21mb3J0 YWJsZSB3aXRoIHRoaXMgaWYgeW91IGZvciBleGFtcGxlIHVzZWQKdGhvc2UgaTJjX3NtYnVzX3Jl YWQvd3JpdGUqKCkgaGVscGVycyBpbnN0ZWFkIG9mIHJhdyBpMmNfdHJhbnNmZXIoKS4KSSB3b3Vs ZCBleHBlY3QgdGhlbSB0byBmb3JjZSB5b3UgdG8gd3JpdGUgeW91ciBpMmMgaG9zdCBkcml2ZXIs IGFzCndlbGwgYXMgdGhpcyBkcml2ZXIsIGluIGEgbW9yZSBnZW5lcmljIGZhc2hpb24uCgoKVGhh bmtzLAo=