Message ID | 20230103045613.100309-3-p.rajanbabu@samsung.com |
---|---|
State | New |
Headers |
Return-Path: <linux-kernel-owner@vger.kernel.org> Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:4e01:0:0:0:0:0 with SMTP id p1csp4471682wrt; Mon, 2 Jan 2023 22:42:53 -0800 (PST) X-Google-Smtp-Source: AMrXdXu8Vpr4Xi7MPThX/H6JBvbPwSurHXsRrxTnw9iFgLKtjHZfamBeY5+KP68ECY07b+3mLUOi X-Received: by 2002:a17:90a:f697:b0:226:1dbc:9f89 with SMTP id cl23-20020a17090af69700b002261dbc9f89mr20472114pjb.28.1672728173015; Mon, 02 Jan 2023 22:42:53 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1672728172; cv=none; d=google.com; s=arc-20160816; b=q4qnvr4NXh43Xm6UkFKSczd8gC+H2KxwJhcXPSqwLm15F/O2vtVJv/pHVw4eeVupdn YRRkR7sKi4fa6rK/Qne3vHXOShjRolYvXmG7dGLYKH4IfLI6/Ca3QZzfyvKXJT76ZFaA b5UJaKWwnLEol/U2aKN8KSwGxtZ+d28q62NkGbDSj6IpLfCTOpy3VCl7ntD+GhG1iKD6 ot8HMaBItthZ0lIoTwsUc2ZQu6iSwW8NrXCwjrQOs28YBBic2nhi+gyoHQZ4gsSXBe8w XErMw6DjaHE0uW+8n+BnoIBVTNXTi2zO9PC4jxD9oHtFlPIPISu4qAiXO1Il1VtMXVUb CRUg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:references:dlp-filter:cms-type:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature:dkim-filter; bh=lDIZB7/G+ylzlsRPmC3u4e8TNdJieudptTdrtvjpWQk=; b=ySLFWNK/OyKc2QeXUQcgKLkRD6Pj1JqbkJZ1guoGuO5hr4x73kE78TUaQ3+1BOO/kM bAuvQLTHbnuaXHU0BL0UFqbrkdb8buYiiuA+dLnB/dyfRohNyWJ/O6V+k3zU63158Mq4 lAs91f5NB9wXGWvxjwjI14QTUUE2Nuf7UxetvnBGY6JUMFrLVeCh9WWV5HBOu7CizdyI Uluq/zpkCKdoqt543RqsU3PmqejuXEaULc0ZMoEgA2j8VdyYv//AHI+8xb4AiQnhrAZ6 C8IUIDlrIUBELTO2TLrkcX6S7rxHpYg22Rqo9Sn9NzrkPDvs61sjrOKiDOgVhcYlZSKg QyJw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@samsung.com header.s=mail20170921 header.b=pzRhRwJO; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=samsung.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id pg8-20020a17090b1e0800b00219e38b5071si34852687pjb.14.2023.01.02.22.42.41; Mon, 02 Jan 2023 22:42:52 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@samsung.com header.s=mail20170921 header.b=pzRhRwJO; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=samsung.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236802AbjACGmL (ORCPT <rfc822;tmhikaru@gmail.com> + 99 others); Tue, 3 Jan 2023 01:42:11 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60742 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236812AbjACGlr (ORCPT <rfc822;linux-kernel@vger.kernel.org>); Tue, 3 Jan 2023 01:41:47 -0500 Received: from mailout2.samsung.com (mailout2.samsung.com [203.254.224.25]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 01DBDD2F0 for <linux-kernel@vger.kernel.org>; Mon, 2 Jan 2023 22:41:22 -0800 (PST) Received: from epcas5p3.samsung.com (unknown [182.195.41.41]) by mailout2.samsung.com (KnoxPortal) with ESMTP id 20230103064120epoutp024f3718001ca241576d08ea7019868066~2uVOhw0qk2422324223epoutp02Z for <linux-kernel@vger.kernel.org>; Tue, 3 Jan 2023 06:41:20 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.samsung.com 20230103064120epoutp024f3718001ca241576d08ea7019868066~2uVOhw0qk2422324223epoutp02Z 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 <p.rajanbabu@samsung.com> 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 <p.rajanbabu@samsung.com> 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 Content-Type: text/plain; charset="utf-8" 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> <CGME20230103045655epcas5p1af06a83208190c471e8cd891ef4760f3@epcas5p1.samsung.com> X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_PASS,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: <linux-kernel.vger.kernel.org> X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1753982616527429790?= X-GMAIL-MSGID: =?utf-8?q?1753982616527429790?= |
Series |
ASoC: samsung: fsd: audio support for FSD SoC
|
|
Commit Message
Padmanabhan Rajanbabu
Jan. 3, 2023, 4:56 a.m. UTC
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 <p.rajanbabu@samsung.com>
---
sound/soc/samsung/i2s-regs.h | 1 +
sound/soc/samsung/i2s.c | 57 ++++++++++++++++++++++++++++++++++++
2 files changed, 58 insertions(+)
Comments
Hi Padmanabhan, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on robh/for-next] [also build test WARNING on broonie-sound/for-next linus/master v6.2-rc2 next-20221226] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Padmanabhan-Rajanbabu/ASoC-samsung-i2s-add-support-for-FSD-I2S/20230103-144351 base: https://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git for-next patch link: https://lore.kernel.org/r/20230103045613.100309-3-p.rajanbabu%40samsung.com patch subject: [PATCH v2 2/5] ASoC: samsung: i2s: add support for FSD I2S config: alpha-allyesconfig compiler: alpha-linux-gcc (GCC) 12.1.0 reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # https://github.com/intel-lab-lkp/linux/commit/c42e28fadddea95266f0461d538911d06f0d238b git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review Padmanabhan-Rajanbabu/ASoC-samsung-i2s-add-support-for-FSD-I2S/20230103-144351 git checkout c42e28fadddea95266f0461d538911d06f0d238b # save the config file mkdir build_dir && cp config build_dir/.config COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=alpha olddefconfig COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=alpha SHELL=/bin/bash sound/soc/samsung/ If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot <lkp@intel.com> All warnings (new ones prefixed by >>): >> sound/soc/samsung/i2s.c:1587:6: warning: no previous prototype for 'fsd_i2s_fixup_early' [-Wmissing-prototypes] 1587 | void fsd_i2s_fixup_early(struct snd_pcm_substream *substream, | ^~~~~~~~~~~~~~~~~~~ >> sound/soc/samsung/i2s.c:1600:6: warning: no previous prototype for 'fsd_i2s_fixup_late' [-Wmissing-prototypes] 1600 | void fsd_i2s_fixup_late(struct snd_pcm_substream *substream, | ^~~~~~~~~~~~~~~~~~ vim +/fsd_i2s_fixup_early +1587 sound/soc/samsung/i2s.c 1586 > 1587 void fsd_i2s_fixup_early(struct snd_pcm_substream *substream, 1588 struct snd_soc_dai *dai) 1589 { 1590 struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream); 1591 struct i2s_dai *i2s = to_info(asoc_rtd_to_cpu(rtd, 0)); 1592 struct i2s_dai *other = get_other_dai(i2s); 1593 1594 if (!is_opened(other)) { 1595 i2s_set_sysclk(dai, SAMSUNG_I2S_CDCLK, 192, SND_SOC_CLOCK_OUT); 1596 i2s_set_sysclk(dai, SAMSUNG_I2S_OPCLK, 0, MOD_OPCLK_PCLK); 1597 } 1598 } 1599 > 1600 void fsd_i2s_fixup_late(struct snd_pcm_substream *substream, 1601 struct snd_soc_dai *dai) 1602 { 1603 struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream); 1604 struct samsung_i2s_priv *priv = snd_soc_dai_get_drvdata(dai); 1605 struct i2s_dai *i2s = to_info(asoc_rtd_to_cpu(rtd, 0)); 1606 struct i2s_dai *other = get_other_dai(i2s); 1607 1608 if (!is_opened(other)) 1609 writel(PSR_PSVAL(2) | PSR_PSREN, priv->addr + I2SPSR); 1610 } 1611
Hi Padmanabhan, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on robh/for-next] [also build test WARNING on broonie-sound/for-next linus/master v6.2-rc2 next-20221226] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Padmanabhan-Rajanbabu/ASoC-samsung-i2s-add-support-for-FSD-I2S/20230103-144351 base: https://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git for-next patch link: https://lore.kernel.org/r/20230103045613.100309-3-p.rajanbabu%40samsung.com patch subject: [PATCH v2 2/5] ASoC: samsung: i2s: add support for FSD I2S config: powerpc-buildonly-randconfig-r003-20230102 compiler: clang version 16.0.0 (https://github.com/llvm/llvm-project 7a8cb6cd4e3ff8aaadebff2b9d3ee9e2a326d444) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # install powerpc cross compiling tool for clang build # apt-get install binutils-powerpc-linux-gnu # https://github.com/intel-lab-lkp/linux/commit/c42e28fadddea95266f0461d538911d06f0d238b git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review Padmanabhan-Rajanbabu/ASoC-samsung-i2s-add-support-for-FSD-I2S/20230103-144351 git checkout c42e28fadddea95266f0461d538911d06f0d238b # save the config file mkdir build_dir && cp config build_dir/.config COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=powerpc olddefconfig COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=powerpc SHELL=/bin/bash sound/soc/samsung/ If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot <lkp@intel.com> All warnings (new ones prefixed by >>): In file included from sound/soc/samsung/i2s.c:13: In file included from include/linux/io.h:13: In file included from arch/powerpc/include/asm/io.h:640: arch/powerpc/include/asm/io-defs.h:43:1: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] DEF_PCI_AC_NORET(insb, (unsigned long p, void *b, unsigned long c), ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ arch/powerpc/include/asm/io.h:637:3: note: expanded from macro 'DEF_PCI_AC_NORET' __do_##name al; \ ^~~~~~~~~~~~~~ <scratch space>:53:1: note: expanded from here __do_insb ^ arch/powerpc/include/asm/io.h:577:56: note: expanded from macro '__do_insb' #define __do_insb(p, b, n) readsb((PCI_IO_ADDR)_IO_BASE+(p), (b), (n)) ~~~~~~~~~~~~~~~~~~~~~^ In file included from sound/soc/samsung/i2s.c:13: In file included from include/linux/io.h:13: In file included from arch/powerpc/include/asm/io.h:640: arch/powerpc/include/asm/io-defs.h:45:1: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] DEF_PCI_AC_NORET(insw, (unsigned long p, void *b, unsigned long c), ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ arch/powerpc/include/asm/io.h:637:3: note: expanded from macro 'DEF_PCI_AC_NORET' __do_##name al; \ ^~~~~~~~~~~~~~ <scratch space>:55:1: note: expanded from here __do_insw ^ arch/powerpc/include/asm/io.h:578:56: note: expanded from macro '__do_insw' #define __do_insw(p, b, n) readsw((PCI_IO_ADDR)_IO_BASE+(p), (b), (n)) ~~~~~~~~~~~~~~~~~~~~~^ In file included from sound/soc/samsung/i2s.c:13: In file included from include/linux/io.h:13: In file included from arch/powerpc/include/asm/io.h:640: arch/powerpc/include/asm/io-defs.h:47:1: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] DEF_PCI_AC_NORET(insl, (unsigned long p, void *b, unsigned long c), ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ arch/powerpc/include/asm/io.h:637:3: note: expanded from macro 'DEF_PCI_AC_NORET' __do_##name al; \ ^~~~~~~~~~~~~~ <scratch space>:57:1: note: expanded from here __do_insl ^ arch/powerpc/include/asm/io.h:579:56: note: expanded from macro '__do_insl' #define __do_insl(p, b, n) readsl((PCI_IO_ADDR)_IO_BASE+(p), (b), (n)) ~~~~~~~~~~~~~~~~~~~~~^ In file included from sound/soc/samsung/i2s.c:13: In file included from include/linux/io.h:13: In file included from arch/powerpc/include/asm/io.h:640: arch/powerpc/include/asm/io-defs.h:49:1: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] DEF_PCI_AC_NORET(outsb, (unsigned long p, const void *b, unsigned long c), ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ arch/powerpc/include/asm/io.h:637:3: note: expanded from macro 'DEF_PCI_AC_NORET' __do_##name al; \ ^~~~~~~~~~~~~~ <scratch space>:59:1: note: expanded from here __do_outsb ^ arch/powerpc/include/asm/io.h:580:58: note: expanded from macro '__do_outsb' #define __do_outsb(p, b, n) writesb((PCI_IO_ADDR)_IO_BASE+(p),(b),(n)) ~~~~~~~~~~~~~~~~~~~~~^ In file included from sound/soc/samsung/i2s.c:13: In file included from include/linux/io.h:13: In file included from arch/powerpc/include/asm/io.h:640: arch/powerpc/include/asm/io-defs.h:51:1: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] DEF_PCI_AC_NORET(outsw, (unsigned long p, const void *b, unsigned long c), ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ arch/powerpc/include/asm/io.h:637:3: note: expanded from macro 'DEF_PCI_AC_NORET' __do_##name al; \ ^~~~~~~~~~~~~~ <scratch space>:61:1: note: expanded from here __do_outsw ^ arch/powerpc/include/asm/io.h:581:58: note: expanded from macro '__do_outsw' #define __do_outsw(p, b, n) writesw((PCI_IO_ADDR)_IO_BASE+(p),(b),(n)) ~~~~~~~~~~~~~~~~~~~~~^ In file included from sound/soc/samsung/i2s.c:13: In file included from include/linux/io.h:13: In file included from arch/powerpc/include/asm/io.h:640: arch/powerpc/include/asm/io-defs.h:53:1: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] DEF_PCI_AC_NORET(outsl, (unsigned long p, const void *b, unsigned long c), ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ arch/powerpc/include/asm/io.h:637:3: note: expanded from macro 'DEF_PCI_AC_NORET' __do_##name al; \ ^~~~~~~~~~~~~~ <scratch space>:63:1: note: expanded from here __do_outsl ^ arch/powerpc/include/asm/io.h:582:58: note: expanded from macro '__do_outsl' #define __do_outsl(p, b, n) writesl((PCI_IO_ADDR)_IO_BASE+(p),(b),(n)) ~~~~~~~~~~~~~~~~~~~~~^ >> sound/soc/samsung/i2s.c:1587:6: warning: no previous prototype for function 'fsd_i2s_fixup_early' [-Wmissing-prototypes] void fsd_i2s_fixup_early(struct snd_pcm_substream *substream, ^ sound/soc/samsung/i2s.c:1587:1: note: declare 'static' if the function is not intended to be used outside of this translation unit void fsd_i2s_fixup_early(struct snd_pcm_substream *substream, ^ static >> sound/soc/samsung/i2s.c:1600:6: warning: no previous prototype for function 'fsd_i2s_fixup_late' [-Wmissing-prototypes] void fsd_i2s_fixup_late(struct snd_pcm_substream *substream, ^ sound/soc/samsung/i2s.c:1600:1: note: declare 'static' if the function is not intended to be used outside of this translation unit void fsd_i2s_fixup_late(struct snd_pcm_substream *substream, ^ static 8 warnings generated. vim +/fsd_i2s_fixup_early +1587 sound/soc/samsung/i2s.c 1586 > 1587 void fsd_i2s_fixup_early(struct snd_pcm_substream *substream, 1588 struct snd_soc_dai *dai) 1589 { 1590 struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream); 1591 struct i2s_dai *i2s = to_info(asoc_rtd_to_cpu(rtd, 0)); 1592 struct i2s_dai *other = get_other_dai(i2s); 1593 1594 if (!is_opened(other)) { 1595 i2s_set_sysclk(dai, SAMSUNG_I2S_CDCLK, 192, SND_SOC_CLOCK_OUT); 1596 i2s_set_sysclk(dai, SAMSUNG_I2S_OPCLK, 0, MOD_OPCLK_PCLK); 1597 } 1598 } 1599 > 1600 void fsd_i2s_fixup_late(struct snd_pcm_substream *substream, 1601 struct snd_soc_dai *dai) 1602 { 1603 struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream); 1604 struct samsung_i2s_priv *priv = snd_soc_dai_get_drvdata(dai); 1605 struct i2s_dai *i2s = to_info(asoc_rtd_to_cpu(rtd, 0)); 1606 struct i2s_dai *other = get_other_dai(i2s); 1607 1608 if (!is_opened(other)) 1609 writel(PSR_PSVAL(2) | PSR_PSREN, priv->addr + I2SPSR); 1610 } 1611
On 03/01/2023 05:56, Padmanabhan Rajanbabu wrote: > 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 <p.rajanbabu@samsung.com> > --- > 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; > } > Except several warnings this patch generates, this is a bit surprising: > + spin_unlock_irqrestore(&priv->lock, flags); You have critical section which you now break into two. You cannot do this usually. How the synchronization is now kept? > + > + if (priv->fixup_late) > + priv->fixup_late(substream, dai); > + > + spin_lock_irqsave(&priv->lock, flags); > + > if (capture) > i2s_rxctrl(i2s, 1); > else Best regards, Krzysztof
On Tue, Jan 03, 2023 at 10:26:10AM +0530, Padmanabhan Rajanbabu wrote: > +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); > + } > +} This looks like we're just hard coding to 192kHz?
> -----Original Message----- > From: Krzysztof Kozlowski [mailto:krzysztof.kozlowski@linaro.org] > Sent: 03 January 2023 04:39 PM > To: Padmanabhan Rajanbabu <p.rajanbabu@samsung.com>; > 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 > Subject: Re: [PATCH v2 2/5] ASoC: samsung: i2s: add support for FSD I2S > > On 03/01/2023 05:56, Padmanabhan Rajanbabu wrote: > > 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 <p.rajanbabu@samsung.com> > > --- > > 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; > > } > > > > Except several warnings this patch generates, this is a bit surprising: > > > + spin_unlock_irqrestore(&priv->lock, flags); > > You have critical section which you now break into two. You cannot do this > usually. How the synchronization is now kept? > The actual reason behind breaking the critical section is to allow the use of already existing functions related to configuration of CDCLK and OPCLK source. Based on the review comments from previous patch-set related to the actual need of custom sound card driver, we did migrate to simple-card, where Exynos specific configurations like RCLKSRC selection, OPCLK and CDCLK configuration is not being handled by the simple-card. To overcome this scenario, fixups has been added during i2s_trigger to let Exynos users to configure the Exynos I2S specific dividers and mux. Rather than re-implementing the routines (or) configurations already Available in the driver, the fixup functions can call the i2s_set_sysclk and similar functions directly (which also takes the spin lock). But we noticed that fixup_late implemented for FSD may not require releasing of spinlock as it involves PSR configuration and will not cause any harm if it is still kept inside the existing critical section only. I'll update the patch to keep the fixup_late inside critical section and will post the same in the next patch set. > > + > > + if (priv->fixup_late) > > + priv->fixup_late(substream, dai); > > + > > + spin_lock_irqsave(&priv->lock, flags); > > + > > if (capture) > > i2s_rxctrl(i2s, 1); > > else > > Best regards, > Krzysztof Thanks, Padmanabhan R.
> -----Original Message----- > From: Mark Brown [mailto:broonie@kernel.org] > Sent: 03 January 2023 11:39 PM > To: Padmanabhan Rajanbabu <p.rajanbabu@samsung.com> > Cc: lgirdwood@gmail.com; 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; alsa-devel@alsa-project.org; > devicetree@vger.kernel.org; linux-kernel@vger.kernel.org; linux-samsung- > soc@vger.kernel.org > Subject: Re: [PATCH v2 2/5] ASoC: samsung: i2s: add support for FSD I2S > > On Tue, Jan 03, 2023 at 10:26:10AM +0530, Padmanabhan Rajanbabu wrote: > > > +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); > > + } > > +} > > This looks like we're just hard coding to 192kHz? Not actually. The value 192 being passed is for the RFS divider based on which the Root clock source is divided to generate bit-clock and frame-clock in master mode. But, FSD SoC is utilizing the Exynos7-I2S controller in slave mode, where bit-clock and frame-clock is sourced by the codec. Therefore the sampling of data happens with codec clock source and not based on the clock source from RCLK. However, we still need RFS and BFS configured to default value for the proper operation of the controller. The current operation being performed above is to change the Codec clock direction to "out", so that codec will use this clock source to generate bit clock and frame clock from its own PLL. I'll make the changes in the next patch set to pass 0 instead of 192 here, so that RFS and BFS will be configured to default value in config_setup function. Thanks, Padmanabhan R.
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, }, {}, };