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: [v14,2/2] usb: typec: ucsi: add support for Cypress CCGx From: Ajay Gupta Message-Id: <20181025223353.19339-3-ajayg@nvidia.com> Date: Thu, 25 Oct 2018 15:33:53 -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: RnJvbTogQWpheSBHdXB0YSA8YWpheWdAbnZpZGlhLmNvbT4KCkxhdGVzdCBOVklESUEgR1BVIGNh cmRzIGhhdmUgYSBDeXByZXNzIENDR3ggVHlwZS1DIGNvbnRyb2xsZXIKb3ZlciBJMkMgaW50ZXJm YWNlLgoKVGhpcyBVQ1NJIEkyQyBkcml2ZXIgdXNlcyBJMkMgYnVzIGRyaXZlciBpbnRlcmZhY2Ug Zm9yIGNvbW11bmljYXRpbmcKd2l0aCBUeXBlLUMgY29udHJvbGxlci4KClNpZ25lZC1vZmYtYnk6 IEFqYXkgR3VwdGEgPGFqYXlnQG52aWRpYS5jb20+Ci0tLQpDaGFuZ2VzIGZyb20gdjEgLT4gdjIK CUZpeGVkIGlkZW50YXRpb24gaW4gZHJpdmVycy91c2IvdHlwZWMvdWNzaS9LY29uZmlnCkNoYW5n ZXMgZnJvbSB2MiAtPiB2MwoJRml4ZWQgbW9zdCBvZiBjb21tZW50cyBmcm9tIEhlaWtraQoJUmVu YW1lIHVjc2lfaTJjX2NjZy5jIC0+IHVjc2lfY2NnLmMKQ2hhbmdlcyBmcm9tIHYzIC0+IHY0CglG aXhlZCBjb21tZW50cyBmcm9tIEFuZHkKQ2hhbmdlcyBmcm9tIHY0IC0+IHY1CglGaXhlZCBjb21t ZW50cyBmcm9tIEFuZHkKQ2hhbmdlcyBmcm9tIHY1IC0+IHY2CglGaXhlZCByZXZpZXcgY29tbWVu dHMgZnJvbSBHcmVnIApDaGFuZ2VzIGZyb20gdjYgLT4gdjcKCU5vbmUKQ2hhbmdlcyBmcm9tIHY3 IC0+IHY4CglGaXhlZCByZXZpZXcgY29tbWVudHMgZnJvbSBQZXRlciAKCS0gUmVtb3ZlZCBlbXB0 eSBTVE9QIG1lc3NhZ2UKCS0gVXNpbmcgc3RhY2sgbWVtb3J5IGZvciBpMmNfdHJhbnNmZXIoKQpD aGFuZ2VzIGZyb20gdjggLT4gdjkKCU5vbmUKQ2hhbmdlcyBmcm9tIHY5IC0+IHYxMAoJRml4ZWQg cmV2aWV3IGNvbW1lbnRzIGZyb20gUGV0ZXIgCgktIFVzZSBVQ1NJIG1hY3JvcwoJLSBDbGVhbnVw cwpDaGFuZ2VzIGZyb20gdjEwIC0+IHYxMQoJRml4ZWQgcmV2aWV3IGNvbW1lbnRzIGZyb20gUGV0 ZXIgCgktIENvbWJpbmVkIHR3byB3cml0ZXMgaW50byBvbmUKCS0gVXNlZCBvZmZzZXRvZigpIGZv ciB1Y3NpX2RhdGEgc3RydWN0CkNoYW5nZXMgZnJvbSB2MTEgLT4gdjEyCgktIHNvbWUgY2xlYW51 cApDaGFuZ2VzIGZyb20gdjEyIC0+IHYxMwoJLSBjaGFuZ2VkICJ1OCBidWZbMV0iIC0+ICJ1OCBk YXRhIgpDaGFuZ2VzIGZyb20gdjEzIC0+IHYxNAoJLSBGaXhlZCBjb21tZW5kIGZyb20gSGVpa2tp IGFuZCBBbmR5CgktIEFkZGVkIGkyYyBhZGFwdGVycyBxdWlya3MgY2hlY2sgaW4gY2NnX3JlYWQK CS0gUmVtb3ZlZCAiaXJxIiBmaWVsZCBmcm9tIHN0cnVjdCB1Y3NpX2NjZwoJLSBSZW9yZ2FuaXpl IGRvIHt9IHdoaWxlICgpOyBsb29wCgogZHJpdmVycy91c2IvdHlwZWMvdWNzaS9LY29uZmlnICAg IHwgIDEwICsKIGRyaXZlcnMvdXNiL3R5cGVjL3Vjc2kvTWFrZWZpbGUgICB8ICAgMiArCiBkcml2 ZXJzL3VzYi90eXBlYy91Y3NpL3Vjc2lfY2NnLmMgfCAzMDcgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDMxOSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy91c2IvdHlwZWMvdWNzaS91Y3NpX2NjZy5jCgpkaWZmIC0tZ2l0IGEv ZHJpdmVycy91c2IvdHlwZWMvdWNzaS9LY29uZmlnIGIvZHJpdmVycy91c2IvdHlwZWMvdWNzaS9L Y29uZmlnCmluZGV4IGUzNmQ2YzczYzRhNC4uNzgxMTg4ODNmOTZjIDEwMDY0NAotLS0gYS9kcml2 ZXJzL3VzYi90eXBlYy91Y3NpL0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvdHlwZWMvdWNzaS9L Y29uZmlnCkBAIC0yMyw2ICsyMywxNiBAQCBjb25maWcgVFlQRUNfVUNTSQogCiBpZiBUWVBFQ19V Q1NJCiAKK2NvbmZpZyBVQ1NJX0NDRworCXRyaXN0YXRlICJVQ1NJIEludGVyZmFjZSBEcml2ZXIg Zm9yIEN5cHJlc3MgQ0NHeCIKKwlkZXBlbmRzIG9uIEkyQworCWhlbHAKKwkgIFRoaXMgZHJpdmVy IGVuYWJsZXMgVUNTSSBzdXBwb3J0IG9uIHBsYXRmb3JtcyB0aGF0IGV4cG9zZSBhCisJICBDeXBy ZXNzIENDR3ggVHlwZS1DIGNvbnRyb2xsZXIgb3ZlciBJMkMgaW50ZXJmYWNlLgorCisJICBUbyBj b21waWxlIHRoZSBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUg d2lsbCBiZQorCSAgY2FsbGVkIHVjc2lfY2NnLgorCiBjb25maWcgVUNTSV9BQ1BJCiAJdHJpc3Rh dGUgIlVDU0kgQUNQSSBJbnRlcmZhY2UgRHJpdmVyIgogCWRlcGVuZHMgb24gQUNQSQpkaWZmIC0t Z2l0IGEvZHJpdmVycy91c2IvdHlwZWMvdWNzaS9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL3R5cGVj L3Vjc2kvTWFrZWZpbGUKaW5kZXggN2FmYmVhNTEyMjA3Li4yZjQ5MDBiMjYyMTAgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvdXNiL3R5cGVjL3Vjc2kvTWFrZWZpbGUKKysrIGIvZHJpdmVycy91c2IvdHlw ZWMvdWNzaS9NYWtlZmlsZQpAQCAtOCwzICs4LDUgQEAgdHlwZWNfdWNzaS15CQkJOj0gdWNzaS5v CiB0eXBlY191Y3NpLSQoQ09ORklHX1RSQUNJTkcpCSs9IHRyYWNlLm8KIAogb2JqLSQoQ09ORklH X1VDU0lfQUNQSSkJCSs9IHVjc2lfYWNwaS5vCisKK29iai0kKENPTkZJR19VQ1NJX0NDRykJCSs9 IHVjc2lfY2NnLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3R5cGVjL3Vjc2kvdWNzaV9jY2cu YyBiL2RyaXZlcnMvdXNiL3R5cGVjL3Vjc2kvdWNzaV9jY2cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMDAuLmYzMmUzZWJjZWUyMgotLS0gL2Rldi9udWxsCisrKyBiL2Ry aXZlcnMvdXNiL3R5cGVjL3Vjc2kvdWNzaV9jY2cuYwpAQCAtMCwwICsxLDMwNyBAQAorLy8gU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBVQ1NJIGRyaXZlciBmb3IgQ3lw cmVzcyBDQ0d4IFR5cGUtQyBjb250cm9sbGVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIw MTggTlZJRElBIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQXV0aG9yOiBB amF5IEd1cHRhIDxhamF5Z0BudmlkaWEuY29tPgorICoKKyAqIFNvbWUgY29kZSBib3Jyb3dlZCBm cm9tIGRyaXZlcnMvdXNiL3R5cGVjL3Vjc2kvdWNzaV9hY3BpLmMKKyAqLworI2luY2x1ZGUgPGxp bnV4L2FjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2ky Yy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgor I2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8YXNtL3VuYWxp Z25lZC5oPgorI2luY2x1ZGUgInVjc2kuaCIKKworc3RydWN0IHVjc2lfY2NnIHsKKwlzdHJ1Y3Qg ZGV2aWNlICpkZXY7CisJc3RydWN0IHVjc2kgKnVjc2k7CisJc3RydWN0IHVjc2lfcHBtIHBwbTsK KwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworfTsKKworI2RlZmluZSBDQ0dYX1JBQl9JTlRS X1JFRwkJCTB4MDYKKyNkZWZpbmUgQ0NHWF9SQUJfVUNTSV9DT05UUk9MCQkJMHgzOQorI2RlZmlu ZSBDQ0dYX1JBQl9VQ1NJX0NPTlRST0xfU1RBUlQJCUJJVCgwKQorI2RlZmluZSBDQ0dYX1JBQl9V Q1NJX0NPTlRST0xfU1RPUAkJQklUKDEpCisjZGVmaW5lIENDR1hfUkFCX1VDU0lfREFUQV9CTE9D SyhvZmZzZXQpCSgweGYwMDAgfCAoKG9mZnNldCkgJiAweGZmKSkKKworc3RhdGljIGludCBjY2df cmVhZChzdHJ1Y3QgdWNzaV9jY2cgKnVjLCB1MTYgcmFiLCB1OCAqZGF0YSwgdTMyIGxlbikKK3sK KwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdWMtPmNsaWVudDsKKwljb25zdCBzdHJ1Y3Qg aTJjX2FkYXB0ZXJfcXVpcmtzICpxdWlya3MgPSBjbGllbnQtPmFkYXB0ZXItPnF1aXJrczsKKwl1 bnNpZ25lZCBjaGFyIGJ1ZlsyXTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2dzW10gPSB7CisJCXsKKwkJ CS5hZGRyCT0gY2xpZW50LT5hZGRyLAorCQkJLmZsYWdzICA9IDB4MCwKKwkJCS5sZW4JPSBzaXpl b2YoYnVmKSwKKwkJCS5idWYJPSBidWYsCisJCX0sCisJCXsKKwkJCS5hZGRyCT0gY2xpZW50LT5h ZGRyLAorCQkJLmZsYWdzICA9IEkyQ19NX1JELAorCQkJLmJ1Zgk9IGRhdGEsCisJCX0sCisJfTsK Kwl1MzIgcmxlbiwgcmVtX2xlbiA9IGxlbiwgbWF4X3JlYWRfbGVuID0gbGVuOworCWludCBzdGF0 dXM7CisKKwkvKiBjaGVjayBhbnkgbWF4X3JlYWRfbGVuIGxpbWl0YXRpb24gb24gaTJjIGFkYXB0 ZXIgKi8KKwlpZiAocXVpcmtzICYmIHF1aXJrcy0+bWF4X3JlYWRfbGVuKQorCQltYXhfcmVhZF9s ZW4gPSBxdWlya3MtPm1heF9yZWFkX2xlbjsKKworCXdoaWxlIChyZW1fbGVuID4gMCkgeworCQlt c2dzWzFdLmJ1ZiA9ICZkYXRhW2xlbiAtIHJlbV9sZW5dOworCQlybGVuID0gbWluX3QodTE2LCBy ZW1fbGVuLCBtYXhfcmVhZF9sZW4pOworCQltc2dzWzFdLmxlbiA9IHJsZW47CisJCXB1dF91bmFs aWduZWRfbGUxNihyYWIsIGJ1Zik7CisJCXN0YXR1cyA9IGkyY190cmFuc2ZlcihjbGllbnQtPmFk YXB0ZXIsIG1zZ3MsIEFSUkFZX1NJWkUobXNncykpOworCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJ ZGV2X2Vycih1Yy0+ZGV2LCAiaTJjX3RyYW5zZmVyIGZhaWxlZCAlZFxuIiwgc3RhdHVzKTsKKwkJ CXJldHVybiBzdGF0dXM7CisJCX0KKwkJcmFiICs9IHJsZW47CisJCXJlbV9sZW4gLT0gcmxlbjsK Kwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjY2dfd3JpdGUoc3RydWN0IHVjc2lf Y2NnICp1YywgdTE2IHJhYiwgdTggKmRhdGEsIHUzMiBsZW4pCit7CisJc3RydWN0IGkyY19jbGll bnQgKmNsaWVudCA9IHVjLT5jbGllbnQ7CisJdW5zaWduZWQgY2hhciAqYnVmOworCXN0cnVjdCBp MmNfbXNnIG1zZ3NbXSA9IHsKKwkJeworCQkJLmFkZHIJPSBjbGllbnQtPmFkZHIsCisJCQkuZmxh Z3MgID0gMHgwLAorCQl9CisJfTsKKwlpbnQgc3RhdHVzOworCisJYnVmID0ga3phbGxvYyhsZW4g KyBzaXplb2YocmFiKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVN OworCisJcHV0X3VuYWxpZ25lZF9sZTE2KHJhYiwgYnVmKTsKKwltZW1jcHkoYnVmICsgc2l6ZW9m KHJhYiksIGRhdGEsIGxlbik7CisKKwltc2dzWzBdLmxlbiA9IGxlbiArIHNpemVvZihyYWIpOwor CW1zZ3NbMF0uYnVmID0gYnVmOworCisJc3RhdHVzID0gaTJjX3RyYW5zZmVyKGNsaWVudC0+YWRh cHRlciwgbXNncywgQVJSQVlfU0laRShtc2dzKSk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJZGV2 X2Vycih1Yy0+ZGV2LCAiaTJjX3RyYW5zZmVyIGZhaWxlZCAlZFxuIiwgc3RhdHVzKTsKKwkJa2Zy ZWUoYnVmKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwlrZnJlZShidWYpOworCXJldHVybiAw OworfQorCitzdGF0aWMgaW50IHVjc2lfY2NnX2luaXQoc3RydWN0IHVjc2lfY2NnICp1YykKK3sK Kwl1bnNpZ25lZCBpbnQgY291bnQgPSAxMDsKKwl1OCBkYXRhOworCWludCBzdGF0dXM7CisKKwlk YXRhID0gQ0NHWF9SQUJfVUNTSV9DT05UUk9MX1NUT1A7CisJc3RhdHVzID0gY2NnX3dyaXRlKHVj LCBDQ0dYX1JBQl9VQ1NJX0NPTlRST0wsICZkYXRhLCBzaXplb2YoZGF0YSkpOworCWlmIChzdGF0 dXMgPCAwKQorCQlyZXR1cm4gc3RhdHVzOworCisJZGF0YSA9IENDR1hfUkFCX1VDU0lfQ09OVFJP TF9TVEFSVDsKKwlzdGF0dXMgPSBjY2dfd3JpdGUodWMsIENDR1hfUkFCX1VDU0lfQ09OVFJPTCwg JmRhdGEsIHNpemVvZihkYXRhKSk7CisJaWYgKHN0YXR1cyA8IDApCisJCXJldHVybiBzdGF0dXM7 CisKKwkvKgorCSAqIEZsdXNoIENDR3ggUkVTUE9OU0UgcXVldWUgYnkgYWNraW5nIGludGVycnVw dHMuIEFib3ZlIHVjc2kgY29udHJvbAorCSAqIHJlZ2lzdGVyIHdyaXRlIHdpbGwgcHVzaCByZXNw b25zZSB3aGljaCBtdXN0IGJlIGNsZWFyZWQuCisJICovCisJZG8geworCQlzdGF0dXMgPSBjY2df cmVhZCh1YywgQ0NHWF9SQUJfSU5UUl9SRUcsICZkYXRhLCBzaXplb2YoZGF0YSkpOworCQlpZiAo c3RhdHVzIDwgMCkKKwkJCXJldHVybiBzdGF0dXM7CisKKwkJaWYgKCFkYXRhKQorCQkJcmV0dXJu IDA7CisKKwkJc3RhdHVzID0gY2NnX3dyaXRlKHVjLCBDQ0dYX1JBQl9JTlRSX1JFRywgJmRhdGEs IHNpemVvZihkYXRhKSk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJcmV0dXJuIHN0YXR1czsKKwor CQl1c2xlZXBfcmFuZ2UoMTAwMDAsIDExMDAwKTsKKwl9IHdoaWxlIChkYXRhICYmIC0tY291bnQp OworCisJcmV0dXJuIC1FVElNRURPVVQ7Cit9CisKK3N0YXRpYyBpbnQgdWNzaV9jY2dfc2VuZF9k YXRhKHN0cnVjdCB1Y3NpX2NjZyAqdWMpCit7CisJdTggKnBwbSA9ICh1OCAqKXVjLT5wcG0uZGF0 YTsKKwlpbnQgc3RhdHVzOworCXUxNiByYWI7CisKKwlyYWIgPSBDQ0dYX1JBQl9VQ1NJX0RBVEFf QkxPQ0sob2Zmc2V0b2Yoc3RydWN0IHVjc2lfZGF0YSwgbWVzc2FnZV9vdXQpKTsKKwlzdGF0dXMg PSBjY2dfd3JpdGUodWMsIHJhYiwgcHBtICsKKwkJCSAgIG9mZnNldG9mKHN0cnVjdCB1Y3NpX2Rh dGEsIG1lc3NhZ2Vfb3V0KSwKKwkJCSAgIHNpemVvZih1Yy0+cHBtLmRhdGEtPm1lc3NhZ2Vfb3V0 KSk7CisJaWYgKHN0YXR1cyA8IDApCisJCXJldHVybiBzdGF0dXM7CisKKwlyYWIgPSBDQ0dYX1JB Ql9VQ1NJX0RBVEFfQkxPQ0sob2Zmc2V0b2Yoc3RydWN0IHVjc2lfZGF0YSwgY3RybCkpOworCXJl dHVybiBjY2dfd3JpdGUodWMsIHJhYiwgcHBtICsgb2Zmc2V0b2Yoc3RydWN0IHVjc2lfZGF0YSwg Y3RybCksCisJCQkgc2l6ZW9mKHVjLT5wcG0uZGF0YS0+Y3RybCkpOworfQorCitzdGF0aWMgaW50 IHVjc2lfY2NnX3JlY3ZfZGF0YShzdHJ1Y3QgdWNzaV9jY2cgKnVjKQoreworCXU4ICpwcG0gPSAo dTggKil1Yy0+cHBtLmRhdGE7CisJaW50IHN0YXR1czsKKwl1MTYgcmFiOworCisJcmFiID0gQ0NH WF9SQUJfVUNTSV9EQVRBX0JMT0NLKG9mZnNldG9mKHN0cnVjdCB1Y3NpX2RhdGEsIGNjaSkpOwor CXN0YXR1cyA9IGNjZ19yZWFkKHVjLCByYWIsIHBwbSArIG9mZnNldG9mKHN0cnVjdCB1Y3NpX2Rh dGEsIGNjaSksCisJCQkgIHNpemVvZih1Yy0+cHBtLmRhdGEtPmNjaSkpOworCWlmIChzdGF0dXMg PCAwKQorCQlyZXR1cm4gc3RhdHVzOworCisJcmFiID0gQ0NHWF9SQUJfVUNTSV9EQVRBX0JMT0NL KG9mZnNldG9mKHN0cnVjdCB1Y3NpX2RhdGEsIG1lc3NhZ2VfaW4pKTsKKwlyZXR1cm4gY2NnX3Jl YWQodWMsIHJhYiwgcHBtICsgb2Zmc2V0b2Yoc3RydWN0IHVjc2lfZGF0YSwgbWVzc2FnZV9pbiks CisJCQlzaXplb2YodWMtPnBwbS5kYXRhLT5tZXNzYWdlX2luKSk7Cit9CisKK3N0YXRpYyBpbnQg dWNzaV9jY2dfYWNrX2ludGVycnVwdChzdHJ1Y3QgdWNzaV9jY2cgKnVjKQoreworCWludCBzdGF0 dXM7CisJdW5zaWduZWQgY2hhciBkYXRhOworCisJc3RhdHVzID0gY2NnX3JlYWQodWMsIENDR1hf UkFCX0lOVFJfUkVHLCAmZGF0YSwgc2l6ZW9mKGRhdGEpKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJ cmV0dXJuIHN0YXR1czsKKworCXJldHVybiBjY2dfd3JpdGUodWMsIENDR1hfUkFCX0lOVFJfUkVH LCAmZGF0YSwgc2l6ZW9mKGRhdGEpKTsKK30KKworc3RhdGljIGludCB1Y3NpX2NjZ19zeW5jKHN0 cnVjdCB1Y3NpX3BwbSAqcHBtKQoreworCXN0cnVjdCB1Y3NpX2NjZyAqdWMgPSBjb250YWluZXJf b2YocHBtLCBzdHJ1Y3QgdWNzaV9jY2csIHBwbSk7CisJaW50IHN0YXR1czsKKworCXN0YXR1cyA9 IHVjc2lfY2NnX3JlY3ZfZGF0YSh1Yyk7CisJaWYgKHN0YXR1cyA8IDApCisJCXJldHVybiBzdGF0 dXM7CisKKwkvKiBhY2sgaW50ZXJydXB0IHRvIGFsbG93IG5leHQgY29tbWFuZCB0byBydW4gKi8K KwlyZXR1cm4gdWNzaV9jY2dfYWNrX2ludGVycnVwdCh1Yyk7Cit9CisKK3N0YXRpYyBpbnQgdWNz aV9jY2dfY21kKHN0cnVjdCB1Y3NpX3BwbSAqcHBtLCBzdHJ1Y3QgdWNzaV9jb250cm9sICpjdHJs KQoreworCXN0cnVjdCB1Y3NpX2NjZyAqdWMgPSBjb250YWluZXJfb2YocHBtLCBzdHJ1Y3QgdWNz aV9jY2csIHBwbSk7CisKKwlwcG0tPmRhdGEtPmN0cmwucmF3X2NtZCA9IGN0cmwtPnJhd19jbWQ7 CisJcmV0dXJuIHVjc2lfY2NnX3NlbmRfZGF0YSh1Yyk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5f dCBjY2dfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgdWNzaV9j Y2cgKnVjID0gZGF0YTsKKworCXVjc2lfbm90aWZ5KHVjLT51Y3NpKTsKKworCXJldHVybiBJUlFf SEFORExFRDsKK30KKworc3RhdGljIGludCB1Y3NpX2NjZ19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVu dCAqY2xpZW50LAorCQkJICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3Ry dWN0IGRldmljZSAqZGV2ID0gJmNsaWVudC0+ZGV2OworCXN0cnVjdCB1Y3NpX2NjZyAqdWM7CisJ aW50IHN0YXR1czsKKwl1MTYgcmFiOworCisJdWMgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2Yo KnVjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF1YykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl1Yy0+ cHBtLmRhdGEgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2Yoc3RydWN0IHVjc2lfZGF0YSksIEdG UF9LRVJORUwpOworCWlmICghdWMtPnBwbS5kYXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXVj LT5wcG0uY21kID0gdWNzaV9jY2dfY21kOworCXVjLT5wcG0uc3luYyA9IHVjc2lfY2NnX3N5bmM7 CisJdWMtPmRldiA9IGRldjsKKwl1Yy0+Y2xpZW50ID0gY2xpZW50OworCisJLyogcmVzZXQgY2Nn IGRldmljZSBhbmQgaW5pdGlhbGl6ZSB1Y3NpICovCisJc3RhdHVzID0gdWNzaV9jY2dfaW5pdCh1 Yyk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJZGV2X2Vycih1Yy0+ZGV2LCAidWNzaV9jY2dfaW5p dCBmYWlsZWQgLSAlZFxuIiwgc3RhdHVzKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwlzdGF0 dXMgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKGRldiwgY2xpZW50LT5pcnEsIE5VTEwsCisJ CQkJCSAgIGNjZ19pcnFfaGFuZGxlciwKKwkJCQkJICAgSVJRRl9PTkVTSE9UIHwgSVJRRl9UUklH R0VSX0hJR0gsCisJCQkJCSAgIGRldl9uYW1lKGRldiksIHVjKTsKKwlpZiAoc3RhdHVzIDwgMCkg eworCQlkZXZfZXJyKHVjLT5kZXYsICJyZXF1ZXN0X3RocmVhZGVkX2lycSBmYWlsZWQgLSAlZFxu Iiwgc3RhdHVzKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwl1Yy0+dWNzaSA9IHVjc2lfcmVn aXN0ZXJfcHBtKGRldiwgJnVjLT5wcG0pOworCWlmIChJU19FUlIodWMtPnVjc2kpKSB7CisJCWRl dl9lcnIodWMtPmRldiwgInVjc2lfcmVnaXN0ZXJfcHBtIGZhaWxlZFxuIik7CisJCXJldHVybiBQ VFJfRVJSKHVjLT51Y3NpKTsKKwl9CisKKwlyYWIgPSBDQ0dYX1JBQl9VQ1NJX0RBVEFfQkxPQ0so b2Zmc2V0b2Yoc3RydWN0IHVjc2lfZGF0YSwgdmVyc2lvbikpOworCXN0YXR1cyA9IGNjZ19yZWFk KHVjLCByYWIsICh1OCAqKSh1Yy0+cHBtLmRhdGEpICsKKwkJCSAgb2Zmc2V0b2Yoc3RydWN0IHVj c2lfZGF0YSwgdmVyc2lvbiksCisJCQkgIHNpemVvZih1Yy0+cHBtLmRhdGEtPnZlcnNpb24pKTsK KwlpZiAoc3RhdHVzIDwgMCkgeworCQl1Y3NpX3VucmVnaXN0ZXJfcHBtKHVjLT51Y3NpKTsKKwkJ cmV0dXJuIHN0YXR1czsKKwl9CisKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCB1Yyk7CisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdWNzaV9jY2dfcmVtb3ZlKHN0cnVjdCBpMmNfY2xp ZW50ICpjbGllbnQpCit7CisJc3RydWN0IHVjc2lfY2NnICp1YyA9IGkyY19nZXRfY2xpZW50ZGF0 YShjbGllbnQpOworCisJdWNzaV91bnJlZ2lzdGVyX3BwbSh1Yy0+dWNzaSk7CisKKwlyZXR1cm4g MDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHVjc2lfY2NnX2Rldmlj ZV9pZFtdID0geworCXsiY2NneC11Y3NpIiwgMH0sCisJe30KK307CitNT0RVTEVfREVWSUNFX1RB QkxFKGkyYywgdWNzaV9jY2dfZGV2aWNlX2lkKTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVy IHVjc2lfY2NnX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJ1Y3NpX2NjZyIs CisJfSwKKwkucHJvYmUgPSB1Y3NpX2NjZ19wcm9iZSwKKwkucmVtb3ZlID0gdWNzaV9jY2dfcmVt b3ZlLAorCS5pZF90YWJsZSA9IHVjc2lfY2NnX2RldmljZV9pZCwKK307CisKK21vZHVsZV9pMmNf ZHJpdmVyKHVjc2lfY2NnX2RyaXZlcik7CisKK01PRFVMRV9BVVRIT1IoIkFqYXkgR3VwdGEgPGFq YXlnQG52aWRpYS5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlVDU0kgZHJpdmVyIGZvciBD eXByZXNzIENDR3ggVHlwZS1DIGNvbnRyb2xsZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIi KTsK