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,1/2] i2c: buses: add i2c bus driver for NVIDIA GPU From: Ajay Gupta Message-Id: <20181025223353.19339-2-ajayg@nvidia.com> Date: Thu, 25 Oct 2018 15:33:52 -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 cmQgaGFzIFVTQiBUeXBlLUMgaW50ZXJmYWNlLiBUaGVyZSBpcyBhClR5cGUtQyBjb250cm9sbGVy IHdoaWNoIGNhbiBiZSBhY2Nlc3NlZCBvdmVyIEkyQy4KClRoaXMgZHJpdmVyIGFkZHMgSTJDIGJ1 cyBkcml2ZXIgdG8gY29tbXVuaWNhdGUgd2l0aCBUeXBlLUMgY29udHJvbGxlci4KSTJDIGNsaWVu dCBkcml2ZXIgd2lsbCBiZSBwYXJ0IG9mIFVTQiBUeXBlLUMgVUNTSSBkcml2ZXIuCgpTaWduZWQt b2ZmLWJ5OiBBamF5IEd1cHRhIDxhamF5Z0BudmlkaWEuY29tPgotLS0KQ2hhbmdlcyBmcm9tIHYx IC0+IHYyCglOb25lCkNoYW5nZXMgZnJvbSB2MiAtPiB2MwoJRml4ZWQgcmV2aWV3IGNvbW1lbnRz IGZyb20gQW5keSBhbmQgVGhpZXJyeQoJUmVuYW1lIGkyYy1ncHUuYyAtPiBpMmMtbnZpZGlhLWdw dS5jCkNoYW5nZXMgZnJvbSB2MyAtPiB2NAoJRml4ZWQgcmV2aWV3IGNvbW1lbnRzIGZyb20gQW5k eQpDaGFuZ2VzIGZyb20gdjQgLT4gdjUKCUZpeGVkIHJldmlldyBjb21tZW50cyBmcm9tIEFuZHkK Q2hhbmdlcyBmcm9tIHY1IC0+IHY2CglOb25lIApDaGFuZ2VzIGZyb20gdjYgLT4gdjcgLT4gdjgK CUZpeGVkIHJldmlldyBjb21tZW50cyBmcm9tIFBldGVyIAoJLSBBZGQgaW1wbGljaXQgU1RPUCBm b3IgbGFzdCB3cml0ZSBtZXNzYWdlCgktIEFkZCBpMmNfYWRhcHRlcl9xdWlya3Mgd2l0aCBtYXhf cmVhZF9sZW4gYW5kCgkgIEkyQ19BUV9DT01CIGZsYWdzCkNoYW5nZXMgZnJvbSB2OCAtPiB2OQoJ Rml4ZWQgcmV2aWV3IGNvbW1lbnRzIGZyb20gUGV0ZXIKCS0gRHJvcCBkb19zdGFydCBmbGFnCgkt IFVzZSBpMmNfOGJpdF9hZGRyX2Zyb21fbXNnKCkKQ2hhbmdlcyBmcm9tIHY5IC0+IHYxMAoJRml4 ZWQgcmV2aWV3IGNvbW1lbnRzIGZyb20gUGV0ZXIKCS0gRHJvcHBlZCBJMkNfRlVOQ19TTUJVU19F TVVMCgktIERyb3BwZWQgbG9jYWwgbXV0ZXgKQ2hhbmdlcyBmcm9tIHYxMCAtPiB2MTEKCUZpeGVk IHJldmlldyBjb21tZW50cyBmcm9tIFBldGVyCgktIE1vdmVkIHN0b3AgaW4gbWFzdGVyX3hmZXIg YXQgZW5kIG9mIG1lc3NhZ2UKCS0gQ2hhbmdlIGkyY19yZWFkIHdpdGhvdXQgU1RPUAoJLSBEcm9w cGVkIEkyQ19BQ19DT01CKiBmbGFncwpDaGFuZ2VzIGZyb20gdjExIC0+IHYxMgoJRml4ZWQgcmV2 aWV3IGNvbW1lbnRzIGZyb20gUGV0ZXIKCS0gUmVtb3ZlZCBjbGVhcmluZyBvZiBlbXB0eSBiaXRz CgktIEZpeCBtYXN0ZXJfeGZlciBmb3IgY29ycmVjdCBzdG9wIHVzZQpDaGFuZ2VzIGZyb20gdjEy IC0+IHYxMwoJRml4ZWQgcmV2aWV3IGNvbW1lbnRzIGZyb20gUGV0ZXIKCS0gQWRkZWQgY29tbWVu dHMgb24gNCBieXRlIHJlYWQgbGltaXRhdGlvbgoJLSBBZGRlZCBJMkNfQUNfQ09NQiogZmxhZ3MK Q2hhbmdlcyBmcm9tIHYxMyAtPiB2MTQKCU5vbmUKCiBEb2N1bWVudGF0aW9uL2kyYy9idXNzZXMv aTJjLW52aWRpYS1ncHUgfCAgMTggKysKIE1BSU5UQUlORVJTICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB8ICAgNyArCiBkcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZyAgICAgICAgICAgICAg fCAgIDkgKwogZHJpdmVycy9pMmMvYnVzc2VzL01ha2VmaWxlICAgICAgICAgICAgIHwgICAxICsK IGRyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbnZpZGlhLWdwdS5jICAgICB8IDM2OCArKysrKysrKysr KysrKysrKysrKysrKysKIDUgZmlsZXMgY2hhbmdlZCwgNDAzIGluc2VydGlvbnMoKykKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBEb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLW52aWRpYS1ncHUKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2kyYy9idXNzZXMvaTJjLW52aWRpYS1ncHUuYwoKZGlm ZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtbnZpZGlhLWdwdSBiL0RvY3Vt ZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtbnZpZGlhLWdwdQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMDAuLjMxODg0ZDJiMmViNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3Vt ZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtbnZpZGlhLWdwdQpAQCAtMCwwICsxLDE4IEBACitLZXJu ZWwgZHJpdmVyIGkyYy1udmlkaWEtZ3B1CisKK0RhdGFzaGVldDogbm90IHB1YmxpY2x5IGF2YWls YWJsZS4KKworQXV0aG9yczoKKwlBamF5IEd1cHRhIDxhamF5Z0BudmlkaWEuY29tPgorCitEZXNj cmlwdGlvbgorLS0tLS0tLS0tLS0KKworaTJjLW52aWRpYS1ncHUgaXMgYSBkcml2ZXIgZm9yIEky QyBjb250cm9sbGVyIGluY2x1ZGVkIGluIE5WSURJQSBUdXJpbmcKK2FuZCBsYXRlciBHUFVzIGFu ZCBpdCBpcyB1c2VkIHRvIGNvbW11bmljYXRlIHdpdGggVHlwZS1DIGNvbnRyb2xsZXIgb24gR1BV cy4KKworSWYgeW91ciAnbHNwY2kgLXYnIGxpc3Rpbmcgc2hvd3Mgc29tZXRoaW5nIGxpa2UgdGhl IGZvbGxvd2luZywKKworMDE6MDAuMyBTZXJpYWwgYnVzIGNvbnRyb2xsZXIgWzBjODBdOiBOVklE SUEgQ29ycG9yYXRpb24gRGV2aWNlIDFhZDkgKHJldiBhMSkKKwordGhlbiB0aGlzIGRyaXZlciBz aG91bGQgc3VwcG9ydCB0aGUgSTJDIGNvbnRyb2xsZXIgb2YgeW91ciBHUFUuCmRpZmYgLS1naXQg YS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IGQ2MzcwNTQ0NWJmOC4uODNkZjE0Y2E0 NWI0IDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtNjgwMCw2 ICs2ODAwLDEzIEBAIEw6CWxpbnV4LWFjcGlAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVk CiBGOglkcml2ZXJzL2kyYy9pMmMtY29yZS1hY3BpLmMKIAorSTJDIENPTlRST0xMRVIgRFJJVkVS IEZPUiBOVklESUEgR1BVCitNOglBamF5IEd1cHRhIDxhamF5Z0BudmlkaWEuY29tPgorTDoJbGlu dXgtaTJjQHZnZXIua2VybmVsLm9yZworUzoJTWFpbnRhaW5lZAorRjoJRG9jdW1lbnRhdGlvbi9p MmMvYnVzc2VzL2kyYy1udmlkaWEtZ3B1CitGOglkcml2ZXJzL2kyYy9idXNzZXMvaTJjLW52aWRp YS1ncHUuYworCiBJMkMgTVVYRVMKIE06CVBldGVyIFJvc2luIDxwZWRhQGF4ZW50aWEuc2U+CiBM OglsaW51eC1pMmNAdmdlci5rZXJuZWwub3JnCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNz ZXMvS2NvbmZpZyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCmluZGV4IDQ1MWQ0YWU1MGU2 Ni4uZWVkODI3YjQ0MDY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZwor KysgYi9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZwpAQCAtMjI0LDYgKzIyNCwxNSBAQCBjb25m aWcgSTJDX05GT1JDRTJfUzQ5ODUKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFz IGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIGkyYy1uZm9y Y2UyLXM0OTg1LgogCitjb25maWcgSTJDX05WSURJQV9HUFUKKwl0cmlzdGF0ZSAiTlZJRElBIEdQ VSBJMkMgY29udHJvbGxlciIKKwlkZXBlbmRzIG9uIFBDSQorCWhlbHAKKwkgIElmIHlvdSBzYXkg eWVzIHRvIHRoaXMgb3B0aW9uLCBzdXBwb3J0IHdpbGwgYmUgaW5jbHVkZWQgZm9yIHRoZQorCSAg TlZJRElBIEdQVSBJMkMgY29udHJvbGxlciB3aGljaCBpcyB1c2VkIHRvIGNvbW11bmljYXRlIHdp dGggdGhlIEdQVSdzCisJICBUeXBlLUMgY29udHJvbGxlci4gVGhpcyBkcml2ZXIgY2FuIGFsc28g YmUgYnVpbHQgYXMgYSBtb2R1bGUgY2FsbGVkCisJICBpMmMtbnZpZGlhLWdwdS4KKwogY29uZmln IEkyQ19TSVM1NTk1CiAJdHJpc3RhdGUgIlNpUyA1NTk1IgogCWRlcGVuZHMgb24gUENJCmRpZmYg LS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvTWFrZWZpbGUgYi9kcml2ZXJzL2kyYy9idXNzZXMv TWFrZWZpbGUKaW5kZXggMThiMjZhZjgyYjFjLi5kNDk5ODEzZGYwMzggMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvaTJjL2J1c3Nlcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvTWFrZWZp bGUKQEAgLTE0MCw1ICsxNDAsNiBAQCBvYmotJChDT05GSUdfSTJDX1NJQllURSkJKz0gaTJjLXNp Ynl0ZS5vCiBvYmotJChDT05GSUdfSTJDX1hHRU5FX1NMSU1QUk8pICs9IGkyYy14Z2VuZS1zbGlt cHJvLm8KIG9iai0kKENPTkZJR19TQ3gyMDBfQUNCKQkrPSBzY3gyMDBfYWNiLm8KIG9iai0kKENP TkZJR19JMkNfRlNJKQkJKz0gaTJjLWZzaS5vCitvYmotJChDT05GSUdfSTJDX05WSURJQV9HUFUp CSs9IGkyYy1udmlkaWEtZ3B1Lm8KIAogY2NmbGFncy0kKENPTkZJR19JMkNfREVCVUdfQlVTKSA6 PSAtRERFQlVHCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW52aWRpYS1ncHUu YyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbnZpZGlhLWdwdS5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNzQ0ZjVlNDI2MzZiCi0tLSAvZGV2L251bGwKKysrIGIv ZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1udmlkaWEtZ3B1LmMKQEAgLTAsMCArMSwzNjggQEAKKy8v IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisvKgorICogTnZpZGlhIEdQVSBJMkMg Y29udHJvbGxlciBEcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggTlZJRElBIENvcnBv cmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQXV0aG9yOiBBamF5IEd1cHRhIDxhamF5 Z0BudmlkaWEuY29tPgorICovCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxs aW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51 eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0 Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L3Bt X3J1bnRpbWUuaD4KKworI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKworLyogSTJDIGRlZmlu aXRpb25zICovCisjZGVmaW5lIEkyQ19NU1RfQ05UTAkJCQkweDAwCisjZGVmaW5lIEkyQ19NU1Rf Q05UTF9HRU5fU1RBUlQJCQlCSVQoMCkKKyNkZWZpbmUgSTJDX01TVF9DTlRMX0dFTl9TVE9QCQkJ QklUKDEpCisjZGVmaW5lIEkyQ19NU1RfQ05UTF9DTURfUkVBRAkJCSgxIDw8IDIpCisjZGVmaW5l IEkyQ19NU1RfQ05UTF9DTURfV1JJVEUJCQkoMiA8PCAyKQorI2RlZmluZSBJMkNfTVNUX0NOVExf QlVSU1RfU0laRV9TSElGVAkJNgorI2RlZmluZSBJMkNfTVNUX0NOVExfR0VOX05BQ0sJCQlCSVQo MjgpCisjZGVmaW5lIEkyQ19NU1RfQ05UTF9TVEFUVVMJCQlHRU5NQVNLKDMwLCAyOSkKKyNkZWZp bmUgSTJDX01TVF9DTlRMX1NUQVRVU19PS0FZCQkoMCA8PCAyOSkKKyNkZWZpbmUgSTJDX01TVF9D TlRMX1NUQVRVU19OT19BQ0sJCSgxIDw8IDI5KQorI2RlZmluZSBJMkNfTVNUX0NOVExfU1RBVFVT X1RJTUVPVVQJCSgyIDw8IDI5KQorI2RlZmluZSBJMkNfTVNUX0NOVExfU1RBVFVTX0JVU19CVVNZ CQkoMyA8PCAyOSkKKyNkZWZpbmUgSTJDX01TVF9DTlRMX0NZQ0xFX1RSSUdHRVIJCUJJVCgzMSkK KworI2RlZmluZSBJMkNfTVNUX0FERFIJCQkJMHgwNAorCisjZGVmaW5lIEkyQ19NU1RfSTJDMF9U SU1JTkcJCQkJMHgwOAorI2RlZmluZSBJMkNfTVNUX0kyQzBfVElNSU5HX1NDTF9QRVJJT0RfMTAw S0haCQkweDEwZQorI2RlZmluZSBJMkNfTVNUX0kyQzBfVElNSU5HX1RJTUVPVVRfQ0xLX0NOVAkJ MTYKKyNkZWZpbmUgSTJDX01TVF9JMkMwX1RJTUlOR19USU1FT1VUX0NMS19DTlRfTUFYCQkyNTUK KyNkZWZpbmUgSTJDX01TVF9JMkMwX1RJTUlOR19USU1FT1VUX0NIRUNLCQlCSVQoMjQpCisKKyNk ZWZpbmUgSTJDX01TVF9EQVRBCQkJCQkweDBjCisKKyNkZWZpbmUgSTJDX01TVF9IWUJSSURfUEFE Q1RMCQkJCTB4MjAKKyNkZWZpbmUgSTJDX01TVF9IWUJSSURfUEFEQ1RMX01PREVfSTJDCQkJQklU KDApCisjZGVmaW5lIEkyQ19NU1RfSFlCUklEX1BBRENUTF9JMkNfU0NMX0lOUFVUX1JDVgkJQklU KDE0KQorI2RlZmluZSBJMkNfTVNUX0hZQlJJRF9QQURDVExfSTJDX1NEQV9JTlBVVF9SQ1YJCUJJ VCgxNSkKKworc3RydWN0IGdwdV9pMmNfZGV2IHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJdm9p ZCBfX2lvbWVtICpyZWdzOworCXN0cnVjdCBpMmNfYWRhcHRlciBhZGFwdGVyOworCXN0cnVjdCBp MmNfYm9hcmRfaW5mbyAqZ3B1X2NjZ3hfdWNzaTsKK307CisKK3N0YXRpYyB2b2lkIGdwdV9lbmFi bGVfaTJjX2J1cyhzdHJ1Y3QgZ3B1X2kyY19kZXYgKmkyY2QpCit7CisJdTMyIHZhbDsKKworCS8q IGVuYWJsZSBJMkMgKi8KKwl2YWwgPSByZWFkbChpMmNkLT5yZWdzICsgSTJDX01TVF9IWUJSSURf UEFEQ1RMKTsKKwl2YWwgfD0gSTJDX01TVF9IWUJSSURfUEFEQ1RMX01PREVfSTJDIHwKKwkJSTJD X01TVF9IWUJSSURfUEFEQ1RMX0kyQ19TQ0xfSU5QVVRfUkNWIHwKKwkJSTJDX01TVF9IWUJSSURf UEFEQ1RMX0kyQ19TREFfSU5QVVRfUkNWOworCXdyaXRlbCh2YWwsIGkyY2QtPnJlZ3MgKyBJMkNf TVNUX0hZQlJJRF9QQURDVEwpOworCisJLyogZW5hYmxlIDEwMEtIWiBtb2RlICovCisJdmFsID0g STJDX01TVF9JMkMwX1RJTUlOR19TQ0xfUEVSSU9EXzEwMEtIWjsKKwl2YWwgfD0gKEkyQ19NU1Rf STJDMF9USU1JTkdfVElNRU9VVF9DTEtfQ05UX01BWAorCSAgICA8PCBJMkNfTVNUX0kyQzBfVElN SU5HX1RJTUVPVVRfQ0xLX0NOVCk7CisJdmFsIHw9IEkyQ19NU1RfSTJDMF9USU1JTkdfVElNRU9V VF9DSEVDSzsKKwl3cml0ZWwodmFsLCBpMmNkLT5yZWdzICsgSTJDX01TVF9JMkMwX1RJTUlORyk7 Cit9CisKK3N0YXRpYyBpbnQgZ3B1X2kyY19jaGVja19zdGF0dXMoc3RydWN0IGdwdV9pMmNfZGV2 ICppMmNkKQoreworCXVuc2lnbmVkIGxvbmcgdGFyZ2V0ID0gamlmZmllcyArIG1zZWNzX3RvX2pp ZmZpZXMoMTAwMCk7CisJdTMyIHZhbDsKKworCWRvIHsKKwkJdmFsID0gcmVhZGwoaTJjZC0+cmVn cyArIEkyQ19NU1RfQ05UTCk7CisJCWlmICghKHZhbCAmIEkyQ19NU1RfQ05UTF9DWUNMRV9UUklH R0VSKSkKKwkJCWJyZWFrOworCQlpZiAoKHZhbCAmIEkyQ19NU1RfQ05UTF9TVEFUVVMpICE9CisJ CQkJSTJDX01TVF9DTlRMX1NUQVRVU19CVVNfQlVTWSkKKwkJCWJyZWFrOworCQl1c2xlZXBfcmFu Z2UoNTAwLCA2MDApOworCX0gd2hpbGUgKHRpbWVfaXNfYWZ0ZXJfamlmZmllcyh0YXJnZXQpKTsK KworCWlmICh0aW1lX2lzX2JlZm9yZV9qaWZmaWVzKHRhcmdldCkpIHsKKwkJZGV2X2VycihpMmNk LT5kZXYsICJpMmMgdGltZW91dCBlcnJvciAleFxuIiwgdmFsKTsKKwkJcmV0dXJuIC1FVElNRTsK Kwl9CisKKwl2YWwgPSByZWFkbChpMmNkLT5yZWdzICsgSTJDX01TVF9DTlRMKTsKKwlzd2l0Y2gg KHZhbCAmIEkyQ19NU1RfQ05UTF9TVEFUVVMpIHsKKwljYXNlIEkyQ19NU1RfQ05UTF9TVEFUVVNf T0tBWToKKwkJcmV0dXJuIDA7CisJY2FzZSBJMkNfTVNUX0NOVExfU1RBVFVTX05PX0FDSzoKKwkJ cmV0dXJuIC1FSU87CisJY2FzZSBJMkNfTVNUX0NOVExfU1RBVFVTX1RJTUVPVVQ6CisJCXJldHVy biAtRVRJTUU7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgaW50IGdw dV9pMmNfcmVhZChzdHJ1Y3QgZ3B1X2kyY19kZXYgKmkyY2QsIHU4ICpkYXRhLCB1MTYgbGVuKQor eworCWludCBzdGF0dXM7CisJdTMyIHZhbDsKKworCXZhbCA9IEkyQ19NU1RfQ05UTF9HRU5fU1RB UlQgfCBJMkNfTVNUX0NOVExfQ01EX1JFQUQgfAorCQkobGVuIDw8IEkyQ19NU1RfQ05UTF9CVVJT VF9TSVpFX1NISUZUKSB8CisJCUkyQ19NU1RfQ05UTF9DWUNMRV9UUklHR0VSIHwgSTJDX01TVF9D TlRMX0dFTl9OQUNLOworCXdyaXRlbCh2YWwsIGkyY2QtPnJlZ3MgKyBJMkNfTVNUX0NOVEwpOwor CisJc3RhdHVzID0gZ3B1X2kyY19jaGVja19zdGF0dXMoaTJjZCk7CisJaWYgKHN0YXR1cyA8IDAp CisJCXJldHVybiBzdGF0dXM7CisKKwl2YWwgPSByZWFkbChpMmNkLT5yZWdzICsgSTJDX01TVF9E QVRBKTsKKwlzd2l0Y2ggKGxlbikgeworCWNhc2UgMToKKwkJZGF0YVswXSA9IHZhbDsKKwkJYnJl YWs7CisJY2FzZSAyOgorCQlwdXRfdW5hbGlnbmVkX2JlMTYodmFsLCBkYXRhKTsKKwkJYnJlYWs7 CisJY2FzZSAzOgorCQlwdXRfdW5hbGlnbmVkX2JlMTYodmFsID4+IDgsIGRhdGEpOworCQlkYXRh WzJdID0gdmFsOworCQlicmVhazsKKwljYXNlIDQ6CisJCXB1dF91bmFsaWduZWRfYmUzMih2YWws IGRhdGEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmV0dXJuIHN0YXR1 czsKK30KKworc3RhdGljIGludCBncHVfaTJjX3N0YXJ0KHN0cnVjdCBncHVfaTJjX2RldiAqaTJj ZCkKK3sKKwl3cml0ZWwoSTJDX01TVF9DTlRMX0dFTl9TVEFSVCwgaTJjZC0+cmVncyArIEkyQ19N U1RfQ05UTCk7CisJcmV0dXJuIGdwdV9pMmNfY2hlY2tfc3RhdHVzKGkyY2QpOworfQorCitzdGF0 aWMgaW50IGdwdV9pMmNfc3RvcChzdHJ1Y3QgZ3B1X2kyY19kZXYgKmkyY2QpCit7CisJd3JpdGVs KEkyQ19NU1RfQ05UTF9HRU5fU1RPUCwgaTJjZC0+cmVncyArIEkyQ19NU1RfQ05UTCk7CisJcmV0 dXJuIGdwdV9pMmNfY2hlY2tfc3RhdHVzKGkyY2QpOworfQorCitzdGF0aWMgaW50IGdwdV9pMmNf d3JpdGUoc3RydWN0IGdwdV9pMmNfZGV2ICppMmNkLCB1OCBkYXRhKQoreworCXUzMiB2YWw7CisK Kwl3cml0ZWwoZGF0YSwgaTJjZC0+cmVncyArIEkyQ19NU1RfREFUQSk7CisKKwl2YWwgPSBJMkNf TVNUX0NOVExfQ01EX1dSSVRFIHwgKDEgPDwgSTJDX01TVF9DTlRMX0JVUlNUX1NJWkVfU0hJRlQp OworCXdyaXRlbCh2YWwsIGkyY2QtPnJlZ3MgKyBJMkNfTVNUX0NOVEwpOworCisJcmV0dXJuIGdw dV9pMmNfY2hlY2tfc3RhdHVzKGkyY2QpOworfQorCitzdGF0aWMgaW50IGdwdV9pMmNfbWFzdGVy X3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLAorCQkJICAgICAgIHN0cnVjdCBpMmNfbXNn ICptc2dzLCBpbnQgbnVtKQoreworCXN0cnVjdCBncHVfaTJjX2RldiAqaTJjZCA9IGkyY19nZXRf YWRhcGRhdGEoYWRhcCk7CisJaW50IHN0YXR1cywgc3RhdHVzMjsKKwlpbnQgaSwgajsKKworCS8q CisJICogVGhlIGNvbnRyb2xsZXIgc3VwcG9ydHMgbWF4aW11bSA0IGJ5dGUgcmVhZCBkdWUgdG8g a25vd24KKwkgKiBsaW1pdGF0aW9uIG9mIHNlbmRpbmcgU1RPUCBhZnRlciBldmVyeSByZWFkLgor CSAqLworCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgeworCQlpZiAobXNnc1tpXS5mbGFncyAm IEkyQ19NX1JEKSB7CisJCQkvKiBwcm9ncmFtIGNsaWVudCBhZGRyZXNzIGJlZm9yZSBzdGFydGlu ZyByZWFkICovCisJCQl3cml0ZWwobXNnc1tpXS5hZGRyLCBpMmNkLT5yZWdzICsgSTJDX01TVF9B RERSKTsKKwkJCS8qIGdwdV9pMmNfcmVhZCBoYXMgaW1wbGljaXQgc3RhcnQgKi8KKwkJCXN0YXR1 cyA9IGdwdV9pMmNfcmVhZChpMmNkLCBtc2dzW2ldLmJ1ZiwgbXNnc1tpXS5sZW4pOworCQkJaWYg KHN0YXR1cyA8IDApCisJCQkJZ290byBzdG9wOworCQl9IGVsc2UgeworCQkJdTggYWRkciA9IGky Y184Yml0X2FkZHJfZnJvbV9tc2cobXNncyArIGkpOworCisJCQlzdGF0dXMgPSBncHVfaTJjX3N0 YXJ0KGkyY2QpOworCQkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCQlpZiAoaSA9PSAwKQorCQkJCQly ZXR1cm4gc3RhdHVzOworCQkJCWdvdG8gc3RvcDsKKwkJCX0KKworCQkJc3RhdHVzID0gZ3B1X2ky Y193cml0ZShpMmNkLCBhZGRyKTsKKwkJCWlmIChzdGF0dXMgPCAwKQorCQkJCWdvdG8gc3RvcDsK KworCQkJZm9yIChqID0gMDsgaiA8IG1zZ3NbaV0ubGVuOyBqKyspIHsKKwkJCQlzdGF0dXMgPSBn cHVfaTJjX3dyaXRlKGkyY2QsIG1zZ3NbaV0uYnVmW2pdKTsKKwkJCQlpZiAoc3RhdHVzIDwgMCkK KwkJCQkJZ290byBzdG9wOworCQkJfQorCQl9CisJfQorCXN0YXR1cyA9IGdwdV9pMmNfc3RvcChp MmNkKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIHN0YXR1czsKKworCXJldHVybiBpOwor c3RvcDoKKwlzdGF0dXMyID0gZ3B1X2kyY19zdG9wKGkyY2QpOworCWlmIChzdGF0dXMyIDwgMCkK KwkJZGV2X2VycihpMmNkLT5kZXYsICJpMmMgc3RvcCBmYWlsZWQgJWRcbiIsIHN0YXR1czIpOwor CXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2FkYXB0ZXJfcXVp cmtzIGdwdV9pMmNfcXVpcmtzID0geworCS5tYXhfcmVhZF9sZW4gPSA0LAorCS5mbGFncyA9IEky Q19BUV9DT01CX1dSSVRFX1RIRU5fUkVBRCwKK307CisKK3N0YXRpYyB1MzIgZ3B1X2kyY19mdW5j dGlvbmFsaXR5KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKK3sKKwlyZXR1cm4gSTJDX0ZVTkNf STJDIHwgSTJDX0ZVTkNfU01CVVNfRU1VTDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNf YWxnb3JpdGhtIGdwdV9pMmNfYWxnb3JpdGhtID0geworCS5tYXN0ZXJfeGZlcgk9IGdwdV9pMmNf bWFzdGVyX3hmZXIsCisJLmZ1bmN0aW9uYWxpdHkJPSBncHVfaTJjX2Z1bmN0aW9uYWxpdHksCit9 OworCisvKgorICogVGhpcyBkcml2ZXIgaXMgZm9yIE52aWRpYSBHUFUgY2FyZHMgd2l0aCBVU0Ig VHlwZS1DIGludGVyZmFjZS4KKyAqIFdlIHdhbnQgdG8gaWRlbnRpZnkgdGhlIGNhcmRzIHVzaW5n IHZlbmRvciBJRCBhbmQgY2xhc3MgY29kZSBvbmx5CisgKiB0byBhdm9pZCBkZXBlbmRlbmN5IG9m IGFkZGluZyBwcm9kdWN0IGlkIGZvciBhbnkgbmV3IGNhcmQgd2hpY2gKKyAqIHJlcXVpcmVzIHRo aXMgZHJpdmVyLgorICogQ3VycmVudGx5IHRoZXJlIGlzIG5vIGNsYXNzIGNvZGUgZGVmaW5lZCBm b3IgVUNTSSBkZXZpY2Ugb3ZlciBQQ0kKKyAqIHNvIHVzaW5nIFVOS05PV04gY2xhc3MgZm9yIG5v dyBhbmQgaXQgd2lsbCBiZSB1cGRhdGVkIHdoZW4gVUNTSQorICogb3ZlciBQQ0kgZ2V0cyBhIGNs YXNzIGNvZGUuCisgKiBUaGVyZSBpcyBubyBvdGhlciBOVklESUEgY2FyZHMgd2l0aCBVTktOT1dO IGNsYXNzIGNvZGUuIEV2ZW4gaWYgdGhlCisgKiBkcml2ZXIgZ2V0cyBsb2FkZWQgZm9yIGFuIHVu ZGVzaXJlZCBjYXJkIHRoZW4gZXZlbnR1YWxseSBpMmNfcmVhZCgpCisgKiAoaW5pdGlhdGVkIGZy b20gVUNTSSBpMmNfY2xpZW50KSB3aWxsIHRpbWVvdXQgb3IgVUNTSSBjb21tYW5kcyB3aWxsCisg KiB0aW1lb3V0LgorICovCisjZGVmaW5lIFBDSV9DTEFTU19TRVJJQUxfVU5LTk9XTgkweDBjODAK K3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBncHVfaTJjX2lkc1tdID0geworCXsg UENJX1ZFTkRPUl9JRF9OVklESUEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQs CisJCVBDSV9DTEFTU19TRVJJQUxfVU5LTk9XTiA8PCA4LCAweGZmZmZmZjAwfSwKKwl7IH0KK307 CitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgZ3B1X2kyY19pZHMpOworCitzdGF0aWMgaW50IGdw dV9wb3B1bGF0ZV9jbGllbnQoc3RydWN0IGdwdV9pMmNfZGV2ICppMmNkLCBpbnQgaXJxKQorewor CXN0cnVjdCBpMmNfY2xpZW50ICpjY2d4X2NsaWVudDsKKworCWkyY2QtPmdwdV9jY2d4X3Vjc2kg PSBkZXZtX2t6YWxsb2MoaTJjZC0+ZGV2LAorCQkJCQkgICBzaXplb2YoKmkyY2QtPmdwdV9jY2d4 X3Vjc2kpLAorCQkJCQkgICBHRlBfS0VSTkVMKTsKKwlpZiAoIWkyY2QtPmdwdV9jY2d4X3Vjc2kp CisJCXJldHVybiAtRU5PTUVNOworCisJc3RybGNweShpMmNkLT5ncHVfY2NneF91Y3NpLT50eXBl LCAiY2NneC11Y3NpIiwKKwkJc2l6ZW9mKGkyY2QtPmdwdV9jY2d4X3Vjc2ktPnR5cGUpKTsKKwlp MmNkLT5ncHVfY2NneF91Y3NpLT5hZGRyID0gMHg4OworCWkyY2QtPmdwdV9jY2d4X3Vjc2ktPmly cSA9IGlycTsKKwljY2d4X2NsaWVudCA9IGkyY19uZXdfZGV2aWNlKCZpMmNkLT5hZGFwdGVyLCBp MmNkLT5ncHVfY2NneF91Y3NpKTsKKwlpZiAoIWNjZ3hfY2xpZW50KQorCQlyZXR1cm4gLUVOT0RF VjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdwdV9pMmNfcHJvYmUoc3RydWN0IHBj aV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3Qg Z3B1X2kyY19kZXYgKmkyY2Q7CisJaW50IHN0YXR1czsKKworCWkyY2QgPSBkZXZtX2t6YWxsb2Mo JnBkZXYtPmRldiwgc2l6ZW9mKCppMmNkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpMmNkKQorCQly ZXR1cm4gLUVOT01FTTsKKworCWkyY2QtPmRldiA9ICZwZGV2LT5kZXY7CisJZGV2X3NldF9kcnZk YXRhKCZwZGV2LT5kZXYsIGkyY2QpOworCisJc3RhdHVzID0gcGNpbV9lbmFibGVfZGV2aWNlKHBk ZXYpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInBjaW1fZW5h YmxlX2RldmljZSBmYWlsZWQgJWRcbiIsIHN0YXR1cyk7CisJCXJldHVybiBzdGF0dXM7CisJfQor CisJcGNpX3NldF9tYXN0ZXIocGRldik7CisKKwlpMmNkLT5yZWdzID0gcGNpbV9pb21hcChwZGV2 LCAwLCAwKTsKKwlpZiAoIWkyY2QtPnJlZ3MpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAicGNp bV9pb21hcCBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlzdGF0dXMgPSBw Y2lfYWxsb2NfaXJxX3ZlY3RvcnMocGRldiwgMSwgMSwgUENJX0lSUV9NU0kpOworCWlmIChzdGF0 dXMgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInBjaV9hbGxvY19pcnFfdmVjdG9ycyBl cnIgJWRcbiIsIHN0YXR1cyk7CisJCXJldHVybiBzdGF0dXM7CisJfQorCisJZ3B1X2VuYWJsZV9p MmNfYnVzKGkyY2QpOworCisJaTJjX3NldF9hZGFwZGF0YSgmaTJjZC0+YWRhcHRlciwgaTJjZCk7 CisJaTJjZC0+YWRhcHRlci5vd25lciA9IFRISVNfTU9EVUxFOworCXN0cmxjcHkoaTJjZC0+YWRh cHRlci5uYW1lLCAiTlZJRElBIEdQVSBJMkMgYWRhcHRlciIsCisJCXNpemVvZihpMmNkLT5hZGFw dGVyLm5hbWUpKTsKKwlpMmNkLT5hZGFwdGVyLmFsZ28gPSAmZ3B1X2kyY19hbGdvcml0aG07CisJ aTJjZC0+YWRhcHRlci5xdWlya3MgPSAmZ3B1X2kyY19xdWlya3M7CisJaTJjZC0+YWRhcHRlci5k ZXYucGFyZW50ID0gJnBkZXYtPmRldjsKKwlzdGF0dXMgPSBpMmNfYWRkX2FkYXB0ZXIoJmkyY2Qt PmFkYXB0ZXIpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGZyZWVfaXJxX3ZlY3RvcnM7CisK KwlzdGF0dXMgPSBncHVfcG9wdWxhdGVfY2xpZW50KGkyY2QsIHBkZXYtPmlycSk7CisJaWYgKHN0 YXR1cyA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZ3B1X3BvcHVsYXRlX2NsaWVudCBm YWlsZWQgJWRcbiIsIHN0YXR1cyk7CisJCWdvdG8gZGVsX2FkYXB0ZXI7CisJfQorCisJcmV0dXJu IDA7CisKK2RlbF9hZGFwdGVyOgorCWkyY19kZWxfYWRhcHRlcigmaTJjZC0+YWRhcHRlcik7Citm cmVlX2lycV92ZWN0b3JzOgorCXBjaV9mcmVlX2lycV92ZWN0b3JzKHBkZXYpOworCXJldHVybiBz dGF0dXM7Cit9CisKK3N0YXRpYyB2b2lkIGdwdV9pMmNfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpw ZGV2KQoreworCXN0cnVjdCBncHVfaTJjX2RldiAqaTJjZCA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRl di0+ZGV2KTsKKworCWkyY19kZWxfYWRhcHRlcigmaTJjZC0+YWRhcHRlcik7CisJcGNpX2ZyZWVf aXJxX3ZlY3RvcnMocGRldik7Cit9CisKK3N0YXRpYyBpbnQgZ3B1X2kyY19yZXN1bWUoc3RydWN0 IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBncHVfaTJjX2RldiAqaTJjZCA9IGRldl9nZXRfZHJ2 ZGF0YShkZXYpOworCisJZ3B1X2VuYWJsZV9pMmNfYnVzKGkyY2QpOworCXJldHVybiAwOworfQor CitVTklWRVJTQUxfREVWX1BNX09QUyhncHVfaTJjX2RyaXZlcl9wbSwgTlVMTCwgZ3B1X2kyY19y ZXN1bWUsIE5VTEwpOworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZ3B1X2kyY19kcml2ZXIg PSB7CisJLm5hbWUJCT0gIm52aWRpYS1ncHUiLAorCS5pZF90YWJsZQk9IGdwdV9pMmNfaWRzLAor CS5wcm9iZQkJPSBncHVfaTJjX3Byb2JlLAorCS5yZW1vdmUJCT0gZ3B1X2kyY19yZW1vdmUsCisJ LmRyaXZlcgkJPSB7CisJCS5wbQk9ICZncHVfaTJjX2RyaXZlcl9wbSwKKwl9LAorfTsKKworbW9k dWxlX3BjaV9kcml2ZXIoZ3B1X2kyY19kcml2ZXIpOworCitNT0RVTEVfQVVUSE9SKCJBamF5IEd1 cHRhIDxhamF5Z0BudmlkaWEuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJOdmlkaWEgR1BV IEkyQyBjb250cm9sbGVyIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwo=