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: Ajay Gupta Message-Id: <1538591248-15814-3-git-send-email-ajayg@nvidia.com> Date: Wed, 3 Oct 2018 11:27:28 -0700 To: wsa@the-dreams.de, heikki.krogerus@linux.intel.com, peda@axentia.se Cc: linux-usb@vger.kernel.org, linux-i2c@vger.kernel.org, Ajay Gupta List-ID: TGF0ZXN0IE5WSURJQSBHUFUgY2FyZHMgaGF2ZSBhIEN5cHJlc3MgQ0NHeCBUeXBlLUMgY29udHJv bGxlcgpvdmVyIEkyQyBpbnRlcmZhY2UuCgpUaGlzIFVDU0kgSTJDIGRyaXZlciB1c2VzIEkyQyBi dXMgZHJpdmVyIGludGVyZmFjZSBmb3IgY29tbXVuaWNhdGluZwp3aXRoIFR5cGUtQyBjb250cm9s bGVyLgoKU2lnbmVkLW9mZi1ieTogQWpheSBHdXB0YSA8YWpheWdAbnZpZGlhLmNvbT4KUmV2aWV3 ZWQtYnk6IEFuZHkgU2hldmNoZW5rbyA8YW5keS5zaGV2Y2hlbmtvQGdtYWlsLmNvbT4KQWNrZWQt Ynk6IEhlaWtraSBLcm9nZXJ1cyA8aGVpa2tpLmtyb2dlcnVzQGxpbnV4LmludGVsLmNvbT4KLS0t CkNoYW5nZXMgZnJvbSB2MSAtPiB2MgoJRml4ZWQgaWRlbnRhdGlvbiBpbiBkcml2ZXJzL3VzYi90 eXBlYy91Y3NpL0tjb25maWcKQ2hhbmdlcyBmcm9tIHYyIC0+IHYzCglGaXhlZCBtb3N0IG9mIGNv bW1lbnRzIGZyb20gSGVpa2tpCglSZW5hbWUgdWNzaV9pMmNfY2NnLmMgLT4gdWNzaV9jY2cuYwpD aGFuZ2VzIGZyb20gdjMgLT4gdjQKCUZpeGVkIGNvbW1lbnRzIGZyb20gQW5keQpDaGFuZ2VzIGZy b20gdjQgLT4gdjUKCUZpeGVkIGNvbW1lbnRzIGZyb20gQW5keQpDaGFuZ2VzIGZyb20gdjUgLT4g djYKCUZpeGVkIHJldmlldyBjb21tZW50cyBmcm9tIEdyZWcgCkNoYW5nZXMgZnJvbSB2NiAtPiB2 NwoJTm9uZQpDaGFuZ2VzIGZyb20gdjcgLT4gdjgKCUZpeGVkIHJldmlldyBjb21tZW50cyBmcm9t IFBldGVyIAoJLSBSZW1vdmVkIGVtcHR5IFNUT1AgbWVzc2FnZQoJLSBVc2luZyBzdGFjayBtZW1v cnkgZm9yIGkyY190cmFuc2ZlcigpCkNoYW5nZXMgZnJvbSB2OCAtPiB2OQoJTm9uZQpDaGFuZ2Vz IGZyb20gdjkgLT4gdjEwCglGaXhlZCByZXZpZXcgY29tbWVudHMgZnJvbSBQZXRlciAKCS0gVXNl IFVDU0kgbWFjcm9zCgktIENsZWFudXBzCkNoYW5nZXMgZnJvbSB2MTAgLT4gdjExCglGaXhlZCBy ZXZpZXcgY29tbWVudHMgZnJvbSBQZXRlciAKCS0gQ29tYmluZWQgdHdvIHdyaXRlcyBpbnRvIG9u ZQoJLSBVc2VkIG9mZnNldG9mKCkgZm9yIHVjc2lfZGF0YSBzdHJ1Y3QKQ2hhbmdlcyBmcm9tIHYx MSAtPiB2MTIKCS0gc29tZSBjbGVhbnVwCkNoYW5nZXMgZnJvbSB2MTIgLT4gdjEzCgktIGNoYW5n ZWQgInU4IGJ1ZlsxXSIgLT4gInU4IGRhdGEiCgogZHJpdmVycy91c2IvdHlwZWMvdWNzaS9LY29u ZmlnICAgIHwgIDEwICsrCiBkcml2ZXJzL3VzYi90eXBlYy91Y3NpL01ha2VmaWxlICAgfCAgIDIg KwogZHJpdmVycy91c2IvdHlwZWMvdWNzaS91Y3NpX2NjZy5jIHwgMzA1ICsrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDMxNyBpbnNlcnRpb25z KCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy91c2IvdHlwZWMvdWNzaS91Y3NpX2NjZy5j CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvdHlwZWMvdWNzaS9LY29uZmlnIGIvZHJpdmVycy91 c2IvdHlwZWMvdWNzaS9LY29uZmlnCmluZGV4IGUzNmQ2YzcuLjc4MTE4ODggMTAwNjQ0Ci0tLSBh L2RyaXZlcnMvdXNiL3R5cGVjL3Vjc2kvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi90eXBlYy91 Y3NpL0tjb25maWcKQEAgLTIzLDYgKzIzLDE2IEBAIGNvbmZpZyBUWVBFQ19VQ1NJCiAKIGlmIFRZ UEVDX1VDU0kKIAorY29uZmlnIFVDU0lfQ0NHCisJdHJpc3RhdGUgIlVDU0kgSW50ZXJmYWNlIERy aXZlciBmb3IgQ3lwcmVzcyBDQ0d4IgorCWRlcGVuZHMgb24gSTJDCisJaGVscAorCSAgVGhpcyBk cml2ZXIgZW5hYmxlcyBVQ1NJIHN1cHBvcnQgb24gcGxhdGZvcm1zIHRoYXQgZXhwb3NlIGEKKwkg IEN5cHJlc3MgQ0NHeCBUeXBlLUMgY29udHJvbGxlciBvdmVyIEkyQyBpbnRlcmZhY2UuCisKKwkg IFRvIGNvbXBpbGUgdGhlIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1v ZHVsZSB3aWxsIGJlCisJICBjYWxsZWQgdWNzaV9jY2cuCisKIGNvbmZpZyBVQ1NJX0FDUEkKIAl0 cmlzdGF0ZSAiVUNTSSBBQ1BJIEludGVyZmFjZSBEcml2ZXIiCiAJZGVwZW5kcyBvbiBBQ1BJCmRp ZmYgLS1naXQgYS9kcml2ZXJzL3VzYi90eXBlYy91Y3NpL01ha2VmaWxlIGIvZHJpdmVycy91c2Iv dHlwZWMvdWNzaS9NYWtlZmlsZQppbmRleCA3YWZiZWE1Li4yZjQ5MDBiIDEwMDY0NAotLS0gYS9k cml2ZXJzL3VzYi90eXBlYy91Y3NpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdXNiL3R5cGVjL3Vj c2kvTWFrZWZpbGUKQEAgLTgsMyArOCw1IEBAIHR5cGVjX3Vjc2kteQkJCTo9IHVjc2kubwogdHlw ZWNfdWNzaS0kKENPTkZJR19UUkFDSU5HKQkrPSB0cmFjZS5vCiAKIG9iai0kKENPTkZJR19VQ1NJ X0FDUEkpCQkrPSB1Y3NpX2FjcGkubworCitvYmotJChDT05GSUdfVUNTSV9DQ0cpCQkrPSB1Y3Np X2NjZy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi90eXBlYy91Y3NpL3Vjc2lfY2NnLmMgYi9k cml2ZXJzL3VzYi90eXBlYy91Y3NpL3Vjc2lfY2NnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uMGUwYmFjMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3R5cGVj L3Vjc2kvdWNzaV9jY2cuYwpAQCAtMCwwICsxLDMwNSBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBVQ1NJIGRyaXZlciBmb3IgQ3lwcmVzcyBDQ0d4IFR5cGUt QyBjb250cm9sbGVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMTggTlZJRElBIENvcnBv cmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQXV0aG9yOiBBamF5IEd1cHRhIDxhamF5 Z0BudmlkaWEuY29tPgorICoKKyAqIFNvbWUgY29kZSBib3Jyb3dlZCBmcm9tIGRyaXZlcnMvdXNi L3R5cGVjL3Vjc2kvdWNzaV9hY3BpLmMKKyAqLworI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNp bmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUg PGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4 L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorI2luY2x1 ZGUgInVjc2kuaCIKKworc3RydWN0IHVjc2lfY2NnIHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJ c3RydWN0IHVjc2kgKnVjc2k7CisJc3RydWN0IHVjc2lfcHBtIHBwbTsKKwlzdHJ1Y3QgaTJjX2Ns aWVudCAqY2xpZW50OworCWludCBpcnE7Cit9OworCisjZGVmaW5lIENDR1hfUkFCX0lOVFJfUkVH CQkJMHgwNgorI2RlZmluZSBDQ0dYX1JBQl9VQ1NJX0NPTlRST0wJCQkweDM5CisjZGVmaW5lIEND R1hfUkFCX1VDU0lfQ09OVFJPTF9TVEFSVAkJQklUKDApCisjZGVmaW5lIENDR1hfUkFCX1VDU0lf Q09OVFJPTF9TVE9QCQlCSVQoMSkKKyNkZWZpbmUgQ0NHWF9SQUJfVUNTSV9EQVRBX0JMT0NLKG9m ZnNldCkJKDB4ZjAwMCB8ICgob2Zmc2V0KSAmIDB4ZmYpKQorCitzdGF0aWMgaW50IGNjZ19yZWFk KHN0cnVjdCB1Y3NpX2NjZyAqdWMsIHUxNiByYWIsIHU4ICpkYXRhLCB1MzIgbGVuKQoreworCXN0 cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB1Yy0+Y2xpZW50OworCXVuc2lnbmVkIGNoYXIgYnVm WzJdOworCXN0cnVjdCBpMmNfbXNnIG1zZ3NbXSA9IHsKKwkJeworCQkJLmFkZHIJPSBjbGllbnQt PmFkZHIsCisJCQkuZmxhZ3MgID0gMHgwLAorCQkJLmxlbgk9IHNpemVvZihidWYpLAorCQkJLmJ1 Zgk9IGJ1ZiwKKwkJfSwKKwkJeworCQkJLmFkZHIJPSBjbGllbnQtPmFkZHIsCisJCQkuZmxhZ3Mg ID0gSTJDX01fUkQsCisJCQkuYnVmCT0gZGF0YSwKKwkJfSwKKwl9OworCXUzMiBybGVuLCByZW1f bGVuID0gbGVuOworCWludCBzdGF0dXM7CisKKwkvKiBpMmMgYWRhcHRlciAoY2NneC11Y3NpKSBj YW4gcmVhZCA0IGJ5dGUgbWF4ICovCisJd2hpbGUgKHJlbV9sZW4gPiAwKSB7CisJCW1zZ3NbMV0u YnVmID0gJmRhdGFbbGVuIC0gcmVtX2xlbl07CisJCXJsZW4gPSBtaW5fdCh1MTYsIHJlbV9sZW4s IDQpOworCQltc2dzWzFdLmxlbiA9IHJsZW47CisJCXB1dF91bmFsaWduZWRfbGUxNihyYWIsIGJ1 Zik7CisJCXN0YXR1cyA9IGkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsIG1zZ3MsIEFSUkFZ X1NJWkUobXNncykpOworCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJZGV2X2Vycih1Yy0+ZGV2LCAi aTJjX3RyYW5zZmVyIGZhaWxlZCAlZFxuIiwgc3RhdHVzKTsKKwkJCXJldHVybiBzdGF0dXM7CisJ CX0KKwkJcmFiICs9IHJsZW47CisJCXJlbV9sZW4gLT0gcmxlbjsKKwl9CisKKwlyZXR1cm4gMDsK K30KKworc3RhdGljIGludCBjY2dfd3JpdGUoc3RydWN0IHVjc2lfY2NnICp1YywgdTE2IHJhYiwg dTggKmRhdGEsIHUzMiBsZW4pCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHVjLT5j bGllbnQ7CisJdW5zaWduZWQgY2hhciAqYnVmOworCXN0cnVjdCBpMmNfbXNnIG1zZ3NbXSA9IHsK KwkJeworCQkJLmFkZHIJPSBjbGllbnQtPmFkZHIsCisJCQkuZmxhZ3MgID0gMHgwLAorCQl9CisJ fTsKKwlpbnQgc3RhdHVzOworCisJYnVmID0ga3phbGxvYyhsZW4gKyBzaXplb2YocmFiKSwgR0ZQ X0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCisJcHV0X3VuYWxpZ25l ZF9sZTE2KHJhYiwgYnVmKTsKKwltZW1jcHkoYnVmICsgc2l6ZW9mKHJhYiksIGRhdGEsIGxlbik7 CisKKwltc2dzWzBdLmxlbiA9IGxlbiArIHNpemVvZihyYWIpOworCW1zZ3NbMF0uYnVmID0gYnVm OworCisJc3RhdHVzID0gaTJjX3RyYW5zZmVyKGNsaWVudC0+YWRhcHRlciwgbXNncywgQVJSQVlf U0laRShtc2dzKSk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJZGV2X2Vycih1Yy0+ZGV2LCAiaTJj X3RyYW5zZmVyIGZhaWxlZCAlZFxuIiwgc3RhdHVzKTsKKwkJa2ZyZWUoYnVmKTsKKwkJcmV0dXJu IHN0YXR1czsKKwl9CisKKwlrZnJlZShidWYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50 IHVjc2lfY2NnX2luaXQoc3RydWN0IHVjc2lfY2NnICp1YykKK3sKKwl1bnNpZ25lZCBpbnQgY291 bnQgPSAxMDsKKwl1OCBkYXRhOworCWludCBzdGF0dXM7CisKKwlkYXRhID0gQ0NHWF9SQUJfVUNT SV9DT05UUk9MX1NUT1A7CisJc3RhdHVzID0gY2NnX3dyaXRlKHVjLCBDQ0dYX1JBQl9VQ1NJX0NP TlRST0wsICZkYXRhLCBzaXplb2YoZGF0YSkpOworCWlmIChzdGF0dXMgPCAwKQorCQlyZXR1cm4g c3RhdHVzOworCisJZGF0YSA9IENDR1hfUkFCX1VDU0lfQ09OVFJPTF9TVEFSVDsKKwlzdGF0dXMg PSBjY2dfd3JpdGUodWMsIENDR1hfUkFCX1VDU0lfQ09OVFJPTCwgJmRhdGEsIHNpemVvZihkYXRh KSk7CisJaWYgKHN0YXR1cyA8IDApCisJCXJldHVybiBzdGF0dXM7CisKKwkvKgorCSAqIEZsdXNo IENDR3ggUkVTUE9OU0UgcXVldWUgYnkgYWNraW5nIGludGVycnVwdHMuIEFib3ZlIHVjc2kgY29u dHJvbAorCSAqIHJlZ2lzdGVyIHdyaXRlIHdpbGwgcHVzaCByZXNwb25zZSB3aGljaCBtdXN0IGJl IGNsZWFyZWQuCisJICovCisJc3RhdHVzID0gY2NnX3JlYWQodWMsIENDR1hfUkFCX0lOVFJfUkVH LCAmZGF0YSwgc2l6ZW9mKGRhdGEpKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIHN0YXR1 czsKKwlkbyB7CisJCXN0YXR1cyA9IGNjZ193cml0ZSh1YywgQ0NHWF9SQUJfSU5UUl9SRUcsICZk YXRhLCBzaXplb2YoZGF0YSkpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCXJldHVybiBzdGF0dXM7 CisKKwkJdXNsZWVwX3JhbmdlKDEwMDAwLCAxMTAwMCk7CisKKwkJc3RhdHVzID0gY2NnX3JlYWQo dWMsIENDR1hfUkFCX0lOVFJfUkVHLCAmZGF0YSwgc2l6ZW9mKGRhdGEpKTsKKwkJaWYgKHN0YXR1 cyA8IDApCisJCQlyZXR1cm4gc3RhdHVzOworCX0gd2hpbGUgKChkYXRhICE9IDB4MDApICYmIGNv dW50LS0pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdWNzaV9jY2dfc2VuZF9kYXRh KHN0cnVjdCB1Y3NpX2NjZyAqdWMpCit7CisJdTggKnBwbSA9ICh1OCAqKXVjLT5wcG0uZGF0YTsK KwlpbnQgc3RhdHVzOworCXUxNiByYWI7CisKKwlyYWIgPSBDQ0dYX1JBQl9VQ1NJX0RBVEFfQkxP Q0sob2Zmc2V0b2Yoc3RydWN0IHVjc2lfZGF0YSwgbWVzc2FnZV9vdXQpKTsKKwlzdGF0dXMgPSBj Y2dfd3JpdGUodWMsIHJhYiwgcHBtICsKKwkJCSAgIG9mZnNldG9mKHN0cnVjdCB1Y3NpX2RhdGEs IG1lc3NhZ2Vfb3V0KSwKKwkJCSAgIHNpemVvZih1Yy0+cHBtLmRhdGEtPm1lc3NhZ2Vfb3V0KSk7 CisJaWYgKHN0YXR1cyA8IDApCisJCXJldHVybiBzdGF0dXM7CisKKwlyYWIgPSBDQ0dYX1JBQl9V Q1NJX0RBVEFfQkxPQ0sob2Zmc2V0b2Yoc3RydWN0IHVjc2lfZGF0YSwgY3RybCkpOworCXJldHVy biBjY2dfd3JpdGUodWMsIHJhYiwgcHBtICsgb2Zmc2V0b2Yoc3RydWN0IHVjc2lfZGF0YSwgY3Ry bCksCisJCQkgc2l6ZW9mKHVjLT5wcG0uZGF0YS0+Y3RybCkpOworfQorCitzdGF0aWMgaW50IHVj c2lfY2NnX3JlY3ZfZGF0YShzdHJ1Y3QgdWNzaV9jY2cgKnVjKQoreworCXU4ICpwcG0gPSAodTgg Kil1Yy0+cHBtLmRhdGE7CisJaW50IHN0YXR1czsKKwl1MTYgcmFiOworCisJcmFiID0gQ0NHWF9S QUJfVUNTSV9EQVRBX0JMT0NLKG9mZnNldG9mKHN0cnVjdCB1Y3NpX2RhdGEsIGNjaSkpOworCXN0 YXR1cyA9IGNjZ19yZWFkKHVjLCByYWIsIHBwbSArIG9mZnNldG9mKHN0cnVjdCB1Y3NpX2RhdGEs IGNjaSksCisJCQkgIHNpemVvZih1Yy0+cHBtLmRhdGEtPmNjaSkpOworCWlmIChzdGF0dXMgPCAw KQorCQlyZXR1cm4gc3RhdHVzOworCisJcmFiID0gQ0NHWF9SQUJfVUNTSV9EQVRBX0JMT0NLKG9m ZnNldG9mKHN0cnVjdCB1Y3NpX2RhdGEsIG1lc3NhZ2VfaW4pKTsKKwlyZXR1cm4gY2NnX3JlYWQo dWMsIHJhYiwgcHBtICsgb2Zmc2V0b2Yoc3RydWN0IHVjc2lfZGF0YSwgbWVzc2FnZV9pbiksCisJ CQlzaXplb2YodWMtPnBwbS5kYXRhLT5tZXNzYWdlX2luKSk7Cit9CisKK3N0YXRpYyBpbnQgdWNz aV9jY2dfYWNrX2ludGVycnVwdChzdHJ1Y3QgdWNzaV9jY2cgKnVjKQoreworCWludCBzdGF0dXM7 CisJdW5zaWduZWQgY2hhciBkYXRhOworCisJc3RhdHVzID0gY2NnX3JlYWQodWMsIENDR1hfUkFC X0lOVFJfUkVHLCAmZGF0YSwgc2l6ZW9mKGRhdGEpKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0 dXJuIHN0YXR1czsKKworCXJldHVybiBjY2dfd3JpdGUodWMsIENDR1hfUkFCX0lOVFJfUkVHLCAm ZGF0YSwgc2l6ZW9mKGRhdGEpKTsKK30KKworc3RhdGljIGludCB1Y3NpX2NjZ19zeW5jKHN0cnVj dCB1Y3NpX3BwbSAqcHBtKQoreworCXN0cnVjdCB1Y3NpX2NjZyAqdWMgPSBjb250YWluZXJfb2Yo cHBtLCBzdHJ1Y3QgdWNzaV9jY2csIHBwbSk7CisJaW50IHN0YXR1czsKKworCXN0YXR1cyA9IHVj c2lfY2NnX3JlY3ZfZGF0YSh1Yyk7CisJaWYgKHN0YXR1cyA8IDApCisJCXJldHVybiBzdGF0dXM7 CisKKwkvKiBhY2sgaW50ZXJydXB0IHRvIGFsbG93IG5leHQgY29tbWFuZCB0byBydW4gKi8KKwly ZXR1cm4gdWNzaV9jY2dfYWNrX2ludGVycnVwdCh1Yyk7Cit9CisKK3N0YXRpYyBpbnQgdWNzaV9j Y2dfY21kKHN0cnVjdCB1Y3NpX3BwbSAqcHBtLCBzdHJ1Y3QgdWNzaV9jb250cm9sICpjdHJsKQor eworCXN0cnVjdCB1Y3NpX2NjZyAqdWMgPSBjb250YWluZXJfb2YocHBtLCBzdHJ1Y3QgdWNzaV9j Y2csIHBwbSk7CisKKwlwcG0tPmRhdGEtPmN0cmwucmF3X2NtZCA9IGN0cmwtPnJhd19jbWQ7CisJ cmV0dXJuIHVjc2lfY2NnX3NlbmRfZGF0YSh1Yyk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBj Y2dfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgdWNzaV9jY2cg KnVjID0gZGF0YTsKKworCXVjc2lfbm90aWZ5KHVjLT51Y3NpKTsKKworCXJldHVybiBJUlFfSEFO RExFRDsKK30KKworc3RhdGljIGludCB1Y3NpX2NjZ19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAq Y2xpZW50LAorCQkJICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0 IGRldmljZSAqZGV2ID0gJmNsaWVudC0+ZGV2OworCXN0cnVjdCB1Y3NpX2NjZyAqdWM7CisJaW50 IHN0YXR1czsKKwl1MTYgcmFiOworCisJdWMgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnVj KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF1YykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl1Yy0+cHBt LmRhdGEgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2Yoc3RydWN0IHVjc2lfZGF0YSksIEdGUF9L RVJORUwpOworCWlmICghdWMtPnBwbS5kYXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXVjLT5w cG0uY21kID0gdWNzaV9jY2dfY21kOworCXVjLT5wcG0uc3luYyA9IHVjc2lfY2NnX3N5bmM7CisJ dWMtPmRldiA9IGRldjsKKwl1Yy0+Y2xpZW50ID0gY2xpZW50OworCisJLyogcmVzZXQgY2NnIGRl dmljZSBhbmQgaW5pdGlhbGl6ZSB1Y3NpICovCisJc3RhdHVzID0gdWNzaV9jY2dfaW5pdCh1Yyk7 CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJZGV2X2Vycih1Yy0+ZGV2LCAidWNzaV9jY2dfaW5pdCBm YWlsZWQgLSAlZFxuIiwgc3RhdHVzKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwl1Yy0+aXJx ID0gY2xpZW50LT5pcnE7CisKKwlzdGF0dXMgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKGRl diwgdWMtPmlycSwgTlVMTCwgY2NnX2lycV9oYW5kbGVyLAorCQkJCQkgICBJUlFGX09ORVNIT1Qg fCBJUlFGX1RSSUdHRVJfSElHSCwKKwkJCQkJICAgZGV2X25hbWUoZGV2KSwgdWMpOworCWlmIChz dGF0dXMgPCAwKSB7CisJCWRldl9lcnIodWMtPmRldiwgInJlcXVlc3RfdGhyZWFkZWRfaXJxIGZh aWxlZCAtICVkXG4iLCBzdGF0dXMpOworCQlyZXR1cm4gc3RhdHVzOworCX0KKworCXVjLT51Y3Np ID0gdWNzaV9yZWdpc3Rlcl9wcG0oZGV2LCAmdWMtPnBwbSk7CisJaWYgKElTX0VSUih1Yy0+dWNz aSkpIHsKKwkJZGV2X2Vycih1Yy0+ZGV2LCAidWNzaV9yZWdpc3Rlcl9wcG0gZmFpbGVkXG4iKTsK KwkJcmV0dXJuIFBUUl9FUlIodWMtPnVjc2kpOworCX0KKworCXJhYiA9IENDR1hfUkFCX1VDU0lf REFUQV9CTE9DSyhvZmZzZXRvZihzdHJ1Y3QgdWNzaV9kYXRhLCB2ZXJzaW9uKSk7CisJc3RhdHVz ID0gY2NnX3JlYWQodWMsIHJhYiwgKHU4ICopKHVjLT5wcG0uZGF0YSkgKworCQkJICBvZmZzZXRv ZihzdHJ1Y3QgdWNzaV9kYXRhLCB2ZXJzaW9uKSwKKwkJCSAgc2l6ZW9mKHVjLT5wcG0uZGF0YS0+ dmVyc2lvbikpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCXVjc2lfdW5yZWdpc3Rlcl9wcG0odWMt PnVjc2kpOworCQlyZXR1cm4gc3RhdHVzOworCX0KKworCWkyY19zZXRfY2xpZW50ZGF0YShjbGll bnQsIHVjKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1Y3NpX2NjZ19yZW1vdmUoc3Ry dWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgdWNzaV9jY2cgKnVjID0gaTJjX2dl dF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwl1Y3NpX3VucmVnaXN0ZXJfcHBtKHVjLT51Y3NpKTsK KworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgdWNz aV9jY2dfZGV2aWNlX2lkW10gPSB7CisJeyJjY2d4LXVjc2kiLCAwfSwKKwl7fQorfTsKK01PRFVM RV9ERVZJQ0VfVEFCTEUoaTJjLCB1Y3NpX2NjZ19kZXZpY2VfaWQpOworCitzdGF0aWMgc3RydWN0 IGkyY19kcml2ZXIgdWNzaV9jY2dfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0g InVjc2lfY2NnIiwKKwl9LAorCS5wcm9iZSA9IHVjc2lfY2NnX3Byb2JlLAorCS5yZW1vdmUgPSB1 Y3NpX2NjZ19yZW1vdmUsCisJLmlkX3RhYmxlID0gdWNzaV9jY2dfZGV2aWNlX2lkLAorfTsKKwor bW9kdWxlX2kyY19kcml2ZXIodWNzaV9jY2dfZHJpdmVyKTsKKworTU9EVUxFX0FVVEhPUigiQWph eSBHdXB0YSA8YWpheWdAbnZpZGlhLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiVUNTSSBk cml2ZXIgZm9yIEN5cHJlc3MgQ0NHeCBUeXBlLUMgY29udHJvbGxlciIpOworTU9EVUxFX0xJQ0VO U0UoIkdQTCB2MiIpOwo=