From patchwork Fri Jan 13 12:17:46 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Padmanabhan Rajanbabu X-Patchwork-Id: 642483 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 C6241C54EBD for ; Fri, 13 Jan 2023 13:16:52 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240903AbjAMNQs (ORCPT ); Fri, 13 Jan 2023 08:16:48 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47228 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S240277AbjAMNQG (ORCPT ); Fri, 13 Jan 2023 08:16:06 -0500 Received: from mailout4.samsung.com (mailout4.samsung.com [203.254.224.34]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 43A146A0F5 for ; Fri, 13 Jan 2023 05:06:40 -0800 (PST) Received: from epcas5p2.samsung.com (unknown [182.195.41.40]) by mailout4.samsung.com (KnoxPortal) with ESMTP id 20230113130638epoutp04186f312e1ca4598420f428b483b848ed~54Cfuea5_1090210902epoutp04U for ; Fri, 13 Jan 2023 13:06:38 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout4.samsung.com 20230113130638epoutp04186f312e1ca4598420f428b483b848ed~54Cfuea5_1090210902epoutp04U DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1673615198; bh=sBSRBzG0AQsIk4/QpJhOfNlFsSkR8zqwfdpCy/Qu8/4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=QENJE6tJFPXKGmEFq0H0dlD3FoVxHBy6FDw/TlDxo6fMX7mEXRvJWoFaww4rqGpij 5CP12bm3zkyiFdaIMnSigYcHCOVzqOHbqpoETTN7A3yr6XuqXY81eGURn7etP5q09B DtAbhJ7mJlNNu8+PqDm0YeG+HHEzO8Ej/c0vLtCk= Received: from epsnrtp3.localdomain (unknown [182.195.42.164]) by epcas5p3.samsung.com (KnoxPortal) with ESMTP id 20230113130638epcas5p38d2c4653c6e7f8729eac4caa2ca99d6e~54CfMgBUq2978829788epcas5p3r; Fri, 13 Jan 2023 13:06:38 +0000 (GMT) Received: from epsmges5p1new.samsung.com (unknown [182.195.38.179]) by epsnrtp3.localdomain (Postfix) with ESMTP id 4NthWc3lqNz4x9Pr; Fri, 13 Jan 2023 13:06:36 +0000 (GMT) Received: from epcas5p3.samsung.com ( [182.195.41.41]) by epsmges5p1new.samsung.com (Symantec Messaging Gateway) with SMTP id 94.A9.02301.C5751C36; Fri, 13 Jan 2023 22:06:36 +0900 (KST) Received: from epsmtrp2.samsung.com (unknown [182.195.40.14]) by epcas5p4.samsung.com (KnoxPortal) with ESMTPA id 20230113121821epcas5p4ebd116d75f12dafeb09391eb6f7a2646~53YV20UKO1715317153epcas5p4i; Fri, 13 Jan 2023 12:18:21 +0000 (GMT) Received: from epsmgms1p2.samsung.com (unknown [182.195.42.42]) by epsmtrp2.samsung.com (KnoxPortal) with ESMTP id 20230113121821epsmtrp225b0ae2eddb4bdc30719db3424617acc~53YV0o8UZ1441514415epsmtrp2g; Fri, 13 Jan 2023 12:18:21 +0000 (GMT) X-AuditID: b6c32a49-201ff700000108fd-9b-63c1575c5439 Received: from epsmtip2.samsung.com ( [182.195.34.31]) by epsmgms1p2.samsung.com (Symantec Messaging Gateway) with SMTP id 95.65.10542.D0C41C36; Fri, 13 Jan 2023 21:18:21 +0900 (KST) Received: from cheetah.sa.corp.samsungelectronics.net (unknown [107.109.115.53]) by epsmtip2.samsung.com (KnoxPortal) with ESMTPA id 20230113121818epsmtip2961cb8d899e26a39bab35f9968104f19~53YTI7ade0625706257epsmtip2g; Fri, 13 Jan 2023 12:18:18 +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 v3 2/5] ASoC: samsung: i2s: add support for FSD I2S Date: Fri, 13 Jan 2023 17:47:46 +0530 Message-Id: <20230113121749.4657-3-p.rajanbabu@samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20230113121749.4657-1-p.rajanbabu@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA0WSf0xbVRTHve+1r4+56rNs2V0RRpphAgmllbY8GGziiD4yTTAoM2wR38q1 JZS2awsDs+lExwYMujLQ2VR+iEzHwkqhZVB+yMoGIokTV4YuEGlCjFkGAxmdyTZnf4D+97nn fM/Pe0hcYCWEZJHWhAxaViMitnD6xuLjEw8fvKaU1Duj6IXmPoL2Tnsw2tPr4tFNvkWCbrn+ E5eu/9OH037vGYy+5bYR9IWbIxh9w5FLf+16wKOr3WYubf25n0ufGr7Oo8funebS3Q+7wCsU 071WSTAD1nke09NZTTBzt4cIZmTpIsHUOzsBY3fOcJi1npgcMr84XY3YQmSIRVqlrrBIq8oQ Hcgt2F8gV0ikidJUOkUUq2VLUIYo642cxNeKNIEJRLFlrKY0YMphjUZR0t50g67UhGLVOqMp Q4T0hRq9TC82siXGUq1KrEWmNKlE8rI8IHy/WN1lWQT687vL+zrWeSfBUnQNiCAhJYO+v+9w a8AWUkANAtjT9JAXdAiovwAc+q0k7FgD0Gl2cDcjvrlYxw2L3AB66zRh0SkMNt++TwQdBCWH nbZPQmm3UZUYrLpn4QQfOOUAcGrchwVVkdR+uLT8AA8yh4qDk+sLoWg+tQfeb3jMCZfbBS93 jwY0JBlBpcOOiVBLkOog4dk270ZLWfCp93demCPh3QnnBgvh2vIwEWYd/Hz10w0uh1Wr3ViY 98FRr40TzI9T8dDuTgqbo2HTj1dCEpx6DtY9WtyQ82F/8ybHQfu3PSDMUXBkdhgE00CKgecf C8NLMQN4y+fBzoEY6/8VWgHoBDuR3liiQka5XqpFx/77NKWupAeEjjQhux/ML6yIPQAjgQdA Ehdt4w/d+F4p4BeyFR8ig67AUKpBRg+QB9ZnwYXblbrAlWtNBVJZqkSmUChkqckKqWgHH7la lAJKxZpQMUJ6ZNiMw8gI4Uks79f2qDEk6PugqjYmaQXtKDPNrHdMj+tHaxm9beu5tOTsM02t MWNZg21kypzbknntWdv07FfjJyJezS+P031nZhcZObz0VkNCSuJWXnt9y0fuWn/BHylmzlLm 8SPRR80ThxJ6LV3pF/b6X7SvbCcG9vB60+wVX+T9cvWf3cTMCXHmOro8UOm/M1oDFbPTU8nS 05+9+1I12VjLbZ9/WvdD9pTbt0uIP5Pw8U5VRO3k3SN+jobaF8U//II5z3/J1WgtUzZUON5J S53L97fe7JKOE0nuY44rjU9yl997E0D1UcNB8dXetyMnX3eJzz6JP/68fOJLD3IPth9YTTnU 9qijW8QxqllpAm4wsv8CG2Nfny0EAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrELMWRmVeSWpSXmKPExsWy7bCSvC6vz8Fkgy8d2hYP5m1js7hy8RCT xaHNW9ktpj58wmYx/8g5Vou+Fw+ZLb5d6WCyuLxrDpvFjPP7mCyObgy2WLT1C7tF565+VotZ F3awWrTuPcJucfhNO6vFhu9rGR0EPDZ8bmLz2DnrLrvHplWdbB53ru1h89j3dhmbR9+WVYwe 67dcZfH4vEkugCOKyyYlNSezLLVI3y6BK2PtxCeMBZNVKrYt/crewPhWtouRk0NCwERiybJe 1i5GLg4hgR2MEnuXfGaESEhLTO/fwwZhC0us/PecHaKomUmi6epfJpAEm4CpxKo5jWDdIgIT mCROvjvGApJgFtjKKDH1sxGILSzgLPH23RdmEJtFQFXi5NcHYFN5Bawl3k/6wwKxQV5i9YYD QDUcHJwCNhJLj+eChIWASva+fMw0gZFvASPDKkbJ1ILi3PTcYsMCo7zUcr3ixNzi0rx0veT8 3E2M4GDX0trBuGfVB71DjEwcjIcYJTiYlUR49xzdnyzEm5JYWZValB9fVJqTWnyIUZqDRUmc 90LXyXghgfTEktTs1NSC1CKYLBMHp1QDE+tyfT+mn9Ix63ynHFr/uzTFKDPBfHXzEibLqzbr C1f8y/uwh+mj/uVNwZJMmTWMzzS0Ei5LXH22wy5FWiFC8t4do35rHoGdBxmPnj7BcX3GG789 JpKt9zx73VXuZogdtzSxkg+YeMbi1MYTV6Verq5UEog4pX671PF6/d7anODekzs/B224eIVR 67xOcPbjRek/P+xw+JfyMnKmzCTX1Zu4b93W+m+eF/217GdudUi20u2DK4wq5j1ZFV4etrzt 5I51PLlH084WzVj0r+BXodF5noeLjoROm/KZSYslv3/GQos/a9WSb+xcJMWxcafJ8y6JU8ov Jy9bluvPdGWRZux5191CGmItfAkvr846eUyJpTgj0VCLuag4EQDrM9Se5QIAAA== X-CMS-MailID: 20230113121821epcas5p4ebd116d75f12dafeb09391eb6f7a2646 X-Msg-Generator: CA X-Sendblock-Type: REQ_APPROVE CMS-TYPE: 105P DLP-Filter: Pass X-CFilter-Loop: Reflected X-CMS-RootMailID: 20230113121821epcas5p4ebd116d75f12dafeb09391eb6f7a2646 References: <20230113121749.4657-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. Reported-by: kernel test robot Signed-off-by: Padmanabhan Rajanbabu --- sound/soc/samsung/i2s-regs.h | 1 + sound/soc/samsung/i2s.c | 53 ++++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/sound/soc/samsung/i2s-regs.h b/sound/soc/samsung/i2s-regs.h index b4b5d6053503..138e95581979 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..6f96032090de 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,9 @@ static int i2s_trigger(struct snd_pcm_substream *substream, return -EINVAL; } + if (priv->fixup_late) + priv->fixup_late(substream, dai); + if (capture) i2s_rxctrl(i2s, 1); else @@ -1410,6 +1425,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 +1580,31 @@ static int samsung_i2s_remove(struct platform_device *pdev) return 0; } +static 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, 0, SND_SOC_CLOCK_OUT); + i2s_set_sysclk(dai, SAMSUNG_I2S_OPCLK, 0, MOD_OPCLK_PCLK); + } +} + +static 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 +1694,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 +1728,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, }, {}, };