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: [v15,2/2] usb: typec: ucsi: add support for Cypress CCGx From: Ajay Gupta Message-Id: <20181026163659.21590-3-ajayg@nvidia.com> Date: Fri, 26 Oct 2018 09:36:59 -0700 To: wsa@the-dreams.de, heikki.krogerus@linux.intel.com, peda@axentia.se, andriy.shevchenko@linux.intel.com Cc: linux-usb@vger.kernel.org, linux-i2c@vger.kernel.org, Ajay Gupta List-ID: TGF0ZXN0IE5WSURJQSBHUFUgY2FyZHMgaGF2ZSBhIEN5cHJlc3MgQ0NHeCBUeXBlLUMgY29udHJv bGxlcgpvdmVyIEkyQyBpbnRlcmZhY2UuCgpUaGlzIFVDU0kgSTJDIGRyaXZlciB1c2VzIEkyQyBi dXMgZHJpdmVyIGludGVyZmFjZSBmb3IgY29tbXVuaWNhdGluZwp3aXRoIFR5cGUtQyBjb250cm9s bGVyLgoKU2lnbmVkLW9mZi1ieTogQWpheSBHdXB0YSA8YWpheWdAbnZpZGlhLmNvbT4KLS0tCkNo YW5nZXMgZnJvbSB2MSAtPiB2MgoJRml4ZWQgaWRlbnRhdGlvbiBpbiBkcml2ZXJzL3VzYi90eXBl Yy91Y3NpL0tjb25maWcKQ2hhbmdlcyBmcm9tIHYyIC0+IHYzCglGaXhlZCBtb3N0IG9mIGNvbW1l bnRzIGZyb20gSGVpa2tpCglSZW5hbWUgdWNzaV9pMmNfY2NnLmMgLT4gdWNzaV9jY2cuYwpDaGFu Z2VzIGZyb20gdjMgLT4gdjQKCUZpeGVkIGNvbW1lbnRzIGZyb20gQW5keQpDaGFuZ2VzIGZyb20g djQgLT4gdjUKCUZpeGVkIGNvbW1lbnRzIGZyb20gQW5keQpDaGFuZ2VzIGZyb20gdjUgLT4gdjYK CUZpeGVkIHJldmlldyBjb21tZW50cyBmcm9tIEdyZWcgCkNoYW5nZXMgZnJvbSB2NiAtPiB2NwoJ Tm9uZQpDaGFuZ2VzIGZyb20gdjcgLT4gdjgKCUZpeGVkIHJldmlldyBjb21tZW50cyBmcm9tIFBl dGVyIAoJLSBSZW1vdmVkIGVtcHR5IFNUT1AgbWVzc2FnZQoJLSBVc2luZyBzdGFjayBtZW1vcnkg Zm9yIGkyY190cmFuc2ZlcigpCkNoYW5nZXMgZnJvbSB2OCAtPiB2OQoJTm9uZQpDaGFuZ2VzIGZy b20gdjkgLT4gdjEwCglGaXhlZCByZXZpZXcgY29tbWVudHMgZnJvbSBQZXRlciAKCS0gVXNlIFVD U0kgbWFjcm9zCgktIENsZWFudXBzCkNoYW5nZXMgZnJvbSB2MTAgLT4gdjExCglGaXhlZCByZXZp ZXcgY29tbWVudHMgZnJvbSBQZXRlciAKCS0gQ29tYmluZWQgdHdvIHdyaXRlcyBpbnRvIG9uZQoJ LSBVc2VkIG9mZnNldG9mKCkgZm9yIHVjc2lfZGF0YSBzdHJ1Y3QKQ2hhbmdlcyBmcm9tIHYxMSAt PiB2MTIKCS0gc29tZSBjbGVhbnVwCkNoYW5nZXMgZnJvbSB2MTIgLT4gdjEzCgktIGNoYW5nZWQg InU4IGJ1ZlsxXSIgLT4gInU4IGRhdGEiCkNoYW5nZXMgZnJvbSB2MTMgLT4gdjE0CgktIEZpeGVk IGNvbW1lbmQgZnJvbSBIZWlra2kgYW5kIEFuZHkKCS0gQWRkZWQgaTJjIGFkYXB0ZXJzIHF1aXJr cyBjaGVjayBpbiBjY2dfcmVhZAoJLSBSZW1vdmVkICJpcnEiIGZpZWxkIGZyb20gc3RydWN0IHVj c2lfY2NnCgktIFJlb3JnYW5pemUgZG8ge30gd2hpbGUgKCk7IGxvb3AKQ2hhbmdlcyBmcm9tIHYx NCAtPiB2MTUKCS0gRml4IHVubmVjZXNzYXJ5IGNoZWNrIGZvciAiZGF0YSIgaW4gd2hpbGUgKCkg Y29uZGl0aW9uCgogZHJpdmVycy91c2IvdHlwZWMvdWNzaS9LY29uZmlnICAgIHwgIDEwICsKIGRy aXZlcnMvdXNiL3R5cGVjL3Vjc2kvTWFrZWZpbGUgICB8ICAgMiArCiBkcml2ZXJzL3VzYi90eXBl Yy91Y3NpL3Vjc2lfY2NnLmMgfCAzMDcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAz IGZpbGVzIGNoYW5nZWQsIDMxOSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy91c2IvdHlwZWMvdWNzaS91Y3NpX2NjZy5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Iv dHlwZWMvdWNzaS9LY29uZmlnIGIvZHJpdmVycy91c2IvdHlwZWMvdWNzaS9LY29uZmlnCmluZGV4 IGUzNmQ2YzczYzRhNC4uNzgxMTg4ODNmOTZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi90eXBl Yy91Y3NpL0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvdHlwZWMvdWNzaS9LY29uZmlnCkBAIC0y Myw2ICsyMywxNiBAQCBjb25maWcgVFlQRUNfVUNTSQogCiBpZiBUWVBFQ19VQ1NJCiAKK2NvbmZp ZyBVQ1NJX0NDRworCXRyaXN0YXRlICJVQ1NJIEludGVyZmFjZSBEcml2ZXIgZm9yIEN5cHJlc3Mg Q0NHeCIKKwlkZXBlbmRzIG9uIEkyQworCWhlbHAKKwkgIFRoaXMgZHJpdmVyIGVuYWJsZXMgVUNT SSBzdXBwb3J0IG9uIHBsYXRmb3JtcyB0aGF0IGV4cG9zZSBhCisJICBDeXByZXNzIENDR3ggVHlw ZS1DIGNvbnRyb2xsZXIgb3ZlciBJMkMgaW50ZXJmYWNlLgorCisJICBUbyBjb21waWxlIHRoZSBk cml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZQorCSAg Y2FsbGVkIHVjc2lfY2NnLgorCiBjb25maWcgVUNTSV9BQ1BJCiAJdHJpc3RhdGUgIlVDU0kgQUNQ SSBJbnRlcmZhY2UgRHJpdmVyIgogCWRlcGVuZHMgb24gQUNQSQpkaWZmIC0tZ2l0IGEvZHJpdmVy cy91c2IvdHlwZWMvdWNzaS9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL3R5cGVjL3Vjc2kvTWFrZWZp bGUKaW5kZXggN2FmYmVhNTEyMjA3Li4yZjQ5MDBiMjYyMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv dXNiL3R5cGVjL3Vjc2kvTWFrZWZpbGUKKysrIGIvZHJpdmVycy91c2IvdHlwZWMvdWNzaS9NYWtl ZmlsZQpAQCAtOCwzICs4LDUgQEAgdHlwZWNfdWNzaS15CQkJOj0gdWNzaS5vCiB0eXBlY191Y3Np LSQoQ09ORklHX1RSQUNJTkcpCSs9IHRyYWNlLm8KIAogb2JqLSQoQ09ORklHX1VDU0lfQUNQSSkJ CSs9IHVjc2lfYWNwaS5vCisKK29iai0kKENPTkZJR19VQ1NJX0NDRykJCSs9IHVjc2lfY2NnLm8K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3R5cGVjL3Vjc2kvdWNzaV9jY2cuYyBiL2RyaXZlcnMv dXNiL3R5cGVjL3Vjc2kvdWNzaV9jY2cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMDAuLmRlOGE0M2JkZmY2OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3R5 cGVjL3Vjc2kvdWNzaV9jY2cuYwpAQCAtMCwwICsxLDMwNyBAQAorLy8gU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBVQ1NJIGRyaXZlciBmb3IgQ3lwcmVzcyBDQ0d4IFR5 cGUtQyBjb250cm9sbGVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggTlZJRElBIENv cnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQXV0aG9yOiBBamF5IEd1cHRhIDxh amF5Z0BudmlkaWEuY29tPgorICoKKyAqIFNvbWUgY29kZSBib3Jyb3dlZCBmcm9tIGRyaXZlcnMv dXNiL3R5cGVjL3Vjc2kvdWNzaV9hY3BpLmMKKyAqLworI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4K KyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1 ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxp bnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorI2lu Y2x1ZGUgInVjc2kuaCIKKworc3RydWN0IHVjc2lfY2NnIHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7 CisJc3RydWN0IHVjc2kgKnVjc2k7CisJc3RydWN0IHVjc2lfcHBtIHBwbTsKKwlzdHJ1Y3QgaTJj X2NsaWVudCAqY2xpZW50OworfTsKKworI2RlZmluZSBDQ0dYX1JBQl9JTlRSX1JFRwkJCTB4MDYK KyNkZWZpbmUgQ0NHWF9SQUJfVUNTSV9DT05UUk9MCQkJMHgzOQorI2RlZmluZSBDQ0dYX1JBQl9V Q1NJX0NPTlRST0xfU1RBUlQJCUJJVCgwKQorI2RlZmluZSBDQ0dYX1JBQl9VQ1NJX0NPTlRST0xf U1RPUAkJQklUKDEpCisjZGVmaW5lIENDR1hfUkFCX1VDU0lfREFUQV9CTE9DSyhvZmZzZXQpCSgw eGYwMDAgfCAoKG9mZnNldCkgJiAweGZmKSkKKworc3RhdGljIGludCBjY2dfcmVhZChzdHJ1Y3Qg dWNzaV9jY2cgKnVjLCB1MTYgcmFiLCB1OCAqZGF0YSwgdTMyIGxlbikKK3sKKwlzdHJ1Y3QgaTJj X2NsaWVudCAqY2xpZW50ID0gdWMtPmNsaWVudDsKKwljb25zdCBzdHJ1Y3QgaTJjX2FkYXB0ZXJf cXVpcmtzICpxdWlya3MgPSBjbGllbnQtPmFkYXB0ZXItPnF1aXJrczsKKwl1bnNpZ25lZCBjaGFy IGJ1ZlsyXTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2dzW10gPSB7CisJCXsKKwkJCS5hZGRyCT0gY2xp ZW50LT5hZGRyLAorCQkJLmZsYWdzICA9IDB4MCwKKwkJCS5sZW4JPSBzaXplb2YoYnVmKSwKKwkJ CS5idWYJPSBidWYsCisJCX0sCisJCXsKKwkJCS5hZGRyCT0gY2xpZW50LT5hZGRyLAorCQkJLmZs YWdzICA9IEkyQ19NX1JELAorCQkJLmJ1Zgk9IGRhdGEsCisJCX0sCisJfTsKKwl1MzIgcmxlbiwg cmVtX2xlbiA9IGxlbiwgbWF4X3JlYWRfbGVuID0gbGVuOworCWludCBzdGF0dXM7CisKKwkvKiBj aGVjayBhbnkgbWF4X3JlYWRfbGVuIGxpbWl0YXRpb24gb24gaTJjIGFkYXB0ZXIgKi8KKwlpZiAo cXVpcmtzICYmIHF1aXJrcy0+bWF4X3JlYWRfbGVuKQorCQltYXhfcmVhZF9sZW4gPSBxdWlya3Mt Pm1heF9yZWFkX2xlbjsKKworCXdoaWxlIChyZW1fbGVuID4gMCkgeworCQltc2dzWzFdLmJ1ZiA9 ICZkYXRhW2xlbiAtIHJlbV9sZW5dOworCQlybGVuID0gbWluX3QodTE2LCByZW1fbGVuLCBtYXhf cmVhZF9sZW4pOworCQltc2dzWzFdLmxlbiA9IHJsZW47CisJCXB1dF91bmFsaWduZWRfbGUxNihy YWIsIGJ1Zik7CisJCXN0YXR1cyA9IGkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsIG1zZ3Ms IEFSUkFZX1NJWkUobXNncykpOworCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJZGV2X2Vycih1Yy0+ ZGV2LCAiaTJjX3RyYW5zZmVyIGZhaWxlZCAlZFxuIiwgc3RhdHVzKTsKKwkJCXJldHVybiBzdGF0 dXM7CisJCX0KKwkJcmFiICs9IHJsZW47CisJCXJlbV9sZW4gLT0gcmxlbjsKKwl9CisKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIGludCBjY2dfd3JpdGUoc3RydWN0IHVjc2lfY2NnICp1YywgdTE2 IHJhYiwgdTggKmRhdGEsIHUzMiBsZW4pCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9 IHVjLT5jbGllbnQ7CisJdW5zaWduZWQgY2hhciAqYnVmOworCXN0cnVjdCBpMmNfbXNnIG1zZ3Nb XSA9IHsKKwkJeworCQkJLmFkZHIJPSBjbGllbnQtPmFkZHIsCisJCQkuZmxhZ3MgID0gMHgwLAor CQl9CisJfTsKKwlpbnQgc3RhdHVzOworCisJYnVmID0ga3phbGxvYyhsZW4gKyBzaXplb2YocmFi KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCisJcHV0X3Vu YWxpZ25lZF9sZTE2KHJhYiwgYnVmKTsKKwltZW1jcHkoYnVmICsgc2l6ZW9mKHJhYiksIGRhdGEs IGxlbik7CisKKwltc2dzWzBdLmxlbiA9IGxlbiArIHNpemVvZihyYWIpOworCW1zZ3NbMF0uYnVm ID0gYnVmOworCisJc3RhdHVzID0gaTJjX3RyYW5zZmVyKGNsaWVudC0+YWRhcHRlciwgbXNncywg QVJSQVlfU0laRShtc2dzKSk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJZGV2X2Vycih1Yy0+ZGV2 LCAiaTJjX3RyYW5zZmVyIGZhaWxlZCAlZFxuIiwgc3RhdHVzKTsKKwkJa2ZyZWUoYnVmKTsKKwkJ cmV0dXJuIHN0YXR1czsKKwl9CisKKwlrZnJlZShidWYpOworCXJldHVybiAwOworfQorCitzdGF0 aWMgaW50IHVjc2lfY2NnX2luaXQoc3RydWN0IHVjc2lfY2NnICp1YykKK3sKKwl1bnNpZ25lZCBp bnQgY291bnQgPSAxMDsKKwl1OCBkYXRhOworCWludCBzdGF0dXM7CisKKwlkYXRhID0gQ0NHWF9S QUJfVUNTSV9DT05UUk9MX1NUT1A7CisJc3RhdHVzID0gY2NnX3dyaXRlKHVjLCBDQ0dYX1JBQl9V Q1NJX0NPTlRST0wsICZkYXRhLCBzaXplb2YoZGF0YSkpOworCWlmIChzdGF0dXMgPCAwKQorCQly ZXR1cm4gc3RhdHVzOworCisJZGF0YSA9IENDR1hfUkFCX1VDU0lfQ09OVFJPTF9TVEFSVDsKKwlz dGF0dXMgPSBjY2dfd3JpdGUodWMsIENDR1hfUkFCX1VDU0lfQ09OVFJPTCwgJmRhdGEsIHNpemVv ZihkYXRhKSk7CisJaWYgKHN0YXR1cyA8IDApCisJCXJldHVybiBzdGF0dXM7CisKKwkvKgorCSAq IEZsdXNoIENDR3ggUkVTUE9OU0UgcXVldWUgYnkgYWNraW5nIGludGVycnVwdHMuIEFib3ZlIHVj c2kgY29udHJvbAorCSAqIHJlZ2lzdGVyIHdyaXRlIHdpbGwgcHVzaCByZXNwb25zZSB3aGljaCBt dXN0IGJlIGNsZWFyZWQuCisJICovCisJZG8geworCQlzdGF0dXMgPSBjY2dfcmVhZCh1YywgQ0NH WF9SQUJfSU5UUl9SRUcsICZkYXRhLCBzaXplb2YoZGF0YSkpOworCQlpZiAoc3RhdHVzIDwgMCkK KwkJCXJldHVybiBzdGF0dXM7CisKKwkJaWYgKCFkYXRhKQorCQkJcmV0dXJuIDA7CisKKwkJc3Rh dHVzID0gY2NnX3dyaXRlKHVjLCBDQ0dYX1JBQl9JTlRSX1JFRywgJmRhdGEsIHNpemVvZihkYXRh KSk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJcmV0dXJuIHN0YXR1czsKKworCQl1c2xlZXBfcmFu Z2UoMTAwMDAsIDExMDAwKTsKKwl9IHdoaWxlICgtLWNvdW50KTsKKworCXJldHVybiAtRVRJTUVE T1VUOworfQorCitzdGF0aWMgaW50IHVjc2lfY2NnX3NlbmRfZGF0YShzdHJ1Y3QgdWNzaV9jY2cg KnVjKQoreworCXU4ICpwcG0gPSAodTggKil1Yy0+cHBtLmRhdGE7CisJaW50IHN0YXR1czsKKwl1 MTYgcmFiOworCisJcmFiID0gQ0NHWF9SQUJfVUNTSV9EQVRBX0JMT0NLKG9mZnNldG9mKHN0cnVj dCB1Y3NpX2RhdGEsIG1lc3NhZ2Vfb3V0KSk7CisJc3RhdHVzID0gY2NnX3dyaXRlKHVjLCByYWIs IHBwbSArCisJCQkgICBvZmZzZXRvZihzdHJ1Y3QgdWNzaV9kYXRhLCBtZXNzYWdlX291dCksCisJ CQkgICBzaXplb2YodWMtPnBwbS5kYXRhLT5tZXNzYWdlX291dCkpOworCWlmIChzdGF0dXMgPCAw KQorCQlyZXR1cm4gc3RhdHVzOworCisJcmFiID0gQ0NHWF9SQUJfVUNTSV9EQVRBX0JMT0NLKG9m ZnNldG9mKHN0cnVjdCB1Y3NpX2RhdGEsIGN0cmwpKTsKKwlyZXR1cm4gY2NnX3dyaXRlKHVjLCBy YWIsIHBwbSArIG9mZnNldG9mKHN0cnVjdCB1Y3NpX2RhdGEsIGN0cmwpLAorCQkJIHNpemVvZih1 Yy0+cHBtLmRhdGEtPmN0cmwpKTsKK30KKworc3RhdGljIGludCB1Y3NpX2NjZ19yZWN2X2RhdGEo c3RydWN0IHVjc2lfY2NnICp1YykKK3sKKwl1OCAqcHBtID0gKHU4ICopdWMtPnBwbS5kYXRhOwor CWludCBzdGF0dXM7CisJdTE2IHJhYjsKKworCXJhYiA9IENDR1hfUkFCX1VDU0lfREFUQV9CTE9D SyhvZmZzZXRvZihzdHJ1Y3QgdWNzaV9kYXRhLCBjY2kpKTsKKwlzdGF0dXMgPSBjY2dfcmVhZCh1 YywgcmFiLCBwcG0gKyBvZmZzZXRvZihzdHJ1Y3QgdWNzaV9kYXRhLCBjY2kpLAorCQkJICBzaXpl b2YodWMtPnBwbS5kYXRhLT5jY2kpKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIHN0YXR1 czsKKworCXJhYiA9IENDR1hfUkFCX1VDU0lfREFUQV9CTE9DSyhvZmZzZXRvZihzdHJ1Y3QgdWNz aV9kYXRhLCBtZXNzYWdlX2luKSk7CisJcmV0dXJuIGNjZ19yZWFkKHVjLCByYWIsIHBwbSArIG9m ZnNldG9mKHN0cnVjdCB1Y3NpX2RhdGEsIG1lc3NhZ2VfaW4pLAorCQkJc2l6ZW9mKHVjLT5wcG0u ZGF0YS0+bWVzc2FnZV9pbikpOworfQorCitzdGF0aWMgaW50IHVjc2lfY2NnX2Fja19pbnRlcnJ1 cHQoc3RydWN0IHVjc2lfY2NnICp1YykKK3sKKwlpbnQgc3RhdHVzOworCXVuc2lnbmVkIGNoYXIg ZGF0YTsKKworCXN0YXR1cyA9IGNjZ19yZWFkKHVjLCBDQ0dYX1JBQl9JTlRSX1JFRywgJmRhdGEs IHNpemVvZihkYXRhKSk7CisJaWYgKHN0YXR1cyA8IDApCisJCXJldHVybiBzdGF0dXM7CisKKwly ZXR1cm4gY2NnX3dyaXRlKHVjLCBDQ0dYX1JBQl9JTlRSX1JFRywgJmRhdGEsIHNpemVvZihkYXRh KSk7Cit9CisKK3N0YXRpYyBpbnQgdWNzaV9jY2dfc3luYyhzdHJ1Y3QgdWNzaV9wcG0gKnBwbSkK K3sKKwlzdHJ1Y3QgdWNzaV9jY2cgKnVjID0gY29udGFpbmVyX29mKHBwbSwgc3RydWN0IHVjc2lf Y2NnLCBwcG0pOworCWludCBzdGF0dXM7CisKKwlzdGF0dXMgPSB1Y3NpX2NjZ19yZWN2X2RhdGEo dWMpOworCWlmIChzdGF0dXMgPCAwKQorCQlyZXR1cm4gc3RhdHVzOworCisJLyogYWNrIGludGVy cnVwdCB0byBhbGxvdyBuZXh0IGNvbW1hbmQgdG8gcnVuICovCisJcmV0dXJuIHVjc2lfY2NnX2Fj a19pbnRlcnJ1cHQodWMpOworfQorCitzdGF0aWMgaW50IHVjc2lfY2NnX2NtZChzdHJ1Y3QgdWNz aV9wcG0gKnBwbSwgc3RydWN0IHVjc2lfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3QgdWNzaV9j Y2cgKnVjID0gY29udGFpbmVyX29mKHBwbSwgc3RydWN0IHVjc2lfY2NnLCBwcG0pOworCisJcHBt LT5kYXRhLT5jdHJsLnJhd19jbWQgPSBjdHJsLT5yYXdfY21kOworCXJldHVybiB1Y3NpX2NjZ19z ZW5kX2RhdGEodWMpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgY2NnX2lycV9oYW5kbGVyKGlu dCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHVjc2lfY2NnICp1YyA9IGRhdGE7CisKKwl1 Y3NpX25vdGlmeSh1Yy0+dWNzaSk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRp YyBpbnQgdWNzaV9jY2dfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCSAgY29u c3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZj bGllbnQtPmRldjsKKwlzdHJ1Y3QgdWNzaV9jY2cgKnVjOworCWludCBzdGF0dXM7CisJdTE2IHJh YjsKKworCXVjID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCp1YyksIEdGUF9LRVJORUwpOwor CWlmICghdWMpCisJCXJldHVybiAtRU5PTUVNOworCisJdWMtPnBwbS5kYXRhID0gZGV2bV9remFs bG9jKGRldiwgc2l6ZW9mKHN0cnVjdCB1Y3NpX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXVj LT5wcG0uZGF0YSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl1Yy0+cHBtLmNtZCA9IHVjc2lfY2Nn X2NtZDsKKwl1Yy0+cHBtLnN5bmMgPSB1Y3NpX2NjZ19zeW5jOworCXVjLT5kZXYgPSBkZXY7CisJ dWMtPmNsaWVudCA9IGNsaWVudDsKKworCS8qIHJlc2V0IGNjZyBkZXZpY2UgYW5kIGluaXRpYWxp emUgdWNzaSAqLworCXN0YXR1cyA9IHVjc2lfY2NnX2luaXQodWMpOworCWlmIChzdGF0dXMgPCAw KSB7CisJCWRldl9lcnIodWMtPmRldiwgInVjc2lfY2NnX2luaXQgZmFpbGVkIC0gJWRcbiIsIHN0 YXR1cyk7CisJCXJldHVybiBzdGF0dXM7CisJfQorCisJc3RhdHVzID0gZGV2bV9yZXF1ZXN0X3Ro cmVhZGVkX2lycShkZXYsIGNsaWVudC0+aXJxLCBOVUxMLAorCQkJCQkgICBjY2dfaXJxX2hhbmRs ZXIsCisJCQkJCSAgIElSUUZfT05FU0hPVCB8IElSUUZfVFJJR0dFUl9ISUdILAorCQkJCQkgICBk ZXZfbmFtZShkZXYpLCB1Yyk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJZGV2X2Vycih1Yy0+ZGV2 LCAicmVxdWVzdF90aHJlYWRlZF9pcnEgZmFpbGVkIC0gJWRcbiIsIHN0YXR1cyk7CisJCXJldHVy biBzdGF0dXM7CisJfQorCisJdWMtPnVjc2kgPSB1Y3NpX3JlZ2lzdGVyX3BwbShkZXYsICZ1Yy0+ cHBtKTsKKwlpZiAoSVNfRVJSKHVjLT51Y3NpKSkgeworCQlkZXZfZXJyKHVjLT5kZXYsICJ1Y3Np X3JlZ2lzdGVyX3BwbSBmYWlsZWRcbiIpOworCQlyZXR1cm4gUFRSX0VSUih1Yy0+dWNzaSk7CisJ fQorCisJcmFiID0gQ0NHWF9SQUJfVUNTSV9EQVRBX0JMT0NLKG9mZnNldG9mKHN0cnVjdCB1Y3Np X2RhdGEsIHZlcnNpb24pKTsKKwlzdGF0dXMgPSBjY2dfcmVhZCh1YywgcmFiLCAodTggKikodWMt PnBwbS5kYXRhKSArCisJCQkgIG9mZnNldG9mKHN0cnVjdCB1Y3NpX2RhdGEsIHZlcnNpb24pLAor CQkJICBzaXplb2YodWMtPnBwbS5kYXRhLT52ZXJzaW9uKSk7CisJaWYgKHN0YXR1cyA8IDApIHsK KwkJdWNzaV91bnJlZ2lzdGVyX3BwbSh1Yy0+dWNzaSk7CisJCXJldHVybiBzdGF0dXM7CisJfQor CisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgdWMpOworCXJldHVybiAwOworfQorCitzdGF0 aWMgaW50IHVjc2lfY2NnX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0 cnVjdCB1Y3NpX2NjZyAqdWMgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCXVjc2lf dW5yZWdpc3Rlcl9wcG0odWMtPnVjc2kpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB1Y3NpX2NjZ19kZXZpY2VfaWRbXSA9IHsKKwl7ImNjZ3gt dWNzaSIsIDB9LAorCXt9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHVjc2lfY2NnX2Rl dmljZV9pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB1Y3NpX2NjZ19kcml2ZXIgPSB7 CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAidWNzaV9jY2ciLAorCX0sCisJLnByb2JlID0gdWNz aV9jY2dfcHJvYmUsCisJLnJlbW92ZSA9IHVjc2lfY2NnX3JlbW92ZSwKKwkuaWRfdGFibGUgPSB1 Y3NpX2NjZ19kZXZpY2VfaWQsCit9OworCittb2R1bGVfaTJjX2RyaXZlcih1Y3NpX2NjZ19kcml2 ZXIpOworCitNT0RVTEVfQVVUSE9SKCJBamF5IEd1cHRhIDxhamF5Z0BudmlkaWEuY29tPiIpOwor TU9EVUxFX0RFU0NSSVBUSU9OKCJVQ1NJIGRyaXZlciBmb3IgQ3lwcmVzcyBDQ0d4IFR5cGUtQyBj b250cm9sbGVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7Cg==