From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?utf-8?q?Eric=20B=C3=A9nard?= Subject: [PATCH v2 2/4] soc/imx: add eukrea-tlv320 Date: Thu, 27 May 2010 10:58:55 +0200 Message-ID: <1274950737-26498-2-git-send-email-eric@eukrea.com> References: <1274950737-26498-1-git-send-email-eric@eukrea.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from smtp2-g21.free.fr (smtp2-g21.free.fr [212.27.42.2]) by alsa0.perex.cz (Postfix) with ESMTP id 1246C103A34 for ; Thu, 27 May 2010 10:59:08 +0200 (CEST) In-Reply-To: <1274950737-26498-1-git-send-email-eric@eukrea.com> 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 To: linux-arm-kernel@lists.infradead.org Cc: alsa-devel@alsa-project.org, Mark Brown , Sascha Hauer , Liam Girdwood List-Id: alsa-devel@alsa-project.org QWRkIHRoZSBuZWNlc3NhcnkgZmlsZXMgdG8gc3VwcG9ydCB0aGUgVExWMzIwQUlDMjNCIHdpcmVk IGluIEkyUwpvbiBvdXIgaS5NWCBwbGF0Zm9ybXMuCgpTaWduZWQtb2ZmLWJ5OiBFcmljIELDqW5h cmQgPGVyaWNAZXVrcmVhLmNvbT4KQ2M6IFNhc2NoYSBIYXVlciA8cy5oYXVlckBwZW5ndXRyb25p eC5kZT4KQ2M6IE1hcmsgQnJvd24gPGJyb29uaWVAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29t PgpDYzogTGlhbSBHaXJkd29vZCA8bHJnQHNsaW1sb2dpYy5jby51az4KLS0tCiBzb3VuZC9zb2Mv aW14L0tjb25maWcgICAgICAgICB8ICAgIDggKysrCiBzb3VuZC9zb2MvaW14L01ha2VmaWxlICAg ICAgICB8ICAgIDIgKwogc291bmQvc29jL2lteC9ldWtyZWEtdGx2MzIwLmMgfCAgMTM1ICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDE0 NSBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNvdW5k L3NvYy9pbXgvZXVrcmVhLXRsdjMyMC5jCgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2lteC9LY29u ZmlnIGIvc291bmQvc29jL2lteC9LY29uZmlnCmluZGV4IDcxNzRiNGMuLjNlMjdiMTYgMTAwNjQ0 Ci0tLSBhL3NvdW5kL3NvYy9pbXgvS2NvbmZpZworKysgYi9zb3VuZC9zb2MvaW14L0tjb25maWcK QEAgLTExLDMgKzExLDExIEBAIGNvbmZpZyBTTkRfSU1YX1NPQwogY29uZmlnIFNORF9NWENfU09D X1NTSQogCXRyaXN0YXRlCiAKK2NvbmZpZyBTTkRfU09DX0VVS1JFQV9UTFYzMjAKKwlib29sICJF dWtyZWEgVExWMzIwIgorCWRlcGVuZHMgb24gTUFDSF9FVUtSRUFfTUJJTVgyN19CQVNFQk9BUkQK KwlzZWxlY3QgU05EX0lNWF9TT0MKKwlzZWxlY3QgU05EX1NPQ19UTFYzMjBBSUMyMworCWhlbHAK KwkgIEVuYWJsZSBJMlMgYmFzZWQgYWNjZXNzIHRvIHRoZSBUTFYzMjBBSUMyM0IgY29kZWMgYXR0 YWNoZWQKKwkgIHRvIHRoZSBTU0k0IGludGVyZmFjZQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2lt eC9NYWtlZmlsZSBiL3NvdW5kL3NvYy9pbXgvTWFrZWZpbGUKaW5kZXggOWY4YmI5Mi4uMjhkNGIx ZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2lteC9NYWtlZmlsZQorKysgYi9zb3VuZC9zb2MvaW14 L01ha2VmaWxlCkBAIC0xMCwzICsxMCw1IEBAIG9iai0kKENPTkZJR19TTkRfSU1YX1NPQykgKz0g c25kLXNvYy1pbXgubwogIyBpLk1YIE1hY2hpbmUgU3VwcG9ydAogc25kLXNvYy1waHljb3JlLWFj OTctb2JqcyA6PSBwaHljb3JlLWFjOTcubwogb2JqLSQoQ09ORklHX1NORF9TT0NfUEhZQ09SRV9B Qzk3KSArPSBzbmQtc29jLXBoeWNvcmUtYWM5Ny5vCitzbmQtc29jLWV1a3JlYS10bHYzMjAtb2Jq cyA6PSBldWtyZWEtdGx2MzIwLm8KK29iai0kKENPTkZJR19TTkRfU09DX0VVS1JFQV9UTFYzMjAp ICs9IHNuZC1zb2MtZXVrcmVhLXRsdjMyMC5vCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvaW14L2V1 a3JlYS10bHYzMjAuYyBiL3NvdW5kL3NvYy9pbXgvZXVrcmVhLXRsdjMyMC5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ODM4MGEKLS0tIC9kZXYvbnVsbAorKysgYi9zb3Vu ZC9zb2MvaW14L2V1a3JlYS10bHYzMjAuYwpAQCAtMCwwICsxLDEzNSBAQAorLyoKKyAqIGV1a3Jl YS10bHYzMjAuYyAgLS0gIFNvQyBhdWRpbyBmb3IgZXVrcmVhX2NwdWlteFhYIGluIEkyUyBtb2Rl CisgKgorICogQ29weXJpZ2h0IDIwMTAgRXJpYyBCw6luYXJkLCBFdWtyw6lhIEVsZWN0cm9tYXRp cXVlIDxlcmljQGV1a3JlYS5jb20+CisgKgorICogYmFzZWQgb24gc291bmQvc29jL3MzYzI0eHgv czNjMjR4eF9zaW10ZWNfdGx2MzIwYWljMjMuYworICogd2hpY2ggaXMgQ29weXJpZ2h0IDIwMDkg U2ltdGVjIEVsZWN0cm9uaWNzCisgKiBhbmQgb24gc291bmQvc29jL2lteC9waHljb3JlLWFjOTcu YyB3aGljaCBpcworICogQ29weXJpZ2h0IDIwMDkgU2FzY2hhIEhhdWVyLCBQZW5ndXRyb25peCA8 cy5oYXVlckBwZW5ndXRyb25peC5kZT4KKyAqIAorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVu ZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVi bGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJz aW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRl IDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1 ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3Vu ZC9wY20uaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MtZGFw bS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKyNpbmNsdWRlICIuLi9jb2RlY3Mv dGx2MzIwYWljMjMuaCIKKyNpbmNsdWRlICJpbXgtc3NpLmgiCisKKyNkZWZpbmUgQ09ERUNfQ0xP Q0sgMTIwMDAwMDAKKworc3RhdGljIGludCBldWtyZWFfdGx2MzIwX2h3X3BhcmFtcyhzdHJ1Y3Qg c25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCSAgICBzdHJ1Y3Qgc25kX3BjbV9od19w YXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vi c3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBy dGQtPmRhaS0+Y29kZWNfZGFpOworCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+ ZGFpLT5jcHVfZGFpOworCWludCByZXQ7CisKKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfZm10KGNw dV9kYWksIFNORF9TT0NfREFJRk1UX0kyUyB8CisJCQkJICBTTkRfU09DX0RBSUZNVF9OQl9ORiB8 CisJCQkJICBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNKTsKKwlpZiAocmV0KSB7CisJCXByX2Vycigi JXM6IGZhaWxlZCBzZXQgY3B1IGRhaSBmb3JtYXRcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIHJl dDsKKwl9CisKKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfZm10KGNvZGVjX2RhaSwgU05EX1NPQ19E QUlGTVRfSTJTIHwKKwkJCQkgIFNORF9TT0NfREFJRk1UX05CX05GIHwKKwkJCQkgIFNORF9TT0Nf REFJRk1UX0NCTV9DRk0pOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCIlczogZmFpbGVkIHNldCBj b2RlYyBkYWkgZm9ybWF0XG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0 ID0gc25kX3NvY19kYWlfc2V0X3N5c2Nsayhjb2RlY19kYWksIDAsCisJCQkJICAgICBDT0RFQ19D TE9DSywgU05EX1NPQ19DTE9DS19PVVQpOworCWlmIChyZXQpIHsKKwkJcHJfZXJyKCIlczogZmFp bGVkIHNldHRpbmcgY29kZWMgc3lzY2xrXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiByZXQ7CisJ fQorCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X3N5c2NsayhjcHVfZGFpLCBJTVhfU1NQX1NZU19D TEssIDAsCisJCQkJU05EX1NPQ19DTE9DS19JTik7CisJaWYgKHJldCkgeworCQlwcl9lcnIoImNh bid0IHNldCBDUFUgc3lzdGVtIGNsb2NrIElNWF9TU1BfU1lTX0NMS1xuIik7CisJCXJldHVybiBy ZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19vcHMgZXVr cmVhX3RsdjMyMF9zbmRfb3BzID0geworCS5od19wYXJhbXMJPSBldWtyZWFfdGx2MzIwX2h3X3Bh cmFtcywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBldWtyZWFfdGx2MzIw X2RhaSA9IHsKKwkubmFtZQkJPSAidGx2MzIwYWljMjMiLAorCS5zdHJlYW1fbmFtZQk9ICJUTFYz MjBBSUMyMyIsCisJLmNvZGVjX2RhaQk9ICZ0bHYzMjBhaWMyM19kYWksCisJLm9wcwkJPSAmZXVr cmVhX3RsdjMyMF9zbmRfb3BzLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgZXVr cmVhX3RsdjMyMCA9IHsKKwkubmFtZQkJPSAiY3B1aW14LWF1ZGlvIiwKKwkucGxhdGZvcm0JPSAm aW14X3NvY19wbGF0Zm9ybSwKKwkuZGFpX2xpbmsJPSAmZXVrcmVhX3RsdjMyMF9kYWksCisJLm51 bV9saW5rcwk9IDEsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGV2aWNlIGV1a3JlYV90 bHYzMjBfc25kX2RldmRhdGEgPSB7CisJLmNhcmQJCT0gJmV1a3JlYV90bHYzMjAsCisJLmNvZGVj X2Rldgk9ICZzb2NfY29kZWNfZGV2X3RsdjMyMGFpYzIzLAorfTsKKworc3RhdGljIHN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKmV1a3JlYV90bHYzMjBfc25kX2RldmljZTsKKworc3RhdGljIGludCBf X2luaXQgZXVrcmVhX3RsdjMyMF9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCWlmICghbWFj aGluZV9pc19ldWtyZWFfY3B1aW14MjcoKSkKKwkJLyogcmV0dXJuIGhhcHB5LiBXZSBtaWdodCBy dW4gb24gYSB0b3RhbGx5IGRpZmZlcmVudCBtYWNoaW5lICovCisJCXJldHVybiAwOworCisJZXVr cmVhX3RsdjMyMF9zbmRfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJzb2MtYXVkaW8i LCAtMSk7CisJaWYgKCFldWtyZWFfdGx2MzIwX3NuZF9kZXZpY2UpCisJCXJldHVybiAtRU5PTUVN OworCisJZXVrcmVhX3RsdjMyMF9kYWkuY3B1X2RhaSA9ICZpbXhfc3NpX3BjbV9kYWlbMF07CisK KwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShldWtyZWFfdGx2MzIwX3NuZF9kZXZpY2UsICZldWtyZWFf dGx2MzIwX3NuZF9kZXZkYXRhKTsKKwlldWtyZWFfdGx2MzIwX3NuZF9kZXZkYXRhLmRldiA9ICZl dWtyZWFfdGx2MzIwX3NuZF9kZXZpY2UtPmRldjsKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfYWRk KGV1a3JlYV90bHYzMjBfc25kX2RldmljZSk7CisKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJO X0VSUiAiQVNvQzogUGxhdGZvcm0gZGV2aWNlIGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKwkJcGxh dGZvcm1fZGV2aWNlX3B1dChldWtyZWFfdGx2MzIwX3NuZF9kZXZpY2UpOworCX0KKworCXJldHVy biByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBldWtyZWFfdGx2MzIwX2V4aXQodm9pZCkK K3sKKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihldWtyZWFfdGx2MzIwX3NuZF9kZXZpY2Up OworfQorCittb2R1bGVfaW5pdChldWtyZWFfdGx2MzIwX2luaXQpOworbW9kdWxlX2V4aXQoZXVr cmVhX3RsdjMyMF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiRXJpYyBCw6luYXJkIDxlcmljQGV1 a3JlYS5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNQVUlNWCBBTFNBIFNvQyBkcml2ZXIi KTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLS0gCjEuNi4zLjMKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFsc2EtZGV2ZWwgbWFpbGluZyBsaXN0CkFs c2EtZGV2ZWxAYWxzYS1wcm9qZWN0Lm9yZwpodHRwOi8vbWFpbG1hbi5hbHNhLXByb2plY3Qub3Jn L21haWxtYW4vbGlzdGluZm8vYWxzYS1kZXZlbAo= From mboxrd@z Thu Jan 1 00:00:00 1970 From: eric@eukrea.com (=?utf-8?q?Eric=20B=C3=A9nard?=) Date: Thu, 27 May 2010 10:58:55 +0200 Subject: [PATCH v2 2/4] soc/imx: add eukrea-tlv320 In-Reply-To: <1274950737-26498-1-git-send-email-eric@eukrea.com> References: <1274950737-26498-1-git-send-email-eric@eukrea.com> Message-ID: <1274950737-26498-2-git-send-email-eric@eukrea.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org Add the necessary files to support the TLV320AIC23B wired in I2S on our i.MX platforms. Signed-off-by: Eric B?nard Cc: Sascha Hauer Cc: Mark Brown Cc: Liam Girdwood --- sound/soc/imx/Kconfig | 8 +++ sound/soc/imx/Makefile | 2 + sound/soc/imx/eukrea-tlv320.c | 135 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 145 insertions(+), 0 deletions(-) create mode 100644 sound/soc/imx/eukrea-tlv320.c diff --git a/sound/soc/imx/Kconfig b/sound/soc/imx/Kconfig index 7174b4c..3e27b16 100644 --- a/sound/soc/imx/Kconfig +++ b/sound/soc/imx/Kconfig @@ -11,3 +11,11 @@ config SND_IMX_SOC config SND_MXC_SOC_SSI tristate +config SND_SOC_EUKREA_TLV320 + bool "Eukrea TLV320" + depends on MACH_EUKREA_MBIMX27_BASEBOARD + select SND_IMX_SOC + select SND_SOC_TLV320AIC23 + help + Enable I2S based access to the TLV320AIC23B codec attached + to the SSI4 interface diff --git a/sound/soc/imx/Makefile b/sound/soc/imx/Makefile index 9f8bb92..28d4b1e 100644 --- a/sound/soc/imx/Makefile +++ b/sound/soc/imx/Makefile @@ -10,3 +10,5 @@ obj-$(CONFIG_SND_IMX_SOC) += snd-soc-imx.o # i.MX Machine Support snd-soc-phycore-ac97-objs := phycore-ac97.o obj-$(CONFIG_SND_SOC_PHYCORE_AC97) += snd-soc-phycore-ac97.o +snd-soc-eukrea-tlv320-objs := eukrea-tlv320.o +obj-$(CONFIG_SND_SOC_EUKREA_TLV320) += snd-soc-eukrea-tlv320.o diff --git a/sound/soc/imx/eukrea-tlv320.c b/sound/soc/imx/eukrea-tlv320.c new file mode 100644 index 0000000..968380a --- /dev/null +++ b/sound/soc/imx/eukrea-tlv320.c @@ -0,0 +1,135 @@ +/* + * eukrea-tlv320.c -- SoC audio for eukrea_cpuimxXX in I2S mode + * + * Copyright 2010 Eric B?nard, Eukr?a Electromatique + * + * based on sound/soc/s3c24xx/s3c24xx_simtec_tlv320aic23.c + * which is Copyright 2009 Simtec Electronics + * and on sound/soc/imx/phycore-ac97.c which is + * Copyright 2009 Sascha Hauer, Pengutronix + * + * 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. + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "../codecs/tlv320aic23.h" +#include "imx-ssi.h" + +#define CODEC_CLOCK 12000000 + +static int eukrea_tlv320_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->dai->codec_dai; + struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai; + int ret; + + ret = snd_soc_dai_set_fmt(cpu_dai, SND_SOC_DAIFMT_I2S | + SND_SOC_DAIFMT_NB_NF | + SND_SOC_DAIFMT_CBM_CFM); + if (ret) { + pr_err("%s: failed set cpu dai format\n", __func__); + return ret; + } + + ret = snd_soc_dai_set_fmt(codec_dai, SND_SOC_DAIFMT_I2S | + SND_SOC_DAIFMT_NB_NF | + SND_SOC_DAIFMT_CBM_CFM); + if (ret) { + pr_err("%s: failed set codec dai format\n", __func__); + return ret; + } + + ret = snd_soc_dai_set_sysclk(codec_dai, 0, + CODEC_CLOCK, SND_SOC_CLOCK_OUT); + if (ret) { + pr_err("%s: failed setting codec sysclk\n", __func__); + return ret; + } + + ret = snd_soc_dai_set_sysclk(cpu_dai, IMX_SSP_SYS_CLK, 0, + SND_SOC_CLOCK_IN); + if (ret) { + pr_err("can't set CPU system clock IMX_SSP_SYS_CLK\n"); + return ret; + } + + return 0; +} + +static struct snd_soc_ops eukrea_tlv320_snd_ops = { + .hw_params = eukrea_tlv320_hw_params, +}; + +static struct snd_soc_dai_link eukrea_tlv320_dai = { + .name = "tlv320aic23", + .stream_name = "TLV320AIC23", + .codec_dai = &tlv320aic23_dai, + .ops = &eukrea_tlv320_snd_ops, +}; + +static struct snd_soc_card eukrea_tlv320 = { + .name = "cpuimx-audio", + .platform = &imx_soc_platform, + .dai_link = &eukrea_tlv320_dai, + .num_links = 1, +}; + +static struct snd_soc_device eukrea_tlv320_snd_devdata = { + .card = &eukrea_tlv320, + .codec_dev = &soc_codec_dev_tlv320aic23, +}; + +static struct platform_device *eukrea_tlv320_snd_device; + +static int __init eukrea_tlv320_init(void) +{ + int ret; + + if (!machine_is_eukrea_cpuimx27()) + /* return happy. We might run on a totally different machine */ + return 0; + + eukrea_tlv320_snd_device = platform_device_alloc("soc-audio", -1); + if (!eukrea_tlv320_snd_device) + return -ENOMEM; + + eukrea_tlv320_dai.cpu_dai = &imx_ssi_pcm_dai[0]; + + platform_set_drvdata(eukrea_tlv320_snd_device, &eukrea_tlv320_snd_devdata); + eukrea_tlv320_snd_devdata.dev = &eukrea_tlv320_snd_device->dev; + ret = platform_device_add(eukrea_tlv320_snd_device); + + if (ret) { + printk(KERN_ERR "ASoC: Platform device allocation failed\n"); + platform_device_put(eukrea_tlv320_snd_device); + } + + return ret; +} + +static void __exit eukrea_tlv320_exit(void) +{ + platform_device_unregister(eukrea_tlv320_snd_device); +} + +module_init(eukrea_tlv320_init); +module_exit(eukrea_tlv320_exit); + +MODULE_AUTHOR("Eric B?nard "); +MODULE_DESCRIPTION("CPUIMX ALSA SoC driver"); +MODULE_LICENSE("GPL"); -- 1.6.3.3