From patchwork Tue Jan 3 04:56:10 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Padmanabhan Rajanbabu X-Patchwork-Id: 639000 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 47819C53210 for ; Tue, 3 Jan 2023 06:42:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236729AbjACGmF (ORCPT ); Tue, 3 Jan 2023 01:42:05 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:32806 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236829AbjACGlr (ORCPT ); Tue, 3 Jan 2023 01:41:47 -0500 Received: from mailout1.samsung.com (mailout1.samsung.com [203.254.224.24]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 035B1D2F4 for ; Mon, 2 Jan 2023 22:41:22 -0800 (PST) Received: from epcas5p3.samsung.com (unknown [182.195.41.41]) by mailout1.samsung.com (KnoxPortal) with ESMTP id 20230103064120epoutp01a18cfcc674e1abc288b2fa61ae949bbb~2uVOiA-vk1143211432epoutp01B for ; Tue, 3 Jan 2023 06:41:20 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.samsung.com 20230103064120epoutp01a18cfcc674e1abc288b2fa61ae949bbb~2uVOiA-vk1143211432epoutp01B DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1672728080; bh=lDIZB7/G+ylzlsRPmC3u4e8TNdJieudptTdrtvjpWQk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=pzRhRwJOd1h/ZpN4uBQs7/7fcRGF+NS6VDo3cPnD5ZWu76OIWy/RVHkNYpKfkQlLB ekhzEyAzrvuWC7Xi1vjYEmdvqFERkT/TTUJWF0Jqh6gaNWfuoYoi/3Zp+Xe+nz0XLi Yg6yWLezZW/19i5BoNz6aHiAVVNDKt4MDv8ZIsuo= Received: from epsnrtp3.localdomain (unknown [182.195.42.164]) by epcas5p4.samsung.com (KnoxPortal) with ESMTP id 20230103064119epcas5p48e97da88410f6da913b65b4fe0e0c156~2uVN7t3vG1269212692epcas5p40; Tue, 3 Jan 2023 06:41:19 +0000 (GMT) Received: from epsmges5p2new.samsung.com (unknown [182.195.38.182]) by epsnrtp3.localdomain (Postfix) with ESMTP id 4NmNRc72myz4x9Q7; Tue, 3 Jan 2023 06:41:16 +0000 (GMT) Received: from epcas5p2.samsung.com ( [182.195.41.40]) by epsmges5p2new.samsung.com (Symantec Messaging Gateway) with SMTP id 7F.B0.62806.C0EC3B36; Tue, 3 Jan 2023 15:41:16 +0900 (KST) Received: from epsmtrp1.samsung.com (unknown [182.195.40.13]) by epcas5p1.samsung.com (KnoxPortal) with ESMTPA id 20230103045655epcas5p1af06a83208190c471e8cd891ef4760f3~2s6ECyxER2038120381epcas5p1H; Tue, 3 Jan 2023 04:56:55 +0000 (GMT) Received: from epsmgms1p1new.samsung.com (unknown [182.195.42.41]) by epsmtrp1.samsung.com (KnoxPortal) with ESMTP id 20230103045655epsmtrp166d4e24859a7083eaa859af9b27e3f1e~2s6EB09ad0134001340epsmtrp1X; Tue, 3 Jan 2023 04:56:55 +0000 (GMT) X-AuditID: b6c32a4a-ea5fa7000000f556-93-63b3ce0c89a4 Received: from epsmtip2.samsung.com ( [182.195.34.31]) by epsmgms1p1new.samsung.com (Symantec Messaging Gateway) with SMTP id 34.94.02211.795B3B36; Tue, 3 Jan 2023 13:56:55 +0900 (KST) Received: from cheetah.sa.corp.samsungelectronics.net (unknown [107.109.115.53]) by epsmtip2.samsung.com (KnoxPortal) with ESMTPA id 20230103045653epsmtip2a06c8913f72924bd1082a3fdf940f73e~2s6BvY-Oq3211632116epsmtip2R; Tue, 3 Jan 2023 04:56:53 +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 v2 2/5] ASoC: samsung: i2s: add support for FSD I2S Date: Tue, 3 Jan 2023 10:26:10 +0530 Message-Id: <20230103045613.100309-3-p.rajanbabu@samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20230103045613.100309-1-p.rajanbabu@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprNJsWRmVeSWpSXmKPExsWy7bCmhi7Puc3JBj1PLSwezNvGZnHl4iEm i0Obt7JbTH34hM1i/pFzrBZ9Lx4yW3y70sFkcXnXHDaLGef3MVkc3RhssWjrF3aLzl39rBaz LuxgtWjde4Td4vCbdlaLDd/XMjoIeGz43MTmsXPWXXaPTas62TzuXNvD5rHv7TI2j74tqxg9 1m+5yuLxeZNcAEdUtk1GamJKapFCal5yfkpmXrqtkndwvHO8qZmBoa6hpYW5kkJeYm6qrZKL T4CuW2YO0AdKCmWJOaVAoYDE4mIlfTubovzSklSFjPziElul1IKUnAKTAr3ixNzi0rx0vbzU EitDAwMjU6DChOyMP6+/shdsV6mY0HmZtYGxW66LkZNDQsBEom/rNkYQW0hgN6PEzVO5XYxc QPYnRolD3bOZIZxvjBL/Nl1ghOmYuvUCE0RiL6PEpNMTGCGcViaJqz/7WEGq2ARMJVbNaWQF SYgINDFJtL2ZyALiMAtsZJQ4fewhE0iVsICzxP8X29lAbBYBVYnF0y4CxTk4eAVsJc6tUoRY Jy+xesMBZhCbU8BO4k8HxGoJgYUcEv8ftDOC1EsIuEj8WMUBUS8s8er4FnYIW0riZX8blJ0v Me1jMxuEXSHR9nEDE4RtL3HgyhwWkDHMApoS63fpQ4RlJaaeWgdWwizAJ9H7+wlUOa/Ejnkw tqrE+uWboKEiLbHv+l4o20PiR/9mNkigTGSU2DD3K+MERrlZCCsWMDKuYpRMLSjOTU8tNi0w yksth8dacn7uJkZwKtXy2sH48MEHvUOMTByMhxglOJiVRHgnvdiULMSbklhZlVqUH19UmpNa fIjRFBh8E5mlRJPzgck8ryTe0MTSwMTMzMzE0tjMUEmcN3Xr/GQhgfTEktTs1NSC1CKYPiYO TqkGptwJ9wUYovYdizrdtD54ovq8R3M0kx/vCOx11JANjN124OAVwTVxswTbOgQXLGJRPaat unb35SkVF9nFJp8w7O2LbMqvW/NK6OLBJZfCfAI2ptft33bn4O3v95qzvr1eJNTzau3PVpsp jnXKC3nMd574s+UHd+9kmx9cBV7VlwIjj/rq1eUscnI88VNaYNcWpt6c5fsivY2U5+9SmTQ1 evqmAkHem+bbvry7mzXLTNVG48zqbUEXpWaVb+XIEvNm1Lj54GqN3nlZ6XOmqn8Xx56dbyWy zyrU133bqs+6j9pyErRCQ1P1zpcbvAuttPou1Sd84Kr6K6GX4seybJ+xTJ7UoOQUfurm9dU7 PJRWsiuxFGckGmoxFxUnAgCOAe3CLgQAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrILMWRmVeSWpSXmKPExsWy7bCSvO70rZuTDZ5uVLZ4MG8bm8WVi4eY LA5t3spuMfXhEzaL+UfOsVr0vXjIbPHtSgeTxeVdc9gsZpzfx2RxdGOwxaKtX9gtOnf1s1rM urCD1aJ17xF2i8Nv2lktNnxfy+gg4LHhcxObx85Zd9k9Nq3qZPO4c20Pm8e+t8vYPPq2rGL0 WL/lKovH501yARxRXDYpqTmZZalF+nYJXBl/Xn9lL9iuUjGh8zJrA2O3XBcjJ4eEgInE1K0X mLoYuTiEBHYzSjzec4odIiEtMb1/DxuELSyx8t9zsLiQQDOTRNfTHBCbTcBUYtWcRlaQZhGB CUwSJ98dYwFJMAtsZZSY+tkIxBYWcJb4/2I72CAWAVWJxdMuAm3j4OAVsJU4t0oRYr68xOoN B5hBbE4BO4k/HSAHgeyyldje8Il5AiPfAkaGVYySqQXFuem5xYYFhnmp5XrFibnFpXnpesn5 uZsYwaGupbmDcfuqD3qHGJk4GA8xSnAwK4nwTnqxKVmINyWxsiq1KD++qDQntfgQozQHi5I4 74Wuk/FCAumJJanZqakFqUUwWSYOTqkGJj0hRbVpzetY1L/bvfq00Eh4BnuNW2PpzAUX1t7U 9PzPLy3N8nS1o/V3NqHivQZ5z3kYXx14dyOE4UtQgOEtq2SdyQnzlzxr0PipJff/VGdk75sZ TikzXix4uVqD4bF2Z9uth0m51zffmhZz8sjr92KsojP7Cp3fRpfaiZ+PvrBrz6NPnffNtBaa db+XMq7M0fRuUl5yNdFRh1Fz2YboY1v0tnhKRnAyztx7/7w2r0JwRl/k1x0XL2/Wmx4gcsni 1oX6Crv7STnHnW9wb1EUCOnd9/RKc0Vs1deZvxkDomfs2a+YYd5zqve3p0SVd+Q10WsOleUf jvOvvju58tnJoPpf+cqJdZotfl5JnxZoK7EUZyQaajEXFScCAIuqD+/kAgAA X-CMS-MailID: 20230103045655epcas5p1af06a83208190c471e8cd891ef4760f3 X-Msg-Generator: CA X-Sendblock-Type: REQ_APPROVE CMS-TYPE: 105P DLP-Filter: Pass X-CFilter-Loop: Reflected X-CMS-RootMailID: 20230103045655epcas5p1af06a83208190c471e8cd891ef4760f3 References: <20230103045613.100309-1-p.rajanbabu@samsung.com> Precedence: bulk List-ID: X-Mailing-List: linux-samsung-soc@vger.kernel.org Add support for enabling I2S controller on FSD platform. FSD I2S controller is based on Exynos7 I2S controller, supporting 2CH playback/capture in I2S mode and 7.1CH playback/capture in TDM mode. Signed-off-by: Padmanabhan Rajanbabu --- sound/soc/samsung/i2s-regs.h | 1 + sound/soc/samsung/i2s.c | 57 ++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) diff --git a/sound/soc/samsung/i2s-regs.h b/sound/soc/samsung/i2s-regs.h index b4b5d6053503..4444c857d0c0 100644 --- a/sound/soc/samsung/i2s-regs.h +++ b/sound/soc/samsung/i2s-regs.h @@ -132,6 +132,7 @@ #define EXYNOS7_MOD_RCLK_192FS 7 #define PSR_PSREN (1 << 15) +#define PSR_PSVAL(x) (((x - 1) << 8) & 0x3f00) #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 9505200f3d11..dcb5c438cb2f 100644 --- a/sound/soc/samsung/i2s.c +++ b/sound/soc/samsung/i2s.c @@ -50,6 +50,10 @@ struct samsung_i2s_dai_data { u32 quirks; unsigned int pcm_rates; const struct samsung_i2s_variant_regs *i2s_variant_regs; + void (*fixup_early)(struct snd_pcm_substream *substream, + struct snd_soc_dai *dai); + void (*fixup_late)(struct snd_pcm_substream *substream, + struct snd_soc_dai *dai); }; struct i2s_dai { @@ -111,6 +115,10 @@ struct samsung_i2s_priv { u32 suspend_i2spsr; const struct samsung_i2s_variant_regs *variant_regs; + void (*fixup_early)(struct snd_pcm_substream *substream, + struct snd_soc_dai *dai); + void (*fixup_late)(struct snd_pcm_substream *substream, + struct snd_soc_dai *dai); u32 quirks; /* The clock provider's data */ @@ -940,6 +948,10 @@ static int i2s_trigger(struct snd_pcm_substream *substream, case SNDRV_PCM_TRIGGER_RESUME: case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: pm_runtime_get_sync(dai->dev); + + if (priv->fixup_early) + priv->fixup_early(substream, dai); + spin_lock_irqsave(&priv->lock, flags); if (config_setup(i2s)) { @@ -947,6 +959,13 @@ static int i2s_trigger(struct snd_pcm_substream *substream, return -EINVAL; } + spin_unlock_irqrestore(&priv->lock, flags); + + if (priv->fixup_late) + priv->fixup_late(substream, dai); + + spin_lock_irqsave(&priv->lock, flags); + if (capture) i2s_rxctrl(i2s, 1); else @@ -1410,6 +1429,8 @@ static int samsung_i2s_probe(struct platform_device *pdev) if (np) { priv->quirks = i2s_dai_data->quirks; + priv->fixup_early = i2s_dai_data->fixup_early; + priv->fixup_late = i2s_dai_data->fixup_late; } else { if (!i2s_pdata) { dev_err(&pdev->dev, "Missing platform data\n"); @@ -1563,6 +1584,31 @@ static int samsung_i2s_remove(struct platform_device *pdev) return 0; } +void fsd_i2s_fixup_early(struct snd_pcm_substream *substream, + struct snd_soc_dai *dai) +{ + struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream); + struct i2s_dai *i2s = to_info(asoc_rtd_to_cpu(rtd, 0)); + struct i2s_dai *other = get_other_dai(i2s); + + if (!is_opened(other)) { + i2s_set_sysclk(dai, SAMSUNG_I2S_CDCLK, 192, SND_SOC_CLOCK_OUT); + i2s_set_sysclk(dai, SAMSUNG_I2S_OPCLK, 0, MOD_OPCLK_PCLK); + } +} + +void fsd_i2s_fixup_late(struct snd_pcm_substream *substream, + struct snd_soc_dai *dai) +{ + struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream); + struct samsung_i2s_priv *priv = snd_soc_dai_get_drvdata(dai); + struct i2s_dai *i2s = to_info(asoc_rtd_to_cpu(rtd, 0)); + struct i2s_dai *other = get_other_dai(i2s); + + if (!is_opened(other)) + writel(PSR_PSVAL(2) | PSR_PSREN, priv->addr + I2SPSR); +} + static const struct samsung_i2s_variant_regs i2sv3_regs = { .bfs_off = 1, .rfs_off = 3, @@ -1652,6 +1698,14 @@ static const struct samsung_i2s_dai_data i2sv5_dai_type_i2s1 __maybe_unused = { .i2s_variant_regs = &i2sv5_i2s1_regs, }; +static const struct samsung_i2s_dai_data fsd_dai_type __maybe_unused = { + .quirks = QUIRK_SEC_DAI | QUIRK_NEED_RSTCLR | QUIRK_SUPPORTS_TDM, + .pcm_rates = SNDRV_PCM_RATE_8000_192000, + .i2s_variant_regs = &i2sv7_regs, + .fixup_early = fsd_i2s_fixup_early, + .fixup_late = fsd_i2s_fixup_late, +}; + static const struct platform_device_id samsung_i2s_driver_ids[] = { { .name = "samsung-i2s", @@ -1678,6 +1732,9 @@ static const struct of_device_id exynos_i2s_match[] = { }, { .compatible = "samsung,exynos7-i2s1", .data = &i2sv5_dai_type_i2s1, + }, { + .compatible = "tesla,fsd-i2s", + .data = &fsd_dai_type, }, {}, };