From patchwork Fri Oct 14 10:21:46 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Padmanabhan Rajanbabu X-Patchwork-Id: 616665 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 D5A23C4332F for ; Fri, 14 Oct 2022 11:10:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229613AbiJNLKR (ORCPT ); Fri, 14 Oct 2022 07:10:17 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35754 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229764AbiJNLKP (ORCPT ); Fri, 14 Oct 2022 07:10:15 -0400 Received: from mailout3.samsung.com (mailout3.samsung.com [203.254.224.33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B072C42D44 for ; Fri, 14 Oct 2022 04:10:10 -0700 (PDT) Received: from epcas5p2.samsung.com (unknown [182.195.41.40]) by mailout3.samsung.com (KnoxPortal) with ESMTP id 20221014111005epoutp03a667254f69bcbfbd6021cd33b2614659~d6vwiyyZg1249612496epoutp03O for ; Fri, 14 Oct 2022 11:10:05 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout3.samsung.com 20221014111005epoutp03a667254f69bcbfbd6021cd33b2614659~d6vwiyyZg1249612496epoutp03O DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1665745805; bh=b0SpkS4ju/nMLrPXxPclPFQEAVxgNqmow5paQbtJPUc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=IAvFc8WEXoPQHIaf4SOoerpBC6qz3yjazYtvSl297qUiYa8THSc/Iw3NUreHN6VuI hiWXFpjNZag9LYIgDSz7baMfhM4ysjOHNnz4iBMj/ezPh9Qu5VHlxGbQWBlHxAh0v9 BF3dpr+rGlINjAMzfC7VsmJDVHeoItH0myRxOde8= Received: from epsnrtp3.localdomain (unknown [182.195.42.164]) by epcas5p1.samsung.com (KnoxPortal) with ESMTP id 20221014111005epcas5p16b721de3063b2aa36be8030e23076149~d6vv7bzYX0967309673epcas5p1H; Fri, 14 Oct 2022 11:10:05 +0000 (GMT) Received: from epsmges5p3new.samsung.com (unknown [182.195.38.176]) by epsnrtp3.localdomain (Postfix) with ESMTP id 4MpkF63nhqz4x9Pt; Fri, 14 Oct 2022 11:10:02 +0000 (GMT) Received: from epcas5p4.samsung.com ( [182.195.41.42]) by epsmges5p3new.samsung.com (Symantec Messaging Gateway) with SMTP id 31.3E.56352.A8349436; Fri, 14 Oct 2022 20:10:02 +0900 (KST) Received: from epsmtrp1.samsung.com (unknown [182.195.40.13]) by epcas5p1.samsung.com (KnoxPortal) with ESMTPA id 20221014104850epcas5p1a707b9d407a0947c3519077cf7fca5ff~d6dMcJ3X02013820138epcas5p1w; Fri, 14 Oct 2022 10:48:50 +0000 (GMT) Received: from epsmgms1p2.samsung.com (unknown [182.195.42.42]) by epsmtrp1.samsung.com (KnoxPortal) with ESMTP id 20221014104850epsmtrp1b40bf3b4a9eb9bf0311fb12133d443dc~d6dMbRuoq3160431604epsmtrp1p; Fri, 14 Oct 2022 10:48:50 +0000 (GMT) X-AuditID: b6c32a4b-5f7fe7000001dc20-e3-6349438aeec3 Received: from epsmtip1.samsung.com ( [182.195.34.30]) by epsmgms1p2.samsung.com (Symantec Messaging Gateway) with SMTP id A5.2C.18644.19E39436; Fri, 14 Oct 2022 19:48:50 +0900 (KST) Received: from cheetah.sa.corp.samsungelectronics.net (unknown [107.109.115.53]) by epsmtip1.samsung.com (KnoxPortal) with ESMTPA id 20221014104847epsmtip1a09b60df02bcbbdd501ba89313fa8bc1~d6dKT-h8_2736427364epsmtip1Z; Fri, 14 Oct 2022 10:48:47 +0000 (GMT) From: Padmanabhan Rajanbabu To: lgirdwood@gmail.com, broonie@kernel.org, robh+dt@kernel.org, krzysztof.kozlowski+dt@linaro.org, s.nawrocki@samsung.com, perex@perex.cz, tiwai@suse.com, pankaj.dubey@samsung.com, alim.akhtar@samsung.com, rcsekar@samsung.com, aswani.reddy@samsung.com Cc: alsa-devel@alsa-project.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-samsung-soc@vger.kernel.org, Padmanabhan Rajanbabu Subject: [PATCH 1/6] ASoC: samsung: i2s: TDM Support for CPU DAI driver Date: Fri, 14 Oct 2022 15:51:46 +0530 Message-Id: <20221014102151.108539-2-p.rajanbabu@samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20221014102151.108539-1-p.rajanbabu@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprNJsWRmVeSWpSXmKPExsWy7bCmlm6Xs2eywfOf0hYP5m1js7hy8RCT xaHNW9ktpj58wmYx/8g5Vou+Fw+ZLb5d6WCyuLxrDpvFjPP7mCyObgy2WLT1C7tF565+VotZ F3awWrTuPcJucfhNO6vFhu9rGR0EPDZ8bmLz2DnrLrvHplWdbB53ru1h89j3dhmbR9+WVYwe 67dcZfH4vEkugCMq2yYjNTEltUghNS85PyUzL91WyTs43jne1MzAUNfQ0sJcSSEvMTfVVsnF J0DXLTMH6AMlhbLEnFKgUEBicbGSvp1NUX5pSapCRn5xia1SakFKToFJgV5xYm5xaV66Xl5q iZWhgYGRKVBhQnbGgjdRBT+MK3aeeczewNit1cXIySEhYCLx+9Jjli5GLg4hgd2MEpcnd7NB OJ8YJZo6OpkhnM+MEvcunWCDabl1+CwjRGIXo8T+lXNYIZxWJonL7/qYQKrYBEwlVs1pBEuI CDQxSbS9mQi2hVlgI6PE6WMPgao4OIQF3CW+zCgBaWARUJW4/P0GG0iYV8BW4swqY4ht8hKr NxxgBrE5Bewknrc0gc2UEFjIIfH82zuok1wkvrx6zwphC0u8Or6FHcKWknjZ3wZl50tM+9gM VV8h0fZxAxOEbS9x4MocFpC9zAKaEut36UOEZSWmnloHVsIswCfR+/sJVDmvxI55MLaqxPrl mxghbGmJfdf3QtkeEltnTYUG3URGiR9dP9gnMMrNQlixgJFxFaNkakFxbnpqsWmBcV5qOTzW kvNzNzGCU6mW9w7GRw8+6B1iZOJgPMQowcGsJML7WskzWYg3JbGyKrUoP76oNCe1+BCjKTD8 JjJLiSbnA5N5Xkm8oYmlgYmZmZmJpbGZoZI47+IZWslCAumJJanZqakFqUUwfUwcnFINTDxZ UyRtRe8pmlvf1q/RmHXKJ+H2POlJx9Iykws+FT58z+oa9OYi96k68WeHOrhKNm/+X2HM3rIy 3slrS+HFN9yWt1+enuAUGysh/aZhGlerny/vklNPtv2qZTF43JfFlG2xl++io9fUzsRZTYum pzZuv8a5s7ty3VH3XSu6L/NMOMT/nm1R5sva1dtSN2acvpajEsIrUmMXcbHF5f7H6pe9DIH1 kZZePw4fW737h5g2x/wni9fs8Wvz6pDYJ+HeqjQtbsfLfM3vm8XiTqlY6qTPn//rYH3HnBbx GsfTcnkpOlZr3XcUWHEsXFCwM1Yu3ysqyfegVaRSSWTNtD0CNumWn1TYkzl0pqysTn6sxFKc kWioxVxUnAgAHYrL+y4EAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrALMWRmVeSWpSXmKPExsWy7bCSnO4kO89kg9unGC0ezNvGZnHl4iEm i0Obt7JbTH34hM1i/pFzrBZ9Lx4yW3y70sFkcXnXHDaLGef3MVkc3RhssWjrF3aLzl39rBaz LuxgtWjde4Td4vCbdlaLDd/XMjoIeGz43MTmsXPWXXaPTas62TzuXNvD5rHv7TI2j74tqxg9 1m+5yuLxeZNcAEcUl01Kak5mWWqRvl0CV8aCN1EFP4wrdp55zN7A2K3VxcjJISFgInHr8FnG LkYuDiGBHYwSZx5cZodISEtM79/DBmELS6z895wdoqiZSeLFv6WMIAk2AVOJVXMaWUESIgIT mCROvjvGApJgFtjKKDH1s1EXIweHsIC7xJcZJSBhFgFVicvfb7CBhHkFbCXOrDKGmC8vsXrD AWYQm1PATuJ5SxMriC0EVPL8/DvGCYx8CxgZVjFKphYU56bnFhsWGOWllusVJ+YWl+al6yXn 525iBAe6ltYOxj2rPugdYmTiYDzEKMHBrCTC+1rJM1mINyWxsiq1KD++qDQntfgQozQHi5I4 74Wuk/FCAumJJanZqakFqUUwWSYOTqkGJoMta28y5p7bVXTmRj3zjCIzn6J7s/mTL++8/TNu 0c/n8Sn8DtceNBrf0ppRaTWvaLrpzTc7u28U70ldY92978WZrXUZ50tOPDKV7DjbNj9+sYSx eL2Ki8y7mg5RnYUPrn3rkb6+/JjKm6bChMsmNd5+ul3Hjpx6tHVBSwHrvFaWZ7/my9V9yAj4 IRQf9G2yldDivFvJS5oTeVwmv+va2cEte5+R6UCwrkaJwxvTJT9lGbvv3lml8mwpZ3DGK9dF on9LVNV9056pRuz8zJKWeVjZIcZ0q1PdlABdAZlb1yx//VvXpbLj+JII49S+c7mfnsh+CFYw fLrouXm1wEd314r2W/ySF36U8k+XtmI5r8RSnJFoqMVcVJwIAHNuNmnjAgAA X-CMS-MailID: 20221014104850epcas5p1a707b9d407a0947c3519077cf7fca5ff X-Msg-Generator: CA X-Sendblock-Type: REQ_APPROVE CMS-TYPE: 105P DLP-Filter: Pass X-CFilter-Loop: Reflected X-CMS-RootMailID: 20221014104850epcas5p1a707b9d407a0947c3519077cf7fca5ff References: <20221014102151.108539-1-p.rajanbabu@samsung.com> Precedence: bulk List-ID: X-Mailing-List: linux-samsung-soc@vger.kernel.org Add support to configure samsung I2S CPU DAI in TDM mode. Signed-off-by: Chandrasekar R Signed-off-by: Padmanabhan Rajanbabu --- sound/soc/samsung/i2s-regs.h | 15 +++++++ sound/soc/samsung/i2s.c | 84 +++++++++++++++++++++++++++++++++++- 2 files changed, 98 insertions(+), 1 deletion(-) diff --git a/sound/soc/samsung/i2s-regs.h b/sound/soc/samsung/i2s-regs.h index b4b5d6053503..cb2be4a3b70b 100644 --- a/sound/soc/samsung/i2s-regs.h +++ b/sound/soc/samsung/i2s-regs.h @@ -154,4 +154,19 @@ #define I2SSIZE_TRNMSK (0xffff) #define I2SSIZE_SHIFT (16) +#define TDM_LRCLK_WIDTH_SHIFT 12 +#define TDM_LRCLK_WIDTH_MASK 0xFF +#define TDM_RX_SLOTS_SHIFT 8 +#define TDM_RX_SLOTS_MASK 7 +#define TDM_TX_SLOTS_SHIFT 4 +#define TDM_TX_SLOTS_MASK 7 +#define TDM_MODE_MASK 1 +#define TDM_MODE_SHIFT 1 +#define TDM_MODE_DSPA 0 +#define TDM_MODE_DSPB 1 +#define TDM_ENABLE (1 << 0) + +/* stereo default */ +#define TDM_DEFAULT_SLOT_NUM_DIVIDER 2 + #endif /* __SND_SOC_SAMSUNG_I2S_REGS_H */ diff --git a/sound/soc/samsung/i2s.c b/sound/soc/samsung/i2s.c index 9505200f3d11..fb806b0af6ab 100644 --- a/sound/soc/samsung/i2s.c +++ b/sound/soc/samsung/i2s.c @@ -117,6 +117,8 @@ struct samsung_i2s_priv { struct clk *clk_table[3]; struct clk_onecell_data clk_data; + int tdm_slots; + /* Spinlock protecting member fields below */ spinlock_t lock; @@ -625,15 +627,19 @@ static int i2s_set_fmt(struct snd_soc_dai *dai, unsigned int fmt) struct samsung_i2s_priv *priv = snd_soc_dai_get_drvdata(dai); struct i2s_dai *i2s = to_info(dai); int lrp_shift, sdf_shift, sdf_mask, lrp_rlow, mod_slave; + int tdm_mod_mask, tdm_mod_shift; + u32 tdm = 0, tdm_tmp = 0; u32 mod, tmp = 0; unsigned long flags; lrp_shift = priv->variant_regs->lrp_off; sdf_shift = priv->variant_regs->sdf_off; + tdm_mod_shift = TDM_MODE_SHIFT; mod_slave = 1 << priv->variant_regs->mss_off; sdf_mask = MOD_SDF_MASK << sdf_shift; lrp_rlow = MOD_LR_RLOW << lrp_shift; + tdm_mod_mask = TDM_MODE_MASK << tdm_mod_shift; /* Format is priority */ switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) { @@ -648,6 +654,20 @@ static int i2s_set_fmt(struct snd_soc_dai *dai, unsigned int fmt) case SND_SOC_DAIFMT_I2S: tmp |= (MOD_SDF_IIS << sdf_shift); break; + case SND_SOC_DAIFMT_DSP_A: + if (!(priv->quirks & QUIRK_SUPPORTS_TDM)) { + dev_err(&i2s->pdev->dev, "TDM mode not supported\n"); + return -EINVAL; + } + tdm_tmp |= (TDM_MODE_DSPA << tdm_mod_shift); + break; + case SND_SOC_DAIFMT_DSP_B: + if (!(priv->quirks & QUIRK_SUPPORTS_TDM)) { + dev_err(&i2s->pdev->dev, "TDM mode not supported\n"); + return -EINVAL; + } + tdm_tmp |= (TDM_MODE_DSPB << tdm_mod_shift); + break; default: dev_err(&i2s->pdev->dev, "Format not supported\n"); return -EINVAL; @@ -693,12 +713,17 @@ static int i2s_set_fmt(struct snd_soc_dai *dai, unsigned int fmt) pm_runtime_get_sync(dai->dev); spin_lock_irqsave(&priv->lock, flags); mod = readl(priv->addr + I2SMOD); + + if (priv->quirks & QUIRK_SUPPORTS_TDM) + tdm = readl(priv->addr + I2STDM); /* * Don't change the I2S mode if any controller is active on this * channel. */ if (any_active(i2s) && - ((mod & (sdf_mask | lrp_rlow | mod_slave)) != tmp)) { + (((mod & (sdf_mask | lrp_rlow | mod_slave)) != tmp) || + ((priv->quirks & QUIRK_SUPPORTS_TDM) && + ((tdm & tdm_mod_mask) != tdm_tmp)))) { spin_unlock_irqrestore(&priv->lock, flags); pm_runtime_put(dai->dev); dev_err(&i2s->pdev->dev, @@ -706,6 +731,12 @@ static int i2s_set_fmt(struct snd_soc_dai *dai, unsigned int fmt) return -EAGAIN; } + if (priv->quirks & QUIRK_SUPPORTS_TDM) { + tdm &= ~(tdm_mod_mask); + tdm |= tdm_tmp; + writel(tdm, priv->addr + I2STDM); + } + mod &= ~(sdf_mask | lrp_rlow | mod_slave); mod |= tmp; writel(mod, priv->addr + I2SMOD); @@ -812,6 +843,47 @@ static int i2s_hw_params(struct snd_pcm_substream *substream, return 0; } +static int i2s_set_tdm_slot(struct snd_soc_dai *dai, unsigned int tx_mask, + unsigned int rx_mask, int slots, int slot_width) +{ + struct samsung_i2s_priv *priv = snd_soc_dai_get_drvdata(dai); + struct i2s_dai *i2s = to_info(dai); + u32 tdm = 0, mask = 0, val = 0; + unsigned long flags; + + if (!(priv->quirks & QUIRK_SUPPORTS_TDM)) { + dev_err(&i2s->pdev->dev, "Invalid request: TDM not enabled\n"); + return -EINVAL; + } + + mask |= (TDM_ENABLE); + mask |= (TDM_TX_SLOTS_MASK << TDM_TX_SLOTS_SHIFT); + mask |= (TDM_RX_SLOTS_MASK << TDM_RX_SLOTS_SHIFT); + + if (slots) { + val |= ((slots-1) & TDM_TX_SLOTS_MASK) << TDM_TX_SLOTS_SHIFT; + val |= ((slots-1) & TDM_RX_SLOTS_MASK) << TDM_RX_SLOTS_SHIFT; + + dev_info(&i2s->pdev->dev, + "TDM Mode Configured - TX and RX Slots: %d\n", slots); + + val |= TDM_ENABLE; + + priv->tdm_slots = slots; + } else { + val = 0; + priv->tdm_slots = 0; + } + + spin_lock_irqsave(&priv->lock, flags); + tdm = readl(priv->addr + I2STDM); + tdm = (tdm & ~mask) | val; + writel(tdm, priv->addr + I2STDM); + spin_unlock_irqrestore(&priv->lock, flags); + + return 0; +} + /* We set constraints on the substream according to the version of I2S */ static int i2s_startup(struct snd_pcm_substream *substream, struct snd_soc_dai *dai) @@ -879,6 +951,9 @@ static int config_setup(struct i2s_dai *i2s) if (!bfs && other) bfs = other->bfs; + if (!bfs && (priv->quirks & QUIRK_SUPPORTS_TDM) && priv->tdm_slots) + bfs = blc * priv->tdm_slots; + /* Select least possible multiple(2) if no constraint set */ if (!bfs) bfs = blc * 2; @@ -899,6 +974,9 @@ static int config_setup(struct i2s_dai *i2s) rfs = 256; else rfs = 384; + + if ((priv->quirks & QUIRK_SUPPORTS_TDM) && priv->tdm_slots) + rfs /= (priv->tdm_slots / TDM_DEFAULT_SLOT_NUM_DIVIDER); } /* If already setup and running */ @@ -1110,6 +1188,7 @@ static const struct snd_soc_dai_ops samsung_i2s_dai_ops = { .set_fmt = i2s_set_fmt, .set_clkdiv = i2s_set_clkdiv, .set_sysclk = i2s_set_sysclk, + .set_tdm_slot = i2s_set_tdm_slot, .startup = i2s_startup, .shutdown = i2s_shutdown, .delay = i2s_delay, @@ -1464,6 +1543,9 @@ static int samsung_i2s_probe(struct platform_device *pdev) dev_err(&pdev->dev, "failed to enable clock: %d\n", ret); return ret; } + + priv->tdm_slots = 0; + pri_dai->dma_playback.addr = regs_base + I2STXD; pri_dai->dma_capture.addr = regs_base + I2SRXD; pri_dai->dma_playback.chan_name = "tx"; From patchwork Fri Oct 14 10:21:47 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Padmanabhan Rajanbabu X-Patchwork-Id: 615207 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 EDAADC43219 for ; Fri, 14 Oct 2022 11:10:19 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229748AbiJNLKS (ORCPT ); Fri, 14 Oct 2022 07:10:18 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35994 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229768AbiJNLKP (ORCPT ); Fri, 14 Oct 2022 07:10:15 -0400 Received: from mailout4.samsung.com (mailout4.samsung.com [203.254.224.34]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B9DEA476C8 for ; Fri, 14 Oct 2022 04:10:12 -0700 (PDT) Received: from epcas5p4.samsung.com (unknown [182.195.41.42]) by mailout4.samsung.com (KnoxPortal) with ESMTP id 20221014111010epoutp0439241f03fa8566b7013c085073ab174f~d6v1S7Gf-0641706417epoutp04X for ; Fri, 14 Oct 2022 11:10:10 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout4.samsung.com 20221014111010epoutp0439241f03fa8566b7013c085073ab174f~d6v1S7Gf-0641706417epoutp04X DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1665745810; bh=X+AgLGa5lEnY8GHICnKcE5aQCOfPFmz4hGlS4PuZixQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=llKkbRjQEpsYxihhXRlOSXqYYCjY5MuaUJe9WFg5/f/0FhK13bBaw2zv7I1HVPIS8 sgBFu3wcVmHHdcSh1KF80gNGX6ADJfGYL6Zm0aHJXCvQn0MsL+r8xnOcQhMekwHZB9 qlQ275ficWYw5ZQSXPrxPQpvkjvFbMuX/zrTODU8= Received: from epsnrtp1.localdomain (unknown [182.195.42.162]) by epcas5p2.samsung.com (KnoxPortal) with ESMTP id 20221014111010epcas5p20d10d00d365e0f4073ddf47b171ecc0e~d6v0rrd7w1113011130epcas5p2a; Fri, 14 Oct 2022 11:10:10 +0000 (GMT) Received: from epsmges5p2new.samsung.com (unknown [182.195.38.182]) by epsnrtp1.localdomain (Postfix) with ESMTP id 4MpkFC5vL9z4x9Pr; Fri, 14 Oct 2022 11:10:07 +0000 (GMT) Received: from epcas5p4.samsung.com ( [182.195.41.42]) by epsmges5p2new.samsung.com (Symantec Messaging Gateway) with SMTP id 27.06.39477.F8349436; Fri, 14 Oct 2022 20:10:07 +0900 (KST) Received: from epsmtrp2.samsung.com (unknown [182.195.40.14]) by epcas5p2.samsung.com (KnoxPortal) with ESMTPA id 20221014104857epcas5p2a275a1d606ca066227228d13bcf5b120~d6dS97GIL0052600526epcas5p22; Fri, 14 Oct 2022 10:48:57 +0000 (GMT) Received: from epsmgms1p2.samsung.com (unknown [182.195.42.42]) by epsmtrp2.samsung.com (KnoxPortal) with ESMTP id 20221014104857epsmtrp2a596a658fb9740b9ee46152613e68298~d6dS8-1ID0248602486epsmtrp2u; Fri, 14 Oct 2022 10:48:57 +0000 (GMT) X-AuditID: b6c32a4a-259fb70000019a35-58-6349438fde64 Received: from epsmtip1.samsung.com ( [182.195.34.30]) by epsmgms1p2.samsung.com (Symantec Messaging Gateway) with SMTP id B7.2C.18644.89E39436; Fri, 14 Oct 2022 19:48:56 +0900 (KST) Received: from cheetah.sa.corp.samsungelectronics.net (unknown [107.109.115.53]) by epsmtip1.samsung.com (KnoxPortal) with ESMTPA id 20221014104854epsmtip10e316d810d89bf2e6392115791f00634~d6dQxi0AG2688026880epsmtip1J; Fri, 14 Oct 2022 10:48:54 +0000 (GMT) From: Padmanabhan Rajanbabu To: lgirdwood@gmail.com, broonie@kernel.org, robh+dt@kernel.org, krzysztof.kozlowski+dt@linaro.org, s.nawrocki@samsung.com, perex@perex.cz, tiwai@suse.com, pankaj.dubey@samsung.com, alim.akhtar@samsung.com, rcsekar@samsung.com, aswani.reddy@samsung.com Cc: alsa-devel@alsa-project.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-samsung-soc@vger.kernel.org, Padmanabhan Rajanbabu Subject: [PATCH 2/6] ASoC: samsung: i2s: configure PSR from sound card Date: Fri, 14 Oct 2022 15:51:47 +0530 Message-Id: <20221014102151.108539-3-p.rajanbabu@samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20221014102151.108539-1-p.rajanbabu@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprNJsWRmVeSWpSXmKPExsWy7bCmlm6/s2eyQfs8XYsH87axWVy5eIjJ 4tDmrewWUx8+YbOYf+Qcq0Xfi4fMFt+udDBZXN41h81ixvl9TBZHNwZbLNr6hd2ic1c/q8Ws CztYLVr3HmG3OPymndViw/e1jA4CHhs+N7F57Jx1l91j06pONo871/aweex7u4zNo2/LKkaP 9Vuusnh83iQXwBGVbZORmpiSWqSQmpecn5KZl26r5B0c7xxvamZgqGtoaWGupJCXmJtqq+Ti E6DrlpkD9IGSQlliTilQKCCxuFhJ386mKL+0JFUhI7+4xFYptSAlp8CkQK84Mbe4NC9dLy+1 xMrQwMDIFKgwITtj1amPTAVPFCvOXGlib2BcIN3FyMkhIWAiMXXJQ/YuRi4OIYHdjBK9iw6z QjifGCXe7jrHDFIlJPCZUWLl5iqYjps79jJDFO1ilDiy/z0jhNPKJLF9+212kCo2AVOJVXMa wUaJCDQxSbS9mcgC4jALbGSUOH3sIVMXIweHsICbROf+EJAGFgFViWeHbrKAhHkFbCWu3w+A 2CYvsXrDAbArOAXsJJ63NIHNlBBYyCFxdvIFdogiF4n1h68yQ9jCEq+Ob4GKS0l8freXDcLO l5j2sRnKrpBo+7iBCcK2lzhwZQ7YXmYBTYn1u/QhwrISU0+tAythFuCT6P39BKqcV2LHPBhb VWL98k2MELa0xL7re6FsD4nZc89DQ2gio8S19SeYJjDKzUJYsYCRcRWjZGpBcW56arFpgVFe ajk81pLzczcxglOpltcOxocPPugdYmTiYDzEKMHBrCTC+1rJM1mINyWxsiq1KD++qDQntfgQ oykw/CYyS4km5wOTeV5JvKGJpYGJmZmZiaWxmaGSOO/iGVrJQgLpiSWp2ampBalFMH1MHJxS DUyOHLwhH2zl7bpfvFo7e8dsFflVCxebrJJqe6rpXBBme0Oy+Ktj+DS3iXNm2iTf/7h+zu76 TazSZVN2eL0OmF7IeeSZ2W1On1UfhbnWfJ0btKsnbU6kQPRKfz5hFUch5wtBURpi9+eJcDEG ud6VsDLdlv14BUOO5pSLE861cM/Nnc4Zc3GHyqFJuUteXuF2OH9qo8zyC1FNJY1v86I4wz83 Wi94nTFr0ZfG5CNKbCq3VU7Fb9KR7VrTe3rBjv/f3H8sdj4/gzu7VFp89dnkbm6n1e+juv80 nd15fP+xiO1LQmf38/x+vCdN4cI9XwPzG5INoUeO6ymmzZmc23Q/PdHozIQLC9+I32m8OqPU xPicEktxRqKhFnNRcSIAn/E/Ty4EAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrALMWRmVeSWpSXmKPExsWy7bCSnO5MO89kg0saFg/mbWOzuHLxEJPF oc1b2S2mPnzCZjH/yDlWi74XD5ktvl3pYLK4vGsOm8WM8/uYLI5uDLZYtPULu0Xnrn5Wi1kX drBatO49wm5x+E07q8WG72sZHQQ8NnxuYvPYOesuu8emVZ1sHneu7WHz2Pd2GZtH35ZVjB7r t1xl8fi8SS6AI4rLJiU1J7MstUjfLoErY9Wpj0wFTxQrzlxpYm9gXCDdxcjJISFgInFzx17m LkYuDiGBHYwST7fOY4dISEtM79/DBmELS6z895wdoqiZSWLy3nVgRWwCphKr5jSygiREBCYw SZx8d4wFJMEssJVRYupnoy5GDg5hATeJzv0hIGEWAVWJZ4dusoCEeQVsJa7fD4CYLy+xesMB ZhCbU8BO4nlLEyuILQRU8vz8O8YJjHwLGBlWMUqmFhTnpucWGxYY5aWW6xUn5haX5qXrJefn bmIEB7qW1g7GPas+6B1iZOJgPMQowcGsJML7WskzWYg3JbGyKrUoP76oNCe1+BCjNAeLkjjv ha6T8UIC6YklqdmpqQWpRTBZJg5OqQamwhwOKe1kzyDG92kZl3c9WTFBsTfk6pG2XEn/W5wx x/f7xn2+VVpoZjs/am/Tfu6sWn3HUBZbMd1j27IE3HX/2ysXuul9WbOymCthS+KcYOv5qbEO lVebzW5WPNfeae69zshGNn6W6xvWwhvLWie/WyMwy8+4tNJKmNlhinWDxOWbf5LfZjVYq8+Z x6ly/0TEa8vbLd7WCU9263WZv5pj59j66t8kxltuc44WznOxCZorMa1wTb568Wsppi0fr7Nu NZJdwCC+oqn90cxtrcI7Zm231Xv+SvPHhpBH28+e0pWeNetC44e8iKa6vvxbtzz2P79guOdt 7Ca7mfWhtU8U1W02rLSOMikPqJkk9lWJpTgj0VCLuag4EQB8G1By4wIAAA== X-CMS-MailID: 20221014104857epcas5p2a275a1d606ca066227228d13bcf5b120 X-Msg-Generator: CA X-Sendblock-Type: REQ_APPROVE CMS-TYPE: 105P DLP-Filter: Pass X-CFilter-Loop: Reflected X-CMS-RootMailID: 20221014104857epcas5p2a275a1d606ca066227228d13bcf5b120 References: <20221014102151.108539-1-p.rajanbabu@samsung.com> Precedence: bulk List-ID: X-Mailing-List: linux-samsung-soc@vger.kernel.org Currently the prescaler value in samsung I2S dai is calculated by dividing the peripheral input clock frequency with frame clock frequency and root clock frequency divider. This prescaler value is used to divide the input clock to generate root clock (RCLK) from which frame clock is generated for I2S communication. However for the platforms which does not have a dedicated audio PLL as an input clock source, the prescaler divider will not generate accurate root clock frequency, which inturn affects sampling frequency also. To overcome this scenario, support has been added to let the sound card identify right prescaler divider value and configure the prescaler (PSR) divider directly the from the sound card to achieve near accurate sample frequencies Signed-off-by: Padmanabhan Rajanbabu --- sound/soc/samsung/i2s-regs.h | 2 ++ sound/soc/samsung/i2s.c | 36 ++++++++++++++++++++++++++++++++---- sound/soc/samsung/i2s.h | 1 + 3 files changed, 35 insertions(+), 4 deletions(-) diff --git a/sound/soc/samsung/i2s-regs.h b/sound/soc/samsung/i2s-regs.h index cb2be4a3b70b..e2581dc73df2 100644 --- a/sound/soc/samsung/i2s-regs.h +++ b/sound/soc/samsung/i2s-regs.h @@ -132,6 +132,8 @@ #define EXYNOS7_MOD_RCLK_192FS 7 #define PSR_PSREN (1 << 15) +#define PSR_PSVAL_SHIFT 8 +#define PSR_PSVAL_MASK 0x3f #define FIC_TX2COUNT(x) (((x) >> 24) & 0xf) #define FIC_TX1COUNT(x) (((x) >> 16) & 0xf) diff --git a/sound/soc/samsung/i2s.c b/sound/soc/samsung/i2s.c index fb806b0af6ab..a96286b27f1d 100644 --- a/sound/soc/samsung/i2s.c +++ b/sound/soc/samsung/i2s.c @@ -59,10 +59,10 @@ struct i2s_dai { /* Frame clock */ unsigned frmclk; /* - * Specifically requested RCLK, BCLK by machine driver. + * Specifically requested RCLK, BCLK and PSR by machine driver. * 0 indicates CPU driver is free to choose any value. */ - unsigned rfs, bfs; + unsigned int rfs, bfs, psr; /* Pointer to the Primary_Fifo if this is Sec_Fifo, NULL otherwise */ struct i2s_dai *pri_dai; /* Pointer to the Secondary_Fifo if it has one, NULL otherwise */ @@ -389,6 +389,17 @@ static inline int get_blc(struct i2s_dai *i2s) } } +static inline unsigned int get_psval(struct i2s_dai *i2s) +{ + struct samsung_i2s_priv *priv = i2s->priv; + u32 psr; + + psr = readl(priv->addr + I2SPSR) >> PSR_PSVAL_SHIFT; + psr &= PSR_PSVAL_MASK; + + return (psr + 1); +} + /* TX channel control */ static void i2s_txctrl(struct i2s_dai *i2s, int on) { @@ -994,7 +1005,11 @@ static int config_setup(struct i2s_dai *i2s) return 0; if (!(priv->quirks & QUIRK_NO_MUXPSR)) { - psr = priv->rclk_srcrate / i2s->frmclk / rfs; + if (i2s->psr) + psr = i2s->psr; + else + psr = priv->rclk_srcrate / i2s->frmclk / rfs; + writel(((psr - 1) << 8) | PSR_PSREN, priv->addr + I2SPSR); dev_dbg(&i2s->pdev->dev, "RCLK_SRC=%luHz PSR=%u, RCLK=%dfs, BCLK=%dfs\n", @@ -1072,6 +1087,18 @@ static int i2s_set_clkdiv(struct snd_soc_dai *dai, i2s->bfs = div; pm_runtime_put(dai->dev); break; + case SAMSUNG_I2S_DIV_RCLK: + pm_runtime_get_sync(dai->dev); + if ((any_active(i2s) && div && (get_psval(i2s) != div)) + || (other && other->psr && (other->psr != div))) { + pm_runtime_put(dai->dev); + dev_err(&i2s->pdev->dev, + "%s:%d Other DAI busy\n", __func__, __LINE__); + return -EAGAIN; + } + i2s->psr = div; + pm_runtime_put(dai->dev); + break; default: dev_err(&i2s->pdev->dev, "Invalid clock divider(%d)\n", div_id); @@ -1140,9 +1167,10 @@ static int samsung_i2s_dai_probe(struct snd_soc_dai *dai) other->idma_playback.addr); } - /* Reset any constraint on RFS and BFS */ + /* Reset any constraint on RFS, BFS and PSR*/ i2s->rfs = 0; i2s->bfs = 0; + i2s->psr = 0; spin_lock_irqsave(&priv->lock, flags); i2s_txctrl(i2s, 0); diff --git a/sound/soc/samsung/i2s.h b/sound/soc/samsung/i2s.h index 78b475ef98d9..e783d33fdfac 100644 --- a/sound/soc/samsung/i2s.h +++ b/sound/soc/samsung/i2s.h @@ -13,6 +13,7 @@ #define SAMSUNG_I2S_DAI_SEC "samsung-i2s-sec" #define SAMSUNG_I2S_DIV_BCLK 1 +#define SAMSUNG_I2S_DIV_RCLK 2 #define SAMSUNG_I2S_RCLKSRC_0 0 #define SAMSUNG_I2S_RCLKSRC_1 1 From patchwork Fri Oct 14 10:21:48 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Padmanabhan Rajanbabu X-Patchwork-Id: 616664 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 3D916C4332F for ; Fri, 14 Oct 2022 11:10:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229806AbiJNLKe (ORCPT ); Fri, 14 Oct 2022 07:10:34 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38720 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229766AbiJNLKc (ORCPT ); Fri, 14 Oct 2022 07:10:32 -0400 Received: from mailout3.samsung.com (mailout3.samsung.com [203.254.224.33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 205694DB47 for ; Fri, 14 Oct 2022 04:10:20 -0700 (PDT) Received: from epcas5p3.samsung.com (unknown [182.195.41.41]) by mailout3.samsung.com (KnoxPortal) with ESMTP id 20221014111018epoutp032d59f5cfa4b021632416c8df05080fe4~d6v8NhZBl1241412414epoutp03R for ; Fri, 14 Oct 2022 11:10:18 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout3.samsung.com 20221014111018epoutp032d59f5cfa4b021632416c8df05080fe4~d6v8NhZBl1241412414epoutp03R DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1665745818; bh=Qw7Z1dzmSAO8dt+O9QgqCihC0iOroNtHcGevkHYv7ZM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=kQNaCz5AOs3o3ws4DoYzK5M4fRERj6/gYMpEY88aMmel3G4Tki4FjbUDfRL6GaLkk JGJuJ2f9YN+/+d93DuyVIP7TSQaBOl49EAbJHJoEuNwSZ4OuhM2juZAuLqn02FlZPc sa6Sek0JraP9oiFmqhYyaPZfKfhNUAxK3QafzIx0= Received: from epsnrtp1.localdomain (unknown [182.195.42.162]) by epcas5p4.samsung.com (KnoxPortal) with ESMTP id 20221014111017epcas5p40a8b5d6e9aa30313768a4a5e10b307b1~d6v7uqakf2372423724epcas5p43; Fri, 14 Oct 2022 11:10:17 +0000 (GMT) Received: from epsmges5p1new.samsung.com (unknown [182.195.38.183]) by epsnrtp1.localdomain (Postfix) with ESMTP id 4MpkFM3tSvz4x9Pp; Fri, 14 Oct 2022 11:10:15 +0000 (GMT) Received: from epcas5p4.samsung.com ( [182.195.41.42]) by epsmges5p1new.samsung.com (Symantec Messaging Gateway) with SMTP id A1.21.26992.79349436; Fri, 14 Oct 2022 20:10:15 +0900 (KST) Received: from epsmtrp1.samsung.com (unknown [182.195.40.13]) by epcas5p1.samsung.com (KnoxPortal) with ESMTPA id 20221014104901epcas5p1a61ea81c3b1640bd8a064633c0b1e40d~d6dWoFx_12011520115epcas5p1J; Fri, 14 Oct 2022 10:49:01 +0000 (GMT) Received: from epsmgms1p1new.samsung.com (unknown [182.195.42.41]) by epsmtrp1.samsung.com (KnoxPortal) with ESMTP id 20221014104901epsmtrp1293f8715ec9b7a2c41faa8b76d9d6249~d6dWnCrET3160431604epsmtrp14; Fri, 14 Oct 2022 10:49:01 +0000 (GMT) X-AuditID: b6c32a49-319fb70000016970-0d-634943977369 Received: from epsmtip1.samsung.com ( [182.195.34.30]) by epsmgms1p1new.samsung.com (Symantec Messaging Gateway) with SMTP id 39.56.14392.C9E39436; Fri, 14 Oct 2022 19:49:00 +0900 (KST) Received: from cheetah.sa.corp.samsungelectronics.net (unknown [107.109.115.53]) by epsmtip1.samsung.com (KnoxPortal) with ESMTPA id 20221014104858epsmtip1508af7d320f124b1161a7aaa84ead629~d6dUcbDeT0142901429epsmtip1U; Fri, 14 Oct 2022 10:48:58 +0000 (GMT) From: Padmanabhan Rajanbabu To: lgirdwood@gmail.com, broonie@kernel.org, robh+dt@kernel.org, krzysztof.kozlowski+dt@linaro.org, s.nawrocki@samsung.com, perex@perex.cz, tiwai@suse.com, pankaj.dubey@samsung.com, alim.akhtar@samsung.com, rcsekar@samsung.com, aswani.reddy@samsung.com Cc: alsa-devel@alsa-project.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-samsung-soc@vger.kernel.org, Padmanabhan Rajanbabu Subject: [PATCH 3/6] dt-bindings: sound: Add sound card bindings for Tesla FSD Date: Fri, 14 Oct 2022 15:51:48 +0530 Message-Id: <20221014102151.108539-4-p.rajanbabu@samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20221014102151.108539-1-p.rajanbabu@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprLJsWRmVeSWpSXmKPExsWy7bCmlu50Z89kgz1PZCwezNvGZnHl4iEm i0Obt7JbTH34hM1i/pFzrBZ9Lx4yW3y70sFkcXnXHDaLGef3MVkc3RhssWjrF3aLzl39rBaz LuxgtWjde4Td4vCbdlaLDd/XMjoIeGz43MTmsXPWXXaPTas62TzuXNvD5rHv7TI2j74tqxg9 1m+5yuLxeZNcAEdUtk1GamJKapFCal5yfkpmXrqtkndwvHO8qZmBoa6hpYW5kkJeYm6qrZKL T4CuW2YO0AdKCmWJOaVAoYDE4mIlfTubovzSklSFjPziElul1IKUnAKTAr3ixNzi0rx0vbzU EitDAwMjU6DChOyMV8f3MhVc1qyYMWcRewPjLtkuRk4OCQETie41u5i7GLk4hAR2M0ocPnuI DSQhJPCJUeJrEwdE4hujxNbd/1hhOn6/nMwEkdjLKHHuwWeo9lYmib0Ln7OAVLEJmEqsmtPI CpIQEWhikmh7M5EFxGEW2MgocfrYQyaQKmGBAIln076CLWQRUJWY8m4DI4jNK2Ar8fbKaah9 8hKrNxxgBrE5Bewknrc0gU2VEFjIIfFuz2k2iCIXiT1tl6FsYYlXx7ewQ9hSEi/726DsfIlp H5uhaiok2j5uYIKw7SUOXJkDdB0H0HWaEut36UOEZSWmnloHVsIswCfR+/sJVDmvxI55MLaq xPrlmxghbGmJfdf3QtkeEls3/ICG0URGiX87TzBOYJSbhbBiASPjKkbJ1ILi3PTUYtMCw7zU cni8JefnbmIEp1Mtzx2Mdx980DvEyMTBeIhRgoNZSYT3tZJnshBvSmJlVWpRfnxRaU5q8SFG U2AATmSWEk3OByb0vJJ4QxNLAxMzMzMTS2MzQyVx3sUztJKFBNITS1KzU1MLUotg+pg4OKUa mFgOfBbPVHl+THj2Eb5Wl5hzn67Gi7xoNJq4893zN3JR2ncUrrU92Xvgqqn8TtYVUe6JuUsm xHbGpthfseH3EcsyvC53v9ficW6ooSSz2lNtNpfZf6T+qrNNac/rDRKO+zL157MFZbEq5ySX f1OUWBO5fParv2bvMt4t3en7leNofHXYzcn/zlaG9oVtOHe8b9Gkfl1N0an3lk1kipnzS5eb J3nC9jkvwgR2tou0TdFaESIwU8r4/QJl85LNWisv7N9woG+pi+65ohgx04N/fJ/e5js/QXVV pd3m87syqrIEZSw2u/rNbjz7/FJD7ebdwV5Op5Xn30rwvNtRX1vpUVKb5Ps85d22SfueMd2b WqvEUpyRaKjFXFScCABLkZoWMAQAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrMLMWRmVeSWpSXmKPExsWy7bCSnO4cO89kg9UPzSwezNvGZnHl4iEm i0Obt7JbTH34hM1i/pFzrBZ9Lx4yW3y70sFkcXnXHDaLGef3MVkc3RhssWjrF3aLzl39rBaz LuxgtWjde4Td4vCbdlaLDd/XMjoIeGz43MTmsXPWXXaPTas62TzuXNvD5rHv7TI2j74tqxg9 1m+5yuLxeZNcAEcUl01Kak5mWWqRvl0CV8ar43uZCi5rVsyYs4i9gXGXbBcjJ4eEgInE75eT mboYuTiEBHYzSjzcv4wRIiEtMb1/DxuELSyx8t9zdoiiZiaJI6teghWxCZhKrJrTyAqSEBGY wCRx8t0xFpAEs8BWRompn41AbGEBP4nl916AxVkEVCWmvNsA1swrYCvx9sppVogN8hKrNxxg BrE5Bewknrc0gcWFgGqen3/HOIGRbwEjwypGydSC4tz03GLDAsO81HK94sTc4tK8dL3k/NxN jOBw19Lcwbh91Qe9Q4xMHIyHGCU4mJVEeF8reSYL8aYkVlalFuXHF5XmpBYfYpTmYFES573Q dTJeSCA9sSQ1OzW1ILUIJsvEwSnVwFR7xDJLMHbp5/jKU111Fg26yknKdYxz/jC/ur3kqOGj oGWrQyvZ0ne4NsUtnbtt8fLN8eomYbeK/HYde7by/NX+ib323xdWTw5dvdnzgnJsc4weS9Dh OSuX2z0X3uqzVHdBT+Ff/VvOC5nX74va9viIktHS3Xd54zWLueV3XIlVlsyxFjdZYjdzo2b+ 94Y57qYehXH1U2ZzavKEHJm/tZ19q+eS4Jjr367HpMTfv3ri8pR//KbfWW5Yh33ZXT+tZ2bB uvvZu87/lFXm38Ce6v/vRlYfWzp3YYyARufqg3yCj9pfvHmgqj3rbBBDyqO9It/vHqxtj1oo 43UnQE4xZz9/mtP/O7euVzhuXFRaZKzEUpyRaKjFXFScCADaUQpl5gIAAA== X-CMS-MailID: 20221014104901epcas5p1a61ea81c3b1640bd8a064633c0b1e40d X-Msg-Generator: CA X-Sendblock-Type: REQ_APPROVE CMS-TYPE: 105P DLP-Filter: Pass X-CFilter-Loop: Reflected X-CMS-RootMailID: 20221014104901epcas5p1a61ea81c3b1640bd8a064633c0b1e40d References: <20221014102151.108539-1-p.rajanbabu@samsung.com> Precedence: bulk List-ID: X-Mailing-List: linux-samsung-soc@vger.kernel.org Add dt-binding reference document to configure the DAI link for Tesla FSD sound card driver. Signed-off-by: Padmanabhan Rajanbabu --- .../bindings/sound/tesla,fsd-card.yaml | 158 ++++++++++++++++++ 1 file changed, 158 insertions(+) create mode 100644 Documentation/devicetree/bindings/sound/tesla,fsd-card.yaml diff --git a/Documentation/devicetree/bindings/sound/tesla,fsd-card.yaml b/Documentation/devicetree/bindings/sound/tesla,fsd-card.yaml new file mode 100644 index 000000000000..4bd590f4ee27 --- /dev/null +++ b/Documentation/devicetree/bindings/sound/tesla,fsd-card.yaml @@ -0,0 +1,158 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +# Copyright 2022 Samsung Electronics Co. Ltd. +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/sound/tesla,fsd-card.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Tesla FSD ASoC sound card driver + +maintainers: + - Padmanabhan Rajanbabu + +description: | + This binding describes the node properties and essential DT entries of FSD + SoC sound card node + +select: false + +properties: + compatible: + enum: + - tesla,fsd-sndcard + + model: + description: Describes the Name of the sound card + $ref: /schemas/types.yaml#/definitions/string + + widgets: + description: A list of DAPM widgets in the sound card. Each entry is a pair + of strings, the first being the widget name and the second being the + widget alias + $ref: /schemas/types.yaml#/definitions/string-array + + audio-routing: + description: A list of the connections between audio components. Each entry + is a pair of strings, the first being the connection's sink, the second + being the connection's source + $ref: /schemas/types.yaml#/definitions/string-array + + dai-tdm-slot-num: + description: Enables TDM mode and specifies the number of TDM slots to be + enabled + $ref: /schemas/types.yaml#/definitions/uint32 + enum: [0, 1, 2, 3, 4, 5, 6, 7, 8] + default: 2 + + dai-tdm-slot-width: + description: Specifies the slot width of each TDm slot enabled + $ref: /schemas/types.yaml#/definitions/uint32 + enum: [8, 16, 24] + default: 16 + + dai-link: + description: Holds the DAI link data between CPU, Codec and Platform + type: object + properties: + link-name: + description: Specifies the name of the DAI link + $ref: /schemas/types.yaml#/definitions/string + + dai-format: + description: Specifies the serial data format of CPU DAI + $ref: /schemas/types.yaml#/definitions/string + + tesla,bitclock-master: + description: Specifies the phandle of bitclock master DAI + $ref: /schemas/types.yaml#/definitions/phandle + + tesla,frame-master: + description: Specifies the phandle of frameclock master DAI + $ref: /schemas/types.yaml#/definitions/phandle + + cpu: + description: Holds the CPU DAI node and instance + type: object + properties: + sound-dai: + description: Specifies the phandle of CPU DAI node + $ref: /schemas/types.yaml#/definitions/phandle-array + + required: + - sound-dai + + codec: + description: Holds the Codec DAI node and instance + type: object + properties: + sound-dai: + description: Specifies the phandle of Codec DAI node + $ref: /schemas/types.yaml#/definitions/phandle-array + + required: + - sound-dai + + required: + - link-name + - dai-format + - tesla,bitclock-master + - tesla,frame-master + - cpu + +dependencies: + dai-tdm-slot-width: [ 'dai-tdm-slot-num' ] + +required: + - compatible + - model + - dai-link + +additionalProperties: false + +examples: + - | + sound { + compatible = "tesla,fsd-sndcard"; + status = "disabled"; + model = "fsd-i2s"; + + primary-dai-link-0 { + link-name = "fsd-primary-0"; + dai-format = "i2s"; + tesla,bitclock-master = <&tdm_0>; + tesla,frame-master = <&tdm_0>; + cpu { + sound-dai = <&tdm_0 0>; + }; + }; + + secondary-dai-link-0 { + link-name = "fsd-secondary-0"; + dai-format = "i2s"; + tesla,bitclock-master = <&tdm_0>; + tesla,frame-master = <&tdm_0>; + cpu { + sound-dai = <&tdm_0 1>; + }; + }; + + primary-dai-link-1 { + link-name = "fsd-primary-1"; + dai-format = "i2s"; + tesla,bitclock-master = <&tdm_1>; + tesla,frame-master = <&tdm_1>; + cpu { + sound-dai = <&tdm_1 0>; + }; + }; + + secondary-dai-link-1 { + link-name = "fsd-secondary-1"; + dai-format = "i2s"; + tesla,bitclock-master = <&tdm_1>; + tesla,frame-master = <&tdm_1>; + cpu { + sound-dai = <&tdm_1 1>; + }; + }; + }; From patchwork Fri Oct 14 10:21:49 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Padmanabhan Rajanbabu X-Patchwork-Id: 615206 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 B1794C43219 for ; Fri, 14 Oct 2022 11:10:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229791AbiJNLKk (ORCPT ); Fri, 14 Oct 2022 07:10:40 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38960 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229816AbiJNLKg (ORCPT ); Fri, 14 Oct 2022 07:10:36 -0400 Received: from mailout2.samsung.com (mailout2.samsung.com [203.254.224.25]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A26BCCF1B9 for ; Fri, 14 Oct 2022 04:10:28 -0700 (PDT) Received: from epcas5p1.samsung.com (unknown [182.195.41.39]) by mailout2.samsung.com (KnoxPortal) with ESMTP id 20221014111026epoutp022bfc458c57f4f5a1cdfff41bfad13542~d6wDozXMg2101021010epoutp02j for ; Fri, 14 Oct 2022 11:10:26 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.samsung.com 20221014111026epoutp022bfc458c57f4f5a1cdfff41bfad13542~d6wDozXMg2101021010epoutp02j DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1665745826; bh=GlsBDX1Xi5F1q3jm3rSzlWAbbze0DTUaqvH5QPdWxjY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=u6o+MIPoEzOLlnygehv6yEWNM4Wx2QKViJRYnkXUHcMCXzx0VGc8lwi3mEm3hIzT4 VgGUeE2M26TVqlBCL7XTMUNsk6mNBTYhAtIkqwewveyAjtcwltUjK+jqmhFpCsCbeM f3IXOd7oMZ85gAMg74J5CHKS2wrwDZ/jM/zgQys4= Received: from epsnrtp2.localdomain (unknown [182.195.42.163]) by epcas5p3.samsung.com (KnoxPortal) with ESMTP id 20221014111025epcas5p33454cac9eb221db79700a97069879c83~d6wC17uOx0195101951epcas5p3H; Fri, 14 Oct 2022 11:10:25 +0000 (GMT) Received: from epsmges5p3new.samsung.com (unknown [182.195.38.179]) by epsnrtp2.localdomain (Postfix) with ESMTP id 4MpkFW2sxpz4x9Py; Fri, 14 Oct 2022 11:10:23 +0000 (GMT) Received: from epcas5p3.samsung.com ( [182.195.41.41]) by epsmges5p3new.samsung.com (Symantec Messaging Gateway) with SMTP id 36.4E.56352.E9349436; Fri, 14 Oct 2022 20:10:22 +0900 (KST) Received: from epsmtrp2.samsung.com (unknown [182.195.40.14]) by epcas5p4.samsung.com (KnoxPortal) with ESMTPA id 20221014104904epcas5p4f458182cc9ac9c223d9a25566f3dd300~d6daR6xQz3049930499epcas5p4j; Fri, 14 Oct 2022 10:49:04 +0000 (GMT) Received: from epsmgms1p2.samsung.com (unknown [182.195.42.42]) by epsmtrp2.samsung.com (KnoxPortal) with ESMTP id 20221014104904epsmtrp298b6903ee5f33d84ebce31bbbe1bc06c~d6daP7brU0248602486epsmtrp28; Fri, 14 Oct 2022 10:49:04 +0000 (GMT) X-AuditID: b6c32a4b-5f7fe7000001dc20-4a-6349439e61df Received: from epsmtip1.samsung.com ( [182.195.34.30]) by epsmgms1p2.samsung.com (Symantec Messaging Gateway) with SMTP id 5B.2C.18644.0AE39436; Fri, 14 Oct 2022 19:49:04 +0900 (KST) Received: from cheetah.sa.corp.samsungelectronics.net (unknown [107.109.115.53]) by epsmtip1.samsung.com (KnoxPortal) with ESMTPA id 20221014104902epsmtip1c754c02f30e375a080e53f21eddc2281~d6dYAt4lC2736727367epsmtip1d; Fri, 14 Oct 2022 10:49:02 +0000 (GMT) From: Padmanabhan Rajanbabu To: lgirdwood@gmail.com, broonie@kernel.org, robh+dt@kernel.org, krzysztof.kozlowski+dt@linaro.org, s.nawrocki@samsung.com, perex@perex.cz, tiwai@suse.com, pankaj.dubey@samsung.com, alim.akhtar@samsung.com, rcsekar@samsung.com, aswani.reddy@samsung.com Cc: alsa-devel@alsa-project.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-samsung-soc@vger.kernel.org, Padmanabhan Rajanbabu Subject: [PATCH 4/6] ASoC: samsung: fsd: Add FSD soundcard driver Date: Fri, 14 Oct 2022 15:51:49 +0530 Message-Id: <20221014102151.108539-5-p.rajanbabu@samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20221014102151.108539-1-p.rajanbabu@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprFJsWRmVeSWpSXmKPExsWy7bCmpu48Z89kg8VLRCwezNvGZnHl4iEm i0Obt7JbTH34hM1i/pFzrBZ9Lx4yW3y70sFkcXnXHDaLGef3MVkc3RhssWjrF3aLzl39rBaz LuxgtWjde4Td4vCbdlaLDd/XMjoIeGz43MTmsXPWXXaPTas62TzuXNvD5rHv7TI2j74tqxg9 1m+5yuLxeZNcAEdUtk1GamJKapFCal5yfkpmXrqtkndwvHO8qZmBoa6hpYW5kkJeYm6qrZKL T4CuW2YO0AdKCmWJOaVAoYDE4mIlfTubovzSklSFjPziElul1IKUnAKTAr3ixNzi0rx0vbzU EitDAwMjU6DChOyMnlseBQfCK9q+32RqYNzn3sXIySEhYCKxqKOFEcQWEtjNKHF0t2cXIxeQ /YlRYkn3JnYI5zOjRNP28ywwHSe+rmGESOxilPh8fg9UVSuTxM8z08FmsQmYSqya08gKkhAR aGKSaHszkQXEYRbYyChx+thDJpAqYQFHiab1/ewgNouAqsTWV/1AHRwcvAK2EtM/CkOsk5dY veEAM4jNKWAn8bylCWyohMBCDonHT6+yQxS5SBxs7mCEsIUlXh3fAhWXkvj8bi8bhJ0vMe1j M5RdIdH2cQMThG0vceDKHBaQvcwCmhLrd+lDhGUlpp5aB1bCLMAn0fv7CVQ5r8SOeTC2qsT6 5Zug1kpL7Lu+lxFkjISAh0TDjDRIoExklFjf+4VpAqPcLIQNCxgZVzFKphYU56anFpsWGOel lsMjLTk/dxMjOJFqee9gfPTgg94hRiYOxkOMEhzMSiK8r5U8k4V4UxIrq1KL8uOLSnNSiw8x mgKDbyKzlGhyPjCV55XEG5pYGpiYmZmZWBqbGSqJ8y6eoZUsJJCeWJKanZpakFoE08fEwSnV wOTy57R+4qs5HML1956LVwd+slkoetly4fO38135fj2bmtbVcXqq1yTPClcu92v3WKxmN9/X nrGqqKR5VYjGHyfxzv8vFFXuXzmyd/Fi0zTWZzY3DBlrNeqnTc0VWbDXfcfiiMBAW+cDDQki uZ/8Yj95HUvvesbmPElfO+kgd+QPrnlXDq07U/VU4HyY1N3/iyoPBPtn6zu6msqbrVY5Pr3s w3KTnPffGJTbn5vcaT8Z7SL276yQnHaj1804vbaX2+Z8P3p+onz2GQ6+Y+v8r+z+wzc5YNW5 +gK2FfdSjO5777i9eHsIc+cCOy7B2cIsb+XqZhRMPMK1n4v1xbK98l1r1JkneW1JzONovq4S 81yJpTgj0VCLuag4EQBAQADjLQQAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrILMWRmVeSWpSXmKPExsWy7bCSnO4CO89kg709xhYP5m1js7hy8RCT xaHNW9ktpj58wmYx/8g5Vou+Fw+ZLb5d6WCyuLxrDpvFjPP7mCyObgy2WLT1C7tF565+VotZ F3awWrTuPcJucfhNO6vFhu9rGR0EPDZ8bmLz2DnrLrvHplWdbB53ru1h89j3dhmbR9+WVYwe 67dcZfH4vEkugCOKyyYlNSezLLVI3y6BK6PnlkfBgfCKtu83mRoY97l3MXJySAiYSJz4uoax i5GLQ0hgB6PE7c/TWCAS0hLT+/ewQdjCEiv/PWeHKGpmkjjZu4IRJMEmYCqxak4jK0hCRGAC UOLdMbBuZoGtjBJTPxuB2MICjhJN6/vZQWwWAVWJra/6gRo4OHgFbCWmfxSGWCAvsXrDAWYQ m1PATuJ5SxMriC0EVPL8/DvGCYx8CxgZVjFKphYU56bnFhsWGOWllusVJ+YWl+al6yXn525i BIe6ltYOxj2rPugdYmTiYDzEKMHBrCTC+1rJM1mINyWxsiq1KD++qDQntfgQozQHi5I474Wu k/FCAumJJanZqakFqUUwWSYOTqkGprBtKTfPcn33OsmaUaTzxXLy969Hi9tWy0Ss8VpnnVz1 8MqpoPj2Toagq4yh4arvhIMPPNoU6+vKtosxiX353sd1jgySoa5zPm9izqmUeJbALdOaKCh8 2DX66m5Jvj16v6TOPfP0OnbT/ry0k+63mo92HzhWZHxvPnM7//u8+XL/0303FD4xzJ7o1Xxh /oW39yr/3o/W8N+xXaXZR0lgX5Prs6zZ26ee43k/Iz3v28Jjco+D429a2r/dY33x8O+fjhMy 7wrtXvqrff/LGQcOqKfaVG+1641KzM/6OMeI9fnz5XO0lkgtnhhk9oh9P5Pb9EM+9jo+Twql 9b6s553Omr/Ve8XS/4sNDD5MkovP4FFiKc5INNRiLipOBABI5RM25AIAAA== X-CMS-MailID: 20221014104904epcas5p4f458182cc9ac9c223d9a25566f3dd300 X-Msg-Generator: CA X-Sendblock-Type: REQ_APPROVE CMS-TYPE: 105P DLP-Filter: Pass X-CFilter-Loop: Reflected X-CMS-RootMailID: 20221014104904epcas5p4f458182cc9ac9c223d9a25566f3dd300 References: <20221014102151.108539-1-p.rajanbabu@samsung.com> Precedence: bulk List-ID: X-Mailing-List: linux-samsung-soc@vger.kernel.org Add a soundcard driver for FSD audio interface to bridge the CPU DAI of samsung I2S with the codec and platform driver. Signed-off-by: Padmanabhan Rajanbabu --- sound/soc/samsung/Kconfig | 12 ++ sound/soc/samsung/Makefile | 2 + sound/soc/samsung/fsd-card.c | 349 +++++++++++++++++++++++++++++++++++ 3 files changed, 363 insertions(+) create mode 100644 sound/soc/samsung/fsd-card.c diff --git a/sound/soc/samsung/Kconfig b/sound/soc/samsung/Kconfig index 2a61e620cd3b..344503522bd3 100644 --- a/sound/soc/samsung/Kconfig +++ b/sound/soc/samsung/Kconfig @@ -239,4 +239,16 @@ config SND_SOC_SAMSUNG_MIDAS_WM1811 help Say Y if you want to add support for SoC audio on the Midas boards. +config SND_SOC_TESLA_FSD + tristate "SoC I2S Audio support for Tesla FSD board" + depends on SND_SOC_SAMSUNG + select SND_SIMPLE_CARD_UTILS + select SND_SAMSUNG_I2S + help + Say Y if you want to add support for SOC audio on the FSD board. + This will select the SND_SIMPLE_CARD_UTILS to use the dummy + codec driver, incase the codec node is not specified in the device + tree. This sound card driver uses Samsung I2S controller as CPU + and platform DAI. + endif #SND_SOC_SAMSUNG diff --git a/sound/soc/samsung/Makefile b/sound/soc/samsung/Makefile index 398e843f388c..0dad88fdb1a8 100644 --- a/sound/soc/samsung/Makefile +++ b/sound/soc/samsung/Makefile @@ -43,6 +43,7 @@ snd-soc-arndale-objs := arndale.o snd-soc-tm2-wm5110-objs := tm2_wm5110.o snd-soc-aries-wm8994-objs := aries_wm8994.o snd-soc-midas-wm1811-objs := midas_wm1811.o +snd-soc-fsd-objs := fsd-card.o obj-$(CONFIG_SND_SOC_SAMSUNG_JIVE_WM8750) += snd-soc-jive-wm8750.o obj-$(CONFIG_SND_SOC_SAMSUNG_NEO1973_WM8753) += snd-soc-neo1973-wm8753.o @@ -68,3 +69,4 @@ obj-$(CONFIG_SND_SOC_ARNDALE) += snd-soc-arndale.o obj-$(CONFIG_SND_SOC_SAMSUNG_TM2_WM5110) += snd-soc-tm2-wm5110.o obj-$(CONFIG_SND_SOC_SAMSUNG_ARIES_WM8994) += snd-soc-aries-wm8994.o obj-$(CONFIG_SND_SOC_SAMSUNG_MIDAS_WM1811) += snd-soc-midas-wm1811.o +obj-$(CONFIG_SND_SOC_TESLA_FSD) += snd-soc-fsd.o diff --git a/sound/soc/samsung/fsd-card.c b/sound/soc/samsung/fsd-card.c new file mode 100644 index 000000000000..806a4d3b99fd --- /dev/null +++ b/sound/soc/samsung/fsd-card.c @@ -0,0 +1,349 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * ALSA SoC Audio Layer - FSD Soundcard driver + * + * Copyright (c) 2022 Samsung Electronics Co. Ltd. + * Padmanabhan Rajanbabu + */ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "i2s.h" +#include "i2s-regs.h" + +#define FSD_PREFIX "tesla," +#define FSD_DAI_SRC_PCLK 3 +#define FSD_DAI_RFS_192 192 +#define FSD_DAI_BFS_48 48 +#define FSD_DAI_BFS_96 96 +#define FSD_DAI_BFS_192 192 + +struct fsd_card_priv { + struct snd_soc_card card; + struct snd_soc_dai_link *dai_link; + u32 tdm_slots; + u32 tdm_slot_width; +}; + +static unsigned int fsd_card_get_rfs(unsigned int rate) +{ + return FSD_DAI_RFS_192; +} + +static unsigned int fsd_card_get_bfs(unsigned int channels) +{ + switch (channels) { + case 1: + case 2: + return FSD_DAI_BFS_48; + case 3: + case 4: + return FSD_DAI_BFS_96; + case 5: + case 6: + case 7: + case 8: + return FSD_DAI_BFS_192; + default: + return FSD_DAI_BFS_48; + } +} + +static unsigned int fsd_card_get_psr(unsigned int rate) +{ + switch (rate) { + case 8000: return 43; + case 11025: return 31; + case 16000: return 21; + case 22050: return 16; + case 32000: return 11; + case 44100: return 8; + case 48000: return 7; + case 64000: return 5; + case 88200: return 4; + case 96000: return 4; + case 192000: return 2; + default: return 1; + } +} + +static int fsd_card_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_card *card = rtd->card; + struct snd_soc_dai *cpu_dai = asoc_rtd_to_cpu(rtd, 0); + struct snd_soc_dai_link *link = rtd->dai_link; + struct fsd_card_priv *priv = snd_soc_card_get_drvdata(card); + unsigned int rfs, bfs, psr; + int ret = 0, cdclk_dir; + + rfs = fsd_card_get_rfs(params_rate(params)); + bfs = fsd_card_get_bfs(params_channels(params)); + psr = fsd_card_get_psr(params_rate(params)); + + /* Configure the Root Clock Source */ + ret = snd_soc_dai_set_sysclk(cpu_dai, SAMSUNG_I2S_OPCLK, + false, FSD_DAI_SRC_PCLK); + if (ret < 0) { + dev_err(card->dev, "Failed to set OPCLK: %d\n", ret); + goto err; + } + + ret = snd_soc_dai_set_sysclk(cpu_dai, SAMSUNG_I2S_RCLKSRC_0, + false, false); + if (ret < 0) { + dev_err(card->dev, "Failed to set RCLKSRC: %d\n", ret); + goto err; + } + + /* Set CPU DAI configuration */ + ret = snd_soc_dai_set_fmt(cpu_dai, link->dai_fmt); + if (ret < 0) { + dev_err(card->dev, "Failed to set DAIFMT: %d\n", ret); + goto err; + } + + if (link->dai_fmt & SND_SOC_DAIFMT_CBC_CFC) { + cdclk_dir = SND_SOC_CLOCK_OUT; + } else if (link->dai_fmt & SND_SOC_DAIFMT_CBP_CFP) { + cdclk_dir = SND_SOC_CLOCK_IN; + } else { + dev_err(card->dev, "Missing Clock Master information\n"); + goto err; + } + + /* Set Clock Source for CDCLK */ + ret = snd_soc_dai_set_sysclk(cpu_dai, SAMSUNG_I2S_CDCLK, + rfs, cdclk_dir); + if (ret < 0) { + dev_err(card->dev, "Failed to set CDCLK: %d\n", ret); + goto err; + } + + ret = snd_soc_dai_set_clkdiv(cpu_dai, SAMSUNG_I2S_DIV_RCLK, psr); + if (ret < 0) { + dev_err(card->dev, "Failed to set PSR: %d\n", ret); + goto err; + } + + ret = snd_soc_dai_set_clkdiv(cpu_dai, SAMSUNG_I2S_DIV_BCLK, bfs); + if (ret < 0) { + dev_err(card->dev, "Failed to set BCLK: %d\n", ret); + goto err; + } + + if (priv->tdm_slots) { + ret = snd_soc_dai_set_tdm_slot(cpu_dai, false, false, + priv->tdm_slots, priv->tdm_slot_width); + if (ret < 0) { + dev_err(card->dev, + "Failed to configure in TDM mode:%d\n", ret); + goto err; + } + } + +err: + return ret; +} + +static const struct snd_soc_ops fsd_card_ops = { + .hw_params = fsd_card_hw_params, +}; + +static struct fsd_card_priv *fsd_card_parse_of(struct snd_soc_card *card) +{ + struct fsd_card_priv *priv; + struct snd_soc_dai_link *link; + struct device *dev = card->dev; + struct device_node *node = dev->of_node; + struct device_node *np, *cpu_node, *codec_node; + struct snd_soc_dai_link_component *dlc; + int ret, id = 0, num_links; + + ret = snd_soc_of_parse_card_name(card, "model"); + if (ret) { + dev_err(dev, "Error parsing card name: %d\n", ret); + return ERR_PTR(ret); + } + + if (of_property_read_bool(dev->of_node, "widgets")) { + ret = snd_soc_of_parse_audio_simple_widgets(card, "widgets"); + if (ret) + return ERR_PTR(ret); + } + + /* Add DAPM routes to the card */ + if (of_property_read_bool(node, "audio-routing")) { + ret = snd_soc_of_parse_audio_routing(card, "audio-routing"); + if (ret) + return ERR_PTR(ret); + } + + num_links = of_get_child_count(node); + + priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); + if (!priv) + return ERR_PTR(-ENOMEM); + + priv->dai_link = devm_kzalloc(dev, num_links * sizeof(*priv->dai_link), + GFP_KERNEL); + if (!priv->dai_link) + return ERR_PTR(-ENOMEM); + + priv->tdm_slots = 0; + priv->tdm_slot_width = 0; + + snd_soc_of_parse_tdm_slot(node, NULL, NULL, &priv->tdm_slots, + &priv->tdm_slot_width); + + link = priv->dai_link; + + for_each_child_of_node(node, np) { + dlc = devm_kzalloc(dev, 2 * sizeof(*dlc), GFP_KERNEL); + if (!dlc) + return ERR_PTR(-ENOMEM); + + link->id = id; + link->cpus = &dlc[0]; + link->platforms = &dlc[1]; + link->num_cpus = 1; + link->num_codecs = 1; + link->num_platforms = 1; + + cpu_node = of_get_child_by_name(np, "cpu"); + if (!cpu_node) { + dev_err(dev, "Missing CPU/Codec node\n"); + ret = -EINVAL; + goto err_cpu_node; + } + + ret = snd_soc_of_get_dai_link_cpus(dev, cpu_node, link); + if (ret < 0) { + dev_err(dev, "Error Parsing CPU DAI name\n"); + goto err_cpu_name; + } + + link->platforms->of_node = link->cpus->of_node; + + codec_node = of_get_child_by_name(np, "codec"); + if (codec_node) { + ret = snd_soc_of_get_dai_link_codecs(dev, codec_node, + link); + if (ret < 0) { + dev_err(dev, "Error Parsing Codec DAI name\n"); + goto err_codec_name; + } + } else { + dlc = devm_kzalloc(dev, sizeof(*dlc), GFP_KERNEL); + if (!dlc) { + ret = -ENOMEM; + goto err_cpu_name; + } + + link->codecs = dlc; + + link->codecs->dai_name = "snd-soc-dummy-dai"; + link->codecs->name = "snd-soc-dummy"; + link->dynamic = 1; + + snd_soc_dai_link_set_capabilities(link); + link->ignore_suspend = 1; + link->nonatomic = 1; + } + + ret = asoc_simple_parse_daifmt(dev, np, codec_node, + FSD_PREFIX, &link->dai_fmt); + if (ret) + link->dai_fmt = SND_SOC_DAIFMT_NB_NF | + SND_SOC_DAIFMT_CBC_CFC | + SND_SOC_DAIFMT_I2S; + + ret = of_property_read_string(np, "link-name", &link->name); + if (ret) { + dev_err(card->dev, "Error Parsing link name\n"); + goto err_codec_name; + } + + link->stream_name = link->name; + link->ops = &fsd_card_ops; + + link++; + id++; + + of_node_put(cpu_node); + of_node_put(codec_node); + } + + card->dai_link = priv->dai_link; + card->num_links = num_links; + + return priv; + +err_codec_name: + of_node_put(codec_node); +err_cpu_name: + of_node_put(cpu_node); +err_cpu_node: + of_node_put(np); + return ERR_PTR(ret); +} + +static int fsd_platform_probe(struct platform_device *pdev) +{ + struct device *dev = &pdev->dev; + struct snd_soc_card *card; + struct fsd_card_priv *fsd_priv; + + card = devm_kzalloc(dev, sizeof(*card), GFP_KERNEL); + if (!card) + return -ENOMEM; + + card->dev = dev; + fsd_priv = fsd_card_parse_of(card); + + if (IS_ERR(fsd_priv)) { + dev_err(&pdev->dev, "Error Parsing DAI Link: %ld\n", + PTR_ERR(fsd_priv)); + return PTR_ERR(fsd_priv); + } + + snd_soc_card_set_drvdata(card, fsd_priv); + + return devm_snd_soc_register_card(&pdev->dev, card); +} + +static const struct of_device_id fsd_device_id[] = { + { .compatible = "tesla,fsd-card" }, + {}, +}; +MODULE_DEVICE_TABLE(of, fsd_device_id); + +static struct platform_driver fsd_platform_driver = { + .driver = { + .name = "fsd-card", + .of_match_table = of_match_ptr(fsd_device_id), + }, + .probe = fsd_platform_probe, +}; +module_platform_driver(fsd_platform_driver); + +MODULE_AUTHOR("Padmanabhan Rajanbabu "); +MODULE_DESCRIPTION("FSD ASoC Soundcard Driver"); +MODULE_LICENSE("GPL"); From patchwork Fri Oct 14 10:21:50 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Padmanabhan Rajanbabu X-Patchwork-Id: 616663 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 44954C433FE for ; Fri, 14 Oct 2022 11:10:58 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229908AbiJNLK4 (ORCPT ); Fri, 14 Oct 2022 07:10:56 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39580 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229776AbiJNLKh (ORCPT ); Fri, 14 Oct 2022 07:10:37 -0400 Received: from mailout4.samsung.com (mailout4.samsung.com [203.254.224.34]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EA149E6F6F for ; Fri, 14 Oct 2022 04:10:32 -0700 (PDT) Received: from epcas5p2.samsung.com (unknown [182.195.41.40]) by mailout4.samsung.com (KnoxPortal) with ESMTP id 20221014111031epoutp048e23568dc0ff4ea2a266258d0e76f810~d6wIN_YCK0817908179epoutp04w for ; Fri, 14 Oct 2022 11:10:31 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout4.samsung.com 20221014111031epoutp048e23568dc0ff4ea2a266258d0e76f810~d6wIN_YCK0817908179epoutp04w DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1665745831; bh=Zbx76mlzHBJ+S/AAz4sVRGbKx8JIYIBvPvxtvlSsvBk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=CqWW08GRSZ+HMULqxhlPtB0aZheCBxHNsceS021v/pi6wIdAWSv0fzn+UH0ylYXeY eTNfz68Xz/bjKT1zYonKMLmc1aNkoAU/FcjY1fmKnpKb3tH55GaG6T7X/S1HkXY4lV b9TN9848kNy/6Nsz+N2Jrdlg3+JhSMjUd0di/3ss= Received: from epsnrtp4.localdomain (unknown [182.195.42.165]) by epcas5p1.samsung.com (KnoxPortal) with ESMTP id 20221014111030epcas5p13c3443954d01d1f884580c2a7b9071ff~d6wHXc6LT1571915719epcas5p1T; Fri, 14 Oct 2022 11:10:30 +0000 (GMT) Received: from epsmges5p3new.samsung.com (unknown [182.195.38.182]) by epsnrtp4.localdomain (Postfix) with ESMTP id 4MpkFb02Npz4x9Pq; Fri, 14 Oct 2022 11:10:27 +0000 (GMT) Received: from epcas5p1.samsung.com ( [182.195.41.39]) by epsmges5p3new.samsung.com (Symantec Messaging Gateway) with SMTP id 98.4E.56352.2A349436; Fri, 14 Oct 2022 20:10:26 +0900 (KST) Received: from epsmtrp2.samsung.com (unknown [182.195.40.14]) by epcas5p3.samsung.com (KnoxPortal) with ESMTPA id 20221014104911epcas5p394100ff6ed53be32c4d64c7e23e48833~d6dglrHlO0568205682epcas5p30; Fri, 14 Oct 2022 10:49:11 +0000 (GMT) Received: from epsmgms1p2.samsung.com (unknown [182.195.42.42]) by epsmtrp2.samsung.com (KnoxPortal) with ESMTP id 20221014104911epsmtrp2b379d1c4e5d136384898960bb0364c24~d6dgkyXTs0248602486epsmtrp2I; Fri, 14 Oct 2022 10:49:11 +0000 (GMT) X-AuditID: b6c32a4b-383ff7000001dc20-53-634943a26bdf Received: from epsmtip1.samsung.com ( [182.195.34.30]) by epsmgms1p2.samsung.com (Symantec Messaging Gateway) with SMTP id FD.2C.18644.7AE39436; Fri, 14 Oct 2022 19:49:11 +0900 (KST) Received: from cheetah.sa.corp.samsungelectronics.net (unknown [107.109.115.53]) by epsmtip1.samsung.com (KnoxPortal) with ESMTPA id 20221014104909epsmtip13267170eacab96b4dd5fca0afa5e559d~d6deZpfIO0142901429epsmtip1X; Fri, 14 Oct 2022 10:49:09 +0000 (GMT) From: Padmanabhan Rajanbabu To: lgirdwood@gmail.com, broonie@kernel.org, robh+dt@kernel.org, krzysztof.kozlowski+dt@linaro.org, s.nawrocki@samsung.com, perex@perex.cz, tiwai@suse.com, pankaj.dubey@samsung.com, alim.akhtar@samsung.com, rcsekar@samsung.com, aswani.reddy@samsung.com Cc: alsa-devel@alsa-project.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-samsung-soc@vger.kernel.org, Padmanabhan Rajanbabu Subject: [PATCH 5/6] arm64: dts: fsd: Add I2S DAI node for Tesla FSD Date: Fri, 14 Oct 2022 15:51:50 +0530 Message-Id: <20221014102151.108539-6-p.rajanbabu@samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20221014102151.108539-1-p.rajanbabu@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA0WSfUwbdRjH87u214Ok5Cx7+VmVdaebrgvQjhaPQZkLZDmGGCbJ4jZjd7YX wJZr7RXH/MMB8j5lEOncat10akc65aUDxCK4tAgEFYqFCep0RTKlViIyR3wbtrTof5/n+X2/ eV5+D8YTv4FKsFLWwphZ2kCg8fw+766Hky/l5Gnl7V8oyZsX+lByesqDkJ6rvULSGlhAyYvD EwKy+acAj7wz3YCQfrcdJc9NDiHkp91F5KXe20Ky0X1GQNp8/QKydnBYSHpD9QKya/UD8BhO da1Uo9RHthtCyuVsRKlvr3+MUkO/OFCquccJqM6eGT614koqxI7qs0oYWseYpQyrNepK2WI1 kV+kydGo0uWKZEUG+SghZekyRk3kPl6YfKDUEJ6AkL5AG8rDqUKa44jU7CyzsdzCSEuMnEVN MCadwaQ0pXB0GVfOFqewjGWvQi7fowoLj+tLFt2v8U1VkorLn1jRSlC3uQnEYRBXwqDPAZpA PCbGBwAMXHGh0eA3ABtWBwTRYAXA2RuVgg1L3dL5mMoNYLf/6vqDGK9FYP0r5gijuAo67VXr 7k14NQLrQq38SMDDuwH8bCSANAEMS8RzYceAOmLg4zug9+waiLAIV8PaFiuIVtsGr3Rd40U4 Ds+GP9ZUx7p4G4PBNUWUc+Fd2100yokwONojjLIEriwNxvJGeHb55RhXwLrlLiTK++C1aTs/ 0g4P3wU73anR9APQOt6xLuHhCfDVvxZichHsv7DBO2DnZVeszfvg0FeDMabgm30OYXRBrQDO jX0vaAFJtv9LvAWAE9zLmLiyYoZTmdJY5sR/v6Y1lrnA+pXK8vvB/M1fUzwAwYAHQIxHbBL9 TORpxSIdffJFxmzUmMsNDOcBqvD+WnmSzVpj+MxZi0ahzJAr09PTlRlp6Qpiq+idczKtGC+m LYyeYUyMecOHYHGSSgTk2bPkD1WpyWX/U/3L+afYlhrb7q2OZt/+AWvneFoByBK0HZFdzBzp nU/4s/pp62LOYotGMZKxRZx95JlQUmbymHGur83nz45T8kYFswXe/V9LmPuZP17attZ40Lhn 5szhmsQFdah96lBB2unU69gTFd3k7OTO0KFC/fyHx9cSmjsm4pW3l1qknGj3TIP2G2bf67nZ efGB4A9tvr05q9+9j/+ecFj7nmS7vbFXs2XqzghYoYap7fm3/LXn/zE977hn55yhBqV74k8f O3XwEecxW+aDJyY7h299fpLDn/NO4PXv+sZ6iaPtWs/ck+NFSl2hbA1+OTEkG/s7oH/WMhok +FwJrZDxzBz9L2ctMB8uBAAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrILMWRmVeSWpSXmKPExsWy7bCSnO5yO89kg1nNqhYP5m1js7hy8RCT xaHNW9ktpj58wmYx/8g5Vou+Fw+ZLb5d6WCyuLxrDpvFjPP7mCyObgy2WLT1C7tF565+VotZ F3awWrTuPcJucfhNO6vFhu9rGR0EPDZ8bmLz2DnrLrvHplWdbB53ru1h89j3dhmbR9+WVYwe 67dcZfH4vEkugCOKyyYlNSezLLVI3y6BK+PlrsksBY1SFcv3T2VrYGwT7WLk5JAQMJFoezeT DcQWEtjBKHHmsS1EXFpiev8eNghbWGLlv+fsXYxcQDXNTBIzLyxjBEmwCZhKrJrTyAqSEBGY wCRx8t0xFpAEs8BWRompn426GDk4hAVcJNbtBhvKIqAqcXjaf7BeXgFbidYJUxkhFshLrN5w gBnE5hSwk3je0sQKcZCtxPPz7xgnMPItYGRYxSiZWlCcm55bbFhglJdarlecmFtcmpeul5yf u4kRHOpaWjsY96z6oHeIkYmD8RCjBAezkgjvayXPZCHelMTKqtSi/Pii0pzU4kOM0hwsSuK8 F7pOxgsJpCeWpGanphakFsFkmTg4pRqYzDY0v9HXWrtapvfgLcY7Gu3LubtLop3+Gt9/4XGs aeKfk268j7QW2zI++dhX3X/N17iVsYBJ3Kj99F7XhTKr7yvu7uU44r+oP+hiZs6B/TP3nZHb xmjacmlSm/2P6t2Fq7Yx1zI9DXN7fWp36oOaKzHtcplX+Z9xz5xdHTkvWFT1pRjzQya22gOr NF85fptjZiiYlJCb/2WRd8tmxedCJVLWrhJxpxbHlSkLWfax7l7WvvGvXbj//0PmoqxOs9eX ++W1TNsb8DOpyCp8wwXRyQs+cK21Wy+2a0vTYR1F/kPhxdrrS+qd3vDPv1ShV1amkLfpztmf uQyPGuY93cRTI+2pJ/7j5oIv9mv/B/oqsRRnJBpqMRcVJwIAi4U8quQCAAA= X-CMS-MailID: 20221014104911epcas5p394100ff6ed53be32c4d64c7e23e48833 X-Msg-Generator: CA X-Sendblock-Type: REQ_APPROVE CMS-TYPE: 105P DLP-Filter: Pass X-CFilter-Loop: Reflected X-CMS-RootMailID: 20221014104911epcas5p394100ff6ed53be32c4d64c7e23e48833 References: <20221014102151.108539-1-p.rajanbabu@samsung.com> Precedence: bulk List-ID: X-Mailing-List: linux-samsung-soc@vger.kernel.org Add device tree node for I2S0 and I2S1 CPU DAI instances for Tesla FSD board Signed-off-by: Padmanabhan Rajanbabu --- arch/arm64/boot/dts/tesla/fsd-evb.dts | 8 +++++ arch/arm64/boot/dts/tesla/fsd-pinctrl.dtsi | 14 ++++++++ arch/arm64/boot/dts/tesla/fsd.dtsi | 38 ++++++++++++++++++++++ 3 files changed, 60 insertions(+) diff --git a/arch/arm64/boot/dts/tesla/fsd-evb.dts b/arch/arm64/boot/dts/tesla/fsd-evb.dts index 1db6ddf03f01..c0a4509499ab 100644 --- a/arch/arm64/boot/dts/tesla/fsd-evb.dts +++ b/arch/arm64/boot/dts/tesla/fsd-evb.dts @@ -41,3 +41,11 @@ &ufs { status = "okay"; }; + +&tdm_0 { + status = "okay"; +}; + +&tdm_1 { + status = "okay"; +}; diff --git a/arch/arm64/boot/dts/tesla/fsd-pinctrl.dtsi b/arch/arm64/boot/dts/tesla/fsd-pinctrl.dtsi index e3852c946352..ff6f5d4b16dd 100644 --- a/arch/arm64/boot/dts/tesla/fsd-pinctrl.dtsi +++ b/arch/arm64/boot/dts/tesla/fsd-pinctrl.dtsi @@ -339,6 +339,20 @@ samsung,pin-pud = ; samsung,pin-drv = ; }; + + i2s0_bus: i2s0-bus { + samsung,pins = "gpd1-0", "gpd1-1", "gpd1-2", "gpd1-3", "gpd1-4"; + samsung,pin-function = ; + samsung,pin-pud = ; + samsung,pin-drv = ; + }; + + i2s1_bus: i2s1-bus { + samsung,pins = "gpd2-0", "gpd2-1", "gpd2-2", "gpd2-3", "gpd2-4"; + samsung,pin-function = ; + samsung,pin-pud = ; + samsung,pin-drv = ; + }; }; &pinctrl_pmu { diff --git a/arch/arm64/boot/dts/tesla/fsd.dtsi b/arch/arm64/boot/dts/tesla/fsd.dtsi index f35bc5a288c2..5decad45a1b6 100644 --- a/arch/arm64/boot/dts/tesla/fsd.dtsi +++ b/arch/arm64/boot/dts/tesla/fsd.dtsi @@ -32,6 +32,8 @@ spi0 = &spi_0; spi1 = &spi_1; spi2 = &spi_2; + tdm0 = &tdm_0; + tdm1 = &tdm_1; }; cpus { @@ -809,6 +811,42 @@ status = "disabled"; }; + tdm_0: tdm@140e0000 { + compatible = "samsung,exynos7-i2s"; + reg = <0x0 0x140E0000 0x0 0x100>; + interrupts = ; + dmas = <&pdma1 14>, <&pdma1 13>, <&pdma1 12>; + dma-names = "tx", "rx", "tx-sec"; + #clock-cells = <1>; + #sound-dai-cells = <1>; + clocks = <&clock_peric PERIC_HCLK_TDM0>, + <&clock_peric PERIC_HCLK_TDM0>, + <&clock_peric PERIC_PCLK_TDM0>; + clock-names = "i2s_opclk0", "i2s_opclk1", "iis"; + pinctrl-names = "default"; + pinctrl-0 = <&i2s0_bus>; + samsung,sec-dai-id = <0>; + status = "disabled"; + }; + + tdm_1: tdm@140f0000 { + compatible = "samsung,exynos7-i2s"; + reg = <0x0 0x140F0000 0x0 0x100>; + interrupts = ; + dmas = <&pdma1 17>, <&pdma1 16>, <&pdma1 15>; + dma-names = "tx", "rx", "tx-sec"; + #clock-cells = <1>; + #sound-dai-cells = <1>; + clocks = <&clock_peric PERIC_HCLK_TDM1>, + <&clock_peric PERIC_HCLK_TDM1>, + <&clock_peric PERIC_PCLK_TDM1>; + clock-names = "i2s_opclk0", "i2s_opclk1", "iis"; + pinctrl-names = "default"; + pinctrl-0 = <&i2s1_bus>; + samsung,sec-dai-id = <1>; + status = "disabled"; + }; + timer@10040000 { compatible = "tesla,fsd-mct", "samsung,exynos4210-mct"; reg = <0x0 0x10040000 0x0 0x800>; From patchwork Fri Oct 14 10:21:51 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Padmanabhan Rajanbabu X-Patchwork-Id: 615205 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 4CDC6C433FE for ; Fri, 14 Oct 2022 11:11:15 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229836AbiJNLLO (ORCPT ); Fri, 14 Oct 2022 07:11:14 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38896 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229893AbiJNLKz (ORCPT ); Fri, 14 Oct 2022 07:10:55 -0400 Received: from mailout2.samsung.com (mailout2.samsung.com [203.254.224.25]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0111E1BBEF9 for ; Fri, 14 Oct 2022 04:10:38 -0700 (PDT) Received: from epcas5p3.samsung.com (unknown [182.195.41.41]) by mailout2.samsung.com (KnoxPortal) with ESMTP id 20221014111036epoutp022619e7952a9aaa088702919cab8e33cd~d6wNXgrIQ2100821008epoutp02f for ; Fri, 14 Oct 2022 11:10:36 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.samsung.com 20221014111036epoutp022619e7952a9aaa088702919cab8e33cd~d6wNXgrIQ2100821008epoutp02f DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1665745836; bh=9SsgF3hWBhdrZJfljS7+eBsGPvly+gPDoy3K5tTIdBg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=MziZwkX127b95mJ65tK57IEgMd6yRO/4O7vIf6qiGp0UkJQNE5yTHcM+DWe/S2gGC eGyzElqVDK9bCamL7KJ+u32TJYITSx2UO70XGZRktALjUdIX61EMJwBINyUKOpEUhs nF/FF3LPa7hJRRGPfkvwElApyezT9VBa7b6+38ig= Received: from epsnrtp2.localdomain (unknown [182.195.42.163]) by epcas5p3.samsung.com (KnoxPortal) with ESMTP id 20221014111036epcas5p34c04fce5100e24c348de56cf4482979a~d6wMq8x480410004100epcas5p38; Fri, 14 Oct 2022 11:10:36 +0000 (GMT) Received: from epsmges5p1new.samsung.com (unknown [182.195.38.174]) by epsnrtp2.localdomain (Postfix) with ESMTP id 4MpkFj3t7Hz4x9Pt; Fri, 14 Oct 2022 11:10:33 +0000 (GMT) Received: from epcas5p1.samsung.com ( [182.195.41.39]) by epsmges5p1new.samsung.com (Symantec Messaging Gateway) with SMTP id 80.31.26992.9A349436; Fri, 14 Oct 2022 20:10:33 +0900 (KST) Received: from epsmtrp2.samsung.com (unknown [182.195.40.14]) by epcas5p1.samsung.com (KnoxPortal) with ESMTPA id 20221014104915epcas5p12414b87ea127b2d5bf521556bf841b00~d6dj9NWX52011520115epcas5p1k; Fri, 14 Oct 2022 10:49:15 +0000 (GMT) Received: from epsmgms1p1new.samsung.com (unknown [182.195.42.41]) by epsmtrp2.samsung.com (KnoxPortal) with ESMTP id 20221014104915epsmtrp2f5c4039270bdfe8644ff8738d6f79eac~d6dj8SSSL0248602486epsmtrp2M; Fri, 14 Oct 2022 10:49:15 +0000 (GMT) X-AuditID: b6c32a49-0c7ff70000016970-3a-634943a9ba47 Received: from epsmtip1.samsung.com ( [182.195.34.30]) by epsmgms1p1new.samsung.com (Symantec Messaging Gateway) with SMTP id 6D.56.14392.BAE39436; Fri, 14 Oct 2022 19:49:15 +0900 (KST) Received: from cheetah.sa.corp.samsungelectronics.net (unknown [107.109.115.53]) by epsmtip1.samsung.com (KnoxPortal) with ESMTPA id 20221014104913epsmtip10879994e360ec84ae6bd8e31ffc0b4ea~d6dh1ysO_2736727367epsmtip1j; Fri, 14 Oct 2022 10:49:12 +0000 (GMT) From: Padmanabhan Rajanbabu To: lgirdwood@gmail.com, broonie@kernel.org, robh+dt@kernel.org, krzysztof.kozlowski+dt@linaro.org, s.nawrocki@samsung.com, perex@perex.cz, tiwai@suse.com, pankaj.dubey@samsung.com, alim.akhtar@samsung.com, rcsekar@samsung.com, aswani.reddy@samsung.com Cc: alsa-devel@alsa-project.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-samsung-soc@vger.kernel.org, Padmanabhan Rajanbabu Subject: [PATCH 6/6] arm64: dts: fsd: Add sound card node for Tesla FSD Date: Fri, 14 Oct 2022 15:51:51 +0530 Message-Id: <20221014102151.108539-7-p.rajanbabu@samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20221014102151.108539-1-p.rajanbabu@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprLJsWRmVeSWpSXmKPExsWy7bCmuu5KZ89kg4cdMhYP5m1js7hy8RCT xaHNW9ktpj58wmYx/8g5Vou+Fw+ZLb5d6WCyuLxrDpvFjPP7mCyObgy2WLT1C7tF565+VotZ F3awWrTuPcJucfhNO6vFhu9rGR0EPDZ8bmLz2DnrLrvHplWdbB53ru1h89j3dhmbR9+WVYwe 67dcZfH4vEkugCMq2yYjNTEltUghNS85PyUzL91WyTs43jne1MzAUNfQ0sJcSSEvMTfVVsnF J0DXLTMH6AMlhbLEnFKgUEBicbGSvp1NUX5pSapCRn5xia1SakFKToFJgV5xYm5xaV66Xl5q iZWhgYGRKVBhQnbG1/VHGQse8Vds/XWdsYHxMk8XIyeHhICJxLZpi9m7GLk4hAR2M0q8PLsf yvnEKDFz1ismCOcbo8TXv1+BMhxgLTMPxEPE9zJKfJ73ghXCaWWSWP3zMTvIXDYBU4lVcxrB EiICTUwSbW8msoA4zAIbGSVOH3vIBFIlLOAuMXN7K5jNIqAq0bbqOVg3r4CtxMprm1ghLpSX WL3hADOIzSlgJ/G8pQlsqoTAUg6JZVt2sUAUuUjs63gPZQtLvDq+hR3ClpL4/G4vG4SdLzHt YzOUXSHR9nEDE4RtL3HgyhwWkN+YBTQl1u/ShwjLSkw9tQ6shFmAT6L39xOocl6JHfNgbFWJ 9cs3MULY0hL7ru+Fsj0kPvW0s0CCZSKjxKljD1gmMMrNQlixgJFxFaNkakFxbnpqsWmBYV5q OTzekvNzNzGC06mW5w7Guw8+6B1iZOJgPMQowcGsJML7WskzWYg3JbGyKrUoP76oNCe1+BCj KTAAJzJLiSbnAxN6Xkm8oYmlgYmZmZmJpbGZoZI47+IZWslCAumJJanZqakFqUUwfUwcnFIN TN3yMQfuzH0VIVN+/N3Z0ml7hL/NbElskLr1UGjS0z+PDU8GHK0JV1lfcmuDKMevjfm3jzBf a2MS/HX3y+17Ez4XRW+/rjNRYMGUH3VKntHCDV+dgVko4ri+7OLUVy+t7r0td+W6+EPLeNKj B5yTNivnHPhdvZX35+tL1udCDx4+k3L7zVwRicIXIUwWq6bGL7BRurwwfWb0t0XqNT8tniRK XI/32aKfEqlX17VP2l5rnhmDNG/7jHMTM7rap7A3PjZ5XMm56ey9SUzOjz9dWihb+pZ50Z0A /11cKy4z/sgJWexYxXbOe8fEJzn+TT6HStxmiuvIs6c92ucuxHT4F9fd6ktB04/feTJbeGvU ckElluKMREMt5qLiRAAffWYQMAQAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrELMWRmVeSWpSXmKPExsWy7bCSnO5qO89kg/uHBSwezNvGZnHl4iEm i0Obt7JbTH34hM1i/pFzrBZ9Lx4yW3y70sFkcXnXHDaLGef3MVkc3RhssWjrF3aLzl39rBaz LuxgtWjde4Td4vCbdlaLDd/XMjoIeGz43MTmsXPWXXaPTas62TzuXNvD5rHv7TI2j74tqxg9 1m+5yuLxeZNcAEcUl01Kak5mWWqRvl0CV8bX9UcZCx7xV2z9dZ2xgfEyTxcjB4eEgInEzAPx XYxcHEICuxklLp1pYO5i5ASKS0tM79/DBmELS6z895wdoqiZSWLCmcesIAk2AVOJVXMaWUES IgITmCROvjvGApJgFtjKKDH1sxGILSzgLjFzeysTiM0ioCrRtgpkEicHr4CtxMprm1ghNshL rN5wAGwzp4CdxPOWJrC4EFDN8/PvGCcw8i1gZFjFKJlaUJybnltsWGCYl1quV5yYW1yal66X nJ+7iREc7FqaOxi3r/qgd4iRiYPxEKMEB7OSCO9rJc9kId6UxMqq1KL8+KLSnNTiQ4zSHCxK 4rwXuk7GCwmkJ5akZqemFqQWwWSZODilGpimFXTcfB8msDMkzbuk9qHxyZZj7C0GclzvX/9Y VF5yVHSa+uqSd2eMFfeWmlw1Ygt1EZSRnBTy8DTz39Y/Fj85FNUbbm756JbmFH5/NnPQ5qAj GzICU06ni7ZxqW4/kJh5abfc3sBdsjsXrLdaZS9bfu7Drpg3aaluxW+5WlskZYR+heUrr09w V796el3j8wmvHDI8vz3ZqR7teIVdzo2rPNP4ZZusmnohu6+W5PrM/+XKjvd8rpz4emDv59KP Ny+8e3Hy5rN7LNpVKxvWnecJCxTUZdy4hZOpSazz+5VVvqeMzSpzF3mqBp+dv3fVy6CZ2/V/ y9m1nt4gefV8CfcNZ/lFH9rMbS74XttYp6fEUpyRaKjFXFScCADuAJ825QIAAA== X-CMS-MailID: 20221014104915epcas5p12414b87ea127b2d5bf521556bf841b00 X-Msg-Generator: CA X-Sendblock-Type: REQ_APPROVE CMS-TYPE: 105P DLP-Filter: Pass X-CFilter-Loop: Reflected X-CMS-RootMailID: 20221014104915epcas5p12414b87ea127b2d5bf521556bf841b00 References: <20221014102151.108539-1-p.rajanbabu@samsung.com> Precedence: bulk List-ID: X-Mailing-List: linux-samsung-soc@vger.kernel.org Add device tree node support for sound card on Tesla FSD board Signed-off-by: Padmanabhan Rajanbabu --- arch/arm64/boot/dts/tesla/fsd-evb.dts | 49 +++++++++++++++++++++++++++ arch/arm64/boot/dts/tesla/fsd.dtsi | 3 ++ 2 files changed, 52 insertions(+) diff --git a/arch/arm64/boot/dts/tesla/fsd-evb.dts b/arch/arm64/boot/dts/tesla/fsd-evb.dts index c0a4509499ab..ecaa3c2e3045 100644 --- a/arch/arm64/boot/dts/tesla/fsd-evb.dts +++ b/arch/arm64/boot/dts/tesla/fsd-evb.dts @@ -49,3 +49,52 @@ &tdm_1 { status = "okay"; }; + +&sound { + compatible = "tesla,fsd-sndcard"; + status = "okay"; + model = "fsd-i2s"; + widgets = + "Speaker", "MAIN SPK", + "Microphone", "MAIN MIC"; + + primary-dai-link-0 { + link-name = "fsd-primary-0"; + dai-format = "i2s"; + tesla,bitclock-master = <&tdm_0>; + tesla,frame-master = <&tdm_0>; + cpu { + sound-dai = <&tdm_0 0>; + }; + }; + + secondary-dai-link-0 { + link-name = "fsd-secondary-0"; + dai-format = "i2s"; + tesla,bitclock-master = <&tdm_0>; + tesla,frame-master = <&tdm_0>; + cpu { + sound-dai = <&tdm_0 1>; + }; + }; + + primary-dai-link-1 { + link-name = "fsd-primary-1"; + dai-format = "i2s"; + tesla,bitclock-master = <&tdm_1>; + tesla,frame-master = <&tdm_1>; + cpu { + sound-dai = <&tdm_1 0>; + }; + }; + + secondary-dai-link-1 { + link-name = "fsd-secondary-1"; + dai-format = "i2s"; + tesla,bitclock-master = <&tdm_1>; + tesla,frame-master = <&tdm_1>; + cpu { + sound-dai = <&tdm_1 1>; + }; + }; +}; diff --git a/arch/arm64/boot/dts/tesla/fsd.dtsi b/arch/arm64/boot/dts/tesla/fsd.dtsi index 5decad45a1b6..fc8931f830a7 100644 --- a/arch/arm64/boot/dts/tesla/fsd.dtsi +++ b/arch/arm64/boot/dts/tesla/fsd.dtsi @@ -847,6 +847,9 @@ status = "disabled"; }; + sound: sound { + }; + timer@10040000 { compatible = "tesla,fsd-mct", "samsung,exynos4210-mct"; reg = <0x0 0x10040000 0x0 0x800>;