From nobody Tue Apr 7 23:59:00 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9BBAFC4332F for ; Wed, 19 Oct 2022 15:42:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231839AbiJSPmj (ORCPT ); Wed, 19 Oct 2022 11:42:39 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51656 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231461AbiJSPlv (ORCPT ); Wed, 19 Oct 2022 11:41:51 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B63721BE43D for ; Wed, 19 Oct 2022 08:38:05 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 9749AB82187 for ; Wed, 19 Oct 2022 15:36:59 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8C1A5C433C1; Wed, 19 Oct 2022 15:36:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1666193818; bh=4n+mBsiEKIemfJ5i92KNqo8iXr+fx/HO1cNz4Vy443U=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=BF2W+MFV9nfPeIOVwUfakMNwNpLRNe5jIaHXvd6TeHrLR84pMRSisC2gcsFG5KFov f1VA+6FgoE/JpmkOFQJrM+W51HpthfpyK0WpXBP9/08SlEH424q6Gfe/J4Y4cZUCWm C/ZmXDnjIoikUo0sbtrVYAQB6iAc+95Pew87RZN9nPKcAi+k55OpFOsJ6aopo4qZuL NMCETGKlQjkAVpSfN1a3wmnCD3K2GEix/+VTgc9/u7EIXgKt9afpE81FNhpR28kROK QLGNgLC4Xu1q2RFra5pLlDWomAOuLEOsp1FCssBhn39qVlB1Gv7CfCGqo9+MiEtoVA K8wnm+LQjRhhw== From: Arnd Bergmann To: Sekhar Nori , Bartosz Golaszewski , linux-arm-kernel@lists.infradead.org, Peter Ujfalusi , Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai Cc: linux-kernel@vger.kernel.org, Kevin Hilman , Arnd Bergmann , Charles Keepax , alsa-devel@alsa-project.org Subject: [PATCH 09/14] ASoC: remove unused davinci support Date: Wed, 19 Oct 2022 17:29:35 +0200 Message-Id: <20221019152947.3857217-10-arnd@kernel.org> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20221019152947.3857217-1-arnd@kernel.org> References: <20221019152947.3857217-1-arnd@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Arnd Bergmann The dm644x and dm3xx SoCs have been removed, as have the da850_evm/da830_evm machines, the remaining machines all use the DT based probing and do not use the vcif driver. Signed-off-by: Arnd Bergmann Acked-by: Mark Brown --- sound/soc/ti/Kconfig | 40 ------ sound/soc/ti/Makefile | 2 - sound/soc/ti/davinci-evm.c | 267 +----------------------------------- sound/soc/ti/davinci-vcif.c | 247 --------------------------------- 4 files changed, 3 insertions(+), 553 deletions(-) delete mode 100644 sound/soc/ti/davinci-vcif.c diff --git a/sound/soc/ti/Kconfig b/sound/soc/ti/Kconfig index 40110e9a9e8a..593be22503b5 100644 --- a/sound/soc/ti/Kconfig +++ b/sound/soc/ti/Kconfig @@ -40,13 +40,6 @@ config SND_SOC_DAVINCI_MCASP - Keystone devices - K3 devices (am654, j721e) =20 -config SND_SOC_DAVINCI_VCIF - tristate "daVinci Voice Interface (VCIF) support" - depends on ARCH_DAVINCI || COMPILE_TEST - select SND_SOC_TI_EDMA_PCM - help - Say Y or M here if you want audio support via daVinci VCIF. - config SND_SOC_OMAP_DMIC tristate "Digital Microphone Module (DMIC) support" depends on ARCH_OMAP4 || SOC_OMAP5 || COMPILE_TEST && COMMON_CLK @@ -177,14 +170,6 @@ config SND_SOC_OMAP_OSK5912 config SND_SOC_DAVINCI_EVM tristate "SoC Audio support for DaVinci EVMs" depends on ARCH_DAVINCI && I2C - select SND_SOC_DAVINCI_ASP if MACH_DAVINCI_DM355_EVM - select SND_SOC_DAVINCI_ASP if SND_SOC_DM365_AIC3X_CODEC - select SND_SOC_DAVINCI_VCIF if SND_SOC_DM365_VOICE_CODEC - select SND_SOC_DAVINCI_ASP if MACH_DAVINCI_EVM # DM6446 - select SND_SOC_DAVINCI_MCASP if MACH_DAVINCI_DM6467_EVM - select SND_SOC_SPDIF if MACH_DAVINCI_DM6467_EVM - select SND_SOC_DAVINCI_MCASP if MACH_DAVINCI_DA830_EVM - select SND_SOC_DAVINCI_MCASP if MACH_DAVINCI_DA850_EVM select SND_SOC_TLV320AIC3X help Say Y if you want to add support for SoC audio on the following TI @@ -196,31 +181,6 @@ config SND_SOC_DAVINCI_EVM - DM830 - DM850 =20 -choice - prompt "DM365 codec select" - depends on SND_SOC_DAVINCI_EVM - depends on MACH_DAVINCI_DM365_EVM - -config SND_SOC_DM365_AIC3X_CODEC - bool "Audio Codec - AIC3101" - help - Say Y if you want to add support for AIC3101 audio codec - -config SND_SOC_DM365_VOICE_CODEC - bool "Voice Codec - CQ93VC" - help - Say Y if you want to add support for SoC On-chip voice codec -endchoice - -config SND_SOC_DM365_SELECT_VOICE_CODECS - def_tristate y - depends on SND_SOC_DM365_VOICE_CODEC && SND_SOC - select MFD_DAVINCI_VOICECODEC - select SND_SOC_CQ0093VC - help - The is an internal symbol needed to ensure that the codec - and MFD driver can be built as loadable modules if necessary. - config SND_SOC_J721E_EVM tristate "SoC Audio support for j721e EVM" depends on ARCH_K3 || COMPILE_TEST && COMMON_CLK diff --git a/sound/soc/ti/Makefile b/sound/soc/ti/Makefile index a21e5b0061de..41cdcaec770d 100644 --- a/sound/soc/ti/Makefile +++ b/sound/soc/ti/Makefile @@ -12,14 +12,12 @@ obj-$(CONFIG_SND_SOC_TI_UDMA_PCM) +=3D snd-soc-ti-udma.o # CPU DAI drivers snd-soc-davinci-asp-objs :=3D davinci-i2s.o snd-soc-davinci-mcasp-objs :=3D davinci-mcasp.o -snd-soc-davinci-vcif-objs :=3D davinci-vcif.o snd-soc-omap-dmic-objs :=3D omap-dmic.o snd-soc-omap-mcbsp-objs :=3D omap-mcbsp.o omap-mcbsp-st.o snd-soc-omap-mcpdm-objs :=3D omap-mcpdm.o =20 obj-$(CONFIG_SND_SOC_DAVINCI_ASP) +=3D snd-soc-davinci-asp.o obj-$(CONFIG_SND_SOC_DAVINCI_MCASP) +=3D snd-soc-davinci-mcasp.o -obj-$(CONFIG_SND_SOC_DAVINCI_VCIF) +=3D snd-soc-davinci-vcif.o obj-$(CONFIG_SND_SOC_OMAP_DMIC) +=3D snd-soc-omap-dmic.o obj-$(CONFIG_SND_SOC_OMAP_MCBSP) +=3D snd-soc-omap-mcbsp.o obj-$(CONFIG_SND_SOC_OMAP_MCPDM) +=3D snd-soc-omap-mcpdm.o diff --git a/sound/soc/ti/davinci-evm.c b/sound/soc/ti/davinci-evm.c index 68d69e32681a..983d69b951b0 100644 --- a/sound/soc/ti/davinci-evm.c +++ b/sound/soc/ti/davinci-evm.c @@ -138,214 +138,6 @@ static int evm_aic3x_init(struct snd_soc_pcm_runtime = *rtd) return 0; } =20 -/* davinci-evm digital audio interface glue - connects codec <--> CPU */ -SND_SOC_DAILINK_DEFS(dm6446, - DAILINK_COMP_ARRAY(COMP_CPU("davinci-mcbsp")), - DAILINK_COMP_ARRAY(COMP_CODEC("tlv320aic3x-codec.1-001b", - "tlv320aic3x-hifi")), - DAILINK_COMP_ARRAY(COMP_PLATFORM("davinci-mcbsp"))); - -static struct snd_soc_dai_link dm6446_evm_dai =3D { - .name =3D "TLV320AIC3X", - .stream_name =3D "AIC3X", - .init =3D evm_aic3x_init, - .ops =3D &evm_ops, - .dai_fmt =3D SND_SOC_DAIFMT_DSP_B | SND_SOC_DAIFMT_CBM_CFM | - SND_SOC_DAIFMT_IB_NF, - SND_SOC_DAILINK_REG(dm6446), -}; - -SND_SOC_DAILINK_DEFS(dm355, - DAILINK_COMP_ARRAY(COMP_CPU("davinci-mcbsp.1")), - DAILINK_COMP_ARRAY(COMP_CODEC("tlv320aic3x-codec.1-001b", - "tlv320aic3x-hifi")), - DAILINK_COMP_ARRAY(COMP_PLATFORM("davinci-mcbsp.1"))); - -static struct snd_soc_dai_link dm355_evm_dai =3D { - .name =3D "TLV320AIC3X", - .stream_name =3D "AIC3X", - .init =3D evm_aic3x_init, - .ops =3D &evm_ops, - .dai_fmt =3D SND_SOC_DAIFMT_DSP_B | SND_SOC_DAIFMT_CBM_CFM | - SND_SOC_DAIFMT_IB_NF, - SND_SOC_DAILINK_REG(dm355), -}; - -#ifdef CONFIG_SND_SOC_DM365_AIC3X_CODEC -SND_SOC_DAILINK_DEFS(dm365, - DAILINK_COMP_ARRAY(COMP_CPU("davinci-mcbsp")), - DAILINK_COMP_ARRAY(COMP_CODEC("tlv320aic3x-codec.1-0018", - "tlv320aic3x-hifi")), - DAILINK_COMP_ARRAY(COMP_PLATFORM("davinci-mcbsp"))); -#elif defined(CONFIG_SND_SOC_DM365_VOICE_CODEC) -SND_SOC_DAILINK_DEFS(dm365, - DAILINK_COMP_ARRAY(COMP_CPU("davinci-vcif")), - DAILINK_COMP_ARRAY(COMP_CODEC("cq93vc-codec", "cq93vc-hifi")), - DAILINK_COMP_ARRAY(COMP_PLATFORM("davinci-vcif"))); -#endif - -static struct snd_soc_dai_link dm365_evm_dai =3D { -#ifdef CONFIG_SND_SOC_DM365_AIC3X_CODEC - .name =3D "TLV320AIC3X", - .stream_name =3D "AIC3X", - .init =3D evm_aic3x_init, - .ops =3D &evm_ops, - .dai_fmt =3D SND_SOC_DAIFMT_DSP_B | SND_SOC_DAIFMT_CBM_CFM | - SND_SOC_DAIFMT_IB_NF, - SND_SOC_DAILINK_REG(dm365), -#elif defined(CONFIG_SND_SOC_DM365_VOICE_CODEC) - .name =3D "Voice Codec - CQ93VC", - .stream_name =3D "CQ93", - SND_SOC_DAILINK_REG(dm365), -#endif -}; - -SND_SOC_DAILINK_DEFS(dm6467_aic3x, - DAILINK_COMP_ARRAY(COMP_CPU("davinci-mcasp.0")), - DAILINK_COMP_ARRAY(COMP_CODEC("tlv320aic3x-codec.0-001a", - "tlv320aic3x-hifi")), - DAILINK_COMP_ARRAY(COMP_PLATFORM("davinci-mcasp.0"))); - -SND_SOC_DAILINK_DEFS(dm6467_spdif, - DAILINK_COMP_ARRAY(COMP_CPU("davinci-mcasp.1")), - DAILINK_COMP_ARRAY(COMP_CODEC("spdif_dit", "dit-hifi")), - DAILINK_COMP_ARRAY(COMP_PLATFORM("davinci-mcasp.1"))); - -static struct snd_soc_dai_link dm6467_evm_dai[] =3D { - { - .name =3D "TLV320AIC3X", - .stream_name =3D "AIC3X", - .init =3D evm_aic3x_init, - .ops =3D &evm_ops, - .dai_fmt =3D SND_SOC_DAIFMT_DSP_B | SND_SOC_DAIFMT_CBM_CFM | - SND_SOC_DAIFMT_IB_NF, - SND_SOC_DAILINK_REG(dm6467_aic3x), - }, - { - .name =3D "McASP", - .stream_name =3D "spdif", - .dai_fmt =3D SND_SOC_DAIFMT_DSP_B | SND_SOC_DAIFMT_CBM_CFM | - SND_SOC_DAIFMT_IB_NF, - SND_SOC_DAILINK_REG(dm6467_spdif), - }, -}; - -SND_SOC_DAILINK_DEFS(da830, - DAILINK_COMP_ARRAY(COMP_CPU("davinci-mcasp.1")), - DAILINK_COMP_ARRAY(COMP_CODEC("tlv320aic3x-codec.1-0018", - "tlv320aic3x-hifi")), - DAILINK_COMP_ARRAY(COMP_PLATFORM("davinci-mcasp.1"))); - -static struct snd_soc_dai_link da830_evm_dai =3D { - .name =3D "TLV320AIC3X", - .stream_name =3D "AIC3X", - .init =3D evm_aic3x_init, - .ops =3D &evm_ops, - .dai_fmt =3D SND_SOC_DAIFMT_DSP_B | SND_SOC_DAIFMT_CBM_CFM | - SND_SOC_DAIFMT_IB_NF, - SND_SOC_DAILINK_REG(da830), -}; - -SND_SOC_DAILINK_DEFS(da850, - DAILINK_COMP_ARRAY(COMP_CPU("davinci-mcasp.0")), - DAILINK_COMP_ARRAY(COMP_CODEC("tlv320aic3x-codec.1-0018", - "tlv320aic3x-hifi")), - DAILINK_COMP_ARRAY(COMP_PLATFORM("davinci-mcasp.0"))); - -static struct snd_soc_dai_link da850_evm_dai =3D { - .name =3D "TLV320AIC3X", - .stream_name =3D "AIC3X", - .init =3D evm_aic3x_init, - .ops =3D &evm_ops, - .dai_fmt =3D SND_SOC_DAIFMT_DSP_B | SND_SOC_DAIFMT_CBM_CFM | - SND_SOC_DAIFMT_IB_NF, - SND_SOC_DAILINK_REG(da850), -}; - -/* davinci dm6446 evm audio machine driver */ -/* - * ASP0 in DM6446 EVM is clocked by U55, as configured by - * board-dm644x-evm.c using GPIOs from U18. There are six - * options; here we "know" we use a 48 KHz sample rate. - */ -static struct snd_soc_card_drvdata_davinci dm6446_snd_soc_card_drvdata =3D= { - .sysclk =3D 12288000, -}; - -static struct snd_soc_card dm6446_snd_soc_card_evm =3D { - .name =3D "DaVinci DM6446 EVM", - .owner =3D THIS_MODULE, - .dai_link =3D &dm6446_evm_dai, - .num_links =3D 1, - .drvdata =3D &dm6446_snd_soc_card_drvdata, -}; - -/* davinci dm355 evm audio machine driver */ -/* ASP1 on DM355 EVM is clocked by an external oscillator */ -static struct snd_soc_card_drvdata_davinci dm355_snd_soc_card_drvdata =3D { - .sysclk =3D 27000000, -}; - -static struct snd_soc_card dm355_snd_soc_card_evm =3D { - .name =3D "DaVinci DM355 EVM", - .owner =3D THIS_MODULE, - .dai_link =3D &dm355_evm_dai, - .num_links =3D 1, - .drvdata =3D &dm355_snd_soc_card_drvdata, -}; - -/* davinci dm365 evm audio machine driver */ -static struct snd_soc_card_drvdata_davinci dm365_snd_soc_card_drvdata =3D { - .sysclk =3D 27000000, -}; - -static struct snd_soc_card dm365_snd_soc_card_evm =3D { - .name =3D "DaVinci DM365 EVM", - .owner =3D THIS_MODULE, - .dai_link =3D &dm365_evm_dai, - .num_links =3D 1, - .drvdata =3D &dm365_snd_soc_card_drvdata, -}; - -/* davinci dm6467 evm audio machine driver */ -static struct snd_soc_card_drvdata_davinci dm6467_snd_soc_card_drvdata =3D= { - .sysclk =3D 27000000, -}; - -static struct snd_soc_card dm6467_snd_soc_card_evm =3D { - .name =3D "DaVinci DM6467 EVM", - .owner =3D THIS_MODULE, - .dai_link =3D dm6467_evm_dai, - .num_links =3D ARRAY_SIZE(dm6467_evm_dai), - .drvdata =3D &dm6467_snd_soc_card_drvdata, -}; - -static struct snd_soc_card_drvdata_davinci da830_snd_soc_card_drvdata =3D { - .sysclk =3D 24576000, -}; - -static struct snd_soc_card da830_snd_soc_card =3D { - .name =3D "DA830/OMAP-L137 EVM", - .owner =3D THIS_MODULE, - .dai_link =3D &da830_evm_dai, - .num_links =3D 1, - .drvdata =3D &da830_snd_soc_card_drvdata, -}; - -static struct snd_soc_card_drvdata_davinci da850_snd_soc_card_drvdata =3D { - .sysclk =3D 24576000, -}; - -static struct snd_soc_card da850_snd_soc_card =3D { - .name =3D "DA850/OMAP-L138 EVM", - .owner =3D THIS_MODULE, - .dai_link =3D &da850_evm_dai, - .num_links =3D 1, - .drvdata =3D &da850_snd_soc_card_drvdata, -}; - -#if defined(CONFIG_OF) - /* * The struct is used as place holder. It will be completely * filled with data from dt node. @@ -461,71 +253,18 @@ static struct platform_driver davinci_evm_driver =3D { .driver =3D { .name =3D "davinci_evm", .pm =3D &snd_soc_pm_ops, - .of_match_table =3D of_match_ptr(davinci_evm_dt_ids), + .of_match_table =3D davinci_evm_dt_ids, }, }; -#endif - -static struct platform_device *evm_snd_device; =20 static int __init evm_init(void) { - struct snd_soc_card *evm_snd_dev_data; - int index; - int ret; - - /* - * If dtb is there, the devices will be created dynamically. - * Only register platfrom driver structure. - */ -#if defined(CONFIG_OF) - if (of_have_populated_dt()) - return platform_driver_register(&davinci_evm_driver); -#endif - - if (machine_is_davinci_evm()) { - evm_snd_dev_data =3D &dm6446_snd_soc_card_evm; - index =3D 0; - } else if (machine_is_davinci_dm355_evm()) { - evm_snd_dev_data =3D &dm355_snd_soc_card_evm; - index =3D 1; - } else if (machine_is_davinci_dm365_evm()) { - evm_snd_dev_data =3D &dm365_snd_soc_card_evm; - index =3D 0; - } else if (machine_is_davinci_dm6467_evm()) { - evm_snd_dev_data =3D &dm6467_snd_soc_card_evm; - index =3D 0; - } else if (machine_is_davinci_da830_evm()) { - evm_snd_dev_data =3D &da830_snd_soc_card; - index =3D 1; - } else if (machine_is_davinci_da850_evm()) { - evm_snd_dev_data =3D &da850_snd_soc_card; - index =3D 0; - } else - return -EINVAL; - - evm_snd_device =3D platform_device_alloc("soc-audio", index); - if (!evm_snd_device) - return -ENOMEM; - - platform_set_drvdata(evm_snd_device, evm_snd_dev_data); - ret =3D platform_device_add(evm_snd_device); - if (ret) - platform_device_put(evm_snd_device); - - return ret; + return platform_driver_register(&davinci_evm_driver); } =20 static void __exit evm_exit(void) { -#if defined(CONFIG_OF) - if (of_have_populated_dt()) { - platform_driver_unregister(&davinci_evm_driver); - return; - } -#endif - - platform_device_unregister(evm_snd_device); + platform_driver_unregister(&davinci_evm_driver); } =20 module_init(evm_init); diff --git a/sound/soc/ti/davinci-vcif.c b/sound/soc/ti/davinci-vcif.c deleted file mode 100644 index 36fa97e2b9e2..000000000000 --- a/sound/soc/ti/davinci-vcif.c +++ /dev/null @@ -1,247 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-or-later -/* - * ALSA SoC Voice Codec Interface for TI DAVINCI processor - * - * Copyright (C) 2010 Texas Instruments. - * - * Author: Miguel Aguilar - */ - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -#include "edma-pcm.h" -#include "davinci-i2s.h" - -#define MOD_REG_BIT(val, mask, set) do { \ - if (set) { \ - val |=3D mask; \ - } else { \ - val &=3D ~mask; \ - } \ -} while (0) - -struct davinci_vcif_dev { - struct davinci_vc *davinci_vc; - struct snd_dmaengine_dai_dma_data dma_data[2]; - int dma_request[2]; -}; - -static void davinci_vcif_start(struct snd_pcm_substream *substream) -{ - struct snd_soc_pcm_runtime *rtd =3D asoc_substream_to_rtd(substream); - struct davinci_vcif_dev *davinci_vcif_dev =3D - snd_soc_dai_get_drvdata(asoc_rtd_to_cpu(rtd, 0)); - struct davinci_vc *davinci_vc =3D davinci_vcif_dev->davinci_vc; - u32 w; - - /* Start the sample generator and enable transmitter/receiver */ - w =3D readl(davinci_vc->base + DAVINCI_VC_CTRL); - - if (substream->stream =3D=3D SNDRV_PCM_STREAM_PLAYBACK) - MOD_REG_BIT(w, DAVINCI_VC_CTRL_RSTDAC, 0); - else - MOD_REG_BIT(w, DAVINCI_VC_CTRL_RSTADC, 0); - - writel(w, davinci_vc->base + DAVINCI_VC_CTRL); -} - -static void davinci_vcif_stop(struct snd_pcm_substream *substream) -{ - struct snd_soc_pcm_runtime *rtd =3D asoc_substream_to_rtd(substream); - struct davinci_vcif_dev *davinci_vcif_dev =3D - snd_soc_dai_get_drvdata(asoc_rtd_to_cpu(rtd, 0)); - struct davinci_vc *davinci_vc =3D davinci_vcif_dev->davinci_vc; - u32 w; - - /* Reset transmitter/receiver and sample rate/frame sync generators */ - w =3D readl(davinci_vc->base + DAVINCI_VC_CTRL); - if (substream->stream =3D=3D SNDRV_PCM_STREAM_PLAYBACK) - MOD_REG_BIT(w, DAVINCI_VC_CTRL_RSTDAC, 1); - else - MOD_REG_BIT(w, DAVINCI_VC_CTRL_RSTADC, 1); - - writel(w, davinci_vc->base + DAVINCI_VC_CTRL); -} - -static int davinci_vcif_hw_params(struct snd_pcm_substream *substream, - struct snd_pcm_hw_params *params, - struct snd_soc_dai *dai) -{ - struct davinci_vcif_dev *davinci_vcif_dev =3D snd_soc_dai_get_drvdata(dai= ); - struct davinci_vc *davinci_vc =3D davinci_vcif_dev->davinci_vc; - u32 w; - - /* Restart the codec before setup */ - davinci_vcif_stop(substream); - davinci_vcif_start(substream); - - /* General line settings */ - writel(DAVINCI_VC_CTRL_MASK, davinci_vc->base + DAVINCI_VC_CTRL); - - writel(DAVINCI_VC_INT_MASK, davinci_vc->base + DAVINCI_VC_INTCLR); - - writel(DAVINCI_VC_INT_MASK, davinci_vc->base + DAVINCI_VC_INTEN); - - w =3D readl(davinci_vc->base + DAVINCI_VC_CTRL); - - /* Determine xfer data type */ - switch (params_format(params)) { - case SNDRV_PCM_FORMAT_U8: - MOD_REG_BIT(w, DAVINCI_VC_CTRL_RD_BITS_8 | - DAVINCI_VC_CTRL_RD_UNSIGNED | - DAVINCI_VC_CTRL_WD_BITS_8 | - DAVINCI_VC_CTRL_WD_UNSIGNED, 1); - break; - case SNDRV_PCM_FORMAT_S8: - MOD_REG_BIT(w, DAVINCI_VC_CTRL_RD_BITS_8 | - DAVINCI_VC_CTRL_WD_BITS_8, 1); - - MOD_REG_BIT(w, DAVINCI_VC_CTRL_RD_UNSIGNED | - DAVINCI_VC_CTRL_WD_UNSIGNED, 0); - break; - case SNDRV_PCM_FORMAT_S16_LE: - MOD_REG_BIT(w, DAVINCI_VC_CTRL_RD_BITS_8 | - DAVINCI_VC_CTRL_RD_UNSIGNED | - DAVINCI_VC_CTRL_WD_BITS_8 | - DAVINCI_VC_CTRL_WD_UNSIGNED, 0); - break; - default: - printk(KERN_WARNING "davinci-vcif: unsupported PCM format"); - return -EINVAL; - } - - writel(w, davinci_vc->base + DAVINCI_VC_CTRL); - - return 0; -} - -static int davinci_vcif_trigger(struct snd_pcm_substream *substream, int c= md, - struct snd_soc_dai *dai) -{ - int ret =3D 0; - - switch (cmd) { - case SNDRV_PCM_TRIGGER_START: - case SNDRV_PCM_TRIGGER_RESUME: - case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: - davinci_vcif_start(substream); - break; - case SNDRV_PCM_TRIGGER_STOP: - case SNDRV_PCM_TRIGGER_SUSPEND: - case SNDRV_PCM_TRIGGER_PAUSE_PUSH: - davinci_vcif_stop(substream); - break; - default: - ret =3D -EINVAL; - } - - return ret; -} - -#define DAVINCI_VCIF_RATES SNDRV_PCM_RATE_8000_48000 - -static const struct snd_soc_dai_ops davinci_vcif_dai_ops =3D { - .trigger =3D davinci_vcif_trigger, - .hw_params =3D davinci_vcif_hw_params, -}; - -static int davinci_vcif_dai_probe(struct snd_soc_dai *dai) -{ - struct davinci_vcif_dev *dev =3D snd_soc_dai_get_drvdata(dai); - - dai->playback_dma_data =3D &dev->dma_data[SNDRV_PCM_STREAM_PLAYBACK]; - dai->capture_dma_data =3D &dev->dma_data[SNDRV_PCM_STREAM_CAPTURE]; - - return 0; -} - -static struct snd_soc_dai_driver davinci_vcif_dai =3D { - .probe =3D davinci_vcif_dai_probe, - .playback =3D { - .channels_min =3D 1, - .channels_max =3D 2, - .rates =3D DAVINCI_VCIF_RATES, - .formats =3D SNDRV_PCM_FMTBIT_S16_LE,}, - .capture =3D { - .channels_min =3D 1, - .channels_max =3D 2, - .rates =3D DAVINCI_VCIF_RATES, - .formats =3D SNDRV_PCM_FMTBIT_S16_LE,}, - .ops =3D &davinci_vcif_dai_ops, - -}; - -static const struct snd_soc_component_driver davinci_vcif_component =3D { - .name =3D "davinci-vcif", - .legacy_dai_naming =3D 1, -}; - -static int davinci_vcif_probe(struct platform_device *pdev) -{ - struct davinci_vc *davinci_vc =3D pdev->dev.platform_data; - struct davinci_vcif_dev *davinci_vcif_dev; - int ret; - - davinci_vcif_dev =3D devm_kzalloc(&pdev->dev, - sizeof(struct davinci_vcif_dev), - GFP_KERNEL); - if (!davinci_vcif_dev) - return -ENOMEM; - - /* DMA tx params */ - davinci_vcif_dev->davinci_vc =3D davinci_vc; - davinci_vcif_dev->dma_data[SNDRV_PCM_STREAM_PLAYBACK].filter_data =3D - &davinci_vc->davinci_vcif.dma_tx_channel; - davinci_vcif_dev->dma_data[SNDRV_PCM_STREAM_PLAYBACK].addr =3D - davinci_vc->davinci_vcif.dma_tx_addr; - - /* DMA rx params */ - davinci_vcif_dev->dma_data[SNDRV_PCM_STREAM_CAPTURE].filter_data =3D - &davinci_vc->davinci_vcif.dma_rx_channel; - davinci_vcif_dev->dma_data[SNDRV_PCM_STREAM_CAPTURE].addr =3D - davinci_vc->davinci_vcif.dma_rx_addr; - - dev_set_drvdata(&pdev->dev, davinci_vcif_dev); - - ret =3D devm_snd_soc_register_component(&pdev->dev, - &davinci_vcif_component, - &davinci_vcif_dai, 1); - if (ret !=3D 0) { - dev_err(&pdev->dev, "could not register dai\n"); - return ret; - } - - ret =3D edma_pcm_platform_register(&pdev->dev); - if (ret) { - dev_err(&pdev->dev, "register PCM failed: %d\n", ret); - return ret; - } - - return 0; -} - -static struct platform_driver davinci_vcif_driver =3D { - .probe =3D davinci_vcif_probe, - .driver =3D { - .name =3D "davinci-vcif", - }, -}; - -module_platform_driver(davinci_vcif_driver); - -MODULE_AUTHOR("Miguel Aguilar"); -MODULE_DESCRIPTION("Texas Instruments DaVinci ASoC Voice Codec Interface"); -MODULE_LICENSE("GPL"); --=20 2.29.2