From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jean-Francois Moine Subject: [PATCH v2] ASoC: kirkwood: add S/PDIF support Date: Mon, 21 Oct 2013 10:50:49 +0200 Message-ID: <20131021105049.58721da9@armhf> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from smtp3-g21.free.fr (smtp3-g21.free.fr [212.27.42.3]) by alsa0.perex.cz (Postfix) with ESMTP id 9A5EF265098 for ; Mon, 21 Oct 2013 10:50:34 +0200 (CEST) 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 , Mark Brown Cc: Thomas Petazzoni , alsa-devel@alsa-project.org, Jason Cooper , Russell King , linux-arm-kernel@lists.infradead.org, Sebastian Hesselbarth List-Id: alsa-devel@alsa-project.org VGhpcyBwYXRjaCBhZGRzIFMvUERJRiBpbnB1dC9vdXRwdXQgZm9yIG12ZWJ1IERUIGJvYXJkcy4K ClNpZ25lZC1vZmYtYnk6IEplYW4tRnJhbmNvaXMgTW9pbmUgPG1vaW5lamZAZnJlZS5mcj4KLS0t CnYzOiAoTWFyayBCcm93bikKLSBnaXZpbmcgYSBuYW1lIHRvIHRoZSBEQUkncyBpbXBhY3RzIHRo ZSBPcGVucmQgYW5kIEhQIHQ1MzI1IGNsaWVudHMKLSB0ZXN0IGkycyBvciBzcGRpZiBmcm9tIHRo ZSBEQUkncyBJRCBpbnN0ZWFkIG9mIGl0cyBuYW1lCnYyOiBkZWNsYXJlIDIgREFJJ3MgKE1hcmsg QnJvd24pCi0tLQogc291bmQvc29jL2tpcmt3b29kL2tpcmt3b29kLWkycy5jICAgIHwgOTkgKysr KysrKysrKysrKysrKysrLS0tLQogc291bmQvc29jL2tpcmt3b29kL2tpcmt3b29kLW9wZW5yZC5j IHwgIDIgKy0KIHNvdW5kL3NvYy9raXJrd29vZC9raXJrd29vZC10NTMyNS5jICB8ICAyICstCiAz IGZpbGUgY2hhbmdlZCwgODQgaW5zZXJ0aW9ucygrKSwgMTkgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvc291bmQvc29jL2tpcmt3b29kL2tpcmt3b29kLWkycy5jIGIvc291bmQvc29jL2tpcmt3 b29kL2tpcmt3b29kLWkycy5jCmluZGV4IGMyNDMzZWEuLmYzZTE1NDcgMTAwNjQ0Ci0tLSBhL3Nv dW5kL3NvYy9raXJrd29vZC9raXJrd29vZC1pMnMuYworKysgYi9zb3VuZC9zb2Mva2lya3dvb2Qv a2lya3dvb2QtaTJzLmMKQEAgLTE2MCw5ICsxNjAsMTEgQEAgc3RhdGljIGludCBraXJrd29vZF9p MnNfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAogCWNhc2Ug U05EUlZfUENNX0ZPUk1BVF9TMTZfTEU6CiAJCWkyc192YWx1ZSB8PSBLSVJLV09PRF9JMlNfQ1RM X1NJWkVfMTY7CiAJCWN0bF9wbGF5ID0gS0lSS1dPT0RfUExBWUNUTF9TSVpFXzE2X0MgfAotCQkJ ICAgS0lSS1dPT0RfUExBWUNUTF9JMlNfRU47CisJCQkgICBLSVJLV09PRF9QTEFZQ1RMX0kyU19F TiB8CisJCQkgICBLSVJLV09PRF9QTEFZQ1RMX1NQRElGX0VOOwogCQljdGxfcmVjID0gS0lSS1dP T0RfUkVDQ1RMX1NJWkVfMTZfQyB8Ci0JCQkgIEtJUktXT09EX1JFQ0NUTF9JMlNfRU47CisJCQkg IEtJUktXT09EX1JFQ0NUTF9JMlNfRU4gfAorCQkJICBLSVJLV09PRF9SRUNDVExfU1BESUZfRU47 CiAJCWJyZWFrOwogCS8qCiAJICogZG9lc24ndCB3b3JrLi4uIFMyMF8zTEUgIT0ga2lya3dvb2Qg MjBiaXQgZm9ybWF0ID8KQEAgLTE3OCw5ICsxODAsMTEgQEAgc3RhdGljIGludCBraXJrd29vZF9p MnNfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAogCWNhc2Ug U05EUlZfUENNX0ZPUk1BVF9TMjRfTEU6CiAJCWkyc192YWx1ZSB8PSBLSVJLV09PRF9JMlNfQ1RM X1NJWkVfMjQ7CiAJCWN0bF9wbGF5ID0gS0lSS1dPT0RfUExBWUNUTF9TSVpFXzI0IHwKLQkJCSAg IEtJUktXT09EX1BMQVlDVExfSTJTX0VOOworCQkJICAgS0lSS1dPT0RfUExBWUNUTF9JMlNfRU4g fAorCQkJICAgS0lSS1dPT0RfUExBWUNUTF9TUERJRl9FTjsKIAkJY3RsX3JlYyA9IEtJUktXT09E X1JFQ0NUTF9TSVpFXzI0IHwKLQkJCSAgS0lSS1dPT0RfUkVDQ1RMX0kyU19FTjsKKwkJCSAgS0lS S1dPT0RfUkVDQ1RMX0kyU19FTiB8CisJCQkgIEtJUktXT09EX1JFQ0NUTF9TUERJRl9FTjsKIAkJ YnJlYWs7CiAJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MzMl9MRToKIAkJaTJzX3ZhbHVlIHw9IEtJ UktXT09EX0kyU19DVExfU0laRV8zMjsKQEAgLTI0MCw2ICsyNDQsMTEgQEAgc3RhdGljIGludCBr aXJrd29vZF9pMnNfcGxheV90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3Ry ZWFtLAogCQkJCSAgIGN0bCk7CiAJfQogCisJaWYgKGRhaS0+aWQgPT0gMCkKKwkJY3RsICY9IH5L SVJLV09PRF9QTEFZQ1RMX1NQRElGX0VOOwkvKiBpMnMgKi8KKwllbHNlCisJCWN0bCAmPSB+S0lS S1dPT0RfUExBWUNUTF9JMlNfRU47CS8qIHNwZGlmICovCisKIAlzd2l0Y2ggKGNtZCkgewogCWNh c2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CiAJCS8qIGNvbmZpZ3VyZSAqLwpAQCAtMjU4LDcg KzI2Nyw4IEBAIHN0YXRpYyBpbnQga2lya3dvb2RfaTJzX3BsYXlfdHJpZ2dlcihzdHJ1Y3Qgc25k X3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKIAogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RP UDoKIAkJLyogc3RvcCBhdWRpbywgZGlzYWJsZSBpbnRlcnJ1cHRzICovCi0JCWN0bCB8PSBLSVJL V09PRF9QTEFZQ1RMX1BBVVNFIHwgS0lSS1dPT0RfUExBWUNUTF9JMlNfTVVURTsKKwkJY3RsIHw9 IEtJUktXT09EX1BMQVlDVExfUEFVU0UgfCBLSVJLV09PRF9QTEFZQ1RMX0kyU19NVVRFIHwKKwkJ CQlLSVJLV09PRF9QTEFZQ1RMX1NQRElGX01VVEU7CiAJCXdyaXRlbChjdGwsIHByaXYtPmlvICsg S0lSS1dPT0RfUExBWUNUTCk7CiAKIAkJdmFsdWUgPSByZWFkbChwcml2LT5pbyArIEtJUktXT09E X0lOVF9NQVNLKTsKQEAgLTI3MiwxMyArMjgyLDE1IEBAIHN0YXRpYyBpbnQga2lya3dvb2RfaTJz X3BsYXlfdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKIAogCWNh c2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUFVTSDoKIAljYXNlIFNORFJWX1BDTV9UUklHR0VS X1NVU1BFTkQ6Ci0JCWN0bCB8PSBLSVJLV09PRF9QTEFZQ1RMX1BBVVNFIHwgS0lSS1dPT0RfUExB WUNUTF9JMlNfTVVURTsKKwkJY3RsIHw9IEtJUktXT09EX1BMQVlDVExfUEFVU0UgfCBLSVJLV09P RF9QTEFZQ1RMX0kyU19NVVRFIHwKKwkJCQlLSVJLV09PRF9QTEFZQ1RMX1NQRElGX01VVEU7CiAJ CXdyaXRlbChjdGwsIHByaXYtPmlvICsgS0lSS1dPT0RfUExBWUNUTCk7CiAJCWJyZWFrOwogCiAJ Y2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9Q QVVTRV9SRUxFQVNFOgotCQljdGwgJj0gfihLSVJLV09PRF9QTEFZQ1RMX1BBVVNFIHwgS0lSS1dP T0RfUExBWUNUTF9JMlNfTVVURSk7CisJCWN0bCAmPSB+KEtJUktXT09EX1BMQVlDVExfUEFVU0Ug fCBLSVJLV09PRF9QTEFZQ1RMX0kyU19NVVRFIHwKKwkJCQlLSVJLV09PRF9QTEFZQ1RMX1NQRElG X01VVEUpOwogCQl3cml0ZWwoY3RsLCBwcml2LT5pbyArIEtJUktXT09EX1BMQVlDVEwpOwogCQli cmVhazsKIApAQCAtMzAxLDcgKzMxMywxMyBAQCBzdGF0aWMgaW50IGtpcmt3b29kX2kyc19yZWNf dHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKIAljYXNlIFNORFJW X1BDTV9UUklHR0VSX1NUQVJUOgogCQkvKiBjb25maWd1cmUgKi8KIAkJY3RsID0gcHJpdi0+Y3Rs X3JlYzsKLQkJdmFsdWUgPSBjdGwgJiB+S0lSS1dPT0RfUkVDQ1RMX0kyU19FTjsKKwkJaWYgKGRh aS0+aWQgPT0gMCkKKwkJCWN0bCAmPSB+S0lSS1dPT0RfUkVDQ1RMX1NQRElGX0VOOwkvKiBpMnMg Ki8KKwkJZWxzZQorCQkJY3RsICY9IH5LSVJLV09PRF9SRUNDVExfSTJTX0VOOwkJLyogc3BkaWYg Ki8KKworCQl2YWx1ZSA9IGN0bCAmIH4oS0lSS1dPT0RfUkVDQ1RMX0kyU19FTiB8CisJCQkJS0lS S1dPT0RfUkVDQ1RMX1NQRElGX0VOKTsKIAkJd3JpdGVsKHZhbHVlLCBwcml2LT5pbyArIEtJUktX T09EX1JFQ0NUTCk7CiAKIAkJLyogZW5hYmxlIGludGVycnVwdHMgKi8KQEAgLTM2MSw5ICszNzks OCBAQCBzdGF0aWMgaW50IGtpcmt3b29kX2kyc190cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0 cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kLAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGtp cmt3b29kX2kyc19wcm9iZShzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3N0YXRpYyBpbnQga2ly a3dvb2RfaTJzX2luaXQoc3RydWN0IGtpcmt3b29kX2RtYV9kYXRhICpwcml2KQogewotCXN0cnVj dCBraXJrd29vZF9kbWFfZGF0YSAqcHJpdiA9IHNuZF9zb2NfZGFpX2dldF9kcnZkYXRhKGRhaSk7 CiAJdW5zaWduZWQgbG9uZyB2YWx1ZTsKIAl1bnNpZ25lZCBpbnQgcmVnX2RhdGE7CiAKQEAgLTQw NCw5ICs0MjEsMjkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhaV9vcHMga2lya3dv b2RfaTJzX2RhaV9vcHMgPSB7CiAJLnNldF9mbXQgICAgICAgID0ga2lya3dvb2RfaTJzX3NldF9m bXQsCiB9OwogCi0KLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfZHJpdmVyIGtpcmt3b29kX2ky c19kYWkgPSB7Ci0JLnByb2JlID0ga2lya3dvb2RfaTJzX3Byb2JlLAorc3RhdGljIHN0cnVjdCBz bmRfc29jX2RhaV9kcml2ZXIga2lya3dvb2RfaTJzX2RhaVsyXSA9IHsKKyAgICB7CisJLm5hbWUg PSAiaTJzIiwKKwkuaWQgPSAwLAorCS5wbGF5YmFjayA9IHsKKwkJLmNoYW5uZWxzX21pbiA9IDEs CisJCS5jaGFubmVsc19tYXggPSAyLAorCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV80NDEwMCB8 IFNORFJWX1BDTV9SQVRFXzQ4MDAwIHwKKwkJCQlTTkRSVl9QQ01fUkFURV85NjAwMCwKKwkJLmZv cm1hdHMgPSBLSVJLV09PRF9JMlNfRk9STUFUUywKKwl9LAorCS5jYXB0dXJlID0geworCQkuY2hh bm5lbHNfbWluID0gMSwKKwkJLmNoYW5uZWxzX21heCA9IDIsCisJCS5yYXRlcyA9IFNORFJWX1BD TV9SQVRFXzQ0MTAwIHwgU05EUlZfUENNX1JBVEVfNDgwMDAgfAorCQkJCVNORFJWX1BDTV9SQVRF Xzk2MDAwLAorCQkuZm9ybWF0cyA9IEtJUktXT09EX0kyU19GT1JNQVRTLAorCX0sCisJLm9wcyA9 ICZraXJrd29vZF9pMnNfZGFpX29wcywKKyAgICB9LAorICAgIHsKKwkubmFtZSA9ICJzcGRpZiIs CisJLmlkID0gMSwKIAkucGxheWJhY2sgPSB7CiAJCS5jaGFubmVsc19taW4gPSAxLAogCQkuY2hh bm5lbHNfbWF4ID0gMiwKQEAgLTQyMiwxMCArNDU5LDM0IEBAIHN0YXRpYyBzdHJ1Y3Qgc25kX3Nv Y19kYWlfZHJpdmVyIGtpcmt3b29kX2kyc19kYWkgPSB7CiAJCS5mb3JtYXRzID0gS0lSS1dPT0Rf STJTX0ZPUk1BVFMsCiAJfSwKIAkub3BzID0gJmtpcmt3b29kX2kyc19kYWlfb3BzLAorICAgIH0s CiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2RyaXZlciBraXJrd29vZF9pMnNfZGFp X2V4dGNsayA9IHsKLQkucHJvYmUgPSBraXJrd29vZF9pMnNfcHJvYmUsCitzdGF0aWMgc3RydWN0 IHNuZF9zb2NfZGFpX2RyaXZlciBraXJrd29vZF9pMnNfZGFpX2V4dGNsa1syXSA9IHsKKyAgICB7 CisJLm5hbWUgPSAiaTJzIiwKKwkuaWQgPSAwLAorCS5wbGF5YmFjayA9IHsKKwkJLmNoYW5uZWxz X21pbiA9IDEsCisJCS5jaGFubmVsc19tYXggPSAyLAorCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFU RV84MDAwXzE5MjAwMCB8CisJCQkgU05EUlZfUENNX1JBVEVfQ09OVElOVU9VUyB8CisJCQkgU05E UlZfUENNX1JBVEVfS05PVCwKKwkJLmZvcm1hdHMgPSBLSVJLV09PRF9JMlNfRk9STUFUUywKKwl9 LAorCS5jYXB0dXJlID0geworCQkuY2hhbm5lbHNfbWluID0gMSwKKwkJLmNoYW5uZWxzX21heCA9 IDIsCisJCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzgwMDBfMTkyMDAwIHwKKwkJCSBTTkRSVl9Q Q01fUkFURV9DT05USU5VT1VTIHwKKwkJCSBTTkRSVl9QQ01fUkFURV9LTk9ULAorCQkuZm9ybWF0 cyA9IEtJUktXT09EX0kyU19GT1JNQVRTLAorCX0sCisJLm9wcyA9ICZraXJrd29vZF9pMnNfZGFp X29wcywKKyAgICB9LAorICAgIHsKKwkubmFtZSA9ICJzcGRpZiIsCisJLmlkID0gMSwKIAkucGxh eWJhY2sgPSB7CiAJCS5jaGFubmVsc19taW4gPSAxLAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKQEAg LTQ0Myw2ICs1MDQsNyBAQCBzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2RyaXZlciBraXJrd29v ZF9pMnNfZGFpX2V4dGNsayA9IHsKIAkJLmZvcm1hdHMgPSBLSVJLV09PRF9JMlNfRk9STUFUUywK IAl9LAogCS5vcHMgPSAma2lya3dvb2RfaTJzX2RhaV9vcHMsCisgICAgfSwKIH07CiAKIHN0YXRp YyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19jb21wb25lbnRfZHJpdmVyIGtpcmt3b29kX2kyc19jb21w b25lbnQgPSB7CkBAIC00NTIsNyArNTE0LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29j X2NvbXBvbmVudF9kcml2ZXIga2lya3dvb2RfaTJzX2NvbXBvbmVudCA9IHsKIHN0YXRpYyBpbnQg a2lya3dvb2RfaTJzX2Rldl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewog CXN0cnVjdCBraXJrd29vZF9hc29jX3BsYXRmb3JtX2RhdGEgKmRhdGEgPSBwZGV2LT5kZXYucGxh dGZvcm1fZGF0YTsKLQlzdHJ1Y3Qgc25kX3NvY19kYWlfZHJpdmVyICpzb2NfZGFpID0gJmtpcmt3 b29kX2kyc19kYWk7CisJc3RydWN0IHNuZF9zb2NfZGFpX2RyaXZlciAqc29jX2RhaSA9IGtpcmt3 b29kX2kyc19kYWk7CiAJc3RydWN0IGtpcmt3b29kX2RtYV9kYXRhICpwcml2OwogCXN0cnVjdCBy ZXNvdXJjZSAqbWVtOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwZGV2LT5kZXYub2Zfbm9k ZTsKQEAgLTUyMSw3ICs1ODMsNyBAQCBzdGF0aWMgaW50IGtpcmt3b29kX2kyc19kZXZfcHJvYmUo c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAl9CiAKIAllcnIgPSBzbmRfc29jX3JlZ2lz dGVyX2NvbXBvbmVudCgmcGRldi0+ZGV2LCAma2lya3dvb2RfaTJzX2NvbXBvbmVudCwKLQkJCQkJ IHNvY19kYWksIDEpOworCQkJCQkgc29jX2RhaSwgMik7CiAJaWYgKGVycikgewogCQlkZXZfZXJy KCZwZGV2LT5kZXYsICJzbmRfc29jX3JlZ2lzdGVyX2NvbXBvbmVudCBmYWlsZWRcbiIpOwogCQln b3RvIGVycl9jb21wb25lbnQ7CkBAIC01MzIsNiArNTk0LDkgQEAgc3RhdGljIGludCBraXJrd29v ZF9pMnNfZGV2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJCWRldl9lcnIo JnBkZXYtPmRldiwgInNuZF9zb2NfcmVnaXN0ZXJfcGxhdGZvcm0gZmFpbGVkXG4iKTsKIAkJZ290 byBlcnJfcGxhdGZvcm07CiAJfQorCisJa2lya3dvb2RfaTJzX2luaXQocHJpdik7CisKIAlyZXR1 cm4gMDsKICBlcnJfcGxhdGZvcm06CiAJc25kX3NvY191bnJlZ2lzdGVyX2NvbXBvbmVudCgmcGRl di0+ZGV2KTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9raXJrd29vZC9raXJrd29vZC1vcGVucmQu YyBiL3NvdW5kL3NvYy9raXJrd29vZC9raXJrd29vZC1vcGVucmQuYwppbmRleCAwMjViZTBlLi42 NWYyYTViIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mva2lya3dvb2Qva2lya3dvb2Qtb3BlbnJkLmMK KysrIGIvc291bmQvc29jL2tpcmt3b29kL2tpcmt3b29kLW9wZW5yZC5jCkBAIC01Miw3ICs1Miw3 IEBAIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBvcGVucmRfY2xpZW50X2RhaVtdID0g ewogewogCS5uYW1lID0gIkNTNDJMNTEiLAogCS5zdHJlYW1fbmFtZSA9ICJDUzQyTDUxIEhpRmki LAotCS5jcHVfZGFpX25hbWUgPSAibXZlYnUtYXVkaW8iLAorCS5jcHVfZGFpX25hbWUgPSAiaTJz IiwKIAkucGxhdGZvcm1fbmFtZSA9ICJtdmVidS1hdWRpbyIsCiAJLmNvZGVjX2RhaV9uYW1lID0g ImNzNDJsNTEtaGlmaSIsCiAJLmNvZGVjX25hbWUgPSAiY3M0Mmw1MS1jb2RlYy4wLTAwNGEiLApk aWZmIC0tZ2l0IGEvc291bmQvc29jL2tpcmt3b29kL2tpcmt3b29kLXQ1MzI1LmMgYi9zb3VuZC9z b2Mva2lya3dvb2Qva2lya3dvb2QtdDUzMjUuYwppbmRleCAyNzU0NWIwLi5kMjEzODMyIDEwMDY0 NAotLS0gYS9zb3VuZC9zb2Mva2lya3dvb2Qva2lya3dvb2QtdDUzMjUuYworKysgYi9zb3VuZC9z b2Mva2lya3dvb2Qva2lya3dvb2QtdDUzMjUuYwpAQCAtNjgsNyArNjgsNyBAQCBzdGF0aWMgc3Ry dWN0IHNuZF9zb2NfZGFpX2xpbmsgdDUzMjVfZGFpW10gPSB7CiB7CiAJLm5hbWUgPSAiQUxDNTYy MSIsCiAJLnN0cmVhbV9uYW1lID0gIkFMQzU2MjEgSGlGaSIsCi0JLmNwdV9kYWlfbmFtZSA9ICJt dmVidS1hdWRpbyIsCisJLmNwdV9kYWlfbmFtZSA9ICJpMnMiLAogCS5wbGF0Zm9ybV9uYW1lID0g Im12ZWJ1LWF1ZGlvIiwKIAkuY29kZWNfZGFpX25hbWUgPSAiYWxjNTYyMS1oaWZpIiwKIAkuY29k ZWNfbmFtZSA9ICJhbGM1NjJ4LWNvZGVjLjAtMDAxYSIsCgotLSAKS2VuIGFyIGMnaGVudGHDsQl8 CSAgICAgICoqIEJyZWl6aCBoYSBMaW51eCBhdGF2ISAqKgpKZWYJCXwJCWh0dHA6Ly9tb2luZWpm LmZyZWUuZnIvCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CkFsc2EtZGV2ZWwgbWFpbGluZyBsaXN0CkFsc2EtZGV2ZWxAYWxzYS1wcm9qZWN0Lm9yZwpodHRw Oi8vbWFpbG1hbi5hbHNhLXByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vYWxzYS1kZXZlbAo= From mboxrd@z Thu Jan 1 00:00:00 1970 From: moinejf@free.fr (Jean-Francois Moine) Date: Mon, 21 Oct 2013 10:50:49 +0200 Subject: [PATCH v2] ASoC: kirkwood: add S/PDIF support Message-ID: <20131021105049.58721da9@armhf> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org This patch adds S/PDIF input/output for mvebu DT boards. Signed-off-by: Jean-Francois Moine --- v3: (Mark Brown) - giving a name to the DAI's impacts the Openrd and HP t5325 clients - test i2s or spdif from the DAI's ID instead of its name v2: declare 2 DAI's (Mark Brown) --- sound/soc/kirkwood/kirkwood-i2s.c | 99 ++++++++++++++++++---- sound/soc/kirkwood/kirkwood-openrd.c | 2 +- sound/soc/kirkwood/kirkwood-t5325.c | 2 +- 3 file changed, 84 insertions(+), 19 deletions(-) diff --git a/sound/soc/kirkwood/kirkwood-i2s.c b/sound/soc/kirkwood/kirkwood-i2s.c index c2433ea..f3e1547 100644 --- a/sound/soc/kirkwood/kirkwood-i2s.c +++ b/sound/soc/kirkwood/kirkwood-i2s.c @@ -160,9 +160,11 @@ static int kirkwood_i2s_hw_params(struct snd_pcm_substream *substream, case SNDRV_PCM_FORMAT_S16_LE: i2s_value |= KIRKWOOD_I2S_CTL_SIZE_16; ctl_play = KIRKWOOD_PLAYCTL_SIZE_16_C | - KIRKWOOD_PLAYCTL_I2S_EN; + KIRKWOOD_PLAYCTL_I2S_EN | + KIRKWOOD_PLAYCTL_SPDIF_EN; ctl_rec = KIRKWOOD_RECCTL_SIZE_16_C | - KIRKWOOD_RECCTL_I2S_EN; + KIRKWOOD_RECCTL_I2S_EN | + KIRKWOOD_RECCTL_SPDIF_EN; break; /* * doesn't work... S20_3LE != kirkwood 20bit format ? @@ -178,9 +180,11 @@ static int kirkwood_i2s_hw_params(struct snd_pcm_substream *substream, case SNDRV_PCM_FORMAT_S24_LE: i2s_value |= KIRKWOOD_I2S_CTL_SIZE_24; ctl_play = KIRKWOOD_PLAYCTL_SIZE_24 | - KIRKWOOD_PLAYCTL_I2S_EN; + KIRKWOOD_PLAYCTL_I2S_EN | + KIRKWOOD_PLAYCTL_SPDIF_EN; ctl_rec = KIRKWOOD_RECCTL_SIZE_24 | - KIRKWOOD_RECCTL_I2S_EN; + KIRKWOOD_RECCTL_I2S_EN | + KIRKWOOD_RECCTL_SPDIF_EN; break; case SNDRV_PCM_FORMAT_S32_LE: i2s_value |= KIRKWOOD_I2S_CTL_SIZE_32; @@ -240,6 +244,11 @@ static int kirkwood_i2s_play_trigger(struct snd_pcm_substream *substream, ctl); } + if (dai->id == 0) + ctl &= ~KIRKWOOD_PLAYCTL_SPDIF_EN; /* i2s */ + else + ctl &= ~KIRKWOOD_PLAYCTL_I2S_EN; /* spdif */ + switch (cmd) { case SNDRV_PCM_TRIGGER_START: /* configure */ @@ -258,7 +267,8 @@ static int kirkwood_i2s_play_trigger(struct snd_pcm_substream *substream, case SNDRV_PCM_TRIGGER_STOP: /* stop audio, disable interrupts */ - ctl |= KIRKWOOD_PLAYCTL_PAUSE | KIRKWOOD_PLAYCTL_I2S_MUTE; + ctl |= KIRKWOOD_PLAYCTL_PAUSE | KIRKWOOD_PLAYCTL_I2S_MUTE | + KIRKWOOD_PLAYCTL_SPDIF_MUTE; writel(ctl, priv->io + KIRKWOOD_PLAYCTL); value = readl(priv->io + KIRKWOOD_INT_MASK); @@ -272,13 +282,15 @@ static int kirkwood_i2s_play_trigger(struct snd_pcm_substream *substream, case SNDRV_PCM_TRIGGER_PAUSE_PUSH: case SNDRV_PCM_TRIGGER_SUSPEND: - ctl |= KIRKWOOD_PLAYCTL_PAUSE | KIRKWOOD_PLAYCTL_I2S_MUTE; + ctl |= KIRKWOOD_PLAYCTL_PAUSE | KIRKWOOD_PLAYCTL_I2S_MUTE | + KIRKWOOD_PLAYCTL_SPDIF_MUTE; writel(ctl, priv->io + KIRKWOOD_PLAYCTL); break; case SNDRV_PCM_TRIGGER_RESUME: case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: - ctl &= ~(KIRKWOOD_PLAYCTL_PAUSE | KIRKWOOD_PLAYCTL_I2S_MUTE); + ctl &= ~(KIRKWOOD_PLAYCTL_PAUSE | KIRKWOOD_PLAYCTL_I2S_MUTE | + KIRKWOOD_PLAYCTL_SPDIF_MUTE); writel(ctl, priv->io + KIRKWOOD_PLAYCTL); break; @@ -301,7 +313,13 @@ static int kirkwood_i2s_rec_trigger(struct snd_pcm_substream *substream, case SNDRV_PCM_TRIGGER_START: /* configure */ ctl = priv->ctl_rec; - value = ctl & ~KIRKWOOD_RECCTL_I2S_EN; + if (dai->id == 0) + ctl &= ~KIRKWOOD_RECCTL_SPDIF_EN; /* i2s */ + else + ctl &= ~KIRKWOOD_RECCTL_I2S_EN; /* spdif */ + + value = ctl & ~(KIRKWOOD_RECCTL_I2S_EN | + KIRKWOOD_RECCTL_SPDIF_EN); writel(value, priv->io + KIRKWOOD_RECCTL); /* enable interrupts */ @@ -361,9 +379,8 @@ static int kirkwood_i2s_trigger(struct snd_pcm_substream *substream, int cmd, return 0; } -static int kirkwood_i2s_probe(struct snd_soc_dai *dai) +static int kirkwood_i2s_init(struct kirkwood_dma_data *priv) { - struct kirkwood_dma_data *priv = snd_soc_dai_get_drvdata(dai); unsigned long value; unsigned int reg_data; @@ -404,9 +421,29 @@ static const struct snd_soc_dai_ops kirkwood_i2s_dai_ops = { .set_fmt = kirkwood_i2s_set_fmt, }; - -static struct snd_soc_dai_driver kirkwood_i2s_dai = { - .probe = kirkwood_i2s_probe, +static struct snd_soc_dai_driver kirkwood_i2s_dai[2] = { + { + .name = "i2s", + .id = 0, + .playback = { + .channels_min = 1, + .channels_max = 2, + .rates = SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000 | + SNDRV_PCM_RATE_96000, + .formats = KIRKWOOD_I2S_FORMATS, + }, + .capture = { + .channels_min = 1, + .channels_max = 2, + .rates = SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000 | + SNDRV_PCM_RATE_96000, + .formats = KIRKWOOD_I2S_FORMATS, + }, + .ops = &kirkwood_i2s_dai_ops, + }, + { + .name = "spdif", + .id = 1, .playback = { .channels_min = 1, .channels_max = 2, @@ -422,10 +459,34 @@ static struct snd_soc_dai_driver kirkwood_i2s_dai = { .formats = KIRKWOOD_I2S_FORMATS, }, .ops = &kirkwood_i2s_dai_ops, + }, }; -static struct snd_soc_dai_driver kirkwood_i2s_dai_extclk = { - .probe = kirkwood_i2s_probe, +static struct snd_soc_dai_driver kirkwood_i2s_dai_extclk[2] = { + { + .name = "i2s", + .id = 0, + .playback = { + .channels_min = 1, + .channels_max = 2, + .rates = SNDRV_PCM_RATE_8000_192000 | + SNDRV_PCM_RATE_CONTINUOUS | + SNDRV_PCM_RATE_KNOT, + .formats = KIRKWOOD_I2S_FORMATS, + }, + .capture = { + .channels_min = 1, + .channels_max = 2, + .rates = SNDRV_PCM_RATE_8000_192000 | + SNDRV_PCM_RATE_CONTINUOUS | + SNDRV_PCM_RATE_KNOT, + .formats = KIRKWOOD_I2S_FORMATS, + }, + .ops = &kirkwood_i2s_dai_ops, + }, + { + .name = "spdif", + .id = 1, .playback = { .channels_min = 1, .channels_max = 2, @@ -443,6 +504,7 @@ static struct snd_soc_dai_driver kirkwood_i2s_dai_extclk = { .formats = KIRKWOOD_I2S_FORMATS, }, .ops = &kirkwood_i2s_dai_ops, + }, }; static const struct snd_soc_component_driver kirkwood_i2s_component = { @@ -452,7 +514,7 @@ static const struct snd_soc_component_driver kirkwood_i2s_component = { static int kirkwood_i2s_dev_probe(struct platform_device *pdev) { struct kirkwood_asoc_platform_data *data = pdev->dev.platform_data; - struct snd_soc_dai_driver *soc_dai = &kirkwood_i2s_dai; + struct snd_soc_dai_driver *soc_dai = kirkwood_i2s_dai; struct kirkwood_dma_data *priv; struct resource *mem; struct device_node *np = pdev->dev.of_node; @@ -521,7 +583,7 @@ static int kirkwood_i2s_dev_probe(struct platform_device *pdev) } err = snd_soc_register_component(&pdev->dev, &kirkwood_i2s_component, - soc_dai, 1); + soc_dai, 2); if (err) { dev_err(&pdev->dev, "snd_soc_register_component failed\n"); goto err_component; @@ -532,6 +594,9 @@ static int kirkwood_i2s_dev_probe(struct platform_device *pdev) dev_err(&pdev->dev, "snd_soc_register_platform failed\n"); goto err_platform; } + + kirkwood_i2s_init(priv); + return 0; err_platform: snd_soc_unregister_component(&pdev->dev); diff --git a/sound/soc/kirkwood/kirkwood-openrd.c b/sound/soc/kirkwood/kirkwood-openrd.c index 025be0e..65f2a5b 100644 --- a/sound/soc/kirkwood/kirkwood-openrd.c +++ b/sound/soc/kirkwood/kirkwood-openrd.c @@ -52,7 +52,7 @@ static struct snd_soc_dai_link openrd_client_dai[] = { { .name = "CS42L51", .stream_name = "CS42L51 HiFi", - .cpu_dai_name = "mvebu-audio", + .cpu_dai_name = "i2s", .platform_name = "mvebu-audio", .codec_dai_name = "cs42l51-hifi", .codec_name = "cs42l51-codec.0-004a", diff --git a/sound/soc/kirkwood/kirkwood-t5325.c b/sound/soc/kirkwood/kirkwood-t5325.c index 27545b0..d213832 100644 --- a/sound/soc/kirkwood/kirkwood-t5325.c +++ b/sound/soc/kirkwood/kirkwood-t5325.c @@ -68,7 +68,7 @@ static struct snd_soc_dai_link t5325_dai[] = { { .name = "ALC5621", .stream_name = "ALC5621 HiFi", - .cpu_dai_name = "mvebu-audio", + .cpu_dai_name = "i2s", .platform_name = "mvebu-audio", .codec_dai_name = "alc5621-hifi", .codec_name = "alc562x-codec.0-001a", -- Ken ar c'henta? | ** Breizh ha Linux atav! ** Jef | http://moinejf.free.fr/