From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Sverdlin, Alexander (Nokia - DE/Ulm)" Subject: Re: [PATCH v2] i2c: axxia: support sequence command mode Date: Thu, 13 Dec 2018 12:45:31 +0000 Message-ID: <2b970778-dd77-816a-063c-210643ddaf0c@nokia.com> References: <20181211200435.abk3jdsmltz7c26w@ninjato> <20181213120926.GA10479@localhost.localdomain> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20181213120926.GA10479@localhost.localdomain> Content-Language: en-US Content-ID: <579FB5A56272E34AB8D80E5662F9D457@eurprd07.prod.outlook.com> Sender: linux-kernel-owner@vger.kernel.org To: "Adamski, Krzysztof (Nokia - PL/Wroclaw)" , Wolfram Sang Cc: "linux-i2c@vger.kernel.org" , "linux-kernel@vger.kernel.org" , Linus Walleij , Guenter Roeck , Tobias Jordan , Peter Rosin List-Id: linux-i2c@vger.kernel.org SGkhDQoNCk9uIDEzLzEyLzIwMTggMTM6MDksIEFkYW1za2ksIEtyenlzenRvZiAoTm9raWEgLSBQ TC9Xcm9jbGF3KSB3cm90ZToNCj4gSW4gb3JkZXIgdG8gY29tcGx5IHdpdGggU01CdXMgc3BlY2lm aWNhdGlvbiwgdGhlIEF4eGlhIEnCskMgbW9kdWxlIHdpbGwNCj4gYWJvcnQgdGhlIG11bHRpIG1l c3NhZ2UgdHJhbnNmZXIgaWYgdGhlIGRlbGF5IGJldHdlZW4gZmluaXNoaW5nIHNlbmRpbmcNCj4g b25lIG1lc3NhZ2UgYW5kIHN0YXJ0aW5nIGFub3RoZXIgaXMgbG9uZ2VyIHRoYW4gMjVtcy4gVW5m b3J0dW5hdGVseSBpdA0KPiBpc24ndCB0aGF0IGhhcmQgdG8gdHJpZ2dlciB0aGlzIHNpdHVhdGlv biBvbiBhIGJ1c3kgc3lzdGVtLiBJbiBvcmRlciB0bw0KPiBmaXggdGhpcyBwcm9ibGVtLCB3ZSBz aG91bGQgbWFrZSBzdXJlIGhhcmR3YXJlIGRvZXMgd2hvbGUgdHJhbnNhY3Rpb24NCj4gd2l0aG91 dCB3YWl0aW5nIGZvciBzb2Z0d2FyZSB0byBmaWxsIHNvbWUgZGF0YS4NCj4gDQo+IEZvcnR1bmF0 ZWx5LCBpbiBhZGRpdGlvbiB0byBNYW51YWwgbW9kZSB0aGF0IGlzIGN1cnJlbnRseSB1c2VkIGJ5 IHRoZQ0KPiBkcml2ZXIgdG8gcGVyZm9ybSBJwrJDIHRyYW5zZmVycywgdGhlIG1vZHVsZSBzdXBw b3J0cyBhbHNvIHNvIGNhbGxlZA0KPiBTZXF1ZW5jZSBtb2RlLiBJbiB0aGlzIG1vZGUsIHRoZSBt b2R1bGUgYXV0b21hdGljYWxseSBwZXJmb3Jtcw0KPiBwcmVkZWZpbmVkIHNlcXVlbmNlIG9mIG9w ZXJhdGlvbnMgLSBpdCBzZW5kcyBhIHNsYXZlIGFkZHJlc3MsIHRyYW5zbWl0cw0KPiBzcGVjaWZp ZWQgbnVtYmVyIG9mIGJ5dGVzIGZyb20gdGhlIEZJRk8sIGNoYW5nZXMgdHJhbnNmZXIgZGlyZWN0 aW9uLA0KPiByZXNlbmRzIHRoZSBzbGF2ZSBhZGRyZXNzIGFuZCB0aGVuIHJlYWRzIHNwZWNpZmll ZCBudW1iZXIgb2YgYnl0ZXMgdG8NCj4gRklGTy4gV2hpbGUgdmVyeSBpbmZsZXhpYmxlLCB0aGlz IGRvZXMgZml0IGEgbW9zdCBjb21tb24gY2FzZSBvZiBtdWx0aQ0KPiBtZXNzYWdlIHRyYW5zZmVy IC0gdGhlIG9uZSB3aGVyZSB5b3UgZmlyc3Qgd3JpdGUgYSByZWdpc3RlciBudW1iZXIgeW91DQo+ IHdhbnQgdG8gcmVhZCBhbmQgdGhlbiByZWFkIGl0Lg0KPiANCj4gVG8gdXNlIHRoaXMgbW9kZSBl ZmZlY3RpdmVseSwgYSBudW1iZXIgb2YgY29uZGl0aW9ucyBtdXN0IGJlIG1ldCB0bw0KPiBlbnN1 cmUgdGhlIHRyYW5zYWN0aW9uIGRvZXMgZml0IHRoZSBwcmVkZWZpbmVkIHNlcXVlbmNlLiBJbiBj YXNlIHRoaXMgaXMNCj4gbm90IHRoZSBjYXNlLCBhIGZhbGxiYWNrIHRvIG1hbnVhbCBtb2RlIGlz IHVzZWQuDQo+IA0KPiBUaGUgaW5pdGlhbGl6YXRpb24gb2YgdGhpcyBtb2RlIGlzIHZlcnkgc2lt aWxhciB0byBNYW51YWwgbW9kZS4gVGhlIG1vc3QNCj4gbm90YWJsZSBkaWZmZXJlbmNlIGlzIGRp ZmZlcmVudCBiaXQgaW4gdGhlIE1hc3RlciBJbnRlcnJ1cHQgU3RhdHVzDQo+IGRlc2lnbmF0aW5n IGZpbmlzaGluZyBvZiB0cmFuc2FjdGlvbi4gQWxzbyBzb21lIG9mIHRoZSBlcnJvcnMsIGxpa2Ug VFNTLA0KPiBjYW5ub3QgaGFwcGVuIGluIHRoaXMgbW9kZS4NCj4gDQo+IFdoaWxlIGl0IGlzIHBv c3NpYmxlIHRvIHN1cHBvcnQgdHJhbnNhY3Rpb25zIHJlcXVlc3RpbmcgYSByZWFkIG9mIGFueQ0K PiBzaXplIChSRkwgaW50ZXJydXB0IHdpbGwgYmUgZ2VuZXJhdGVkIHdoZW4gRklGTyBzaXplIGlz IG5vdCBlbm91Z2gpIHRoZQ0KPiBURkwgaW50ZXJydXB0IGlzIG5vdCBhdmFpbGFibGUgaW4gdGhp cyBtb2RlLCB0aHVzIHRoZSB3cml0ZSBwYXJ0IG9mIHRoZQ0KPiB0cmFuc2FjdGlvbiBjYW5ub3Qg ZXhjZWVkIEZJRk9fU0laRSAoOCkuDQo+IA0KPiBOb3RlIHRoYXQgaW4gY2FzZSBvZiBhIE5BSyBk dXJpbmcgdHJhbnNhY3Rpb24sIHRoZSBOQS9ORCBzdGF0dXMgYml0cw0KPiB3aWxsIGJlIHNldCBi ZWZvcmUgU1RPUCBjb21tYW5kIGlzIGdlbmVyYXRlZCwgdHJpZ2dlcmluZyBhbiBpbnRlcnJ1cHQN Cj4gd2hpbGUgdGhlIGNvbnRyb2xsZXIgaXMgc3RpbGwgYnVzeS4gQ3VycmVudCBzb2x1dGlvbiBm b3IgdGhpcyBwcm9ibGVtIGlzDQo+IHRvIGFjdGl2ZWx5IHdhaXQgZm9yIHRoaXMgY29tbWFuZCB0 byBzdG9wIGJlZm9yZSBsZWF2aW5nIHhmZXIgY2FsbGJhY2suDQoNClJldmlld2VkLWJ5OiBBbGV4 YW5kZXIgU3ZlcmRsaW4gPGFsZXhhbmRlci5zdmVyZGxpbkBub2tpYS5jb20+DQoNCj4gU2lnbmVk LW9mZi1ieTogS3J6eXN6dG9mIEFkYW1za2kgPGtyenlzenRvZi5hZGFtc2tpQG5va2lhLmNvbT4N Cj4gLS0tDQo+IA0KPiBTb3JyeSBmb3IgdGhvc2UgcHJvYmxlbXMgSSBzdGlsbCBkb24ndCBrbm93 IHdoeSBteSBjaGVja3BhdGNoIGRpZCBub3QNCj4gY29tcGxhaW4gYWJvdXQgaXQgKGhhdmUgdG8g dmVyaWZ5IHRoYXQpIGFuZCBJIGRpZCBhZGQgc21hdGNoIHRvIG15DQo+IGFyc2VuYWwgbm93Lg0K PiANCj4gQ2hhbmdlcyBpbiB2MjoNCj4gLSBhZGRlZCB0aW1lb3V0IHRvIGF4eGlhX2kyY19oYW5k bGVfc2VxX25haygpDQo+IC0gY2hhbmdlZCB1ZGVsYXkgdG8gdXNsZWVwX3JhbmdlIGluIGF4eGlh X2kyY19oYW5kbGVfc2VxX25haygpDQo+IA0KPiAgZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1heHhp YS5jIHwgMTA4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLQ0KPiAgMSBmaWxlIGNo YW5nZWQsIDEwMSBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQ0KPiANCj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYXh4aWEuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9p MmMtYXh4aWEuYw0KPiBpbmRleCAzNTI1ODMyMWU4MWIuLjAzZjFjZTc1YTMyZSAxMDA2NDQNCj4g LS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1heHhpYS5jDQo+ICsrKyBiL2RyaXZlcnMvaTJj L2J1c3Nlcy9pMmMtYXh4aWEuYw0KPiBAQCAtMTIsNiArMTIsNyBAQA0KPiAgICovDQo+ICAjaW5j bHVkZSA8bGludXgvY2xrLmg+DQo+ICAjaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+DQo+ICsjaW5j bHVkZSA8bGludXgvZGVsYXkuaD4NCj4gICNpbmNsdWRlIDxsaW51eC9lcnIuaD4NCj4gICNpbmNs dWRlIDxsaW51eC9pMmMuaD4NCj4gICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+DQo+IEBAIC0yNSw2 ICsyNiw3IEBADQo+ICAjZGVmaW5lIEkyQ19YRkVSX1RJTUVPVVQgICAgKG1zZWNzX3RvX2ppZmZp ZXMoMjUwKSkNCj4gICNkZWZpbmUgSTJDX1NUT1BfVElNRU9VVCAgICAobXNlY3NfdG9famlmZmll cygxMDApKQ0KPiAgI2RlZmluZSBGSUZPX1NJWkUgICAgICAgICAgIDgNCj4gKyNkZWZpbmUgU0VR X0xFTiAgICAgICAgICAgICAyDQo+ICANCj4gICNkZWZpbmUgR0xPQkFMX0NPTlRST0wJCTB4MDAN Cj4gICNkZWZpbmUgICBHTE9CQUxfTVNUX0VOICAgICAgICAgQklUKDApDQo+IEBAIC01MSw2ICs1 Myw3IEBADQo+ICAjZGVmaW5lICAgQ01EX0JVU1kJCSgxPDwzKQ0KPiAgI2RlZmluZSAgIENNRF9N QU5VQUwJCSgweDAwIHwgQ01EX0JVU1kpDQo+ICAjZGVmaW5lICAgQ01EX0FVVE8JCSgweDAxIHwg Q01EX0JVU1kpDQo+ICsjZGVmaW5lICAgQ01EX1NFUVVFTkNFCQkoMHgwMiB8IENNRF9CVVNZKQ0K PiAgI2RlZmluZSBNU1RfUlhfWEZFUgkJMHgyYw0KPiAgI2RlZmluZSBNU1RfVFhfWEZFUgkJMHgz MA0KPiAgI2RlZmluZSBNU1RfQUREUl8xCQkweDM0DQo+IEBAIC04Nyw3ICs5MCw5IEBADQo+ICAg KiBheHhpYV9pMmNfZGV2IC0gSTJDIGRldmljZSBjb250ZXh0DQo+ICAgKiBAYmFzZTogcG9pbnRl ciB0byByZWdpc3RlciBzdHJ1Y3QNCj4gICAqIEBtc2c6IHBvaW50ZXIgdG8gY3VycmVudCBtZXNz YWdlDQo+IC0gKiBAbXNnX3hmcmQ6IG51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCBpbiBtc2cN Cj4gKyAqIEBtc2dfcjogcG9pbnRlciB0byBjdXJyZW50IHJlYWQgbWVzc2FnZSAoc2VxdWVuY2Ug dHJhbnNmZXIpDQo+ICsgKiBAbXNnX3hmcmQ6IG51bWJlciBvZiBieXRlcyB0cmFuc2ZlcnJlZCBp biB0eF9maWZvDQo+ICsgKiBAbXNnX3hmcmRfcjogbnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVycmVk IGluIHJ4X2ZpZm8NCj4gICAqIEBtc2dfZXJyOiBlcnJvciBjb2RlIGZvciBjb21wbGV0ZWQgbWVz c2FnZQ0KPiAgICogQG1zZ19jb21wbGV0ZTogeGZlciBjb21wbGV0aW9uIG9iamVjdA0KPiAgICog QGRldjogZGV2aWNlIHJlZmVyZW5jZQ0KPiBAQCAtOTgsNyArMTAzLDkgQEANCj4gIHN0cnVjdCBh eHhpYV9pMmNfZGV2IHsNCj4gIAl2b2lkIF9faW9tZW0gKmJhc2U7DQo+ICAJc3RydWN0IGkyY19t c2cgKm1zZzsNCj4gKwlzdHJ1Y3QgaTJjX21zZyAqbXNnX3I7DQo+ICAJc2l6ZV90IG1zZ194ZnJk Ow0KPiArCXNpemVfdCBtc2dfeGZyZF9yOw0KPiAgCWludCBtc2dfZXJyOw0KPiAgCXN0cnVjdCBj b21wbGV0aW9uIG1zZ19jb21wbGV0ZTsNCj4gIAlzdHJ1Y3QgZGV2aWNlICpkZXY7DQo+IEBAIC0y MjcsMTQgKzIzNCwxNCBAQCBzdGF0aWMgaW50IGkyY19tX3JlY3ZfbGVuKGNvbnN0IHN0cnVjdCBp MmNfbXNnICptc2cpDQo+ICAgKi8NCj4gIHN0YXRpYyBpbnQgYXh4aWFfaTJjX2VtcHR5X3J4X2Zp Zm8oc3RydWN0IGF4eGlhX2kyY19kZXYgKmlkZXYpDQo+ICB7DQo+IC0Jc3RydWN0IGkyY19tc2cg Km1zZyA9IGlkZXYtPm1zZzsNCj4gKwlzdHJ1Y3QgaTJjX21zZyAqbXNnID0gaWRldi0+bXNnX3I7 DQo+ICAJc2l6ZV90IHJ4X2ZpZm9fYXZhaWwgPSByZWFkbChpZGV2LT5iYXNlICsgTVNUX1JYX0ZJ Rk8pOw0KPiAtCWludCBieXRlc190b190cmFuc2ZlciA9IG1pbihyeF9maWZvX2F2YWlsLCBtc2ct PmxlbiAtIGlkZXYtPm1zZ194ZnJkKTsNCj4gKwlpbnQgYnl0ZXNfdG9fdHJhbnNmZXIgPSBtaW4o cnhfZmlmb19hdmFpbCwgbXNnLT5sZW4gLSBpZGV2LT5tc2dfeGZyZF9yKTsNCj4gIA0KPiAgCXdo aWxlIChieXRlc190b190cmFuc2Zlci0tID4gMCkgew0KPiAgCQlpbnQgYyA9IHJlYWRsKGlkZXYt PmJhc2UgKyBNU1RfREFUQSk7DQo+ICANCj4gLQkJaWYgKGlkZXYtPm1zZ194ZnJkID09IDAgJiYg aTJjX21fcmVjdl9sZW4obXNnKSkgew0KPiArCQlpZiAoaWRldi0+bXNnX3hmcmRfciA9PSAwICYm IGkyY19tX3JlY3ZfbGVuKG1zZykpIHsNCj4gIAkJCS8qDQo+ICAJCQkgKiBDaGVjayBsZW5ndGgg Ynl0ZSBmb3IgU01CdXMgYmxvY2sgcmVhZA0KPiAgCQkJICovDQo+IEBAIC0yNDcsNyArMjU0LDcg QEAgc3RhdGljIGludCBheHhpYV9pMmNfZW1wdHlfcnhfZmlmbyhzdHJ1Y3QgYXh4aWFfaTJjX2Rl diAqaWRldikNCj4gIAkJCW1zZy0+bGVuID0gMSArIGM7DQo+ICAJCQl3cml0ZWwobXNnLT5sZW4s IGlkZXYtPmJhc2UgKyBNU1RfUlhfWEZFUik7DQo+ICAJCX0NCj4gLQkJbXNnLT5idWZbaWRldi0+ bXNnX3hmcmQrK10gPSBjOw0KPiArCQltc2ctPmJ1ZltpZGV2LT5tc2dfeGZyZF9yKytdID0gYzsN Cj4gIAl9DQo+ICANCj4gIAlyZXR1cm4gMDsNCj4gQEAgLTI4Nyw3ICsyOTQsNyBAQCBzdGF0aWMg aXJxcmV0dXJuX3QgYXh4aWFfaTJjX2lzcihpbnQgaXJxLCB2b2lkICpfZGV2KQ0KPiAgCX0NCj4g IA0KPiAgCS8qIFJYIEZJRk8gbmVlZHMgc2VydmljZT8gKi8NCj4gLQlpZiAoaTJjX21fcmQoaWRl di0+bXNnKSAmJiAoc3RhdHVzICYgTVNUX1NUQVRVU19SRkwpKQ0KPiArCWlmIChpMmNfbV9yZChp ZGV2LT5tc2dfcikgJiYgKHN0YXR1cyAmIE1TVF9TVEFUVVNfUkZMKSkNCj4gIAkJYXh4aWFfaTJj X2VtcHR5X3J4X2ZpZm8oaWRldik7DQo+ICANCj4gIAkvKiBUWCBGSUZPIG5lZWRzIHNlcnZpY2U/ ICovDQo+IEBAIC0zMjAsOSArMzI3LDEyIEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBheHhpYV9pMmNf aXNyKGludCBpcnEsIHZvaWQgKl9kZXYpDQo+ICAJfSBlbHNlIGlmIChzdGF0dXMgJiBNU1RfU1RB VFVTX1NOUykgew0KPiAgCQkvKiBUcmFuc2ZlciBkb25lICovDQo+ICAJCWkyY19pbnRfZGlzYWJs ZShpZGV2LCB+TVNUX1NUQVRVU19UU1MpOw0KPiAtCQlpZiAoaTJjX21fcmQoaWRldi0+bXNnKSAm JiBpZGV2LT5tc2dfeGZyZCA8IGlkZXYtPm1zZy0+bGVuKQ0KPiArCQlpZiAoaTJjX21fcmQoaWRl di0+bXNnX3IpICYmIGlkZXYtPm1zZ194ZnJkX3IgPCBpZGV2LT5tc2dfci0+bGVuKQ0KPiAgCQkJ YXh4aWFfaTJjX2VtcHR5X3J4X2ZpZm8oaWRldik7DQo+ICAJCWNvbXBsZXRlKCZpZGV2LT5tc2df Y29tcGxldGUpOw0KPiArCX0gZWxzZSBpZiAoc3RhdHVzICYgTVNUX1NUQVRVU19TUykgew0KPiAr CQkvKiBBdXRvL1NlcXVlbmNlIHRyYW5zZmVyIGRvbmUgKi8NCj4gKwkJY29tcGxldGUoJmlkZXYt Pm1zZ19jb21wbGV0ZSk7DQo+ICAJfSBlbHNlIGlmIChzdGF0dXMgJiBNU1RfU1RBVFVTX1RTUykg ew0KPiAgCQkvKiBUcmFuc2ZlciB0aW1lb3V0ICovDQo+ICAJCWlkZXYtPm1zZ19lcnIgPSAtRVRJ TUVET1VUOw0KPiBAQCAtMzYzLDYgKzM3Myw3MCBAQCBzdGF0aWMgdm9pZCBheHhpYV9pMmNfc2V0 X2FkZHIoc3RydWN0IGF4eGlhX2kyY19kZXYgKmlkZXYsIHN0cnVjdCBpMmNfbXNnICptc2cpDQo+ ICAJd3JpdGVsKGFkZHJfMiwgaWRldi0+YmFzZSArIE1TVF9BRERSXzIpOw0KPiAgfQ0KPiAgDQo+ ICsvKiBUaGUgTkFLIGludGVycnVwdCB3aWxsIGJlIHNlbnQgX2JlZm9yZV8gaXNzdWluZyBTVE9Q IGNvbW1hbmQNCj4gKyAqIHNvIHRoZSBjb250cm9sbGVyIG1pZ2h0IHN0aWxsIGJlIGJ1c3kgcHJv Y2Vzc2luZyBpdC4gTm8NCj4gKyAqIGludGVycnVwdCB3aWxsIGJlIHNlbnQgYXQgdGhlIGVuZCBz byB3ZSBoYXZlIHRvIHBvbGwgZm9yIGl0DQo+ICsgKi8NCj4gK3N0YXRpYyBpbnQgYXh4aWFfaTJj X2hhbmRsZV9zZXFfbmFrKHN0cnVjdCBheHhpYV9pMmNfZGV2ICppZGV2KQ0KPiArew0KPiArCXVu c2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyBJMkNfWEZFUl9USU1FT1VUOw0KPiArDQo+ ICsJZG8gew0KPiArCQlpZiAoKHJlYWRsKGlkZXYtPmJhc2UgKyBNU1RfQ09NTUFORCkgJiBDTURf QlVTWSkgPT0gMCkNCj4gKwkJCXJldHVybiAwOw0KPiArCQl1c2xlZXBfcmFuZ2UoMSwgMTAwKTsN Cj4gKwl9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSk7DQo+ICsNCj4gKwly ZXR1cm4gLUVUSU1FRE9VVDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBheHhpYV9pMmNfeGZl cl9zZXEoc3RydWN0IGF4eGlhX2kyY19kZXYgKmlkZXYsIHN0cnVjdCBpMmNfbXNnIG1zZ3NbXSkN Cj4gK3sNCj4gKwl1MzIgaW50X21hc2sgPSBNU1RfU1RBVFVTX0VSUiB8IE1TVF9TVEFUVVNfU1Mg fCBNU1RfU1RBVFVTX1JGTDsNCj4gKwl1MzIgcmxlbiA9IGkyY19tX3JlY3ZfbGVuKCZtc2dzWzFd KSA/IEkyQ19TTUJVU19CTE9DS19NQVggOiBtc2dzWzFdLmxlbjsNCj4gKwl1bnNpZ25lZCBsb25n IHRpbWVfbGVmdDsNCj4gKw0KPiArCWF4eGlhX2kyY19zZXRfYWRkcihpZGV2LCAmbXNnc1swXSk7 DQo+ICsNCj4gKwl3cml0ZWwobXNnc1swXS5sZW4sIGlkZXYtPmJhc2UgKyBNU1RfVFhfWEZFUik7 DQo+ICsJd3JpdGVsKHJsZW4sIGlkZXYtPmJhc2UgKyBNU1RfUlhfWEZFUik7DQo+ICsNCj4gKwlp ZGV2LT5tc2cgPSAmbXNnc1swXTsNCj4gKwlpZGV2LT5tc2dfciA9ICZtc2dzWzFdOw0KPiArCWlk ZXYtPm1zZ194ZnJkID0gMDsNCj4gKwlpZGV2LT5tc2dfeGZyZF9yID0gMDsNCj4gKwlheHhpYV9p MmNfZmlsbF90eF9maWZvKGlkZXYpOw0KPiArDQo+ICsJd3JpdGVsKENNRF9TRVFVRU5DRSwgaWRl di0+YmFzZSArIE1TVF9DT01NQU5EKTsNCj4gKw0KPiArCXJlaW5pdF9jb21wbGV0aW9uKCZpZGV2 LT5tc2dfY29tcGxldGUpOw0KPiArCWkyY19pbnRfZW5hYmxlKGlkZXYsIGludF9tYXNrKTsNCj4g Kw0KPiArCXRpbWVfbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmaWRldi0+bXNn X2NvbXBsZXRlLA0KPiArCQkJCQkJSTJDX1hGRVJfVElNRU9VVCk7DQo+ICsNCj4gKwlpMmNfaW50 X2Rpc2FibGUoaWRldiwgaW50X21hc2spOw0KPiArDQo+ICsJYXh4aWFfaTJjX2VtcHR5X3J4X2Zp Zm8oaWRldik7DQo+ICsNCj4gKwlpZiAoaWRldi0+bXNnX2VyciA9PSAtRU5YSU8pIHsNCj4gKwkJ aWYgKGF4eGlhX2kyY19oYW5kbGVfc2VxX25hayhpZGV2KSkNCj4gKwkJCWF4eGlhX2kyY19pbml0 KGlkZXYpOw0KPiArCX0gZWxzZSBpZiAocmVhZGwoaWRldi0+YmFzZSArIE1TVF9DT01NQU5EKSAm IENNRF9CVVNZKQ0KPiArCQlkZXZfd2FybihpZGV2LT5kZXYsICJidXN5IGFmdGVyIHhmZXJcbiIp Ow0KPiArDQo+ICsJaWYgKHRpbWVfbGVmdCA9PSAwKSB7DQo+ICsJCWlkZXYtPm1zZ19lcnIgPSAt RVRJTUVET1VUOw0KPiArCQlpMmNfcmVjb3Zlcl9idXMoJmlkZXYtPmFkYXB0ZXIpOw0KPiArCQlh eHhpYV9pMmNfaW5pdChpZGV2KTsNCj4gKwl9DQo+ICsNCj4gKwlpZiAodW5saWtlbHkoaWRldi0+ bXNnX2VycikgJiYgaWRldi0+bXNnX2VyciAhPSAtRU5YSU8pDQo+ICsJCWF4eGlhX2kyY19pbml0 KGlkZXYpOw0KPiArDQo+ICsJcmV0dXJuIGlkZXYtPm1zZ19lcnI7DQo+ICt9DQo+ICsNCj4gIHN0 YXRpYyBpbnQgYXh4aWFfaTJjX3hmZXJfbXNnKHN0cnVjdCBheHhpYV9pMmNfZGV2ICppZGV2LCBz dHJ1Y3QgaTJjX21zZyAqbXNnKQ0KPiAgew0KPiAgCXUzMiBpbnRfbWFzayA9IE1TVF9TVEFUVVNf RVJSIHwgTVNUX1NUQVRVU19TTlM7DQo+IEBAIC0zNzEsNyArNDQ1LDkgQEAgc3RhdGljIGludCBh eHhpYV9pMmNfeGZlcl9tc2coc3RydWN0IGF4eGlhX2kyY19kZXYgKmlkZXYsIHN0cnVjdCBpMmNf bXNnICptc2cpDQo+ICAJdW5zaWduZWQgaW50IHd0X3ZhbHVlOw0KPiAgDQo+ICAJaWRldi0+bXNn ID0gbXNnOw0KPiArCWlkZXYtPm1zZ19yID0gbXNnOw0KPiAgCWlkZXYtPm1zZ194ZnJkID0gMDsN Cj4gKwlpZGV2LT5tc2dfeGZyZF9yID0gMDsNCj4gIAlyZWluaXRfY29tcGxldGlvbigmaWRldi0+ bXNnX2NvbXBsZXRlKTsNCj4gIA0KPiAgCWF4eGlhX2kyY19zZXRfYWRkcihpZGV2LCBtc2cpOw0K PiBAQCAtNDUyLDYgKzUyOCwxOCBAQCBzdGF0aWMgaW50IGF4eGlhX2kyY19zdG9wKHN0cnVjdCBh eHhpYV9pMmNfZGV2ICppZGV2KQ0KPiAgCXJldHVybiAwOw0KPiAgfQ0KPiAgDQo+ICsvKiBUaGlz IGZ1bmN0aW9uIGNoZWNrcyBpZiB0aGUgbXNnc1tdIGFycmF5IGNvbnRhaW5zIG1lc3NhZ2VzIGNv bXBhdGlibGUgd2l0aA0KPiArICogU2VxdWVuY2UgbW9kZSBvZiBvcGVyYXRpb24uIFRoaXMgbW9k ZSBhc3N1bWVzIHRoZXJlIHdpbGwgYmUgZXhhY3RseSBvbmUNCj4gKyAqIHdyaXRlIG9mIG5vbi16 ZXJvIGxlbmd0aCBmb2xsb3dlZCBieSBleGFjdGx5IG9uZSByZWFkIG9mIG5vbi16ZXJvIGxlbmd0 aCwNCj4gKyAqIGJvdGggdGFyZ2V0ZWQgYXQgdGhlIHNhbWUgY2xpZW50IGRldmljZS4NCj4gKyAq Lw0KPiArc3RhdGljIGJvb2wgYXh4aWFfaTJjX3NlcXVlbmNlX29rKHN0cnVjdCBpMmNfbXNnIG1z Z3NbXSwgaW50IG51bSkNCj4gK3sNCj4gKwlyZXR1cm4gbnVtID09IFNFUV9MRU4gJiYgIWkyY19t X3JkKCZtc2dzWzBdKSAmJiBpMmNfbV9yZCgmbXNnc1sxXSkgJiYNCj4gKwkgICAgICAgbXNnc1sw XS5sZW4gPiAwICYmIG1zZ3NbMF0ubGVuIDw9IEZJRk9fU0laRSAmJg0KPiArCSAgICAgICBtc2dz WzFdLmxlbiA+IDAgJiYgbXNnc1swXS5hZGRyID09IG1zZ3NbMV0uYWRkcjsNCj4gK30NCj4gKw0K PiAgc3RhdGljIGludA0KPiAgYXh4aWFfaTJjX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFw LCBzdHJ1Y3QgaTJjX21zZyBtc2dzW10sIGludCBudW0pDQo+ICB7DQo+IEBAIC00NjAsNiArNTQ4 LDEyIEBAIGF4eGlhX2kyY194ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCwgc3RydWN0IGky Y19tc2cgbXNnc1tdLCBpbnQgbnVtKQ0KPiAgCWludCByZXQgPSAwOw0KPiAgDQo+ICAJaWRldi0+ bXNnX2VyciA9IDA7DQo+ICsNCj4gKwlpZiAoYXh4aWFfaTJjX3NlcXVlbmNlX29rKG1zZ3MsIG51 bSkpIHsNCj4gKwkJcmV0ID0gYXh4aWFfaTJjX3hmZXJfc2VxKGlkZXYsIG1zZ3MpOw0KPiArCQly ZXR1cm4gcmV0ID8gOiBTRVFfTEVOOw0KPiArCX0NCj4gKw0KPiAgCWkyY19pbnRfZW5hYmxlKGlk ZXYsIE1TVF9TVEFUVVNfVFNTKTsNCj4gIA0KPiAgCWZvciAoaSA9IDA7IHJldCA9PSAwICYmIGkg PCBudW07ICsraSkNCj4gDQoNCi0tIA0KQmVzdCByZWdhcmRzLA0KQWxleGFuZGVyIFN2ZXJkbGlu Lg0K