From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ryan Mallon Subject: Re: [PATCH 2/2] ALSA: ASoc: putting together AT91SAM9260 and TLV320AIC3X Date: Tue, 05 Apr 2011 08:07:39 +1200 Message-ID: <4D9A250B.3030707@bluewatersys.com> References: <1300949648-15078-1-git-send-email-horms@verge.net.au> <1300949648-15078-2-git-send-email-horms@verge.net.au> <4D8B2068.60402@aksignal.cz> <4D8BA47B.8050904@bluewatersys.com> <4D9987DD.8040703@aksignal.cz> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <4D9987DD.8040703@aksignal.cz> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: alsa-devel-bounces@alsa-project.org Errors-To: alsa-devel-bounces@alsa-project.org Cc: vbarinov@embeddedalley.com, alsa-devel@alsa-project.org, alsa-devel@vger.kernel.org, linux-kernel@vger.kernel.org List-Id: alsa-devel@alsa-project.org T24gMDQvMDQvMjAxMSAwODo1NyBQTSwgUHJjaGFsIEppxZnDrSB3cm90ZToKPiBIaSwKPiB0aGlz IGlzIHNlcGFyZXRlZCBQQVRDSCBmb3IgZ2x1ZSBBVDkxU0FNOTI2MCBhbmQgVExWMzIwQUlDM1gg b24gQ0RVIGJvYXJkLgoKUGxlYXNlIHJlcG9zdCB0aGlzIChhbmQgdGhlIG90aGVyIHBhdGNoKSBh cyBhIG5ldyBwYXRjaCB3aXRoIGEgcHJvcGVyCmNoYW5nZSBsb2cuIFlvdSBzaG91bGQgYWxzbyBD YyBMaWFtIEdpcmR3b29kIGFuZCBNYXJrIEJyb3duLCB3aG8KbWFpbnRhaW4gdGhlIFNvQyBhdWRp byBzeXN0ZW0gYW5kIHdpbGwgcGljayB1cCB0aGlzIHBhdGNoLgoKU29tZSBtb3JlIGNvbW1lbnRz IGJlbG93LgoKflJ5YW4KCjxzbmlwPgoKPiAKPiBkaWZmIC11cHJOIC1YIGxpbnV4LTIuNi4zOC12 YW5pbGxhL0RvY3VtZW50YXRpb24vZG9udGRpZmYgbGludXgtMi42LjM4LXZhbmlsbGEvc291bmQv c29jL2F0bWVsL0tjb25maWcKPiBsaW51eC0yLjYuMzgtcGF0Y2gvc291bmQvc29jL2F0bWVsL0tj b25maWcKPiAtLS0gbGludXgtMi42LjM4LXZhbmlsbGEvc291bmQvc29jL2F0bWVsL0tjb25maWcJ MjAxMS0wMy0xNSAwMjoyMDozMi4wMDAwMDAwMDAgKzAxMDAKPiArKysgbGludXgtMi42LjM4LXBh dGNoL3NvdW5kL3NvYy9hdG1lbC9LY29uZmlnCTIwMTEtMDMtMjIgMDk6NDY6NDYuNzUxNTY2MTU4 ICswMTAwCj4gQEAgLTUwLDMgKzUwLDExIEBAIGNvbmZpZyBTTkRfQVQ5MV9TT0NfQUZFQjkyNjAK PiAgCXNlbGVjdCBTTkRfU09DX1RMVjMyMEFJQzIzCj4gIAloZWxwCj4gIAkgIFNheSBZIGhlcmUg dG8gc3VwcG9ydCBzb3VuZCBvbiBBRkVCOTI2MCBib2FyZC4KPiArCj4gK2NvbmZpZyBTTkRfQVQ5 MV9TT0NfQ0RVCj4gKwl0cmlzdGF0ZSAiU29DIEF1ZGlvIHN1cHBvcnQgZm9yIENEVSBib2FyZCIK PiArCWRlcGVuZHMgb24gQVJDSF9BVDkxICYmIE1BQ0hfQ0RVICYmIFNORF9BVE1FTF9TT0MKPiAr CXNlbGVjdCBTTkRfQVRNRUxfU09DX1NTQwo+ICsJc2VsZWN0IFNORF9TT0NfVExWMzIwQUlDM1gK PiArCWhlbHAKPiArCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IHNvdW5kIG9uIENEVSBib2FyZC4K PiBkaWZmIC11cHJOIC1YIGxpbnV4LTIuNi4zOC12YW5pbGxhL0RvY3VtZW50YXRpb24vZG9udGRp ZmYgbGludXgtMi42LjM4LXZhbmlsbGEvc291bmQvc29jL2F0bWVsL01ha2VmaWxlCj4gbGludXgt Mi42LjM4LXBhdGNoL3NvdW5kL3NvYy9hdG1lbC9NYWtlZmlsZQo+IC0tLSBsaW51eC0yLjYuMzgt dmFuaWxsYS9zb3VuZC9zb2MvYXRtZWwvTWFrZWZpbGUJMjAxMS0wMy0xNSAwMjoyMDozMi4wMDAw MDAwMDAgKzAxMDAKPiArKysgbGludXgtMi42LjM4LXBhdGNoL3NvdW5kL3NvYy9hdG1lbC9NYWtl ZmlsZQkyMDExLTAzLTE2IDA5OjI2OjE3LjAwMDAwMDAwMCArMDEwMAo+IEBAIC0xNCwzICsxNCw0 IEBAIHNuZC1zb2MtcGxheXBhcS1vYmpzIDo9IHBsYXlwYXFfd204NTEwLm8KPiAgb2JqLSQoQ09O RklHX1NORF9BVDkxX1NPQ19TQU05RzIwX1dNODczMSkgKz0gc25kLXNvYy1zYW05ZzIwLXdtODcz MS5vCj4gIG9iai0kKENPTkZJR19TTkRfQVQzMl9TT0NfUExBWVBBUSkgKz0gc25kLXNvYy1wbGF5 cGFxLm8KPiAgb2JqLSQoQ09ORklHX1NORF9BVDkxX1NPQ19BRkVCOTI2MCkgKz0gc25kLXNvYy1h ZmViOTI2MC5vCj4gK29iai0kKENPTkZJR19TTkRfQVQ5MV9TT0NfQ0RVKSArPSBzbmQtc29jLWNk dS5vCj4gZGlmZiAtdXByTiAtWCBsaW51eC0yLjYuMzgtdmFuaWxsYS9Eb2N1bWVudGF0aW9uL2Rv bnRkaWZmIGxpbnV4LTIuNi4zOC12YW5pbGxhL3NvdW5kL3NvYy9hdG1lbC9zbmQtc29jLWNkdS5j Cj4gbGludXgtMi42LjM4LXBhdGNoL3NvdW5kL3NvYy9hdG1lbC9zbmQtc29jLWNkdS5jCj4gLS0t IGxpbnV4LTIuNi4zOC12YW5pbGxhL3NvdW5kL3NvYy9hdG1lbC9zbmQtc29jLWNkdS5jCTE5NzAt MDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCj4gKysrIGxpbnV4LTIuNi4zOC1wYXRjaC9z b3VuZC9zb2MvYXRtZWwvc25kLXNvYy1jZHUuYwkyMDExLTAzLTI1IDEzOjQyOjA3LjU0NTA1MTA0 MyArMDEwMAo+IEBAIC0wLDAgKzEsMjU5IEBACj4gKy8qCj4gKyAqIHNuZC1zb2MtY2R1ICAtLSAg U29DIGF1ZGlvIGZvciBBVDkxU0FNOTI2MC1iYXNlZAo+ICsgKiAJCQlBS3NpZ25hbCBDRFUgYm9h cmQuCj4gKyAqCj4gKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUgU0FOIFBlb3BsZQo+ICsgKiAgQ29w eXJpZ2h0IChDKSAyMDA4IEF0bWVsCj4gKyAqICBDb3B5cmlnaHQgKEMpIDIwMTEgQUsgc2lnbmFs IEJybm8KPiArICoKPiArICogQXV0aG9yczogU2VkamkgR2FvdWFvdSA8c2VkamkuZ2FvdWFvdUBh dG1lbC5jb20+Cj4gKyAqICAgICAgICAgIEppcmkgUHJjaGFsIDxqaXJpLnByY2hhbEBha3NpZ25h bC5jej4KPiArICoKPiArICogQmFzZWQgb24gYXRpX2IxX3dtODczMS5jIGJ5Ogo+ICsgKiBGcmFu ayBNYW5kYXJpbm8gPGZtYW5kYXJpbm9AZW5kcmVsaWEuY29tPgo+ICsgKiBDb3B5cmlnaHQgMjAw NiBFbmRyZWxpYSBUZWNobm9sb2dpZXMgSW5jLgo+ICsgKiBCYXNlZCBvbiBjb3JnaS5jIGJ5Ogo+ ICsgKiBDb3B5cmlnaHQgMjAwNSBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgo+ICsgKiBD b3B5cmlnaHQgMjAwNSBPcGVuZWRoYW5kIEx0ZC4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKPiAr ICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBh cyBwdWJsaXNoZWQgYnkKPiArICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKPiArICogKGF0IHlvdXIgb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAqIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4gKyAqIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK PiArICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiArICoK PiArICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UKPiArICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3Jp dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKPiArICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxl IFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQo+ICsgKi8KPiAr Cj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5o Pgo+ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9k ZXZpY2UuaD4KPiArCj4gKyNpbmNsdWRlIDxsaW51eC9hdG1lbC1zc2MuaD4KPiArI2luY2x1ZGUg PHNvdW5kL2NvcmUuaD4KPiArI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgo+ICsjaW5jbHVkZSA8c291 bmQvcGNtX3BhcmFtcy5oPgo+ICsjaW5jbHVkZSA8c291bmQvc29jLmg+Cj4gKwo+ICsjaW5jbHVk ZSA8YXNtL21hY2gtdHlwZXMuaD4KPiArI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KPiArCj4g KyNpbmNsdWRlICIuLi9jb2RlY3MvdGx2MzIwYWljM3guaCIKPiArI2luY2x1ZGUgImF0bWVsLXBj bS5oIgo+ICsjaW5jbHVkZSAiYXRtZWxfc3NjX2RhaS5oIgo+ICsKPiArLyoKPiArICogVGFibGUg b2Ygc3VwcG9ydGVkIHJhdGVzCj4gKyAqIHdpdGggdGhlaXIgY2xvY2sgZGl2aWRlciAoY21yZGl2 KSBhbmQgbnVtYmVyIGNsb2NrIGluIGZyYW1lIChwZXJpb2QgKyAxICogMiksCj4gKyAqIGNvZGVj Y2xrIHNvdWxkIGJlIGludGVnZXIgbXVsdGlwbGUgb2Ygc2FtcGxlIHJhdGUgZXZlbiBpZiBpdCBp cyBub3QgZXhhY3QgdHJ1ZQo+ICsgKiB0byBhdm9pZCBkYXRhIG9uIFNTQyB1bmRlcnJ1biAvIG92 ZXJydW4gLQo+ICsgKiBDUFUgY2FuIG5vdCBnZW5lcmF0ZSBjbG9jayBhcyBmaW5lIGFzIENPREVD Lgo+ICsgKi8KPiArc3RydWN0IHsKPiArCXVuc2lnbmVkIGludCByYXRlOwo+ICsJdW5zaWduZWQg aW50IGNvZGVjY2xrOwo+ICsJdW5zaWduZWQgaW50IGNtcmRpdjsKPiArCXVuc2lnbmVkIGludCBw ZXJpb2Q7Cj4gK30gY2R1X2F1ZGlvW10gPSB7CgpTaG91bGQgYmUgc3RhdGljLgoKPiArCXs4MDAw LCAyMDk2MDAwLCAyNSwgMTMwLH0sCj4gKwl7MTYwMDAsIDI0OTYwMDAsIDIxLCA3Nyx9LAo+ICsJ ezMyMDAwLCAyNDk2MDAwLCAyMSwgMzgsfSwKPiArCXs0ODAwMCwgMjAxNjAwMCwgMjYsIDIwLH0s Cj4gKwl7OTYwMDAsIDQwMzIwMDAsIDEzLCAyMCx9LAo+ICsKPiArCXsxMTAyNSwgMjM4MTQwMCwg MjIsIDEwNyx9LAo+ICsJezIyMDUwLCAyMzgxNDAwLCAyMiwgNTMsfSwKPiArCXs0NDEwMCwgMjM4 MTQwMCwgMjIsIDI2LH0sCj4gKwl7ODgyMDAsIDQ3NjI4MDAsIDExLCAyNix9LAo+ICsKPiArCS8q IHNwZWNpYWwgcmF0ZXMgZm9yIHNlcmlhbCBsaW5lIHRyYW5zZmVyICovCj4gKwl7MTE1MjAsIDI2 MjY1NjAsIDIwLCAxMTMsfSwKPiArCXsyMzA0MCwgMjYyNjU2MCwgMjAsIDU2LH0sCj4gKwl7NDYw ODAsIDI3NjQ4MDAsIDE5LCAyOSx9LAo+ICt9Owo+ICsKPiArc3RhdGljIGludCBjZHVfaHdfcGFy YW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAo+ICsJCQkgc3RydWN0IHNu ZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCj4gK3sKPiArCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50 aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKPiArCXN0cnVjdCBzbmRfc29jX2Rh aSAqY29kZWNfZGFpID0gcnRkLT5jb2RlY19kYWk7Cj4gKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNw dV9kYWkgPSBydGQtPmNwdV9kYWk7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBydGQtPmNhcmQt PmRldjsKPiArCWludCByZXQ7Cj4gKwlpbnQgaSwgZm91bmQgPSAwOwo+ICsKPiArCS8qIHNldCBj b2RlYyBEQUkgY29uZmlndXJhdGlvbiAqLwo+ICsJcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChj b2RlY19kYWksCj4gKwkJCQkgIFNORF9TT0NfREFJRk1UX0kyUyB8IFNORF9TT0NfREFJRk1UX05C X05GIHwKPiArCQkJCSAgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUyk7Cj4gKwlpZiAocmV0IDwgMCkK PiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCS8qIHNldCBjcHUgREFJIGNvbmZpZ3VyYXRpb24gKi8K PiArCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY3B1X2RhaSwKPiArCQkJCSAgU05EX1NPQ19E QUlGTVRfSTJTIHwgU05EX1NPQ19EQUlGTVRfTkJfTkYgfAo+ICsJCQkJICBTTkRfU09DX0RBSUZN VF9DQlNfQ0ZTKTsKPiArCWlmIChyZXQgPCAwKQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJLyog T25seSBzdXBwb3J0IDEgb3IgMiBjaGFubmVsIFMxNl9MRSAqLwo+ICsJaWYgKChwYXJhbXNfY2hh bm5lbHMocGFyYW1zKSAhPSAxICYmIHBhcmFtc19jaGFubmVscyhwYXJhbXMpICE9IDIpIHx8Cj4g KwkgICBwYXJhbXNfZm9ybWF0KHBhcmFtcykgIT0gU05EUlZfUENNX0ZPUk1BVF9TMTZfTEUpCj4g KwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJLyogQ2hlY2sgcmF0ZSBzdXBwb3J0ICovCj4gKwlm b3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjZHVfYXVkaW8pOyBpKyspCj4gKwkJaWYgKHBhcmFt c19yYXRlKHBhcmFtcykgPT0gY2R1X2F1ZGlvW2ldLnJhdGUpIHsKPiArCQkJZm91bmQgPSAxOwo+ ICsJCQlicmVhazsKPiArCQl9Cj4gKwlpZiAoIWZvdW5kKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ ICsKPiArCS8qIFNldCB0aGUgY29kZWMgc3lzdGVtIGNsb2NrIGZvciBEQUMgYW5kIEFEQyAqLwo+ ICsJcmV0ID0gc25kX3NvY19kYWlfc2V0X3N5c2Nsayhjb2RlY19kYWksCj4gKwkJCQkgICAgIENM S0lOX0JDTEssIGNkdV9hdWRpb1tpXS5jb2RlY2NsaywKPiArCQkJCSAgICAgU05EX1NPQ19DTE9D S19JTik7Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJCWRldl9lcnIoZGV2LCAiY2FuJ3Qgc2V0IGNv ZGVjIHN5c3RlbSBjbG9ja1xuIik7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwkvKiBT ZXQgdGhlIGNwdSBjbG9jayBkaXZpZGVycyB0byBCQ0xLICovCj4gKwlyZXQgPSBzbmRfc29jX2Rh aV9zZXRfY2xrZGl2KGNwdV9kYWksCj4gKwkJCQkgICAgIEFUTUVMX1NTQ19DTVJfRElWLCBjZHVf YXVkaW9baV0uY21yZGl2KTsKPiArCXJldCB8PSBzbmRfc29jX2RhaV9zZXRfY2xrZGl2KGNwdV9k YWksCj4gKwkJCQkgICAgICBBVE1FTF9TU0NfVENNUl9QRVJJT0QsCj4gKwkJCQkgICAgICBjZHVf YXVkaW9baV0ucGVyaW9kKTsKPiArCXJldCB8PSBzbmRfc29jX2RhaV9zZXRfY2xrZGl2KGNwdV9k YWksCj4gKwkJCQkgICAgICBBVE1FTF9TU0NfUkNNUl9QRVJJT0QsCj4gKwkJCQkgICAgICBjZHVf YXVkaW9baV0ucGVyaW9kKTsKPiArCWlmIChyZXQgPCAwKSB7CgpJZiBtb3JlIHRoYW4gb25lIG9m IHRoZSBmdW5jdGlvbnMgYWJvdmUgcmV0dXJucyBhbiBlcnJvciB0aGVuIHlvdSB3aWxsCmVuZCB1 cCB3aXRoIGFuIG9kZCB2YWx1ZSBmb3IgcmV0IGhlcmUuIEVpdGhlciB0ZXN0IGVhY2ggb25lIGlu ZGl2aWR1YWxseQphbmQgcmV0dXJuIHRoZSBjb3JyZWN0IGVycm9yIGNvZGUgaW4gZWFjaCBjYXNl LCBvciByZXR1cm4gc29tZXRoaW5nIG1vcmUKc2Vuc2libGUgbGlrZSAtRUlOVkFMIGJlbG93LgoK PiArCQlkZXZfZXJyKGRldiwgImNhbid0IHNldCBjcHUgc3lzdGVtIGNsb2NrXG4iKTsKPiArCQly ZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3Ry dWN0IHNuZF9zb2Nfb3BzIGNkdV9vcHMgPSB7Cj4gKwkuaHdfcGFyYW1zID0gY2R1X2h3X3BhcmFt cywKPiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBj ZHVfZGFwbV93aWRnZXRzW10gPSB7Cj4gKwlTTkRfU09DX0RBUE1fSFAoIkhlYWRwaG9uZSBKYWNr IiwgTlVMTCksCj4gKwlTTkRfU09DX0RBUE1fTElORSgiTGluZSBPdXQiLCBOVUxMKSwKPiArCVNO RF9TT0NfREFQTV9NSUMoIk1pYyBKYWNrIiwgTlVMTCksCj4gKwlTTkRfU09DX0RBUE1fTElORSgi TGluZSBJbiIsIE5VTEwpLAo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29j X2RhcG1fcm91dGUgaW50ZXJjb25bXSA9IHsKPiArCS8qIEhlYWRwaG9uZSBjb25uZWN0ZWQgdG8g SFBMT1VULCBIUFJPVVQgKi8KPiArCXsiSGVhZHBob25lIEphY2siLCBOVUxMLCAiSFBMT1VUIn0s Cj4gKwl7IkhlYWRwaG9uZSBKYWNrIiwgTlVMTCwgIkhQUk9VVCJ9LAo+ICsKPiArCS8qIExpbmUg T3V0IGNvbm5lY3RlZCB0byBMTE9VVCwgUkxPVVQgKi8KPiArCXsiTGluZSBPdXQiLCBOVUxMLCAi TExPVVQifSwKPiArCXsiTGluZSBPdXQiLCBOVUxMLCAiUkxPVVQifSwKPiArCj4gKwkvKiBNaWMg Y29ubmVjdGVkIHRvIChNSUMzTCB8IE1JQzNSKSAqLwo+ICsJeyJNSUMzTCIsIE5VTEwsICJNaWMg QmlhcyAyViJ9LAo+ICsJeyJNSUMzUiIsIE5VTEwsICJNaWMgQmlhcyAyViJ9LAo+ICsJeyJNaWMg QmlhcyAyViIsIE5VTEwsICJNaWMgSmFjayJ9LAo+ICsKPiArCS8qIExpbmUgSW4gY29ubmVjdGVk IHRvIChMSU5FMUwgfCBMSU5FMkwpLCAoTElORTFSIHwgTElORTJSKSAqLwo+ICsJeyJMSU5FMUwi LCBOVUxMLCAiTGluZSBJbiJ9LAo+ICsJeyJMSU5FMkwiLCBOVUxMLCAiTGluZSBJbiJ9LAo+ICsJ eyJMSU5FMVIiLCBOVUxMLCAiTGluZSBJbiJ9LAo+ICsJeyJMSU5FMlIiLCBOVUxMLCAiTGluZSBJ biJ9LAo+ICt9Owo+ICsKPiArLyoKPiArICogTG9naWMgZm9yIGEgYWljM3ggYXMgY29ubmVjdGVk IG9uIGEgY2R1IGJvYXJkLgo+ICsgKi8KPiArc3RhdGljIGludCBjZHVfYWljM3hfaW5pdChzdHJ1 Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkKQo+ICt7Cj4gKwlzdHJ1Y3Qgc25kX3NvY19jb2Rl YyAqY29kZWMgPSBydGQtPmNvZGVjOwo+ICsJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkg PSBydGQtPmNvZGVjX2RhaTsKPiArCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9 ICZjb2RlYy0+ZGFwbTsKPiArCWludCByZXQ7Cj4gKwo+ICsJLyogQWRkIHNwZWNpZmljIHdpZGdl dHMgKi8KPiArCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgY2R1X2RhcG1fd2lkZ2V0 cywKPiArCQkJCSAgQVJSQVlfU0laRShjZHVfZGFwbV93aWRnZXRzKSk7Cj4gKwkvKiBTZXQgdXAg c3BlY2lmaWMgYXVkaW8gcGF0aCBpbnRlcmNvbm5lY3RzICovCj4gKwlzbmRfc29jX2RhcG1fYWRk X3JvdXRlcyhkYXBtLCBpbnRlcmNvbiwgQVJSQVlfU0laRShpbnRlcmNvbikpOwo+ICsKPiArCXJl dHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgY2R1X2Rh aSA9IHsKPiArCS5uYW1lCQk9ICJUTFYzMjBBSUMzMTA2IiwKPiArCS5zdHJlYW1fbmFtZQk9ICJQ Q00iLAo+ICsJLmNwdV9kYWlfbmFtZQk9ICJhdG1lbC1zc2MtZGFpLjAiLAo+ICsJLmNvZGVjX2Rh aV9uYW1lCT0gInRsdjMyMGFpYzN4LWhpZmkiLAo+ICsJLmluaXQJCT0gY2R1X2FpYzN4X2luaXQs Cj4gKwkucGxhdGZvcm1fbmFtZQk9ICJhdG1lbC1wY20tYXVkaW8iLAo+ICsJLmNvZGVjX25hbWUJ PSAic3BpMS4zIiwKPiArCS5vcHMJCT0gJmNkdV9vcHMsCj4gK307Cj4gKwo+ICtzdGF0aWMgc3Ry dWN0IHNuZF9zb2NfY2FyZCBzbmRfc29jX2NkdSA9IHsKPiArCS5uYW1lCQk9ICJUTFYzMjBBSUMz MTA2IiwKPiArCS5kYWlfbGluawk9ICZjZHVfZGFpLAo+ICsJLm51bV9saW5rcwk9IDEsCj4gK307 Cj4gKwo+ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqY2R1X3NuZF9kZXZpY2U7Cj4g Kwo+ICtzdGF0aWMgaW50IF9faW5pdCBjZHVfaW5pdCh2b2lkKQo+ICt7Cj4gKwlpbnQgcmV0Owo+ ICsKPiArCXJldCA9IGF0bWVsX3NzY19zZXRfYXVkaW8oMCk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJ cHJfZXJyKCJGYWlsZWQgdG8gc2V0IFNTQyAwIGZvciBhdWRpbzogJWRcbiIsIHJldCk7Cj4gKwkJ cmV0dXJuIHJldDsKCmdvdG8gZXJyIHRvIGJlIGNvbnNpc3RlbnQuCgo+ICsJfQo+ICsKPiArCWNk dV9zbmRfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJzb2MtYXVkaW8iLCAtMSk7Cj4g KwlpZiAoIWNkdV9zbmRfZGV2aWNlKSB7Cj4gKwkJcHJfZXJyKCJBU29DOiBQbGF0Zm9ybSBkZXZp Y2UgYWxsb2NhdGlvbiBmYWlsZWQ6ICVkXG4iLCByZXQpOwo+ICsJCXJldCA9IC1FTk9NRU07Cgpn b3RvIGVycj8KCj4gKwl9Cj4gKwo+ICsJcGxhdGZvcm1fc2V0X2RydmRhdGEoY2R1X3NuZF9kZXZp Y2UsICZzbmRfc29jX2NkdSk7Cj4gKwo+ICsJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChjZHVf c25kX2RldmljZSk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJcHJfZXJyKCJBU29DOiBQbGF0Zm9ybSBk ZXZpY2UgYWRkaW5nIGZhaWxlZDogJWRcbiIsIHJldCk7Cj4gKwkJZ290byBlcnJfZGV2aWNlX2Fk ZDsKPiArCX0KPiArCj4gKwlyZXR1cm4gcmV0Owo+ICsKPiArZXJyX2RldmljZV9hZGQ6Cj4gKwlw bGF0Zm9ybV9kZXZpY2VfcHV0KGNkdV9zbmRfZGV2aWNlKTsKPiArZXJyOgo+ICsJcmV0dXJuIHJl dDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgX19leGl0IGNkdV9leGl0KHZvaWQpCj4gK3sKPiAr CXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGNkdV9zbmRfZGV2aWNlKTsKPiArfQo+ICsKPiAr bW9kdWxlX2luaXQoY2R1X2luaXQpOwo+ICttb2R1bGVfZXhpdChjZHVfZXhpdCk7Cj4gKwo+ICsv KiBNb2R1bGUgaW5mb3JtYXRpb24gKi8KPiArTU9EVUxFX0FVVEhPUigiSmlyaSBQcmNoYWwgPGpp cmkucHJjaGFsQGFrc2lnbmFsLmN6PiIpOwo+ICtNT0RVTEVfREVTQ1JJUFRJT04oIkFMU0EgU29D IENEVV9BSUMzWCIpOwo+ICtNT0RVTEVfTElDRU5TRSgiR1BMIik7CgoKLS0gCkJsdWV3YXRlciBT eXN0ZW1zIEx0ZCAtIEFSTSBUZWNobm9sb2d5IFNvbHV0aW9uIENlbnRyZQoKUnlhbiBNYWxsb24g ICAgICAgICAJCTUgQW11cmkgUGFyaywgNDA0IEJhcmJhZG9lcyBTdApyeWFuQGJsdWV3YXRlcnN5 cy5jb20gICAgICAgICAJUE8gQm94IDEzIDg4OSwgQ2hyaXN0Y2h1cmNoIDgwMTMKaHR0cDovL3d3 dy5ibHVld2F0ZXJzeXMuY29tCU5ldyBaZWFsYW5kClBob25lOiArNjQgMyAzNzc5MTI3CQlGcmVl Y2FsbDogQXVzdHJhbGlhIDE4MDAgMTQ4IDc1MQpGYXg6ICAgKzY0IDMgMzc3OTEzNQkJCSAgVVNB IDE4MDAgMjYxIDI5MzQKLS0KVG8gdW5zdWJzY3JpYmUgZnJvbSB0aGlzIGxpc3Q6IHNlbmQgdGhl IGxpbmUgInVuc3Vic2NyaWJlIGFsc2EtZGV2ZWwiIGluCnRoZSBib2R5IG9mIGEgbWVzc2FnZSB0 byBtYWpvcmRvbW9Admdlci5rZXJuZWwub3JnCk1vcmUgbWFqb3Jkb21vIGluZm8gYXQgIGh0dHA6 Ly92Z2VyLmtlcm5lbC5vcmcvbWFqb3Jkb21vLWluZm8uaHRtbAoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWxzYS1kZXZlbCBtYWlsaW5nIGxpc3QKQWxz YS1kZXZlbEBhbHNhLXByb2plY3Qub3JnCmh0dHA6Ly9tYWlsbWFuLmFsc2EtcHJvamVjdC5vcmcv bWFpbG1hbi9saXN0aW5mby9hbHNhLWRldmVsCg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755541Ab1DDUHS (ORCPT ); Mon, 4 Apr 2011 16:07:18 -0400 Received: from mail.bluewatersys.com ([202.124.120.130]:52456 "EHLO hayes.bluewaternz.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1755445Ab1DDUHP (ORCPT ); Mon, 4 Apr 2011 16:07:15 -0400 Message-ID: <4D9A250B.3030707@bluewatersys.com> Date: Tue, 05 Apr 2011 08:07:39 +1200 From: Ryan Mallon User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.13) Gecko/20101208 Lightning/1.0b2 Thunderbird/3.1.7 MIME-Version: 1.0 To: =?UTF-8?B?UHJjaGFsIEppxZnDrQ==?= CC: alsa-devel@vger.kernel.org, alsa-devel@alsa-project.org, vbarinov@embeddedalley.com, linux-kernel@vger.kernel.org Subject: Re: [PATCH 2/2] ALSA: ASoc: putting together AT91SAM9260 and TLV320AIC3X References: <1300949648-15078-1-git-send-email-horms@verge.net.au> <1300949648-15078-2-git-send-email-horms@verge.net.au> <4D8B2068.60402@aksignal.cz> <4D8BA47B.8050904@bluewatersys.com> <4D9987DD.8040703@aksignal.cz> In-Reply-To: <4D9987DD.8040703@aksignal.cz> X-Enigmail-Version: 1.1.2 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 04/04/2011 08:57 PM, Prchal Jiří wrote: > Hi, > this is separeted PATCH for glue AT91SAM9260 and TLV320AIC3X on CDU board. Please repost this (and the other patch) as a new patch with a proper change log. You should also Cc Liam Girdwood and Mark Brown, who maintain the SoC audio system and will pick up this patch. Some more comments below. ~Ryan > > diff -uprN -X linux-2.6.38-vanilla/Documentation/dontdiff linux-2.6.38-vanilla/sound/soc/atmel/Kconfig > linux-2.6.38-patch/sound/soc/atmel/Kconfig > --- linux-2.6.38-vanilla/sound/soc/atmel/Kconfig 2011-03-15 02:20:32.000000000 +0100 > +++ linux-2.6.38-patch/sound/soc/atmel/Kconfig 2011-03-22 09:46:46.751566158 +0100 > @@ -50,3 +50,11 @@ config SND_AT91_SOC_AFEB9260 > select SND_SOC_TLV320AIC23 > help > Say Y here to support sound on AFEB9260 board. > + > +config SND_AT91_SOC_CDU > + tristate "SoC Audio support for CDU board" > + depends on ARCH_AT91 && MACH_CDU && SND_ATMEL_SOC > + select SND_ATMEL_SOC_SSC > + select SND_SOC_TLV320AIC3X > + help > + Say Y here to support sound on CDU board. > diff -uprN -X linux-2.6.38-vanilla/Documentation/dontdiff linux-2.6.38-vanilla/sound/soc/atmel/Makefile > linux-2.6.38-patch/sound/soc/atmel/Makefile > --- linux-2.6.38-vanilla/sound/soc/atmel/Makefile 2011-03-15 02:20:32.000000000 +0100 > +++ linux-2.6.38-patch/sound/soc/atmel/Makefile 2011-03-16 09:26:17.000000000 +0100 > @@ -14,3 +14,4 @@ snd-soc-playpaq-objs := playpaq_wm8510.o > obj-$(CONFIG_SND_AT91_SOC_SAM9G20_WM8731) += snd-soc-sam9g20-wm8731.o > obj-$(CONFIG_SND_AT32_SOC_PLAYPAQ) += snd-soc-playpaq.o > obj-$(CONFIG_SND_AT91_SOC_AFEB9260) += snd-soc-afeb9260.o > +obj-$(CONFIG_SND_AT91_SOC_CDU) += snd-soc-cdu.o > diff -uprN -X linux-2.6.38-vanilla/Documentation/dontdiff linux-2.6.38-vanilla/sound/soc/atmel/snd-soc-cdu.c > linux-2.6.38-patch/sound/soc/atmel/snd-soc-cdu.c > --- linux-2.6.38-vanilla/sound/soc/atmel/snd-soc-cdu.c 1970-01-01 01:00:00.000000000 +0100 > +++ linux-2.6.38-patch/sound/soc/atmel/snd-soc-cdu.c 2011-03-25 13:42:07.545051043 +0100 > @@ -0,0 +1,259 @@ > +/* > + * snd-soc-cdu -- SoC audio for AT91SAM9260-based > + * AKsignal CDU board. > + * > + * Copyright (C) 2005 SAN People > + * Copyright (C) 2008 Atmel > + * Copyright (C) 2011 AK signal Brno > + * > + * Authors: Sedji Gaouaou > + * Jiri Prchal > + * > + * Based on ati_b1_wm8731.c by: > + * Frank Mandarino > + * Copyright 2006 Endrelia Technologies Inc. > + * Based on corgi.c by: > + * Copyright 2005 Wolfson Microelectronics PLC. > + * Copyright 2005 Openedhand Ltd. > + * > + * This program is free software; you can redistribute it and/or modify > + * it under the terms of the GNU General Public License as published by > + * the Free Software Foundation; either version 2 of the License, or > + * (at your option) any later version. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + * > + * You should have received a copy of the GNU General Public License > + * along with this program; if not, write to the Free Software > + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA > + */ > + > +#include > +#include > +#include > +#include > + > +#include > +#include > +#include > +#include > +#include > + > +#include > +#include > + > +#include "../codecs/tlv320aic3x.h" > +#include "atmel-pcm.h" > +#include "atmel_ssc_dai.h" > + > +/* > + * Table of supported rates > + * with their clock divider (cmrdiv) and number clock in frame (period + 1 * 2), > + * codecclk sould be integer multiple of sample rate even if it is not exact true > + * to avoid data on SSC underrun / overrun - > + * CPU can not generate clock as fine as CODEC. > + */ > +struct { > + unsigned int rate; > + unsigned int codecclk; > + unsigned int cmrdiv; > + unsigned int period; > +} cdu_audio[] = { Should be static. > + {8000, 2096000, 25, 130,}, > + {16000, 2496000, 21, 77,}, > + {32000, 2496000, 21, 38,}, > + {48000, 2016000, 26, 20,}, > + {96000, 4032000, 13, 20,}, > + > + {11025, 2381400, 22, 107,}, > + {22050, 2381400, 22, 53,}, > + {44100, 2381400, 22, 26,}, > + {88200, 4762800, 11, 26,}, > + > + /* special rates for serial line transfer */ > + {11520, 2626560, 20, 113,}, > + {23040, 2626560, 20, 56,}, > + {46080, 2764800, 19, 29,}, > +}; > + > +static int cdu_hw_params(struct snd_pcm_substream *substream, > + struct snd_pcm_hw_params *params) > +{ > + struct snd_soc_pcm_runtime *rtd = substream->private_data; > + struct snd_soc_dai *codec_dai = rtd->codec_dai; > + struct snd_soc_dai *cpu_dai = rtd->cpu_dai; > + struct device *dev = rtd->card->dev; > + int ret; > + int i, found = 0; > + > + /* set codec DAI configuration */ > + ret = snd_soc_dai_set_fmt(codec_dai, > + SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | > + SND_SOC_DAIFMT_CBS_CFS); > + if (ret < 0) > + return ret; > + > + /* set cpu DAI configuration */ > + ret = snd_soc_dai_set_fmt(cpu_dai, > + SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | > + SND_SOC_DAIFMT_CBS_CFS); > + if (ret < 0) > + return ret; > + > + /* Only support 1 or 2 channel S16_LE */ > + if ((params_channels(params) != 1 && params_channels(params) != 2) || > + params_format(params) != SNDRV_PCM_FORMAT_S16_LE) > + return -EINVAL; > + > + /* Check rate support */ > + for (i = 0; i < ARRAY_SIZE(cdu_audio); i++) > + if (params_rate(params) == cdu_audio[i].rate) { > + found = 1; > + break; > + } > + if (!found) > + return -EINVAL; > + > + /* Set the codec system clock for DAC and ADC */ > + ret = snd_soc_dai_set_sysclk(codec_dai, > + CLKIN_BCLK, cdu_audio[i].codecclk, > + SND_SOC_CLOCK_IN); > + if (ret < 0) { > + dev_err(dev, "can't set codec system clock\n"); > + return ret; > + } > + > + /* Set the cpu clock dividers to BCLK */ > + ret = snd_soc_dai_set_clkdiv(cpu_dai, > + ATMEL_SSC_CMR_DIV, cdu_audio[i].cmrdiv); > + ret |= snd_soc_dai_set_clkdiv(cpu_dai, > + ATMEL_SSC_TCMR_PERIOD, > + cdu_audio[i].period); > + ret |= snd_soc_dai_set_clkdiv(cpu_dai, > + ATMEL_SSC_RCMR_PERIOD, > + cdu_audio[i].period); > + if (ret < 0) { If more than one of the functions above returns an error then you will end up with an odd value for ret here. Either test each one individually and return the correct error code in each case, or return something more sensible like -EINVAL below. > + dev_err(dev, "can't set cpu system clock\n"); > + return ret; > + } > + > + return 0; > +} > + > +static struct snd_soc_ops cdu_ops = { > + .hw_params = cdu_hw_params, > +}; > + > +static const struct snd_soc_dapm_widget cdu_dapm_widgets[] = { > + SND_SOC_DAPM_HP("Headphone Jack", NULL), > + SND_SOC_DAPM_LINE("Line Out", NULL), > + SND_SOC_DAPM_MIC("Mic Jack", NULL), > + SND_SOC_DAPM_LINE("Line In", NULL), > +}; > + > +static const struct snd_soc_dapm_route intercon[] = { > + /* Headphone connected to HPLOUT, HPROUT */ > + {"Headphone Jack", NULL, "HPLOUT"}, > + {"Headphone Jack", NULL, "HPROUT"}, > + > + /* Line Out connected to LLOUT, RLOUT */ > + {"Line Out", NULL, "LLOUT"}, > + {"Line Out", NULL, "RLOUT"}, > + > + /* Mic connected to (MIC3L | MIC3R) */ > + {"MIC3L", NULL, "Mic Bias 2V"}, > + {"MIC3R", NULL, "Mic Bias 2V"}, > + {"Mic Bias 2V", NULL, "Mic Jack"}, > + > + /* Line In connected to (LINE1L | LINE2L), (LINE1R | LINE2R) */ > + {"LINE1L", NULL, "Line In"}, > + {"LINE2L", NULL, "Line In"}, > + {"LINE1R", NULL, "Line In"}, > + {"LINE2R", NULL, "Line In"}, > +}; > + > +/* > + * Logic for a aic3x as connected on a cdu board. > + */ > +static int cdu_aic3x_init(struct snd_soc_pcm_runtime *rtd) > +{ > + struct snd_soc_codec *codec = rtd->codec; > + struct snd_soc_dai *codec_dai = rtd->codec_dai; > + struct snd_soc_dapm_context *dapm = &codec->dapm; > + int ret; > + > + /* Add specific widgets */ > + snd_soc_dapm_new_controls(dapm, cdu_dapm_widgets, > + ARRAY_SIZE(cdu_dapm_widgets)); > + /* Set up specific audio path interconnects */ > + snd_soc_dapm_add_routes(dapm, intercon, ARRAY_SIZE(intercon)); > + > + return 0; > +} > + > +static struct snd_soc_dai_link cdu_dai = { > + .name = "TLV320AIC3106", > + .stream_name = "PCM", > + .cpu_dai_name = "atmel-ssc-dai.0", > + .codec_dai_name = "tlv320aic3x-hifi", > + .init = cdu_aic3x_init, > + .platform_name = "atmel-pcm-audio", > + .codec_name = "spi1.3", > + .ops = &cdu_ops, > +}; > + > +static struct snd_soc_card snd_soc_cdu = { > + .name = "TLV320AIC3106", > + .dai_link = &cdu_dai, > + .num_links = 1, > +}; > + > +static struct platform_device *cdu_snd_device; > + > +static int __init cdu_init(void) > +{ > + int ret; > + > + ret = atmel_ssc_set_audio(0); > + if (ret) { > + pr_err("Failed to set SSC 0 for audio: %d\n", ret); > + return ret; goto err to be consistent. > + } > + > + cdu_snd_device = platform_device_alloc("soc-audio", -1); > + if (!cdu_snd_device) { > + pr_err("ASoC: Platform device allocation failed: %d\n", ret); > + ret = -ENOMEM; goto err? > + } > + > + platform_set_drvdata(cdu_snd_device, &snd_soc_cdu); > + > + ret = platform_device_add(cdu_snd_device); > + if (ret) { > + pr_err("ASoC: Platform device adding failed: %d\n", ret); > + goto err_device_add; > + } > + > + return ret; > + > +err_device_add: > + platform_device_put(cdu_snd_device); > +err: > + return ret; > +} > + > +static void __exit cdu_exit(void) > +{ > + platform_device_unregister(cdu_snd_device); > +} > + > +module_init(cdu_init); > +module_exit(cdu_exit); > + > +/* Module information */ > +MODULE_AUTHOR("Jiri Prchal "); > +MODULE_DESCRIPTION("ALSA SoC CDU_AIC3X"); > +MODULE_LICENSE("GPL"); -- Bluewater Systems Ltd - ARM Technology Solution Centre Ryan Mallon 5 Amuri Park, 404 Barbadoes St ryan@bluewatersys.com PO Box 13 889, Christchurch 8013 http://www.bluewatersys.com New Zealand Phone: +64 3 3779127 Freecall: Australia 1800 148 751 Fax: +64 3 3779135 USA 1800 261 2934