From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jean-Francois Moine Subject: [PATCH] ASoC: generic: add generic compound card with DT support Date: Tue, 31 Dec 2013 11:31:38 +0100 Message-ID: <20131231113138.102044cf@armhf> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from smtp6-g21.free.fr (smtp6-g21.free.fr [212.27.42.6]) by alsa0.perex.cz (Postfix) with ESMTP id 56BE92619D0 for ; Tue, 31 Dec 2013 11:32:33 +0100 (CET) List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: alsa-devel-bounces@alsa-project.org Sender: alsa-devel-bounces@alsa-project.org To: Liam Girdwood , Lars-Peter Clausen Cc: alsa-devel@alsa-project.org, Mark Brown , linux-kernel@vger.kernel.org List-Id: alsa-devel@alsa-project.org U29tZSBhdWRpbyBjYXJkcyBhcmUgYnVpbHQgZnJvbSBkaWZmZXJlbnQgaGFyZHdhcmUgY29tcG9u ZW50cy4KV2hlbiBzdWNoIGNvbXBvdW5kIGNhcmRzIGRvbid0IG5lZWQgc3BlY2lmaWMgY29kZSwg dGhpcyBkcml2ZXIgY3JlYXRlcwp0aGVtIHdpdGggdGhlIHJlcXVpcmVkIERBSSBsaW5rcyBhbmQg cm91dGVzIGZyb20gYSBEVC4KClNpZ25lZC1vZmYtYnk6IEplYW4tRnJhbmNvaXMgTW9pbmUgPG1v aW5lamZAZnJlZS5mcj4KLS0tClRoaXMgY29kZSB3YXMgZmlyc3QgZGV2ZWxvcHBlZCBvbiB0aGUg Z2VuZXJpYyBzaW1wbGUgY2FyZCwgYnV0IGl0cwpyZWNlbnQgRFQgZXh0ZW5zaW9uIGNhbm5vdCBi ZSBlYXNpbHkgZXh0ZW5kZWQgYWdhaW4gdG8gc3VwcG9ydCBjb21wb3VuZApjYXJkcyBhcyB0aGUg b25lIGluIHRoZSBDdWJveC4KTm90ZSBhbHNvIHRoYXQgdGhlIGV4YW1wbGUgcmVsaWVzIG9uIGEg cHJvcG9zZWQgcGF0Y2ggb2YgbWluZSBhaW1pbmcgdG8KcmVuZGVyIHRoZSBjb2RlYyBuYW1lIC8g T0Ygbm9kZSBvcHRpb25hbCBpbiBEQUkgbGlua3MKKGh0dHA6Ly9tYWlsbWFuLmFsc2EtcHJvamVj dC5vcmcvcGlwZXJtYWlsL2Fsc2EtZGV2ZWwvMjAxMy1EZWNlbWJlci8wNzAwODIuaHRtbCkuCi0t LQogLi4uL2RldmljZXRyZWUvYmluZGluZ3Mvc291bmQvY29tcG91bmQtY2FyZC50eHQgfCAgOTUg KysrKysrKysrKysrCiBzb3VuZC9zb2MvZ2VuZXJpYy9LY29uZmlnICAgICAgICAgICAgICAgICAg ICAgICB8ICAgNiArCiBzb3VuZC9zb2MvZ2VuZXJpYy9NYWtlZmlsZSAgICAgICAgICAgICAgICAg ICAgICB8ICAgMiArCiBzb3VuZC9zb2MvZ2VuZXJpYy9jb21wb3VuZC1jYXJkLmMgICAgICAgICAg ICAgICB8IDI0NyArKysrKysrKysrKysrKysrKysrKysrKysrCiA0IGZpbGUgY2hhbmdlZCwgMzUw IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmlu ZGluZ3Mvc291bmQvY29tcG91bmQtY2FyZC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUv YmluZGluZ3Mvc291bmQvY29tcG91bmQtY2FyZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uNTU0YTc5NgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2 aWNldHJlZS9iaW5kaW5ncy9zb3VuZC9jb21wb3VuZC1jYXJkLnR4dApAQCAtMCwwICsxLDk1IEBA CitEZXZpY2UtVHJlZSBiaW5kaW5ncyBmb3IgY29tcG91bmQgYXVkaW8gY2FyZAorCitDb21wb3Vu ZCBhdWRpbyBjYXJkIGRlc2NyaWJlcyB0aGUgbGlua3MgYmV0d2VlbiB0aGUgZGlmZmVyZW50IHBh cnRzCitvZiBhbiBhdWRpbyBjYXJkIGJ1aWx0IGZyb20gZGlmZmVyZW50IGhhcmR3YXJlIGNvbXBv bmVudHMuCisKK1JlcXVpcmVkIHByb3BlcnRpZXM6CisgIC0gY29tcGF0aWJsZTogc2hvdWxkIGJl ICJjb21wb3VuZC1hdWRpby1jYXJkIgorICAtIGF1ZGlvLWNvbnRyb2xsZXI6IHBoYW5kbGUgb2Yg dGhlIGF1ZGlvIGNvbnRyb2xsZXIKKworT3B0aW9uYWwgcHJvcGVydGllczoKKyAgLSByb3V0ZXM6 IGxpc3Qgb2YgY291cGxlIG9mIHN0cmluZ3MgKHNpbmssIHNvdXJjZSkKKworUmVxdWlyZWQgc3Vi bm9kZXM6CisgIC0gbGluazogREFJIGxpbmsgc3Vibm9kZQorCUF0IGxlYXN0IG9uZSBsaW5rIG11 c3QgYmUgc3BlY2lmaWVkLgorCitSZXF1aXJlZCBsaW5rIHN1Ym5vZGUgcHJvcGVydGllczoKKyAg LSBsaW5rLW5hbWU6IG5hbWVzIG9mIHRoZSBEQUkgbGluayBhbmQgb2YgdGhlIHN0cmVhbQorICAt IGNwdS1kYWktbmFtZTogbmFtZSBvZiB0aGUgQ1BVIG9yIENPREVDIERBSQorCQlBbiBlbXB0eSBz dHJpbmcgaW5kaWNhdGVzIHRoYXQgdGhlIENQVSBEQUkgaXMKKwkJdGhlIHNhbWUgYXMgdGhlIGF1 ZGlvIGNvbnRyb2xsZXIuCisgIC0gY29kZWMtZGFpLW5hbWU6IG5hbWUgb2YgdGhlIENPREVDIERB SQorCitPcHRpb25hbCBsaW5rIHN1Ym5vZGUgcHJvcGVydGllczoKKyAgLSBhdWRpby1jb2RlYyBv ciBjb2RlYy1uYW1lOiBwaGFuZGxlIG9yIG5hbWUgb2YgdGhlIENPREVDCisJCWluIGNhc2UgdGhl IGNvZGVjLWRhaS1uYW1lIGlzIG5vdCB1bmlxdWUKKyAgLSBmb3JtYXQ6IERBSSBmb3JtYXQuIE9u ZSBvZjoKKwkJImkycyIsICJyaWdodF9qIiwgImxlZnRfaiIgLCAiZHNwX2EiCisJCSJkc3BfYiIs ICJhYzk3IiwgInBkbSIsICJtc2IiLCAibHNiIgorICAtIGZyb250LWVuZCBvciBiYWNrLWVuZDog cHJlc2VudCBpZiB0aGUgREFJIGxpbmsgZGVzY3JpYmVzIHJlc3AuCisJCWEgZnJvbnQtZW5kIENQ VSBEQUkgb3IgYSBiYWNrLWVuZCBDT0RFQyBEQUkKKyAgLSBwbGF5YmFjayBvciBjYXB0dXJlOiBw cmVzZW50IGlmIHRoZSBEQUkgbGluayBpcyB1c2VkIGZvcgorCQlwbGF5YmFjayBvciBjYXB0dXJl IG9ubHkKKworRXhhbXBsZSBub2RlOgorCitUaGUgYXVkaW8gc3Vic3lzdGVtIGZvdW5kIGluIHRo ZSBTb2xpZFJ1biBDdWJveCBpcyBjb21wb3NlZCBvZjoKKworLSBhbiBhdWRpbyBjb250cm9sbGVy IHdoaWNoIG91dHB1dHMgcGxheWJhY2sgc3RyZWFtcyBvbiBlaXRoZXIgb25lIG9yIGJvdGgKKyAg b2YgSTJTIGFuZCBTL1BESUYsCisKKy0gYSBIRE1JIHRyYW5zbWl0dGVyIHdoaWNoIGNhbiBnZXQg aXRzIGlucHV0IGZyb20gZWl0aGVyIEkyUyBvciBTL1BESUYsCisKKy0gYW4gb3B0aWNhbCBTL1BE SUYgY29ubmVjdG9yLgorCisJc291bmQgeworCQljb21wYXRpYmxlID0gImNvbXBvdW5kLWF1ZGlv LWNhcmQiOworCQlhdWRpby1jb250cm9sbGVyID0gPCZhdWRpbzE+OworCQlyb3V0ZXMgPQorCQkJ IkkyUyBQbGF5YmFjayIsICAgIlN5c3RlbSBQbGF5YmFjayIsCisJCQkiU1BESUYgUGxheWJhY2si LCAiU3lzdGVtIFBsYXliYWNrIiwKKwkJCSJoZG1pLW91dCIsCSJJMlMgUGxheWJhY2siLAorCQkJ ImhkbWktb3V0IiwJIlNQRElGIFBsYXliYWNrIiwKKwkJCSJzcGRpZi1vdXQiLAkiU1BESUYgUGxh eWJhY2siOworCQlsaW5rQDAgeworCQkJbGluay1uYW1lID0gIlN5c3RlbSBhdWRpbyI7CisJCQlm cm9udC1lbmQ7CisJCQljcHUtZGFpLW5hbWUgPSAibXZlYnUtYXVkaW8iOworCQkJY29kZWMtZGFp LW5hbWUgPSAic25kLXNvYy1kdW1teS1kYWkiOworCQkJZm9ybWF0ID0gImkycyI7CisJCQlwbGF5 YmFjazsKKwkJfTsKKwkJbGlua0AxIHsKKwkJCWxpbmstbmFtZSA9ICJoZG1pLWkycyI7CisJCQli YWNrLWVuZDsKKwkJCWNwdS1kYWktbmFtZSA9ICJpMnMiOworCQkJY29kZWMtZGFpLW5hbWUgPSAi aTJzLWhpZmkiOworCQkJcGxheWJhY2s7CisJCX07CisJCWxpbmtAMiB7CisJCQlsaW5rLW5hbWUg PSAiaGRtaS1zcGRpZiI7CisJCQliYWNrLWVuZDsKKwkJCWNwdS1kYWktbmFtZSA9ICJzcGRpZiI7 CisJCQljb2RlYy1kYWktbmFtZSA9ICJzcGRpZi1oaWZpIjsKKwkJCXBsYXliYWNrOworCQl9Owor CQlsaW5rQDMgeworCQkJbGluay1uYW1lID0gInNwZGlmIjsKKwkJCWJhY2stZW5kOworCQkJY3B1 LWRhaS1uYW1lID0gInNwZGlmIjsKKwkJCWNvZGVjLWRhaS1uYW1lID0gImRpdC1oaWZpIjsKKwkJ CXBsYXliYWNrOworCQl9OworCX07CisKKwloZG1pX2NvZGVjOiBoZG1pLWNvZGVjIHsKKwkJY29t cGF0aWJsZSA9ICJueHAsdGRhOTk4eC1jb2RlYyI7CisJCWF1ZGlvLXBvcnRzID0gPDB4MDM+LCA8 MHgwND47CisJfTsKKworCXNwZGlmX2NvZGVjOiBzcGRpZi1jb2RlYyB7CisJCWNvbXBhdGlibGUg PSAibGludXgsc3BkaWYtZGl0IjsKKwl9OworCisKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9nZW5l cmljL0tjb25maWcgYi9zb3VuZC9zb2MvZ2VuZXJpYy9LY29uZmlnCmluZGV4IDYxMGY2MTIuLmYy Njc4YWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9nZW5lcmljL0tjb25maWcKKysrIGIvc291bmQv c29jL2dlbmVyaWMvS2NvbmZpZwpAQCAtMiwzICsyLDkgQEAgY29uZmlnIFNORF9TSU1QTEVfQ0FS RAogCXRyaXN0YXRlICJBU29DIFNpbXBsZSBzb3VuZCBjYXJkIHN1cHBvcnQiCiAJaGVscAogCSAg VGhpcyBvcHRpb24gZW5hYmxlcyBnZW5lcmljIHNpbXBsZSBzb3VuZCBjYXJkIHN1cHBvcnQKKwor Y29uZmlnIFNORF9DT01QT1VORF9DQVJECisJdHJpc3RhdGUgIkFTb0MgQ29tcG91bmQgc291bmQg Y2FyZCBzdXBwb3J0IgorCWRlcGVuZHMgb24gT0YKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFi bGVzIHRoZSBnZW5lcmljIGNvbXBvdW5kIHNvdW5kIGNhcmQgc3VwcG9ydC4KZGlmZiAtLWdpdCBh L3NvdW5kL3NvYy9nZW5lcmljL01ha2VmaWxlIGIvc291bmQvc29jL2dlbmVyaWMvTWFrZWZpbGUK aW5kZXggOWMzYjI0Ni4uNDM0Y2I3OSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2dlbmVyaWMvTWFr ZWZpbGUKKysrIGIvc291bmQvc29jL2dlbmVyaWMvTWFrZWZpbGUKQEAgLTEsMyArMSw1IEBACiBz bmQtc29jLXNpbXBsZS1jYXJkLW9ianMJOj0gc2ltcGxlLWNhcmQubworc25kLXNvYy1jb21wb3Vu ZC1jYXJkLW9ianMJOj0gY29tcG91bmQtY2FyZC5vCiAKIG9iai0kKENPTkZJR19TTkRfU0lNUExF X0NBUkQpCSs9IHNuZC1zb2Mtc2ltcGxlLWNhcmQubworb2JqLSQoQ09ORklHX1NORF9DT01QT1VO RF9DQVJEKQkrPSBzbmQtc29jLWNvbXBvdW5kLWNhcmQubwpkaWZmIC0tZ2l0IGEvc291bmQvc29j L2dlbmVyaWMvY29tcG91bmQtY2FyZC5jIGIvc291bmQvc29jL2dlbmVyaWMvY29tcG91bmQtY2Fy ZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1N2UxNTkKLS0tIC9kZXYv bnVsbAorKysgYi9zb3VuZC9zb2MvZ2VuZXJpYy9jb21wb3VuZC1jYXJkLmMKQEAgLTAsMCArMSwy NDcgQEAKKy8qCisgKiBBU29DIGNvbXBvdW5kIHNvdW5kIGNhcmQgc3VwcG9ydAorICoKKyAqIENv cHlyaWdodCAoQykgMjAxMyBKZWFuLUZyYW5jb2lzIE1vaW5lIDxtb2luZWpmQGZyZWUuZnI+Cisg KgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2 aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4K KyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKworLy8gbGluayB0eXBlcworI2RlZmluZSBMSU5LX0ZF IDAJLyogZnJvbnQtZW5kICovCisjZGVmaW5lIExJTktfQkUgMQkvKiBiYWNrLWVuZCAqLworI2Rl ZmluZSBMSU5LX0NDIDIJLyogKGNvbnRyb2xsZXIgb3IgY29kZWMpIHRvIGNvZGVjICovCisKK3N0 cnVjdCBjb21wb3VuZF9jYXJkX2RhdGEgeworCXN0cnVjdCBzbmRfc29jX2NhcmQgc25kX2NhcmQ7 CisJc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgKnNuZF9saW5rczsKK307CisKKy8qIGdldCBhIERB SSBsaW5rICovCitzdGF0aWMgaW50IGdldF9saW5rKHN0cnVjdCBjb21wb3VuZF9jYXJkX2RhdGEg KnByaXYsCisJCQlzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayAqbGluaywKKwkJCXN0cnVjdCBkZXZp Y2Vfbm9kZSAqY3RybF9ucCwKKwkJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJc3RydWN0 IGRldmljZV9ub2RlICpjb2RlY19ucDsKKwljb25zdCBjaGFyICpjcHVfZGFpX25hbWU7CisJaW50 IHR5cGUsIHJldDsKKworCS8qIG9wdGlvbmFsIGxpbmstbmFtZSAqLworCW9mX3Byb3BlcnR5X3Jl YWRfc3RyaW5nKG5wLCAibGluay1uYW1lIiwgJmxpbmstPm5hbWUpOworCWxpbmstPnN0cmVhbV9u YW1lID0gbGluay0+bmFtZTsKKworCS8qIGxpbmsgdHlwZSAqLworCWlmIChvZl9wcm9wZXJ0eV9y ZWFkX2Jvb2wobnAsICJmcm9udC1lbmQiKSkKKwkJdHlwZSA9IExJTktfRkU7CisJZWxzZSBpZiAo b2ZfcHJvcGVydHlfcmVhZF9ib29sKG5wLCAiYmFjay1lbmQiKSkKKwkJdHlwZSA9IExJTktfQkU7 CisJZWxzZQorCQl0eXBlID0gTElOS19DQzsKKworCS8qIGNwdS1kYWktbmFtZSAqLworCXJldCA9 IG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG5wLCAiY3B1LWRhaS1uYW1lIiwKKwkJCQkJJmNwdV9k YWlfbmFtZSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKHByaXYtPnNuZF9jYXJkLmRldiwKKwkJ CSJObyB2YWxpZCBjcHUtZGFpLW5hbWUgZm91bmRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwor CS8qIGFuIGVtcHR5IGNwdS1kYWktbmFtZSBmb3JjZXMgdGhlIGF1ZGlvLWNvbnRyb2xsZXIgKi8K KwlpZiAoY3B1X2RhaV9uYW1lWzBdID09ICdcMCcpCisJCWxpbmstPmNwdV9vZl9ub2RlID0gY3Ry bF9ucDsKKwllbHNlCisJCWxpbmstPmNwdV9kYWlfbmFtZSA9IGNwdV9kYWlfbmFtZTsKKworCS8q IHRoZSBjb2RlYyBtYXkgYmUgb21pdHRlZCBvciBzcGVjaWZpZWQgYnkgbmFtZSBvciBwaGFuZGxl ICovCisJY29kZWNfbnAgPSBvZl9wYXJzZV9waGFuZGxlKG5wLCAiYXVkaW8tY29kZWMiLCAwKTsK KwlpZiAoY29kZWNfbnApCisJCWxpbmstPmNvZGVjX29mX25vZGUgPSBjb2RlY19ucDsKKwllbHNl CisJCW9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG5wLCAiY29kZWMtbmFtZSIsCisJCQkJCSZsaW5r LT5jb2RlY19uYW1lKTsKKworCS8qIGNvZGVjLWRhaS1uYW1lICovCisJcmV0ID0gb2ZfcHJvcGVy dHlfcmVhZF9zdHJpbmcobnAsICJjb2RlYy1kYWktbmFtZSIsCisJCQkJCSZsaW5rLT5jb2RlY19k YWlfbmFtZSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKHByaXYtPnNuZF9jYXJkLmRldiwKKwkJ CSJGYWlsZWQgdG8gcGFyc2UgY29kZWMtZGFpLW5hbWVcbiIpOworCQlyZXR1cm4gcmV0OworCX0K KworCWlmICh0eXBlID09IExJTktfQkUpIHsKKwkJbGluay0+bm9fcGNtID0gMTsKKwkJLyogZG9u J3Qgc2V0IHRoZSBwbGF0Zm9ybSwgb3RoZXJ3aXNlLCB0aGUgcGxhdGZvcm0gZnVuY3Rpb25zCisJ CSAqIGFyZSBjYWxsZWQgbWFueSB0aW1lcyAqLworCX0gZWxzZSB7CisJCWxpbmstPnBsYXRmb3Jt X29mX25vZGUgPSBjdHJsX25wOworCQlpZiAodHlwZSA9PSBMSU5LX0ZFKQorCQkJbGluay0+ZHlu YW1pYyA9IDE7CisJfQorCisJLyogREFJIGZvcm1hdCAqLworCWxpbmstPmRhaV9mbXQgPSBzbmRf c29jX29mX3BhcnNlX2RhaWZtdChucCwgTlVMTCkgJgorCQkJCVNORF9TT0NfREFJRk1UX0ZPUk1B VF9NQVNLOworCisJaWYgKG9mX3Byb3BlcnR5X3JlYWRfYm9vbChucCwgInBsYXliYWNrIikpCisJ CWxpbmstPnBsYXliYWNrX29ubHkgPSAxOworCWVsc2UgaWYgKG9mX3Byb3BlcnR5X3JlYWRfYm9v bChucCwgImNhcHR1cmUiKSkKKwkJbGluay0+Y2FwdHVyZV9vbmx5ID0gMTsKKworCXJldHVybiAw OworfQorCitzdGF0aWMgaW50IGNvbXBvdW5kX2NhcmRfZHRfcHJvYmUoc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqcGRldiwKKwkJc3RydWN0IGNvbXBvdW5kX2NhcmRfZGF0YSAqcHJpdikKK3sKKwlz dHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCAqY3RybF9ucCwgKmxpbmtfbnA7CisJc3RydWN0IHNuZF9z b2NfZGFpX2xpbmsgKmxpbms7CisJaW50IHJldCwgbnVtX2xpbmtzOworCisJbnAgPSBwZGV2LT5k ZXYub2Zfbm9kZTsKKworCWN0cmxfbnAgPSBvZl9wYXJzZV9waGFuZGxlKG5wLCAiYXVkaW8tY29u dHJvbGxlciIsIDApOworCWlmICghY3RybF9ucCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJO byB2YWxpZCBhdWRpby1jb250cm9sbGVyIHBoYW5kbGUgZm91bmRcbiIpOworCQlyZXR1cm4gLUVJ TlZBTDsKKwl9CisKKwkvKiBnZXQgdGhlIG9wdGlvbmFsIHJvdXRlcyAqLworCWlmIChvZl9wcm9w ZXJ0eV9jb3VudF9zdHJpbmdzKG5wLCAicm91dGVzIikpCisJCXNuZF9zb2Nfb2ZfcGFyc2VfYXVk aW9fcm91dGluZygmcHJpdi0+c25kX2NhcmQsICJyb3V0ZXMiKTsKKworCXByaXYtPnNuZF9jYXJk Lm5hbWUgPSAiQVNvQyBjb21wb3VuZCBzb3VuZCBjYXJkIjsKKworCS8qIGNoZWNrIHRoZSBudW1i ZXIgb2YgbGlua3MgKi8KKwludW1fbGlua3MgPSAwOworCWZvcl9lYWNoX2NoaWxkX29mX25vZGUo bnAsIGxpbmtfbnApCisJCW51bV9saW5rcysrOworCisJaWYgKG51bV9saW5rcyA9PSAwKSB7CisJ CWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIERBSSBsaW5rXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7 CisJfQorCisJbGluayA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LAorCQkJCXNpemVvZihzdHJ1 Y3Qgc25kX3NvY19kYWlfbGluaykgKiBudW1fbGlua3MsCisJCQkJR0ZQX0tFUk5FTCk7CisJaWYg KCFsaW5rKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KKwlwcml2LT5zbmRf bGlua3MgPSBsaW5rOworCXByaXYtPnNuZF9jYXJkLm51bV9saW5rcyA9IG51bV9saW5rczsKKwlm b3JfZWFjaF9jaGlsZF9vZl9ub2RlKG5wLCBsaW5rX25wKSB7CisJCXJldCA9IGdldF9saW5rKHBy aXYsIGxpbmssIGN0cmxfbnAsIGxpbmtfbnApOworCQlpZiAocmV0KQorCQkJZ290byBlcnI7CisJ CWxpbmsrKzsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyOgorCWlmIChsaW5rX25wKQorCQlvZl9u b2RlX3B1dChsaW5rX25wKTsKKwlpZiAoY3RybF9ucCkKKwkJb2Zfbm9kZV9wdXQoY3RybF9ucCk7 CisJZm9yIChudW1fbGlua3MgPSAwLCBsaW5rID0gcHJpdi0+c25kX2xpbmtzOworCSAgICAgbnVt X2xpbmtzIDwgcHJpdi0+c25kX2NhcmQubnVtX2xpbmtzOworCSAgICAgbnVtX2xpbmtzKyssIGxp bmsrKykgeworCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNvZGVjX25wOworCisJCWNvZGVjX25wID0g KHN0cnVjdCBkZXZpY2Vfbm9kZSAqKSBsaW5rLT5jb2RlY19vZl9ub2RlOworCQlpZiAoIWNvZGVj X25wKQorCQkJYnJlYWs7CisJCW9mX25vZGVfcHV0KGNvZGVjX25wKTsKKwl9CisJcmV0dXJuIHJl dDsKK30KKworc3RhdGljIGludCBjb21wb3VuZF9jYXJkX2R0X3JlbW92ZShzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2LAorCQlzdHJ1Y3QgY29tcG91bmRfY2FyZF9kYXRhICpwcml2KQorewor CXN0cnVjdCBkZXZpY2Vfbm9kZSAqY29kZWNfbnA7CisJc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsg Kmxpbms7CisJaW50IG51bV9saW5rczsKKworCWlmICghcHJpdi0+c25kX2xpbmtzKQorCQlyZXR1 cm4gMDsKKwlpZiAocHJpdi0+c25kX2xpbmtzLT5wbGF0Zm9ybV9vZl9ub2RlKQorCQlvZl9ub2Rl X3B1dCgoc3RydWN0IGRldmljZV9ub2RlICopCisJCQkJcHJpdi0+c25kX2xpbmtzLT5wbGF0Zm9y bV9vZl9ub2RlKTsKKwlmb3IgKG51bV9saW5rcyA9IDAsIGxpbmsgPSBwcml2LT5zbmRfbGlua3M7 CisJICAgICBudW1fbGlua3MgPCBwcml2LT5zbmRfY2FyZC5udW1fbGlua3M7CisJICAgICBudW1f bGlua3MrKywgbGluaysrKSB7CisJCWNvZGVjX25wID0gKHN0cnVjdCBkZXZpY2Vfbm9kZSAqKSBs aW5rLT5jb2RlY19vZl9ub2RlOworCQlpZiAoIWNvZGVjX25wKQorCQkJYnJlYWs7CisJCW9mX25v ZGVfcHV0KGNvZGVjX25wKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY29tcG91 bmRfY2FyZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBj b21wb3VuZF9jYXJkX2RhdGEgKnByaXY7CisJaW50IHJldDsKKworCXByaXYgPSBkZXZtX2t6YWxs b2MoJnBkZXYtPmRldiwgc2l6ZW9mICpwcml2LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYpCisJ CXJldHVybiAtRU5PTUVNOworCisJcHJpdi0+c25kX2NhcmQub3duZXIgPSBUSElTX01PRFVMRTsK Kwlwcml2LT5zbmRfY2FyZC5kZXYgPSAmcGRldi0+ZGV2OworCisJcmV0ID0gY29tcG91bmRfY2Fy ZF9kdF9wcm9iZShwZGV2LCBwcml2KTsKKworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlw cml2LT5zbmRfY2FyZC5kYWlfbGluayA9IHByaXYtPnNuZF9saW5rczsKKworCWRldl9zZXRfZHJ2 ZGF0YSgmcGRldi0+ZGV2LCBwcml2KTsKKworCXJldHVybiBzbmRfc29jX3JlZ2lzdGVyX2NhcmQo JnByaXYtPnNuZF9jYXJkKTsKK30KKworc3RhdGljIGludCBjb21wb3VuZF9jYXJkX3JlbW92ZShz dHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBjb21wb3VuZF9jYXJkX2Rh dGEgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisgCisJc25kX3NvY191bnJl Z2lzdGVyX2NhcmQoJnByaXYtPnNuZF9jYXJkKTsKKworCWNvbXBvdW5kX2NhcmRfZHRfcmVtb3Zl KHBkZXYsIHByaXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2Zf ZGV2aWNlX2lkIGNvbXBvdW5kX2NhcmRfb2ZfZGV2X2lkc1tdID0geworCXsgLmNvbXBhdGlibGUg PSAiY29tcG91bmQtYXVkaW8tY2FyZCIsIH0sCisJe30KK307CitNT0RVTEVfREVWSUNFX1RBQkxF KG9mLCBjb21wb3VuZF9jYXJkX29mX2Rldl9pZHMpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3Jt X2RyaXZlciBjb21wb3VuZF9jYXJkID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gImFzb2Mt Y29tcG91bmQtY2FyZCIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkub2ZfbWF0Y2hfdGFi bGUgPSBjb21wb3VuZF9jYXJkX29mX2Rldl9pZHMsCisJfSwKKwkucHJvYmUJCT0gY29tcG91bmRf Y2FyZF9wcm9iZSwKKwkucmVtb3ZlCQk9IGNvbXBvdW5kX2NhcmRfcmVtb3ZlLAorfTsKKworbW9k dWxlX3BsYXRmb3JtX2RyaXZlcihjb21wb3VuZF9jYXJkKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQ TCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBU29DIENvbXBvdW5kIFNvdW5kIENhcmQiKTsKK01P RFVMRV9BVVRIT1IoIkplYW4tRnJhbmNvaXMgTW9pbmUgPG1vaW5lamZAZnJlZS5mcj4iKTsKCi0t IApLZW4gYXIgYydoZW50YcOxCXwJICAgICAgKiogQnJlaXpoIGhhIExpbnV4IGF0YXYhICoqCkpl ZgkJfAkJaHR0cDovL21vaW5lamYuZnJlZS5mci8KX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KQWxzYS1kZXZlbCBtYWlsaW5nIGxpc3QKQWxzYS1kZXZlbEBh bHNhLXByb2plY3Qub3JnCmh0dHA6Ly9tYWlsbWFuLmFsc2EtcHJvamVjdC5vcmcvbWFpbG1hbi9s aXN0aW5mby9hbHNhLWRldmVsCg==