From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chih-Chiang Chang Subject: Re: [PATCH] ASoC: Add support for NAU8824 codec to ASoC Date: Wed, 4 Mar 2015 20:35:52 +0800 Message-ID: <54F6FC28.4030403@nuvoton.com> References: <1423986570-6355-1-git-send-email-Vincent.wan@amd.com> <20150224141314.GI6236@finisterre.sirena.org.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from maillog.nuvoton.com (maillog.nuvoton.com [202.39.227.15]) by alsa0.perex.cz (Postfix) with ESMTP id 0B0CE265050 for ; Wed, 4 Mar 2015 13:35:56 +0100 (CET) In-Reply-To: <20150224141314.GI6236@finisterre.sirena.org.uk> 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: Mark Brown Cc: "alsa-devel@alsa-project.org" , "mcuos.com@gmail.com" , "tiwai@suse.de" , "lgirdwood@gmail.com" , "linux-kernel@vger.kernel.org" , liam.r.girdwood@intel.com List-Id: alsa-devel@alsa-project.org CgpPbiAyMDE1LzIvMjQg5LiL5Y2IIDEwOjEzLCBNYXJrIEJyb3duIHdyb3RlOgo+IE9uIFN1biwg RmViIDE1LCAyMDE1IGF0IDAzOjQ5OjMwUE0gKzA4MDAsIFdhbiBab25nc2h1biB3cm90ZToKPgo+ PiArICAgIC8qIFNQIENsYXNzLUQgbXV0ZSBjb250cm9sICovCj4+ICsgICAgU09DX0RPVUJMRSgi SFAgUGxheWJhY2sgU3dpdGNoIiwgTkFVODgyNF9IUF9NVVRFLCBOQVU4ODI0X0xfTVVURV9TRlQs Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkFVODgyNF9SX01VVEVfU0ZULCAxLCAx KSwKPj4gKyAgICBTT0NfU0lOR0xFX1RMVigiSFAgTGVmdCBWb2x1bWUiLCBOQVU4ODI0X0hQX1ZP TCwgTkFVODgyNF9MX1ZPTF9TRlQsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkFV ODgyNF9WT0xfUlNDTF9SQU5HRSwgMSwgb3V0X2hwX3ZvbF90bHYpLAo+PiArICAgIFNPQ19TSU5H TEVfVExWKCJIUCBSaWdodCBWb2x1bWUiLCBOQVU4ODI0X0hQX1ZPTCwgTkFVODgyNF9SX1ZPTF9T RlQsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkFVODgyNF9WT0xfUlNDTF9SQU5H RSwgMSwgb3V0X2hwX3ZvbF90bHYpLAo+Cj4gSSB3b3VsZCBoYXZlIGV4cGVjdGVkIHRoZSBoZWFk cGhvbmUgdm9sdW1lIGNvbnRyb2wgdG8gYmUgYSBzdGVyZW8KPiAoZG91YmxlKSBjb250cm9sIC0g c2FtZSBmb3Igc3BlYWtlcnMuClRoZSBuYXU4ODI0IHJlbGF0ZWQgcmVnaXN0ZXJzIHdoaWNoIGNv bnRyb2wgbGVmdC9yaWdodCB2b2x1bWUgYXJlIGxvY2F0ZWQKaW4gZGlmZmVyZW50IGFkZHJlc3Nl cyBhbmQgZGlmZmVyZW50IHNoaWZ0IGJpdHMuIFNpbmNlIHRoZXJlIGlzIG5vIGF2YWlsYWJsZQpw cmVwcm9jZXNzb3IgbWFjcm8gdG8gbWVldCBvdXIgcmVxdWlyZW1lbnRzLCB0aGUgZHJpdmVyIGNv bnNpc3RzIG9mIGxlZnQvcmlnaHQKdm9sdW1lIGNvbnRyb2wgc2VwYXJhdGVseS4KPgo+PiArICAg IC8qIERNSUMgY29udHJvbCAqLwo+PiArICAgIFNPQ19ET1VCTEUoIkRNSUMgTCBSIFN3aXRjaCIs IE5BVTg4MjRfRU5BX0NUUkwsIE5BVTg4MjRfRE1JQ19DSDBfU0ZULAo+PiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE5BVTg4MjRfRE1JQ19DSDFfU0ZULCAxLCAwKSwKPj4gKyAgICBTT0Nf U0lOR0xFKCJETUlDIEVuYWJsZSIsIE5BVTg4MjRfQklBU19BREosIE5BVTg4MjRfRE1JQzFfU0ZU LCAxLCAwKSwKPj4gKyAgICBTT0NfU0lOR0xFKCJWTUlEIFN3aXRjaCIsIE5BVTg4MjRfQklBU19B REosIE5BVTg4MjRfVk1JRF9TRlQsIDEsIDApLAo+PiArICAgIFNPQ19TSU5HTEUoIkJJQVMgU3dp dGNoIiwgTkFVODgyNF9CT09TVCwgTkFVODgyNF9HX0JJQVNfU0ZULCAxLCAwKSwKPgo+IFRoaXMg YWxsIGxvb2tzIGxpa2Ugc3R1ZmYgdGhhdCBzaG91bGQgYmUgZG9uZSB3aXRoIERBUE0uLi4KVGhl IGFib3ZlIGNvbnRyb2xzIGhhdmUgYmVlbiBkb25lIHdpdGggREFQTSBpbiBuZXh0IHBhdGNoIHN1 Ym1pdC4KPgo+PiArICAgIFNPQ19ET1VCTEVfUl9UTFYoIk1JQyBMIFIgR2FpbiIsIE5BVTg4MjRf QURDX0NIMF9ER0FJTl9DVFJMLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BVTg4 MjRfQURDX0NIMV9ER0FJTl9DVFJMLCAwLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAg IE5BVTg4MjRfQURDX1ZPTF9SU0NMX1JBTkdFLCAgICAgMCwgYWRjX3ZvbF90bHYpLAo+Cj4gQWxs IHZvbHVtZSBjb250cm9scyBzaG91bGQgYmUgY2FsbGVkIFZvbHVtZS4KVGhlIG5hbWluZyBoYXMg YmVlbiBjaGFuZ2VkLgo+Cj4+ICtzdGF0aWMgaW50IHNldF9kbWljX2NsayhzdHJ1Y3Qgc25kX3Nv Y19kYXBtX3dpZGdldCAqdywKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg c25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQo+PiArewo+PiArICAgIHN0cnVjdCBz bmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOwo+Cj4gdy0+Y29kZWMgaXMgZ29pbmcgYXdh eSwgdXNlIHNuZF9zb2NfZGFwbV90b19jb2RlYygpLiAgWW91IHNob3VsZCBhbHdheXMKPiBzdWJt aXQgYWdhaW5zdCBjdXJyZW50IGNvZGUuCk1vZGlmaWVkIGRvbmUgaW4gbmV4dCBwYXRjaCBzdWJt aXQuCj4KPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBuYXU4ODI0X3Jl Y19sX21peFtdID0gewo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNPQ19EQVBNX1NJ TkdMRSgiQlNUMSBTd2l0Y2giLCBTTkRfU09DX05PUE0sCj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMCwgMCwgMCksCj4+ICt9Owo+Cj4gUGxlYXNlIHVzZSBub3JtYWwgaW5kZW50YXRp b24sIGEgc2luZ2xlIHRhYiBpcyBlbm91Z2guCk1vZGlmaWVkIGRvbmUgaW4gbmV4dCBwYXRjaCBz dWJtaXQuCj4KPj4gK3N0YXRpYyBpbnQgbmF1ODgyNF9ocF9ldmVudChzdHJ1Y3Qgc25kX3NvY19k YXBtX3dpZGdldCAqdywKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc25k X2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQo+PiArewo+PiArICAgIHJldHVybiAwOwo+ PiArfQo+Cj4gUmVtb3ZlIGVtcHR5IGZ1bmN0aW9ucy4KTW9kaWZpZWQgZG9uZSBpbiBuZXh0IHBh dGNoIHN1Ym1pdC4KPgo+PiArICAgIHN3aXRjaCAoZm10ICYgU05EX1NPQ19EQUlGTVRfTUFTVEVS X01BU0spIHsKPj4gKyAgICBjYXNlIFNORF9TT0NfREFJRk1UX0NCTV9DRk06Cj4+ICsgICAgICAg ICAgICByZWdfdmFsXzIgfD0gTkFVODgyNF9JMlNfTVNfTTsKPj4gKyAgICAgICAgICAgIGJyZWFr Owo+PiArICAgIGNhc2UgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUzoKPj4gKyAgICAgICAgICAgIGJy ZWFrOwo+PiArICAgIGNhc2UgU05EX1NPQ19EQUlGTVRfQ0JTX0NGTToKPj4gKyAgICAgICAgICAg IGJyZWFrOwo+Cj4gVGhlc2UgdHdvIGNsb2NraW5nIGNvbmZpZ3VyYXRpb25zIGFwcGVhciBub3Qg dG8gZGlmZmVyIGluIHRlcm1zIG9mIHdoYXQKPiB3ZSBkbyB0byB0aGUgZGV2aWNlIC0gdGhpcyBz dWdnZXN0cyB0aGF0IG9ubHkgb25lIG9mIHRoZW0gaXMgYWN0dWFsbHkKPiBzdXBwb3J0ZWQuCk1v ZGlmaWVkIGRvbmUgaW4gbmV4dCBwYXRjaCBzdWJtaXQuCj4KPj4gK3N0YXRpYyBpbnQgbmF1ODgy NF9GTExfZnJlZXJ1bl9tb2RlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgaW50IElzRW5h YmxlKQo+PiArewo+PiArICAgIGlmIChJc0VuYWJsZSA9PSB0cnVlKSB7Cj4KPiBUaGlzIGRvZXNu J3QgbG9vayBsaWtlIExpbnV4IGNvZGluZyBzdHlsZS4uLgpSZW1vdmUgdGhpcyBmdW5jdGlvbgo+ Cj4+ICt2b2lkIHNldF9zeXNfY2xrKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgaW50IHN5 c19jbGspCj4+ICt7Cj4+ICsgICAgcHJfZGVidWcoIiVzIHN5c19jbGs9JXhcbiIsIF9fZnVuY19f LCBzeXNfY2xrKTsKPj4gKyAgICBzd2l0Y2ggKHN5c19jbGspIHsKPj4gKyAgICBjYXNlIE5BVTg4 MjRfSU5URVJOQUxDTE9DSzoKPj4gKyAgICAgICAgICAgIG5hdTg4MjRfRkxMX2ZyZWVydW5fbW9k ZShjb2RlYywgdHJ1ZSk7Cj4+ICsgICAgICAgICAgICBicmVhazsKPj4gKwo+PiArICAgIGNhc2Ug TkFVODgyNF9NQ0xLOgo+PiArICAgIGRlZmF1bHQ6Cj4+ICsgICAgICAgICAgICBuYXU4ODI0X0ZM TF9mcmVlcnVuX21vZGUoY29kZWMsIGZhbHNlKTsKPj4gKyAgICAgICAgICAgIGJyZWFrOwo+PiAr ICAgIH0KPj4gK30KPgo+IC4uLmFuZCBJIGRvbid0IGVudGlyZWx5IHNlZSB3aHkgaXQncyBhIHNl cGFyYXRlIGZ1bmN0aW9uIHRvIHRoaXMgKHdoaWNoCj4gaXMgaXRzZWxmIGFuIGludGVybmFsIHdy YXBwZXIgZnVuY3Rpb24gd2hpY2ggcG9zc2libHkgc2hvdWxkbid0IGV4aXN0KT4KUmVtb3ZlICJu YXU4ODI0X0ZMTF9mcmVlcnVuX21vZGUoKSIgZnVuY3Rpb24KPgo+PiArc3RhdGljIGludCBuYXU4 ODI0X3NldF9zeXNjbGsoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAo+PiArICAgICAgICAg ICAgaW50IGNsa19pZCwgaW50IHNvdXJjZSwgdW5zaWduZWQgaW50IGZyZXEsIGludCBkaXIpCj4+ ICt7Cj4+ICsgICAgaW50IGRpdmlkZXIgPSAxOwo+PiArCj4+ICsgICAgaWYgKGNsa19pZCA9PSBO QVU4ODI0X01DTEspIHsKPj4gKyAgICAgICAgICAgIHNldF9zeXNfY2xrKGNvZGVjLCBOQVU4ODI0 X01DTEspOwo+PiArICAgICAgICAgICAgZGV2X2RiZyhjb2RlYy0+ZGV2LCAiJXM6IGlucHV0IGZy ZXEgPSAlZCBkaXZpZGVyID0gJWQiLAo+PiArICAgICAgICAgICAgX19mdW5jX18sIGZyZXEsIGRp dmlkZXIpOwo+PiArCj4+ICsgICAgfSBlbHNlIGlmIChjbGtfaWQgPT0gTkFVODgyNF9JTlRFUk5B TENMT0NLKSB7Cj4+ICsgICAgICAgICAgICBzZXRfc3lzX2Nsayhjb2RlYywgTkFVODgyNF9JTlRF Uk5BTENMT0NLKTsKPj4gKyAgICB9IGVsc2Ugewo+PiArICAgICAgICAgICAgZGV2X2Vycihjb2Rl Yy0+ZGV2LCAiV3JvbmcgY2xvY2sgc3JjXG4iKTsKPj4gKyAgICAgICAgICAgIHJldHVybiAtRUlO VkFMOwo+PiArICAgIH0KPgo+IFVzZSBzd2l0Y2ggc3RhdGVtZW50cyByYXRoZXIgdGhhbiBpZiB0 cmVlcyBsaWtlIG90aGVyIGRyaXZlcnMuICBJdCBsb29rcwo+IGxpa2UgY2xrX2lkIHNob3VsZCBh Y3R1YWxseSBiZSBzb3VyY2Ugc2luY2Ugd2UncmUgc2VsZWN0aW5nIHRoZSBjbG9jayB0bwo+IHVz ZSByYXRoZXIgdGhhbiBzZWxlY3Rpbmcgd2hpY2ggY2xvY2sgdG8gY29uZmlndXJlLgpNb2RpZmll ZCBkb25lIGluIG5leHQgcGF0Y2ggc3VibWl0Lgo+Cj4+ICtzdGF0aWMgaW50IG5hdTg4MjRfc2V0 X2JpYXNfbGV2ZWwoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAo+PiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGVudW0gc25kX3NvY19iaWFzX2xldmVsIGxldmVsKQo+PiArewo+PiAr ICAgIGRldl9kYmcoY29kZWMtPmRldiwgIiMjIG5hdTg4MjRfc2V0X2JpYXNfbGV2ZWwgJWRcbiIs IGxldmVsKTsKPj4gKyAgICBpZiAobGV2ZWwgPT0gY29kZWMtPmRhcG0uYmlhc19sZXZlbCkgewo+ PiArICAgICAgICAgICAgZGV2X2RiZyhjb2RlYy0+ZGV2LCAiIyNzZXRfYmlhc19sZXZlbDogbGV2 ZWwgcmV0dXJuaW5nLi4uXHJcbiIpOwo+PiArICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4+ ICsgICAgfQo+Cj4gV2h5IGlzIHRoaXMgaGVyZSAtIG90aGVyIGRyaXZlcnMgZG9uJ3QgZG8gdGhp cyBhbmQgaXQgZG9lc24ndCBsb29rCj4gZGV2aWNlIHNwZWNpZmljPwpSZW1vdmUgaXQKPgo+PiAr ICAgIHN3aXRjaCAobGV2ZWwpIHsKPj4gKyAgICBjYXNlIFNORF9TT0NfQklBU19PTjoKPj4gKyAg ICAgICAgICAgIC8qIEFsbCBwb3dlciBpcyBkcml2ZW4gYnkgREFQTSBzeXN0ZW0qLwo+PiArICAg ICAgICAgICAgZGV2X2RiZyhjb2RlYy0+ZGV2LCAiIyMjbmF1ODgyNF9zZXRfYmlhc19sZXZlbCBC SUFTX09OXG4iKTsKPj4gKyAgICAgICAgICAgIHNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIE5B VTg4MjRfQklBU19BREosCj4+ICsgICAgICAgICAgICAgICAgICAgIE5BVTg4MjRfVk1JRF9NQVNL LCBOQVU4ODI0X1ZNSURfRU4pOwo+PiArICAgICAgICAgICAgc25kX3NvY191cGRhdGVfYml0cyhj b2RlYywgTkFVODgyNF9CT09TVCwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQVU4 ODI0X0dfQklBU19NQVNLLCBOQVU4ODI0X0dfQklBU19FTik7Cj4KPiBXZSB0dXJuIG9uIFZNSUQg bGFzdD8gIFRoYXQncyBhIHN0cmFuZ2UgdGhpbmcgdG8gZG8uLi4KSW4gbmF1ODgyNCwgVk1JRF9F TiBpcyB0byBlbmFibGUgVnJlZmYgcGluCj4KPj4gK3N0YXRpYyBpbnQgbmF1ODgyNF9zdXNwZW5k KHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKPj4gK3sKPj4gKyAgICBkZXZfZGJnKGNvZGVj LT5kZXYsICIlczogRW50ZXJlZFxuIiwgX19mdW5jX18pOwo+PiArICAgIG5hdTg4MjRfc2V0X2Jp YXNfbGV2ZWwoY29kZWMsIFNORF9TT0NfQklBU19PRkYpOwo+PiArICAgIGRldl9kYmcoY29kZWMt PmRldiwgIiVzOiBFeGl0aW5nXG4iLCBfX2Z1bmNfXyk7Cj4+ICsgICAgcmV0dXJuIDA7Cj4+ICt9 Cj4KPiBTZXQgaWRsZV9iaWFzX29mZiAod2hpY2ggaXQgbG9va3MgbGlrZSB5b3Ugc2hvdWxkIGJl IGRvaW5nKSBhbmQgdGhpcwo+IGJlY29tZXMgcmVkdW5kYW50LiAgSWYgeW91J3JlICpub3QqIHVz aW5nIGlkbGVfYmlhc19vZmYgZm9yIHNvbWUgcmVhc29uCj4gdGhlbiB0aGUgc2V0X2JpYXNfbGV2 ZWwoKSB3b3JrIGRvbmUgaW4gX09OIHNob3VsZCBiZSB1bmRvbmUgaW4gYXQgbGVhc3QKPiBfU1VT UEVORCByYXRoZXIgdGhhbiBfT0ZGIHNvIHdlIHNhdmUgcG93ZXIgb24gaWRsZS4KUmVtb3ZlIHN1 c3BlbmQgZnVuY3Rpb24KPgo+PiArc3RydWN0IG5hdTg4MjRfaW5pdF9yZWcgewo+PiArICAgIHU4 IHJlZzsKPj4gKyAgICB1MTYgdmFsOwo+PiArfTsKPgo+IFRoaXMgbG9va3MgbGlrZSB5b3UncmUg cmVpbXBsZW1lbnRpbmcgcmVnbWFwJ3MgcmVnaXN0ZXIgc2VxdWVuY2UKPiBzdHVmZi4uLiAgSXQn cyBhbHNvIGEgKnZlcnkqIGxhcmdlIHNlcXVlbmNlIHlvdSBoYXZlLCBhcmUgeW91IHN1cmUgaXQn cwo+IGFsbCByZXF1aXJlZD8gIEl0IHNlZW1zIGxpa2UgdGhpcyBtYXkgYmUgZG9pbmcgYSBidW5j aCBvZiBtYWNoaW5lCj4gc3BlY2lmaWMgY29uZmlndXJhdGlvbiBidXQgc2luY2UgaXQncyBhbGwg bWFnaWMgbnVtYmVycyBpdCdzIGhhcmQgdG8KPiB0ZWxsLgpJbml0aWFsIHNldHRpbmdzIGFyZSBh cnJhbmdlZCBpbiBvcmRlcgo+Cj4+ICsjZGVmaW5lIE5BVTg4MjRfSU5JVF9SRUdfTEVOIEFSUkFZ X1NJWkUoaW5pdF9saXN0KQo+Cj4gSnVzdCB1c2UgQVJSQVlfU0laRSgpLgpNb2RpZmllZCBkb25l IGluIG5leHQgcGF0Y2ggc3VibWl0Lgo+Cj4+ICtzdGF0aWMgaW50IG5hdTg4MjRfcmVnX2luaXQo c3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQo+PiArewo+PiArICAgIGludCBpOwo+PiArCj4+ ICsgICAgbWRlbGF5KDEpOwo+PiArICAgIGZvciAoaSA9IDA7IGkgPCBOQVU4ODI0X0lOSVRfUkVH X0xFTjsgaSsrKSB7Cj4+ICsgICAgICAgICAgICBpZiAoaW5pdF9saXN0W2ldLnJlZyA9PSAweEZG RkYpCj4+ICsgICAgICAgICAgICAgICAgICAgIG1kZWxheSgxKTsKPj4gKyAgICAgICAgICAgIGVs c2UKPj4gKyAgICAgICAgICAgICAgICAgICAgc25kX3NvY193cml0ZShjb2RlYywgaW5pdF9saXN0 W2ldLnJlZywKPj4gKyAgICAgICAgICAgICAgICAgICAgaW5pdF9saXN0W2ldLnZhbCk7Cj4+ICsg ICAgfQo+Cj4gVXNlIHRoZSBzdGFuZGFyZCByZWdtYXAgcGF0Y2ggc3R1ZmYuICBJZiB5b3UgbmVl ZCB0aGUgZGVsYXlzIGluIHRoZQo+IHNlcXVlbmNlIGltcGxlbWVudCB0aGF0IGluIHRoZSBjb3Jl LCB0aG91Z2ggSSBndWVzcyB5b3UgZG9uJ3Qgc2luY2UKPiByZWcgaXMgYSB1OCBhbmQgeW91J3Jl IGxvb2tpbmcgZm9yIDB4ZmZmZiBpbiBpdC4uLgpNb2RpZmllZCBkb25lIGluIG5leHQgcGF0Y2gg c3VibWl0Lgo+Cj4+ICsgICAgLyogRHluYW1pYyBIZWFkc2V0IGRldGVjdGlvbiBlbmFibGVkICov Cj4+ICsgICAgc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgMHgwMSwgMHg0MDAsIDB4NDAwKTsK Pj4gKyAgICBzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCAweDAyLCAweDAwMDgsIDB4MDAwOCk7 Cj4+ICsgICAgc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgMHgwZiwgMHgwMzAwLCAweDAxMDAp Owo+PiArICAgIHNuZF9zb2Nfd3JpdGUoY29kZWMsIDB4MDksIDB4RTAwMCk7Cj4+ICsgICAgc25k X3NvY193cml0ZShjb2RlYywgTkFVODgyNF9JUlFfU0VUVElORywgMHgxMDA2KTsKPj4gKyAgICBz bmRfc29jX3dyaXRlKGNvZGVjLCAweDEzLCAweDE2MTUpOwo+PiArICAgIHNuZF9zb2Nfd3JpdGUo Y29kZWMsIDB4MTUsIDB4MDQxNCk7Cj4+ICsgICAgc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywg MHgxNiwgMHhGRjAwLCAweDU5MDApOwo+PiArICAgIHNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMs IDB4NjYsIDB4MDA3MCwgMHgwMDYwKTsKPgo+IFRvbyBtYW55IG1hZ2ljIG51bWJlcnMgaGVyZSBJ IHRoaW5rIGFuZCB0aGlzIGxvb2tzIGxpa2UgaXQgc2hvdWxkIGJlCj4gY29uZmlndXJlZCB1c2lu ZyBwbGF0Zm9ybSBkYXRhIGFuZC9vciB0aGUgbWFjaGluZSBkcml2ZXIgKHdoYXQgaWYgdGhlCj4g aGVhZHBob25lIGRldGVjdGlvbi9JUlEgYXJlbid0IHdpcmVkIHVwPykuICBJJ2QgYWxzbyBleHBl Y3QgdG8gc2VlCj4gcmVwb3J0aW5nIHZpYSB0aGUgc3RhbmRhcmQgaW50ZXJmYWNlcyBmb3IgamFj ayByZXBvcnRpbmcuClRoZSBhYm92ZSBpbml0aWFsIHNldHRpbmdzIGFyZSBmb3IgamFjayBkZXRl Y3Rpb24uIEFzIGZvciBvdGhlciBqYWNrCmRldGVjdGlvbiBmbG93LCBpdCB3aWxsIGJlIGltcGxl bWVudGVkIGluIG1hY2hpbmUgZHJpdmVyIGJ1dCBub3QgYmUgaW5jbHVkZWQgaW4KdGhpcyBhcHBs aWNhdGlvbi4KPgo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIG5hdTg4MjRf aTJjX2lkW10gPSB7Cj4+ICsgICAgeyAibmF1ODgyNCIsIDB9LAo+PiArICAgIHsiMTA1MDg4MjQ6 MDAiLCAwfSwKPj4gKyAgICB7IjEwNTA4ODI0IiwgMH0sCj4+ICsgICAgeyB9Cj4+ICt9Owo+Cj4g SXQgbG9va3MgbGlrZSB5b3UndmUgcHV0IHNvbWUgQUNQSSBJRHMgaW4gdGhlIEkyQyBJRCB0YWJs ZSBoZXJlLiAgQXQKPiBsZWFzdCBJIGhvcGUgdGhhdCdzIHdoYXQgdGhlIGxhc3QgdHdvIGVudHJp ZXMgYXJlLi4uICBpZiB0aGV5IGFyZSBBQ1BJCj4gSURzIHRoZXkgc2hvdWxkIGJlIHJlZ2lzdGVy ZWQgYXMgc3VjaC4gIElmIHRoZXkncmUgc29tZXRoaW5nIGVsc2UgdGhlbgo+IHdoYXQgYXJlIHRo ZXk/ClllcywgdGhlcmUgYXJlIEFDUEkgSUQgdGFibGUgYW5kIHJlZ2lzdGVyZWQgaW4gdGhlIGRl ZGljYXRlZCBwbGF0Zm9ybSBCSU9TLgo+Cgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09ClRoZSBwcml2aWxlZ2VkIGNvbmZpZGVudGlhbCBpbmZvcm1hdGlvbiBjb250YWluZWQgaW4g dGhpcyBlbWFpbCBpcyBpbnRlbmRlZCBmb3IgdXNlIG9ubHkgYnkgdGhlIGFkZHJlc3NlZXMgYXMg aW5kaWNhdGVkIGJ5IHRoZSBvcmlnaW5hbCBzZW5kZXIgb2YgdGhpcyBlbWFpbC4gSWYgeW91IGFy ZSBub3QgdGhlIGFkZHJlc3NlZSBpbmRpY2F0ZWQgaW4gdGhpcyBlbWFpbCBvciBhcmUgbm90IHJl c3BvbnNpYmxlIGZvciBkZWxpdmVyeSBvZiB0aGUgZW1haWwgdG8gc3VjaCBhIHBlcnNvbiwgcGxl YXNlIGtpbmRseSByZXBseSB0byB0aGUgc2VuZGVyIGluZGljYXRpbmcgdGhpcyBmYWN0IGFuZCBk ZWxldGUgYWxsIGNvcGllcyBvZiBpdCBmcm9tIHlvdXIgY29tcHV0ZXIgYW5kIG5ldHdvcmsgc2Vy dmVyIGltbWVkaWF0ZWx5LiBZb3VyIGNvb3BlcmF0aW9uIGlzIGhpZ2hseSBhcHByZWNpYXRlZC4g SXQgaXMgYWR2aXNlZCB0aGF0IGFueSB1bmF1dGhvcml6ZWQgdXNlIG9mIGNvbmZpZGVudGlhbCBp bmZvcm1hdGlvbiBvZiBOdXZvdG9uIGlzIHN0cmljdGx5IHByb2hpYml0ZWQ7IGFuZCBhbnkgaW5m b3JtYXRpb24gaW4gdGhpcyBlbWFpbCBpcnJlbGV2YW50IHRvIHRoZSBvZmZpY2lhbCBidXNpbmVz cyBvZiBOdXZvdG9uIHNoYWxsIGJlIGRlZW1lZCBhcyBuZWl0aGVyIGdpdmVuIG5vciBlbmRvcnNl ZCBieSBOdXZvdG9uLgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpBbHNhLWRldmVsIG1haWxpbmcgbGlzdApBbHNhLWRldmVsQGFsc2EtcHJvamVjdC5vcmcK aHR0cDovL21haWxtYW4uYWxzYS1wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2Fsc2EtZGV2 ZWwK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1759476AbbCDMtO (ORCPT ); Wed, 4 Mar 2015 07:49:14 -0500 Received: from maillog.nuvoton.com ([202.39.227.15]:49171 "EHLO maillog.nuvoton.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754819AbbCDMtN convert rfc822-to-8bit (ORCPT ); Wed, 4 Mar 2015 07:49:13 -0500 X-Greylist: delayed 796 seconds by postgrey-1.27 at vger.kernel.org; Wed, 04 Mar 2015 07:49:12 EST Message-ID: <54F6FC28.4030403@nuvoton.com> Date: Wed, 4 Mar 2015 20:35:52 +0800 From: Chih-Chiang Chang User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Thunderbird/31.5.0 MIME-Version: 1.0 To: Mark Brown CC: "mcuos.com@gmail.com" , "tiwai@suse.de" , "alsa-devel@alsa-project.org" , "lgirdwood@gmail.com" , "linux-kernel@vger.kernel.org" , Subject: Re: [PATCH] ASoC: Add support for NAU8824 codec to ASoC References: <1423986570-6355-1-git-send-email-Vincent.wan@amd.com> <20150224141314.GI6236@finisterre.sirena.org.uk> In-Reply-To: <20150224141314.GI6236@finisterre.sirena.org.uk> 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 2015/2/24 下午 10:13, Mark Brown wrote: > On Sun, Feb 15, 2015 at 03:49:30PM +0800, Wan Zongshun wrote: > >> + /* SP Class-D mute control */ >> + SOC_DOUBLE("HP Playback Switch", NAU8824_HP_MUTE, NAU8824_L_MUTE_SFT, >> + NAU8824_R_MUTE_SFT, 1, 1), >> + SOC_SINGLE_TLV("HP Left Volume", NAU8824_HP_VOL, NAU8824_L_VOL_SFT, >> + NAU8824_VOL_RSCL_RANGE, 1, out_hp_vol_tlv), >> + SOC_SINGLE_TLV("HP Right Volume", NAU8824_HP_VOL, NAU8824_R_VOL_SFT, >> + NAU8824_VOL_RSCL_RANGE, 1, out_hp_vol_tlv), > > I would have expected the headphone volume control to be a stereo > (double) control - same for speakers. The nau8824 related registers which control left/right volume are located in different addresses and different shift bits. Since there is no available preprocessor macro to meet our requirements, the driver consists of left/right volume control separately. > >> + /* DMIC control */ >> + SOC_DOUBLE("DMIC L R Switch", NAU8824_ENA_CTRL, NAU8824_DMIC_CH0_SFT, >> + NAU8824_DMIC_CH1_SFT, 1, 0), >> + SOC_SINGLE("DMIC Enable", NAU8824_BIAS_ADJ, NAU8824_DMIC1_SFT, 1, 0), >> + SOC_SINGLE("VMID Switch", NAU8824_BIAS_ADJ, NAU8824_VMID_SFT, 1, 0), >> + SOC_SINGLE("BIAS Switch", NAU8824_BOOST, NAU8824_G_BIAS_SFT, 1, 0), > > This all looks like stuff that should be done with DAPM... The above controls have been done with DAPM in next patch submit. > >> + SOC_DOUBLE_R_TLV("MIC L R Gain", NAU8824_ADC_CH0_DGAIN_CTRL, >> + NAU8824_ADC_CH1_DGAIN_CTRL, 0, >> + NAU8824_ADC_VOL_RSCL_RANGE, 0, adc_vol_tlv), > > All volume controls should be called Volume. The naming has been changed. > >> +static int set_dmic_clk(struct snd_soc_dapm_widget *w, >> + struct snd_kcontrol *kcontrol, int event) >> +{ >> + struct snd_soc_codec *codec = w->codec; > > w->codec is going away, use snd_soc_dapm_to_codec(). You should always > submit against current code. Modified done in next patch submit. > >> +static const struct snd_kcontrol_new nau8824_rec_l_mix[] = { >> + SOC_DAPM_SINGLE("BST1 Switch", SND_SOC_NOPM, >> + 0, 0, 0), >> +}; > > Please use normal indentation, a single tab is enough. Modified done in next patch submit. > >> +static int nau8824_hp_event(struct snd_soc_dapm_widget *w, >> + struct snd_kcontrol *kcontrol, int event) >> +{ >> + return 0; >> +} > > Remove empty functions. Modified done in next patch submit. > >> + switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) { >> + case SND_SOC_DAIFMT_CBM_CFM: >> + reg_val_2 |= NAU8824_I2S_MS_M; >> + break; >> + case SND_SOC_DAIFMT_CBS_CFS: >> + break; >> + case SND_SOC_DAIFMT_CBS_CFM: >> + break; > > These two clocking configurations appear not to differ in terms of what > we do to the device - this suggests that only one of them is actually > supported. Modified done in next patch submit. > >> +static int nau8824_FLL_freerun_mode(struct snd_soc_codec *codec, int IsEnable) >> +{ >> + if (IsEnable == true) { > > This doesn't look like Linux coding style... Remove this function > >> +void set_sys_clk(struct snd_soc_codec *codec, int sys_clk) >> +{ >> + pr_debug("%s sys_clk=%x\n", __func__, sys_clk); >> + switch (sys_clk) { >> + case NAU8824_INTERNALCLOCK: >> + nau8824_FLL_freerun_mode(codec, true); >> + break; >> + >> + case NAU8824_MCLK: >> + default: >> + nau8824_FLL_freerun_mode(codec, false); >> + break; >> + } >> +} > > ...and I don't entirely see why it's a separate function to this (which > is itself an internal wrapper function which possibly shouldn't exist)> Remove "nau8824_FLL_freerun_mode()" function > >> +static int nau8824_set_sysclk(struct snd_soc_codec *codec, >> + int clk_id, int source, unsigned int freq, int dir) >> +{ >> + int divider = 1; >> + >> + if (clk_id == NAU8824_MCLK) { >> + set_sys_clk(codec, NAU8824_MCLK); >> + dev_dbg(codec->dev, "%s: input freq = %d divider = %d", >> + __func__, freq, divider); >> + >> + } else if (clk_id == NAU8824_INTERNALCLOCK) { >> + set_sys_clk(codec, NAU8824_INTERNALCLOCK); >> + } else { >> + dev_err(codec->dev, "Wrong clock src\n"); >> + return -EINVAL; >> + } > > Use switch statements rather than if trees like other drivers. It looks > like clk_id should actually be source since we're selecting the clock to > use rather than selecting which clock to configure. Modified done in next patch submit. > >> +static int nau8824_set_bias_level(struct snd_soc_codec *codec, >> + enum snd_soc_bias_level level) >> +{ >> + dev_dbg(codec->dev, "## nau8824_set_bias_level %d\n", level); >> + if (level == codec->dapm.bias_level) { >> + dev_dbg(codec->dev, "##set_bias_level: level returning...\r\n"); >> + return -EINVAL; >> + } > > Why is this here - other drivers don't do this and it doesn't look > device specific? Remove it > >> + switch (level) { >> + case SND_SOC_BIAS_ON: >> + /* All power is driven by DAPM system*/ >> + dev_dbg(codec->dev, "###nau8824_set_bias_level BIAS_ON\n"); >> + snd_soc_update_bits(codec, NAU8824_BIAS_ADJ, >> + NAU8824_VMID_MASK, NAU8824_VMID_EN); >> + snd_soc_update_bits(codec, NAU8824_BOOST, >> + NAU8824_G_BIAS_MASK, NAU8824_G_BIAS_EN); > > We turn on VMID last? That's a strange thing to do... In nau8824, VMID_EN is to enable Vreff pin > >> +static int nau8824_suspend(struct snd_soc_codec *codec) >> +{ >> + dev_dbg(codec->dev, "%s: Entered\n", __func__); >> + nau8824_set_bias_level(codec, SND_SOC_BIAS_OFF); >> + dev_dbg(codec->dev, "%s: Exiting\n", __func__); >> + return 0; >> +} > > Set idle_bias_off (which it looks like you should be doing) and this > becomes redundant. If you're *not* using idle_bias_off for some reason > then the set_bias_level() work done in _ON should be undone in at least > _SUSPEND rather than _OFF so we save power on idle. Remove suspend function > >> +struct nau8824_init_reg { >> + u8 reg; >> + u16 val; >> +}; > > This looks like you're reimplementing regmap's register sequence > stuff... It's also a *very* large sequence you have, are you sure it's > all required? It seems like this may be doing a bunch of machine > specific configuration but since it's all magic numbers it's hard to > tell. Initial settings are arranged in order > >> +#define NAU8824_INIT_REG_LEN ARRAY_SIZE(init_list) > > Just use ARRAY_SIZE(). Modified done in next patch submit. > >> +static int nau8824_reg_init(struct snd_soc_codec *codec) >> +{ >> + int i; >> + >> + mdelay(1); >> + for (i = 0; i < NAU8824_INIT_REG_LEN; i++) { >> + if (init_list[i].reg == 0xFFFF) >> + mdelay(1); >> + else >> + snd_soc_write(codec, init_list[i].reg, >> + init_list[i].val); >> + } > > Use the standard regmap patch stuff. If you need the delays in the > sequence implement that in the core, though I guess you don't since > reg is a u8 and you're looking for 0xffff in it... Modified done in next patch submit. > >> + /* Dynamic Headset detection enabled */ >> + snd_soc_update_bits(codec, 0x01, 0x400, 0x400); >> + snd_soc_update_bits(codec, 0x02, 0x0008, 0x0008); >> + snd_soc_update_bits(codec, 0x0f, 0x0300, 0x0100); >> + snd_soc_write(codec, 0x09, 0xE000); >> + snd_soc_write(codec, NAU8824_IRQ_SETTING, 0x1006); >> + snd_soc_write(codec, 0x13, 0x1615); >> + snd_soc_write(codec, 0x15, 0x0414); >> + snd_soc_update_bits(codec, 0x16, 0xFF00, 0x5900); >> + snd_soc_update_bits(codec, 0x66, 0x0070, 0x0060); > > Too many magic numbers here I think and this looks like it should be > configured using platform data and/or the machine driver (what if the > headphone detection/IRQ aren't wired up?). I'd also expect to see > reporting via the standard interfaces for jack reporting. The above initial settings are for jack detection. As for other jack detection flow, it will be implemented in machine driver but not be included in this application. > >> +static const struct i2c_device_id nau8824_i2c_id[] = { >> + { "nau8824", 0}, >> + {"10508824:00", 0}, >> + {"10508824", 0}, >> + { } >> +}; > > It looks like you've put some ACPI IDs in the I2C ID table here. At > least I hope that's what the last two entries are... if they are ACPI > IDs they should be registered as such. If they're something else then > what are they? Yes, there are ACPI ID table and registered in the dedicated platform BIOS. > =========================================================================================== The privileged confidential information contained in this email is intended for use only by the addressees as indicated by the original sender of this email. If you are not the addressee indicated in this email or are not responsible for delivery of the email to such a person, please kindly reply to the sender indicating this fact and delete all copies of it from your computer and network server immediately. Your cooperation is highly appreciated. It is advised that any unauthorized use of confidential information of Nuvoton is strictly prohibited; and any information in this email irrelevant to the official business of Nuvoton shall be deemed as neither given nor endorsed by Nuvoton.