From nobody Thu Apr 2 01:48:15 2026 Received: from DB3PR0202CU003.outbound.protection.outlook.com (mail-northeuropeazon11010032.outbound.protection.outlook.com [52.101.84.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BE5AE372B21; Tue, 10 Mar 2026 10:41:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.84.32 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773139283; cv=fail; b=MKjFAV5wD+Hjw04WzwgNeLxCxnU3b92pElNj3IQKByb1yp1c+a7EVyXhWmwTV5kQ2s9MQawaPuawNYUSRHyf/CIUEg5gLdjO8cRsItIUkHT+hSA8uksiDuggKmc57cvjBW3rSWXWxpLtjbxtHQSnfxy0owcqD7AHNwbUjIdYsiw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773139283; c=relaxed/simple; bh=q4xt6JfAqAoR9fAZl2c2xeiopMIKn1b6a085oQ9EiQo=; h=From:To:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=G0Fkv3Qa2IsJNAm2VUQc2WnS5ju6WXKsjDRoSfFtfRLODCDnlYHW+0Bva3T8APkMiF4Xc/jhVq+6xJp9u10T1ii/4Qj1K6L+7G/3Ifod0N/Moe5IuiPRQhlLhKVG3OWRohNq6CBTupGmquYuSEtwJTdsja08zhcjXRBTA4eWvN4= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=nxbTGjx4; arc=fail smtp.client-ip=52.101.84.32 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="nxbTGjx4" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=F4T0fNGxSeHRrXeOfKrS2I4kkBy3Hel1xFOLCWO7WyyazmA1BCf1OfSJUddy0y2tOuDbdtqmOv4LHsO46GdXOvLkJHObkWGhlmI8HSeMp2/vXED+dqYxWM18GG09gbZ3fstbeVe8U78u5TQlkTdtsmh8zywNpQc/SySg/JrKUG8gSV7QZSogRWZCg26xbESr5xOUGgH9tnG/WAW0UD2Da7NAk+pOi2/0uC0Fsmc8wCeEInfYRGVmqLix/2E2kFDKk+Nm1W8FqW1OBGR+96XWoN9dsmyDJz4IVscfqYQBwDlS3SMVoEyUsP2GiejycOZA/oPeMTJck66M7Xx/8Jm0fw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=bC1g5V1knsd+6TigkKWA7GrUPBXlK08jLmYX1yVGaSo=; b=FGUxo+r+nl4PXWJzFk7rJK2qivaYh6QTwyGJ0P14YcEq4qpnO9p9ffWAZ9kwzvIxTw5fLHETPfEwVPeWGM8ItEqL8mCa6n5Iop6P32OmspgDAxMiiv3/kvb4eMkdjm2NffwfrEGwkaZvqbEHyap89bbmSibvDUx22ABzsQ4DDuKDijEd4xHUOLBuco4uULkkb+R4QktFiZnPXpasZtKZOOULHeZdbvTcW/QoY8mOLIBpVaXLPlqqz1UV/pkWuRDAf+NPoMaJUdyu8WWQ0Oa72pz2ussabtopNUNM6XnO8Sr7sGZT2MW9MnMssz7v3Wz/kbmaluvnYYkJtQ9bX6r8DA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=bC1g5V1knsd+6TigkKWA7GrUPBXlK08jLmYX1yVGaSo=; b=nxbTGjx42mFqL3A1oG5FBDY0roPY8gYI3w6TVHhfBJ2u0MWsF2PFB7Oyx5mtKqXpJyKxDA3ljQkJbMBpqNZxLjYQVGLBLtQSHiPzNvYCDVERme5cV7ogq4Ff0LmF03B/Y3IafYhVdO/75dLtqPsD6GbEEczMtcnv7ib7mUjJzajUOL8A478mP5RDkgN8WC1KVKeXXn8Xd6qZp/Kj3ontsTuBGDxxVEo6JDY/SyCmSxMjhsaL983vFIjo+vXDCQHykD763xk6r3d+fQDpDSW9g8nGAKFZS/WCYDKF5hGIDTIrckDGAvdMCstg4M3Fm5H5ObN6wvg1qrPVZym9NFiXQw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AM0PR04MB7044.eurprd04.prod.outlook.com (2603:10a6:208:191::20) by PA2PR04MB10279.eurprd04.prod.outlook.com (2603:10a6:102:406::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9678.25; Tue, 10 Mar 2026 10:41:20 +0000 Received: from AM0PR04MB7044.eurprd04.prod.outlook.com ([fe80::bab2:d15c:fcf8:ef2b]) by AM0PR04MB7044.eurprd04.prod.outlook.com ([fe80::bab2:d15c:fcf8:ef2b%3]) with mapi id 15.20.9678.024; Tue, 10 Mar 2026 10:41:20 +0000 From: Shengjiu Wang To: shengjiu.wang@gmail.com, Xiubo.Lee@gmail.com, festevam@gmail.com, nicoleotsuka@gmail.com, lgirdwood@gmail.com, broonie@kernel.org, perex@perex.cz, tiwai@suse.com, linux-sound@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org Subject: [PATCH v6 1/3] ASoC: fsl_utils: Add snd_kcontrol functions for specific cases Date: Tue, 10 Mar 2026 18:42:33 +0800 Message-Id: <20260310104235.1234569-2-shengjiu.wang@nxp.com> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20260310104235.1234569-1-shengjiu.wang@nxp.com> References: <20260310104235.1234569-1-shengjiu.wang@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SG2PR02CA0059.apcprd02.prod.outlook.com (2603:1096:4:54::23) To AM0PR04MB7044.eurprd04.prod.outlook.com (2603:10a6:208:191::20) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM0PR04MB7044:EE_|PA2PR04MB10279:EE_ X-MS-Office365-Filtering-Correlation-Id: ac9a8691-2831-4aab-549e-08de7e919121 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|19092799006|52116014|7416014|376014|1800799024|38350700014|921020; X-Microsoft-Antispam-Message-Info: k2q30Jg5xo/un0UdvlFfuelcvHg1nFQM5diPClFr3OsA43s31H8DvV7FoRBFc6Lih2hewNpLjFkdGA9G6LkS8Z5VNRzjTLG9PUwWJiw4V/uMApuSIVVirvD8aFuJhts+UhcqHP+2+mF0CRoknqzkM04jpN8vS1/jC2ys9QUH8ziA7d9qmXOwR8Dhy6NJJ0CDXybRiLzYmCgfLy8xgkJtlnjw34ikodPaXlnzv6jwlNr3WnXNYin4G6ZzUA+GgMQDlAw5JBHJA4ixytkwJ2fMfTjRyVqpf7GQA5r/FtMjlSHxTeFg/wWaMdSP2Gfjongmts6cukPw6K5tvoMnmU3C0jYlEZejnJxZ2Nk5BugUW9GvuKCwC3ckluec/8dvmUZni0wl69CTSWMHHgwyOfMNSsxm7drdJPoznR95Ou2CgIhCJ5BaomvPPBz4nNuvOld5i7LieqYyNaz6a1NUUDdw71o7+rCDpwNXHq50W0R42aCO7xBfpOhBau0YKsMm5cBBH7/UU3bRryfo9vBa9H0uvL6ddk/0tS38MKtpb8d/Qtko1+Bw1fZW8KVfqBvLNi7eVpMh32wNEYgqXQBVCnV+bKlKcj6CXE0g1WYMq/yXuEmTcMyzaZf1p6OZWpJIt1eh+GP7D3YfPM4GI4nOLNXVRcx7BUMZcfoCsGPnwNMQULnG12MRuOsOL510hlrBjAdtPMLjWBl6NK3rWiYOPxhxdbXZDfuLjbDjFtzDXRAmA4N7dUn4CL8jE6+u6JdM3ZJi4vOgeSxbMFI4xF4KJw+JRSKsr4BYSV0iGEm/B0rgDUvMhpwPWcWnbuAjUXiHojYG X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM0PR04MB7044.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(19092799006)(52116014)(7416014)(376014)(1800799024)(38350700014)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?iHYbAJs+wpmc7sawIeSuryapsumU1TPcqfC+13zRLe0fXbUQiOvLKX2j9j9x?= =?us-ascii?Q?hTNweNvMy+MPXbFcxsLxAcV8aM7dORJPieo/UR7eZ2BlJqdspUpO461pZRyx?= =?us-ascii?Q?mZ214qLDUzK8khDt3N00nEWLut7aGW79HBt2bYuDTIjmhuZ8kpO+84kLsAGu?= =?us-ascii?Q?OMClDhXG7/56koHgHea5jp3jvB7rDfdHKTJLryHY0fZVF7bCbMU+31o/JqCb?= =?us-ascii?Q?jb6KqMqWE9q4Bt1cPmF3rolwPPn6bvEJLt29GpodB9WMQahsd96nlKmr1KMa?= =?us-ascii?Q?VJwOCyvxsK69vkTlX0FHAQ9G+TiTbiXUpzJe7ArztImWDPZjorlF8wefDI7w?= =?us-ascii?Q?i3sGswlIzg7NlVnvy9vtrLSAKEDK6K9cQ/sD6lSUmTTe2i1WlPgQZmERWom0?= =?us-ascii?Q?acfXZ2YZPKxg3Si42ENmfWtEVL0mW6oTeE8Hx3UNCbVVnmayj1Xhsn24oQV/?= =?us-ascii?Q?5FV4huaw4t2p3utcmcHdBXd1OdNFhKP5bdwISu5bC17YscgYbc4Xrpr8UcMx?= =?us-ascii?Q?GHFC3f75aYOwyREHHRZdxtTnKVvtfT5N4CLwMU/sfMOTvcReSZLYnxlTQxMF?= =?us-ascii?Q?qldiAZOXyb1IDUvnsyTmjnNSZ+u1JWagLv2dsceBFJiKS1SBO3QBQY1kHWRo?= =?us-ascii?Q?Ve+m2L0C7wyOGzYvxLvIsbflyozXOOXf30KXYnvcLzUWghUMzRzbZPREuJJI?= =?us-ascii?Q?HHyfaYTzoAgwJhkZrfBGW0Muopi+qfJTb8FvMU0mdLHUyEIHJgoeUKVdTNUU?= =?us-ascii?Q?2G4f1TilQJp0h4Qc+qT9N4bp7xv5w2g4l99+CrHkizxNk91JgVdOtZ2ErPgh?= =?us-ascii?Q?tIHpgSpyN6w25V6I3QDkRYd050BTadgjR0yUrXFhC7r8WlvVuDTX9bSmmyru?= =?us-ascii?Q?J5zVwbtF7V6kuJL6kparw8Cepl/kkHeMAZpY5kMy9AJX0ixFD88SNoQVFTZY?= =?us-ascii?Q?Eoo97U8f8BE74TutIUgakVnxzKDwaKe4XA6neAksePYrnSRdjodunm6Ampt6?= =?us-ascii?Q?G204B+7sBEr/IC/zG16fniK7Uftp97s0g12uOlDyaNZ9p/m1rS/RKJb4Nh5o?= =?us-ascii?Q?/VGIwQrqQmkzI9Yxj/E59ecSpKouh8oiVAfEM7VYrNdHaE7bQtq1OShOEtUq?= =?us-ascii?Q?2165n0GSvemW+xZ2b6HrR0Z8GzBGUS3M4p86lHYzc4KYDf+eudn0iPhGdhaQ?= =?us-ascii?Q?LWx3tHai7mg8/mqytpsuwAILj+ja7uQ2YyHoPJBz0Dsz0zZf+WC3pQspeCth?= =?us-ascii?Q?4fD9C+CWiwW2hloCj76QWOw/VdMtAUmxCaR2+sSFr7lpITaYhQQv8Ok7O4/w?= =?us-ascii?Q?ENn207H5h1VmrYr1ms3o2cjwiYsvH1OdWXfPu5+MU0NCAghz9EVKSoYiWDG/?= =?us-ascii?Q?ViH62wmcp2vBL1iRa12fvLDdvK5R9exlkjYaVJF6yEYmFT+iHdwPux1+Fjga?= =?us-ascii?Q?Dx3Q2EmwkXpqP1NBXzlzQUy/0ggfoFZp3K0Uar/CitCE1nXNoGy6nZ8bCKeu?= =?us-ascii?Q?xr82QqBWj43fM9Dw/n/R5OjbQIe8rgmmxMDzoCnMGw7AJM15FpzdJz0iB1A+?= =?us-ascii?Q?b5qyytoots9WQa6KKcaRwyV4nEvGFIYWgmacp7odyhkNk1q+k5neXqH8yRBw?= =?us-ascii?Q?02bKaS0QJ/M1lCnraG+tWE1cL/CFGkCA/kH6d3U5xlWa6RCo7aAnjfOOUBOZ?= =?us-ascii?Q?TlDjZWGubM4MsDJWX9oP+UBDLkJGB70UEu/CM37deah2p01X7zqml53N+PON?= =?us-ascii?Q?SB2VaUckkA=3D=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: ac9a8691-2831-4aab-549e-08de7e919121 X-MS-Exchange-CrossTenant-AuthSource: AM0PR04MB7044.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Mar 2026 10:41:20.5031 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: FB611/HhxzP/8UAlBihJbrSFpAO+57PNyPEFJ3NDuh/bouvd8b6thkz/Pg2dMkjfbAHGzLyvLh1JETJDPo7FoA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA2PR04MB10279 Content-Type: text/plain; charset="utf-8" There are some registers which are volatile, at pm runtime suspend state, the regmap cache only is enabled, regmap will return -EBUSY when trying to access these registers. static int _regmap_read(struct regmap *map, unsigned int reg, unsigned int *val) { int ret; void *context =3D _regmap_map_get_context(map); if (!map->cache_bypass) { ret =3D regcache_read(map, reg, val); if (ret =3D=3D 0) return 0; } if (map->cache_only) return -EBUSY; if (!regmap_readable(map, reg)) return -EIO; When exporting these registers by amixer interface to user space, there will be -EBUSY errors in mixer-test when the cpu dai is in idle. In order to avoid such error, needs to define FSL own functions to take a pm runtime reference before calling snd_soc_get_xr_sx(), snd_soc_get_enum_double(), snd_soc_get_volsw(), and so on. Signed-off-by: Shengjiu Wang --- sound/soc/fsl/fsl_utils.c | 131 ++++++++++++++++++++++++++++++++++++++ sound/soc/fsl/fsl_utils.h | 48 ++++++++++++++ 2 files changed, 179 insertions(+) diff --git a/sound/soc/fsl/fsl_utils.c b/sound/soc/fsl/fsl_utils.c index d69a6b9795bf..7651c64bc837 100644 --- a/sound/soc/fsl/fsl_utils.c +++ b/sound/soc/fsl/fsl_utils.c @@ -10,6 +10,7 @@ #include #include #include +#include #include =20 #include "fsl_utils.h" @@ -197,6 +198,136 @@ void fsl_asoc_constrain_rates(struct snd_pcm_hw_const= raint_list *target_constr, } EXPORT_SYMBOL(fsl_asoc_constrain_rates); =20 +/* + * Below functions are used by mixer interface to avoid accessing registers + * which are volatile at pm runtime suspend state (cache_only is enabled). + */ +int fsl_asoc_get_xr_sx(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol) +{ + struct snd_soc_component *component =3D snd_kcontrol_chip(kcontrol); + int ret =3D 0; + + ret =3D pm_runtime_resume_and_get(component->dev); + if (ret) + return ret; + + ret =3D snd_soc_get_xr_sx(kcontrol, ucontrol); + + pm_runtime_put_autosuspend(component->dev); + + return ret; +} +EXPORT_SYMBOL_GPL(fsl_asoc_get_xr_sx); + +int fsl_asoc_put_xr_sx(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol) +{ + struct snd_soc_component *component =3D snd_kcontrol_chip(kcontrol); + int ret =3D 0; + + ret =3D pm_runtime_resume_and_get(component->dev); + if (ret) + return ret; + + ret =3D snd_soc_put_xr_sx(kcontrol, ucontrol); + /* + * As this function only used by the SNDRV_CTL_ELEM_ACCESS_VOLATILE + * case. return 0 to avoid control event notification. + */ + if (ret > 0) + ret =3D 0; + + pm_runtime_put_autosuspend(component->dev); + + return ret; +} +EXPORT_SYMBOL_GPL(fsl_asoc_put_xr_sx); + +int fsl_asoc_get_enum_double(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol) +{ + struct snd_soc_component *component =3D snd_kcontrol_chip(kcontrol); + int ret =3D 0; + + ret =3D pm_runtime_resume_and_get(component->dev); + if (ret) + return ret; + + ret =3D snd_soc_get_enum_double(kcontrol, ucontrol); + + pm_runtime_put_autosuspend(component->dev); + + return ret; +} +EXPORT_SYMBOL_GPL(fsl_asoc_get_enum_double); + +int fsl_asoc_put_enum_double(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol) +{ + struct snd_soc_component *component =3D snd_kcontrol_chip(kcontrol); + int ret =3D 0; + + ret =3D pm_runtime_resume_and_get(component->dev); + if (ret) + return ret; + + ret =3D snd_soc_put_enum_double(kcontrol, ucontrol); + /* + * As this function only used by the SNDRV_CTL_ELEM_ACCESS_VOLATILE + * case. return 0 to avoid control event notification. + */ + if (ret > 0) + ret =3D 0; + + pm_runtime_put_autosuspend(component->dev); + + return ret; +} +EXPORT_SYMBOL_GPL(fsl_asoc_put_enum_double); + +int fsl_asoc_get_volsw(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol) +{ + struct snd_soc_component *component =3D snd_kcontrol_chip(kcontrol); + int ret =3D 0; + + ret =3D pm_runtime_resume_and_get(component->dev); + if (ret) + return ret; + + ret =3D snd_soc_get_volsw(kcontrol, ucontrol); + + pm_runtime_put_autosuspend(component->dev); + + return ret; +} +EXPORT_SYMBOL_GPL(fsl_asoc_get_volsw); + +int fsl_asoc_put_volsw(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol) +{ + struct snd_soc_component *component =3D snd_kcontrol_chip(kcontrol); + int ret =3D 0; + + ret =3D pm_runtime_resume_and_get(component->dev); + if (ret) + return ret; + + ret =3D snd_soc_put_volsw(kcontrol, ucontrol); + /* + * As this function only used by the SNDRV_CTL_ELEM_ACCESS_VOLATILE + * case. return 0 to avoid control event notification. + */ + if (ret > 0) + ret =3D 0; + + pm_runtime_put_autosuspend(component->dev); + + return ret; +} +EXPORT_SYMBOL_GPL(fsl_asoc_put_volsw); + MODULE_AUTHOR("Timur Tabi "); MODULE_DESCRIPTION("Freescale ASoC utility code"); MODULE_LICENSE("GPL v2"); diff --git a/sound/soc/fsl/fsl_utils.h b/sound/soc/fsl/fsl_utils.h index 21b25a11ecda..1aab0c1cee62 100644 --- a/sound/soc/fsl/fsl_utils.h +++ b/sound/soc/fsl/fsl_utils.h @@ -31,4 +31,52 @@ void fsl_asoc_constrain_rates(struct snd_pcm_hw_constrai= nt_list *target_constr, const struct snd_pcm_hw_constraint_list *original_constr, struct clk *pll8k_clk, struct clk *pll11k_clk, struct clk *ext_clk, int *target_rates); + +/* Similar to SOC_SINGLE_XR_SX, but it is for read only registers. */ +#define FSL_ASOC_SINGLE_XR_SX_EXT_RO(xname, xregbase, xregcount, xnbits, \ + xmin, xmax, xinvert, xhandler_get) \ +{ .iface =3D SNDRV_CTL_ELEM_IFACE_MIXER, .name =3D (xname), \ + .access =3D SNDRV_CTL_ELEM_ACCESS_READ | \ + SNDRV_CTL_ELEM_ACCESS_VOLATILE, \ + .info =3D snd_soc_info_xr_sx, .get =3D xhandler_get, \ + .private_value =3D (unsigned long)&(struct soc_mreg_control) \ + {.regbase =3D xregbase, .regcount =3D xregcount, .nbits =3D xnbits, \ + .invert =3D xinvert, .min =3D xmin, .max =3D xmax} } + +/* Similar to SOC_SINGLE_EXT, but it is for volatile register. */ +#define FSL_ASOC_SINGLE_EXT(xname, xreg, xshift, xmax, xinvert,\ + xhandler_get, xhandler_put) \ +{ .iface =3D SNDRV_CTL_ELEM_IFACE_MIXER, .name =3D xname, \ + .access =3D SNDRV_CTL_ELEM_ACCESS_VOLATILE | \ + SNDRV_CTL_ELEM_ACCESS_READWRITE, \ + .info =3D snd_soc_info_volsw, \ + .get =3D xhandler_get, .put =3D xhandler_put, \ + .private_value =3D SOC_SINGLE_VALUE(xreg, xshift, 0, xmax, xinvert, 0) } + +#define FSL_ASOC_ENUM_EXT(xname, xenum, xhandler_get, xhandler_put) \ +{ .iface =3D SNDRV_CTL_ELEM_IFACE_MIXER, .name =3D xname, \ + .access =3D SNDRV_CTL_ELEM_ACCESS_VOLATILE | \ + SNDRV_CTL_ELEM_ACCESS_READWRITE, \ + .info =3D snd_soc_info_enum_double, \ + .get =3D xhandler_get, .put =3D xhandler_put, \ + .private_value =3D (unsigned long)&xenum } + +int fsl_asoc_get_xr_sx(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol); + +int fsl_asoc_put_xr_sx(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol); + +int fsl_asoc_get_enum_double(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol); + +int fsl_asoc_put_enum_double(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol); + +int fsl_asoc_get_volsw(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol); + +int fsl_asoc_put_volsw(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol); + #endif /* _FSL_UTILS_H */ --=20 2.34.1 From nobody Thu Apr 2 01:48:15 2026 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazon11013045.outbound.protection.outlook.com [40.107.162.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CB551372B3E; Tue, 10 Mar 2026 10:41:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.162.45 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773139289; cv=fail; b=Zl/hVQq7j6o0aKwhuKrT7+hKjW78RTozNG3VmOAPXU0jOAmAECrHWUNzXr2VtMqped7sgReWVnlgw8EXVWef5mymKM0qTalsLEtz36zuMLr3PH7zvH6vrfCTJqvmTHr4JJ3g0uut55UPV3Yj6/yX9MFG2iXx5uzHMzF7UN3axs0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773139289; c=relaxed/simple; bh=RgqOFUTR4t2bs05bqfJK4QCU9FU4pff2+yahXIoez40=; h=From:To:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=h7V1fj94rZDwoCKLI9bNlP2rjGDiYDYC0q03+ROrVlPORN1tpGEJlI8OHzZAFtVJqReC6via/mkihQDVhnuuCGKJAQzIt8DMHlB0MuQFJAn7+GeQsTOik0RLIjgnSBVwsVXdCgJyP5nt4mISwe1Vr9+uo5/gmGNyq+Ks6yUUumI= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=EEGli6jV; arc=fail smtp.client-ip=40.107.162.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="EEGli6jV" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=rsy+qwJQ9PgbyQ9ut71tig0hzryyvfobt44h49iVMd2ccYZvZ/KXekKl/r/mZ6KKSBeyRh5j4BU1I28uVRJdda/c/imDF30x4xrdJ/cxwParhDKFNOblrGpjUkdD3vB6PDaYDA3cg3v6hLhAH/k1YHoaXsHoNc0+JMeJXVX4LsNyZlXkWkBvMRUh68oakm7qKmuK2aBSVRF27/pys49A+eo47JtZbGVw0ZLl2FKZ3BvgNl77ACjrIqrcH2dySItvVizk5v+OAXxSPzEgIJMY+MlCaszHSNkEBKWXsbf3QIfZwIoakSHBAfuFgkIlCb5z43G7bmZKguNfwGeVgt2UvQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=cDlDabGl6nl3C5GaKNJ4DyQBhEmaCtae7mOJ3W/o3PY=; b=x+C8j6xEqv6a0LQZY6kl+IfSsvWHHC61hfW+nutU/ui4wHzbaPSsBpnbujw3KuASCZfUjQ5yrEDbYAw6+GREH1mlD1KjdiseYavVJZ4L+hVgV0Cv9f9dq20nLHhVsQRbjWHOjovNR6h+DIeKxd9Xd80NCi+ZyLhHqdU4uZ3cgJ9kyYKul/bM0YGE+AFowbGjs2YBX0CqtHYPsGx90vm31mJHI8pjxyDGF6wf10peajqNrTdAI7NWo0RRDn8Xn4L0KemJm1BtVn5cBJ3z/+OTRyf6C0pEOdURN0yf759+XhVNFVe1BagPeJEu5rz1nM+CfPzQTdQcB4iWILaiRyotVw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=cDlDabGl6nl3C5GaKNJ4DyQBhEmaCtae7mOJ3W/o3PY=; b=EEGli6jVmvhGb8pbL+VDwZ8bY+/vqh552V/YILM4OnXfVkQL0EWnkjAsqy9zXmTcMw7ha5fvl3aMoXiTokmjBQo9RTx5SF//fL+wX0fzso9SH3uytBKJL7LGqR4iQnk7KTenO+xzSbxtc5NHjAH3w2vpjus5otI7g6W/o5bjhb527muI09tz5eboCR2P3YJZ91jy+V4eMlJOYQNS8YZiFZ1j+f1fpc9zAUOPdgbKZ7bf9+BVb2YljlKCYHyi3BP62GrA7t7HhEMFCuRKjLCo7ltkaMPjKTl2Xl8e1JCbEaDfkSUj0g5PEag4e7IANzr/U5EpR/N8kj3/v5frb2K7kQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AM0PR04MB7044.eurprd04.prod.outlook.com (2603:10a6:208:191::20) by GV2PR04MB11833.eurprd04.prod.outlook.com (2603:10a6:150:2fc::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9678.25; Tue, 10 Mar 2026 10:41:24 +0000 Received: from AM0PR04MB7044.eurprd04.prod.outlook.com ([fe80::bab2:d15c:fcf8:ef2b]) by AM0PR04MB7044.eurprd04.prod.outlook.com ([fe80::bab2:d15c:fcf8:ef2b%3]) with mapi id 15.20.9678.024; Tue, 10 Mar 2026 10:41:24 +0000 From: Shengjiu Wang To: shengjiu.wang@gmail.com, Xiubo.Lee@gmail.com, festevam@gmail.com, nicoleotsuka@gmail.com, lgirdwood@gmail.com, broonie@kernel.org, perex@perex.cz, tiwai@suse.com, linux-sound@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org Subject: [PATCH v6 2/3] ASoC: fsl_sai: add bitcount and timestamp controls Date: Tue, 10 Mar 2026 18:42:34 +0800 Message-Id: <20260310104235.1234569-3-shengjiu.wang@nxp.com> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20260310104235.1234569-1-shengjiu.wang@nxp.com> References: <20260310104235.1234569-1-shengjiu.wang@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SG2PR02CA0059.apcprd02.prod.outlook.com (2603:1096:4:54::23) To AM0PR04MB7044.eurprd04.prod.outlook.com (2603:10a6:208:191::20) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM0PR04MB7044:EE_|GV2PR04MB11833:EE_ X-MS-Office365-Filtering-Correlation-Id: 3fa5ea65-abdf-4b66-9898-08de7e919354 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|366016|7416014|52116014|19092799006|1800799024|38350700014|921020; X-Microsoft-Antispam-Message-Info: wtzUx+ekpkG6xFkuXIxVMJCVGwLa36My1YTHMgjjtuugCkaLl3iC1gj70Bv/93IbdOlE9OWCqMKnNbRI8lcSMn6GQwD220Uw79am4TCizPrKk2AXZ5Lkcc4t+OD9xpwHJNGFHwOZ/S/zL1p1ZITJXE8THR2Ibu4oRxAchd/r+7p8vxpgXasVQpUzoLYMF5swpWvoq1zTDpjeflwRuXKQPGtt2lNII2PHUFlUVZrkAXDYJTsd98QPGS7y1W4cz8PCuzCJG1tDUfjWtFBZ8vWPE2yL6N5s6GVMjUWGtVrqtZgP5+tLJathmZV7f9dscZFkrtDkPqs3oRCS4aJ07kcTLezFvROLw0e4Z1ui3SEWv3/m5wZYyTjbjPH9m4QFE9mPDN5YeoA6B0Uj/zkzuPI8DQpKWkkxB4MSNkM5CzAs/n2JKwEp8FA8C0XoaeCU0bPKzLs8b1BM8TvUwlpEwfXK4LK8dTV9nIvioSxht47iroGNySrN7pzMhiKwbYMLsR1a6Foat2oeQN+p0JxWAkB3iM15GEvR82iPctgU+yP9zPx1Nzb9JFojnce3Re2/MjLcYeaKxCFd8dfi3+hm5AzBjCUfqnSRPfkgCLr6ONrgYUEFt4SVtOWlzKwOsVEFdMV3LZEor9XfGz6SJsSNOUwffkLTHQQs8L2v8unjQT88jakvExzLF3OMueLqyu742OZuAz2vXk83iNbdIGJOf2/+kXDuhvstGVRPqOpaYq1fqt2RlPBASmMGkpdviBx+y66GzAJnoSxIKThItBqOnseVsaaflmGU1ODC0RzKP5oosexy1fffcs+nwqlbBzcc24PI X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM0PR04MB7044.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(366016)(7416014)(52116014)(19092799006)(1800799024)(38350700014)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?956lanA41kpjR/QDe7/KHEHCFi0TjS/gPO7ArFSJ5QTM8y88PLBISeWqW5rd?= =?us-ascii?Q?KEkfv1YSSLMd0ryNL0baK6vqO9Uj+S20OrM9M5/LOxkso1TQnG8E5K7ncuSP?= =?us-ascii?Q?Pt5MBWmUTKUvJXOgTE8dYSlhO9tE1SpOTI0aHm2hQSN1L59SLKptcFZJtO3b?= =?us-ascii?Q?VNwTd/cRjqHI0K44adZuDJ5f1NC9lK4mLj/j5gaEEwMpE2yHE5I7r1ya2S+M?= =?us-ascii?Q?i++q77P7xH4kiJNCQDg0AbeNtq18ajxQDnkgocWsg4o4tQcbn0DpAOU3bhvD?= =?us-ascii?Q?WgG7SJxQDvZPkTjfsqaOo4KRBPpJRLXoXQV8Boy4E377X2P2fthM7g7tskV8?= =?us-ascii?Q?mczm1IleNL3LdcLG/d6cQ9+yHaGgfcbKRLycm+Ym9CHMP+xqxY0rP0s2O9ag?= =?us-ascii?Q?H2IAPyUOOb6qwLT1mtn3meIf484d4FDcxD/bxNJn9OHSCXvZCjrdVSr9fAhZ?= =?us-ascii?Q?ew5omWFNwSKQU6/Zdz5Rac3AS7V7Q8DDr6x9IB+Bu0HMbL4Jq48dhrAQ0eYF?= =?us-ascii?Q?+FEF3iWPbE15NadZIPvtMmydWpPI2eJtB7qWMqS1DPXdPDrR4CCy0tAnFgoP?= =?us-ascii?Q?/EzpsvC/UWMHuFWvPiSK4T0Qfyzk52JGW+M7Qwl1S9qvoIXuH06EbHEYSOS4?= =?us-ascii?Q?pfrrfiPkYG32IUkDiHlK835DC7rTM0f3m9XJfsjLNcVDc4xhryy0CVIOe7lq?= =?us-ascii?Q?mNMVE6NPVLbHBSk7DnkRDwPsSU6BBUNJ69EKMWm6K0XbH4lTs/U4ERS6Au5x?= =?us-ascii?Q?j+Q5su9aHfxYe2bdoGH1GqQ+F7UAZGijplJ6CxKTkjX5wqj3RYc1XlSpXfP2?= =?us-ascii?Q?zy922A+8p67AKCplSQYbw5G9oTzWB/BRo2liYzspkBb9oKhfKeYswaJHv/IX?= =?us-ascii?Q?tb77tQKFfkFbRBPtoLhdKLtsg9bBggv86bleHXbIkHvRr2Tfb0v/F3MHOoWr?= =?us-ascii?Q?C/LYAMnUisT83ZDhdCzBqEmw/PX6VPx1cDZdqdOf/SwcOGZvQHZ6QRloQEE2?= =?us-ascii?Q?tmMuFapIzodGCkrNoefDA9BmqSNc1v7Mz0e6Gnda7DJ6a6Zd9y42/BMFNm1Z?= =?us-ascii?Q?v6iwLTrd8q7fj/8q2Gj3DlOfVIgGgIh9BpqS26bCTPdOpmgJ3MwhBqlL7rPz?= =?us-ascii?Q?EtpbGZ6TNakpwDHO9NCjc8kuD0liBZHIfMx5zlDXOpP5k8ZBgR+TCnABHRom?= =?us-ascii?Q?EHZohaiiNPF29gx4092k4/RsBwQsTJqa1pxbQa/tfxh7yDYm1GqeMWmoQyug?= =?us-ascii?Q?Hy66I/g1TmuuC/lhOr4BIYyT4eLfJ4xbNirKUh5LTpmb5vhutSORb2V6KUDp?= =?us-ascii?Q?fHaPoOZCrBJ0JUggP1ME9sWpS+l4Qh9Bn2f8EdScVBadCrb51EK21ynNuQb4?= =?us-ascii?Q?t/69yjPUy+ltFF1wtbSocsuSHTYMgzEBoBD1IuTDD3P50s9zV9kNtNSDRhao?= =?us-ascii?Q?IViT9iabT3feBAKbt2AuxwcHrHwzzubKMv71Di+LDIcYQyMWxG5klo2eWe28?= =?us-ascii?Q?xAusTl1432akb5Pl2rWklNyuxKdb+Q1vR6bbDEylYm1tkvrHYHEhpv06npi+?= =?us-ascii?Q?wVVSF5k5UF/lHFHW1apS+sNCzHyXv4N6OmzZ1Ttmx/Sn8bEOD5eeHISRgTLH?= =?us-ascii?Q?o5UJZ/vwTsboD+uh7go51IVFOZDr7h8W6Fw8OFzQZKviMdFQzEt9XLEk+x0B?= =?us-ascii?Q?lTGUCShvQ/cg2KY42Xv98CTMmSKnfHf4TY1F1Ah67twIQI3AIm/aLKT0WCF3?= =?us-ascii?Q?2swOvIc1aA=3D=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3fa5ea65-abdf-4b66-9898-08de7e919354 X-MS-Exchange-CrossTenant-AuthSource: AM0PR04MB7044.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Mar 2026 10:41:24.2011 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: xTPbsnAOe/ezEeoVo9ja0ZGkiCpZRXanX/0ef33486KHrHu0bD5hruX9kQb/uOQshmARTODsIaHJCV0O67ohFA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV2PR04MB11833 Content-Type: text/plain; charset="utf-8" The transmitter and receiver implement separate timestamp counters and bit counters. The bit counter increments at the end of each bit in a frame whenever the transmitter or receiver is enabled. The bit counter can be reset by software. The timestamp counter increments on the bus interface clock whenever it is enabled. The current value of the timestamp counter is latched whenever the bit counter increments. Reading the bit counter register will cause the latched timestamp value to be saved in the bit counter timestamp register. The timestamp counter can be reset by software, this also resets the latched timestamp value and the bit counter timestamp register. The timestamp counter and bit counter can be used by software to track the progress of the transmitter and receiver. It can also be used to calculate the relative frequency of the bit clock against the bus interface clock. These bitcount and timestamp registers are volatile, and supported when the module has timestamp features. Signed-off-by: Shengjiu Wang --- sound/soc/fsl/fsl_sai.c | 66 +++++++++++++++++++++++++++++++++++++++++ sound/soc/fsl/fsl_sai.h | 4 +++ 2 files changed, 70 insertions(+) diff --git a/sound/soc/fsl/fsl_sai.c b/sound/soc/fsl/fsl_sai.c index 148e09e58dfa..bd336d2e4cb3 100644 --- a/sound/soc/fsl/fsl_sai.c +++ b/sound/soc/fsl/fsl_sai.c @@ -41,6 +41,52 @@ static const struct snd_pcm_hw_constraint_list fsl_sai_r= ate_constraints =3D { .list =3D fsl_sai_rates, }; =20 +static const char * const inc_mode[] =3D { + "On enabled and bitcount increment", "On enabled" +}; + +static SOC_ENUM_SINGLE_DECL(transmit_tstmp_enum, + FSL_SAI_TTCTL, FSL_SAI_xTCTL_TSINC_SHIFT, inc_mode); +static SOC_ENUM_SINGLE_DECL(receive_tstmp_enum, + FSL_SAI_RTCTL, FSL_SAI_xTCTL_TSINC_SHIFT, inc_mode); + +static const struct snd_kcontrol_new fsl_sai_timestamp_ctrls[] =3D { + FSL_ASOC_SINGLE_EXT("Transmit Timestamp Control Switch", FSL_SAI_TTCTL, + FSL_SAI_xTCTL_TSEN_SHIFT, 1, 0, + fsl_asoc_get_volsw, fsl_asoc_put_volsw), + FSL_ASOC_ENUM_EXT("Transmit Timestamp Increment", transmit_tstmp_enum, + fsl_asoc_get_enum_double, fsl_asoc_put_enum_double), + FSL_ASOC_SINGLE_EXT("Transmit Timestamp Reset Switch", FSL_SAI_TTCTL, + FSL_SAI_xTCTL_RTSC_SHIFT, 1, 0, + fsl_asoc_get_volsw, fsl_asoc_put_volsw), + FSL_ASOC_SINGLE_EXT("Transmit Bit Counter Reset Switch", FSL_SAI_TTCTL, + FSL_SAI_xTCTL_RBC_SHIFT, 1, 0, + fsl_asoc_get_volsw, fsl_asoc_put_volsw), + FSL_ASOC_SINGLE_XR_SX_EXT_RO("Transmit Timestamp Counter", FSL_SAI_TTCTN, + 1, 32, 0, 0xffffffff, 0, fsl_asoc_get_xr_sx), + FSL_ASOC_SINGLE_XR_SX_EXT_RO("Transmit Bit Counter", FSL_SAI_TBCTN, + 1, 32, 0, 0xffffffff, 0, fsl_asoc_get_xr_sx), + FSL_ASOC_SINGLE_XR_SX_EXT_RO("Transmit Latched Timestamp Counter", FSL_SA= I_TTCAP, + 1, 32, 0, 0xffffffff, 0, fsl_asoc_get_xr_sx), + FSL_ASOC_SINGLE_EXT("Receive Timestamp Control Switch", FSL_SAI_RTCTL, + FSL_SAI_xTCTL_TSEN_SHIFT, 1, 0, + fsl_asoc_get_volsw, fsl_asoc_put_volsw), + FSL_ASOC_ENUM_EXT("Receive Timestamp Increment", receive_tstmp_enum, + fsl_asoc_get_enum_double, fsl_asoc_put_enum_double), + FSL_ASOC_SINGLE_EXT("Receive Timestamp Reset Switch", FSL_SAI_RTCTL, + FSL_SAI_xTCTL_RTSC_SHIFT, 1, 0, + fsl_asoc_get_volsw, fsl_asoc_put_volsw), + FSL_ASOC_SINGLE_EXT("Receive Bit Counter Reset Switch", FSL_SAI_RTCTL, + FSL_SAI_xTCTL_RBC_SHIFT, 1, 0, + fsl_asoc_get_volsw, fsl_asoc_put_volsw), + FSL_ASOC_SINGLE_XR_SX_EXT_RO("Receive Timestamp Counter", FSL_SAI_RTCTN, + 1, 32, 0, 0xffffffff, 0, fsl_asoc_get_xr_sx), + FSL_ASOC_SINGLE_XR_SX_EXT_RO("Receive Bit Counter", FSL_SAI_RBCTN, + 1, 32, 0, 0xffffffff, 0, fsl_asoc_get_xr_sx), + FSL_ASOC_SINGLE_XR_SX_EXT_RO("Receive Latched Timestamp Counter", FSL_SAI= _RTCAP, + 1, 32, 0, 0xffffffff, 0, fsl_asoc_get_xr_sx), +}; + /** * fsl_sai_dir_is_synced - Check if stream is synced by the opposite stream * @@ -1010,6 +1056,17 @@ static int fsl_sai_dai_resume(struct snd_soc_compone= nt *component) return 0; } =20 +static int fsl_sai_component_probe(struct snd_soc_component *component) +{ + struct fsl_sai *sai =3D snd_soc_component_get_drvdata(component); + + if (sai->verid.feature & FSL_SAI_VERID_TSTMP_EN) + snd_soc_add_component_controls(component, fsl_sai_timestamp_ctrls, + ARRAY_SIZE(fsl_sai_timestamp_ctrls)); + + return 0; +} + static struct snd_soc_dai_driver fsl_sai_dai_template[] =3D { { .name =3D "sai-tx-rx", @@ -1063,6 +1120,7 @@ static struct snd_soc_dai_driver fsl_sai_dai_template= [] =3D { =20 static const struct snd_soc_component_driver fsl_component =3D { .name =3D "fsl-sai", + .probe =3D fsl_sai_component_probe, .resume =3D fsl_sai_dai_resume, .legacy_dai_naming =3D 1, }; @@ -1211,6 +1269,14 @@ static bool fsl_sai_volatile_reg(struct device *dev,= unsigned int reg) case FSL_SAI_RDR5: case FSL_SAI_RDR6: case FSL_SAI_RDR7: + case FSL_SAI_TTCTN: + case FSL_SAI_RTCTN: + case FSL_SAI_TTCTL: + case FSL_SAI_TBCTN: + case FSL_SAI_TTCAP: + case FSL_SAI_RTCTL: + case FSL_SAI_RBCTN: + case FSL_SAI_RTCAP: return true; default: return false; diff --git a/sound/soc/fsl/fsl_sai.h b/sound/soc/fsl/fsl_sai.h index 7605cbaca3d8..af967833b6ed 100644 --- a/sound/soc/fsl/fsl_sai.h +++ b/sound/soc/fsl/fsl_sai.h @@ -196,9 +196,13 @@ #define FSL_SAI_MDIV_MASK 0xFFFFF =20 /* SAI timestamp and bitcounter */ +#define FSL_SAI_xTCTL_TSEN_SHIFT 0 #define FSL_SAI_xTCTL_TSEN BIT(0) +#define FSL_SAI_xTCTL_TSINC_SHIFT 1 #define FSL_SAI_xTCTL_TSINC BIT(1) +#define FSL_SAI_xTCTL_RTSC_SHIFT 8 #define FSL_SAI_xTCTL_RTSC BIT(8) +#define FSL_SAI_xTCTL_RBC_SHIFT 9 #define FSL_SAI_xTCTL_RBC BIT(9) =20 /* SAI type */ --=20 2.34.1 From nobody Thu Apr 2 01:48:15 2026 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazon11013045.outbound.protection.outlook.com [40.107.162.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8CA6336EAB1; Tue, 10 Mar 2026 10:41:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.162.45 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773139291; cv=fail; b=Ingwzj4sBVjK+w8DECVawoZZemNMTABxNL+1XxNqDuSp6w8zxqMm1rtVZ6LmBrAGp7s32UnuaTHL33KE81AHPEAUmQ89Un2miimUy6EznXHpH+9a9tUS4SL9cRMrIkFvyS/14yf7roQzd5AowKSL6+jPdC3l0wLOA08t2RroxhA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773139291; c=relaxed/simple; bh=uUEywGOB/kdu1XTKfKrwCDoPgir1cHyuK+NaIEF+W3o=; h=From:To:Subject:Date:Message-Id:In-Reply-To:References: Content-Type:MIME-Version; b=HNrQgv54QLqh3WUCJyyuQE7dQbGFai+pggCfyJljAodX9IkMGfbAJdPynviwS3YuMbEeC+Z9PSZRr2JMbDwJtJi4NbsTa97+26ZFCE/7YTpAGhWfXuOQRe1B6ujs11SBWf3sYxn5OzNIHDgnaeHXAx60J+rlci/sa3t6Ae6oDy4= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=SjA1cFjN; arc=fail smtp.client-ip=40.107.162.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="SjA1cFjN" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=NCcVYXMuY8XseXRlJKIpliFGYixkSYN+5x6oDfX0t/kGwRnDH0qpKL4pCKPCxkKaAd2K0cX4KLobe1+laDMbEWBGPVK4pjeJ4sXBuagLUyxJlXmmg9lQlNKhFbx+AlVjPvmt+8iwfvVLM7qErNUYP5gr9jHSlJnmMIEi5GjNZuPG6UwUKLz54kiMU1hhVNBMDb7H8G+ANBoAtLPhgFX+dysw5eHS9lAQBRq7tNycunlQWHiMC/nQuTPE/lCddP1W3sscmuYte48V2BEYpEXIJwHVY74rD81u/Y97eRI9Qv4DbLbjj7p5sQoWMuI/YW3lfd9aevDWBYIt40WwqNXxYg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=AG9wPmsqkKZQm02G9znqGFG+cPu8AxMXrwPcXWeJQR0=; b=i/nGtCktIpyQBfmogK10zmnJP9jtvYAy0MnNPduSk7vZrK0epCd/+yAl/Ha7o47ufR15JHZrerFSakM66ylpYey/G+O55FSrMm6RwbIEEDtj90qmLf5HRuAjgO8HI1BH3rXAcq/X/cdyUzYRd//BRPOJFr5x0vHApV/nBFHip1AXPcCZ6OK2yxYhQzORpPBOHHAV6KCrjMV/mHK4rctKk4RRtlHboxpP0jQ3tudo8J5V0EleTLQ264FRATVrOjoEDabDAu8edlyq5CeMjb6D3ouatvUgzbw0+ziU11kEKgo0F0dbd1JnT7l7jNn8w4Vt7L0dL2pz+PhUVykwW5vSDw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=AG9wPmsqkKZQm02G9znqGFG+cPu8AxMXrwPcXWeJQR0=; b=SjA1cFjNXbhYl92GiViMk0OQodNrv4qMh4lNbvpENbRNrhbkEXM778LU3NJe6WYAi1iL8iH8rmIWX/pEaBdfdlAc0H3eIh9rKqmCicB9z49w5jr7asymDxOb4+/O7/AXtF/ZPqzOxeVQlGHUaImSk1ZpCJ+YSrlEUiTdCIB6J0RrrBPVRbRD0o+1JSyLd9r2PeIWzuf1543usRYwh3MBKYOlZNghOUh3o7Z6L0wH/yJkFyxy8ivpmhwYomDQ0+ksb/eJkSueUKMiiQKMqwVHtzfSdFRuW9T1TXrJkfONQL+O/S82GdtTgm2RjWogb5d/PVYxCS68pIGAKdR726EE4g== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AM0PR04MB7044.eurprd04.prod.outlook.com (2603:10a6:208:191::20) by GV2PR04MB11833.eurprd04.prod.outlook.com (2603:10a6:150:2fc::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9678.25; Tue, 10 Mar 2026 10:41:27 +0000 Received: from AM0PR04MB7044.eurprd04.prod.outlook.com ([fe80::bab2:d15c:fcf8:ef2b]) by AM0PR04MB7044.eurprd04.prod.outlook.com ([fe80::bab2:d15c:fcf8:ef2b%3]) with mapi id 15.20.9678.024; Tue, 10 Mar 2026 10:41:27 +0000 From: Shengjiu Wang To: shengjiu.wang@gmail.com, Xiubo.Lee@gmail.com, festevam@gmail.com, nicoleotsuka@gmail.com, lgirdwood@gmail.com, broonie@kernel.org, perex@perex.cz, tiwai@suse.com, linux-sound@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org Subject: [PATCH v6 3/3] ASoC: fsl_xcvr: add bitcount and timestamp controls Date: Tue, 10 Mar 2026 18:42:35 +0800 Message-Id: <20260310104235.1234569-4-shengjiu.wang@nxp.com> X-Mailer: git-send-email 2.37.1 In-Reply-To: <20260310104235.1234569-1-shengjiu.wang@nxp.com> References: <20260310104235.1234569-1-shengjiu.wang@nxp.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SG2PR02CA0059.apcprd02.prod.outlook.com (2603:1096:4:54::23) To AM0PR04MB7044.eurprd04.prod.outlook.com (2603:10a6:208:191::20) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM0PR04MB7044:EE_|GV2PR04MB11833:EE_ X-MS-Office365-Filtering-Correlation-Id: 81127696-b234-444b-3bf5-08de7e919590 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|366016|7416014|52116014|19092799006|1800799024|38350700014|921020; X-Microsoft-Antispam-Message-Info: emsuR85IUB20jDMfji1XNhrIsB1V+kD+6EX7Xw+VdlCS45bao0paDcMvo6DODBcj8WsQV2PPn+CLqqVhMqcr/p+dfXC+t98omDFVYMKFqBgQQygdFLqqHzSTIWyFyMe9oSfz75mkPYVJ31YmImEzM/mEULKqIUH+FcPdVJvT/gmI1uMYKPDpDY9/1ouHr3cY9dcox4A7gTOIZnBConzxUDeccXIvu9sXcMvYBvwSdwJmWOLtrcDp/xvFhGJaI+iiUyFnZMNAPP+M1gytp8wpJfRisUR//s4rMJVGMKgEDbEQA+BqMgS1KmiV8ZuqFeYxv7WqSKylMtkWfOHB7xivDMU3ln0VIBr7IKp2Sa/WlgJK7euR9AQdp4ophwG9aUR1RRM34pbYIVbLdeymYTOgStucLNpaETonVMC1AVdqVfn72b8gpULAtgC611slfSwRDe/VnlOdR/DD5GM2n+VIHncT+CLf8kWM2lylEf8hKhDbC9HdaUbeYD3zXR7cDWUbuhcmUmfiYAzwpSalAWhp+7X25noP+A2adWJmWMrx1a8Zs/hVweJVk6rZqBi4RMQABU5Gc6Uoj/m5HdVZEFwXbtgLRBkx43RAGVRU577afrnLZrY/T+ynB0vhAIlDW33Y8HkbdhOzpY7qraHTQARjansUl4KQSicn7TtRr8qLddI6pM8JmiI53L+E28elhbmt/C56uq7LUhbYHgLtC15YNzIJ/ncvGnOorYzzRM6V6I9Gv2Gr8R3lmyDZnvUvqTa4ahB1MgWyoHsvs7FYyO4sKkzs2DOeHzk39U2wcczI2ASvrU8RzBFc+z3BwOTVj3Kg X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM0PR04MB7044.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(366016)(7416014)(52116014)(19092799006)(1800799024)(38350700014)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?L/jtcmbFWkA9Xx0YL1O+WUOMvI8ulDq51R2aTA8p3w10pW5m5X6rCWUpyxmY?= =?us-ascii?Q?31csKKfYWxSwdvJFi9vxS+e5gMbK6v0B9PwHRVJ7Sw+FpUHnE0971DXHC2XL?= =?us-ascii?Q?4ZtAYZx8x1mtBZLvdBZ+Y+Pal3mNRjmPuGWZCCoq0cu/X9RQ11RBEWCb7H8p?= =?us-ascii?Q?aoZZUjzY6MgE7hrccTl0Bww0SavbxbFCQmp3hO5wCKBoIOJRGsuE/lBtd+Rz?= =?us-ascii?Q?lYRFB2uUboyhstVPrA5yp1bv94esLa6KL1vHHRG58AiPK66oxuEqk8POTh0/?= =?us-ascii?Q?zEaaZNAnNOfgNNkindE06NFUkqlCVZEB2D9OdaTxFIk6Aw2ogVbgHgOA1sse?= =?us-ascii?Q?OSSS3YbWObZ9IdSrnDHDeJrSITOzJhHD4oeCGdTTXo1jLL2V9UCITxOY2JJK?= =?us-ascii?Q?HhhSA/JIkjw8u3DSjO7F//7CE77VISHiR0rU0UyyQFf3zUDtstUj/ZT6FUb7?= =?us-ascii?Q?oLe8csUrRwVqnvIc/+8MLiI/Xq3CJCua6YAWhBK9dE2xvyNU4S3KSXi5O0pt?= =?us-ascii?Q?0DfSQUufAPXcOtEo+fOMcJMDnshvz3vnH9qvBAeOeRTcX1JbXf+NQbuDgUjN?= =?us-ascii?Q?90nxTbtzNhhSQfncimTr3w9UtvOV78QqDBxkF/l8NWAN9Q0GUBdZkgh/OK0I?= =?us-ascii?Q?yPjNLZ5L0arR+S76SYe6mgMhY05mww40gdxijziaDouoKt6HDbc+fAAQMGaJ?= =?us-ascii?Q?EEWbWnlOqq6LqnCLS1oWbO/tbt8IQm+NAKyMqUydRJxm7lomZCzrNv4wUMBH?= =?us-ascii?Q?58kIFL8Y4fXsBUlSDW7+Ymt16buhwE1gcmtwqrQ+LLvn2Zp6coGeP0T5LvsG?= =?us-ascii?Q?XW0cpKC7g1bya8bqDY8jvZr5GhBdZ0uvsaTqUcWVLuFIeq3SV1ylFwz/KYf2?= =?us-ascii?Q?MQpY45BEhyjQyakykOzzbaHDWEixLfCIr57AE2FKzP23lSRSJlW5fKAIbtWQ?= =?us-ascii?Q?BzgT69w0T510xPrxDo2xcrOMFGLC05N4tURy5BBTYbQWb7dstUPkSkZysfCx?= =?us-ascii?Q?I+FhQYe5/q50LJUCkGnsTXrsDG4VcvJM5rYXJ6OLk21Ft4FuLpt8q8bG6toI?= =?us-ascii?Q?LwFQr6vtCTUaCtV2he/IXyJEABsluHYdBqNafySu64m/vwQzCoieLorofwoZ?= =?us-ascii?Q?BcsABaHWe3cYD1nXoINHkNKViNr0/GxrMWlb2r1cg0uF2zqbKnCcKw02xBaU?= =?us-ascii?Q?eKbVFjtTgmxHOnCOTzrmkhnVJ7vcwlvQz2HZcXF+gzrta55KiRKWY50wz9YJ?= =?us-ascii?Q?3f+qocsf9o0MxWq02DvyQLHNpkEsck/B1qgqqfAG5/ejftPf507CVp8rQx/7?= =?us-ascii?Q?WNz50rrrovvQP99bAAEaqBjHls5Nl3ArlcwvBiXBCjCRpH1Ynp+pebImjUCZ?= =?us-ascii?Q?el1eCzVOSvqMAwTMHO1SD/sBEVlqs7vVcmp4JImH4GcbSblZryWcl4TAMat0?= =?us-ascii?Q?mpP7RgNUSPsfUbh9puDcJkbBaFgLU/KDeRmp+xm4Ac1w2KvmyZG+zjeOQPaJ?= =?us-ascii?Q?HoxRpTpwES/YJHXal0C+myR+fiTC+n639WToF2afj/IkvnuOZL21cRP4L+O6?= =?us-ascii?Q?roqru6NG4bw3YmmDZRUYUICNbsns3IaUtnNJmmzwH9cfsyW/1W0HrSvtPGk3?= =?us-ascii?Q?c7mbLHnDLyn1Mta05+wHgXP3kSHBrD/zYosC6kAQya08oNMqTMD9GF+sHxhL?= =?us-ascii?Q?KlmEc9DWt+wihSHPUXQPiJu1aW9Bo5aQeHkvnDROkjF4OhT2x+texcO7jH68?= =?us-ascii?Q?R9jpTZeg9Q=3D=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 81127696-b234-444b-3bf5-08de7e919590 X-MS-Exchange-CrossTenant-AuthSource: AM0PR04MB7044.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Mar 2026 10:41:27.8694 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: fGaDv3JAC6ueQQHN0OBpKfUrRPoPYwEYswB70EpGtUSzwQz9/jw3D7bu26HrL4cz2dkmayws6MfgsylNIVQ6yA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: GV2PR04MB11833 Content-Type: text/plain; charset="utf-8" The transmitter and receiver implement separate timestamp counters and bit counters. The bit counter increments at the end of each bit in a frame whenever the transmitter or receiver is enabled. The bit counter can be reset by software. The timestamp counter increments on the bus interface clock whenever it is enabled. The current value of the timestamp counter is latched whenever the bit counter increments. Reading the bit counter register will cause the latched timestamp value to be saved in the bit counter timestamp register. The timestamp counter can be reset by software, this also resets the latched timestamp value and the bit counter timestamp register. The timestamp counter and bit counter can be used by software to track the progress of the transmitter and receiver. It can also be used to calculate the relative frequency of the bit clock against the bus interface clock. As there are three regmap handlers defined in this driver, explicitly call the snd_soc_component_init_regmap() to init regmap handler for the component. Signed-off-by: Shengjiu Wang --- sound/soc/fsl/fsl_xcvr.c | 64 ++++++++++++++++++++++++++++++++++++++++ sound/soc/fsl/fsl_xcvr.h | 18 +++++++++++ 2 files changed, 82 insertions(+) diff --git a/sound/soc/fsl/fsl_xcvr.c b/sound/soc/fsl/fsl_xcvr.c index a268fb81a2f8..de25d9e667ee 100644 --- a/sound/soc/fsl/fsl_xcvr.c +++ b/sound/soc/fsl/fsl_xcvr.c @@ -62,6 +62,58 @@ struct fsl_xcvr { u32 spdif_constr_rates_list[SPDIF_NUM_RATES]; }; =20 +static const char * const inc_mode[] =3D { + "On enabled and bitcount increment", "On enabled" +}; + +static SOC_ENUM_SINGLE_DECL(transmit_tstmp_enum, + FSL_XCVR_TX_DPTH_CNTR_CTRL, + FSL_XCVR_TX_DPTH_CNTR_CTRL_TSINC_SHIFT, inc_mode); +static SOC_ENUM_SINGLE_DECL(receive_tstmp_enum, + FSL_XCVR_RX_DPTH_CNTR_CTRL, + FSL_XCVR_RX_DPTH_CNTR_CTRL_TSINC_SHIFT, inc_mode); + +static const struct snd_kcontrol_new fsl_xcvr_timestamp_ctrls[] =3D { + FSL_ASOC_SINGLE_EXT("Transmit Timestamp Control Switch", FSL_XCVR_TX_DPTH= _CNTR_CTRL, + FSL_XCVR_TX_DPTH_CNTR_CTRL_TSEN_SHIFT, 1, 0, + fsl_asoc_get_volsw, fsl_asoc_put_volsw), + FSL_ASOC_ENUM_EXT("Transmit Timestamp Increment", transmit_tstmp_enum, + fsl_asoc_get_enum_double, fsl_asoc_put_enum_double), + FSL_ASOC_SINGLE_EXT("Transmit Timestamp Reset Switch", FSL_XCVR_TX_DPTH_C= NTR_CTRL, + FSL_XCVR_TX_DPTH_CNTR_CTRL_RTSC_SHIFT, 1, 0, + fsl_asoc_get_volsw, fsl_asoc_put_volsw), + FSL_ASOC_SINGLE_EXT("Transmit Bit Counter Reset Switch", FSL_XCVR_TX_DPTH= _CNTR_CTRL, + FSL_XCVR_TX_DPTH_CNTR_CTRL_RBC_SHIFT, 1, 0, + fsl_asoc_get_volsw, fsl_asoc_put_volsw), + FSL_ASOC_SINGLE_XR_SX_EXT_RO("Transmit Timestamp Counter", FSL_XCVR_TX_DP= TH_TSCR, + 1, 32, 0, 0xffffffff, 0, fsl_asoc_get_xr_sx), + FSL_ASOC_SINGLE_XR_SX_EXT_RO("Transmit Bit Counter", FSL_XCVR_TX_DPTH_BCR, + 1, 32, 0, 0xffffffff, 0, fsl_asoc_get_xr_sx), + FSL_ASOC_SINGLE_XR_SX_EXT_RO("Transmit Bit Count Timestamp", FSL_XCVR_TX_= DPTH_BCTR, + 1, 32, 0, 0xffffffff, 0, fsl_asoc_get_xr_sx), + FSL_ASOC_SINGLE_XR_SX_EXT_RO("Transmit Latched Timestamp Counter", FSL_XC= VR_TX_DPTH_BCRR, + 1, 32, 0, 0xffffffff, 0, fsl_asoc_get_xr_sx), + FSL_ASOC_SINGLE_EXT("Receive Timestamp Control Switch", FSL_XCVR_RX_DPTH_= CNTR_CTRL, + FSL_XCVR_RX_DPTH_CNTR_CTRL_TSEN_SHIFT, 1, 0, + fsl_asoc_get_volsw, fsl_asoc_put_volsw), + FSL_ASOC_ENUM_EXT("Receive Timestamp Increment", receive_tstmp_enum, + fsl_asoc_get_enum_double, fsl_asoc_put_enum_double), + FSL_ASOC_SINGLE_EXT("Receive Timestamp Reset Switch", FSL_XCVR_RX_DPTH_CN= TR_CTRL, + FSL_XCVR_RX_DPTH_CNTR_CTRL_RTSC_SHIFT, 1, 0, + fsl_asoc_get_volsw, fsl_asoc_put_volsw), + FSL_ASOC_SINGLE_EXT("Receive Bit Counter Reset Switch", FSL_XCVR_RX_DPTH_= CNTR_CTRL, + FSL_XCVR_RX_DPTH_CNTR_CTRL_RBC_SHIFT, 1, 0, + fsl_asoc_get_volsw, fsl_asoc_put_volsw), + FSL_ASOC_SINGLE_XR_SX_EXT_RO("Receive Timestamp Counter", FSL_XCVR_RX_DPT= H_TSCR, + 1, 32, 0, 0xffffffff, 0, fsl_asoc_get_xr_sx), + FSL_ASOC_SINGLE_XR_SX_EXT_RO("Receive Bit Counter", FSL_XCVR_RX_DPTH_BCR, + 1, 32, 0, 0xffffffff, 0, fsl_asoc_get_xr_sx), + FSL_ASOC_SINGLE_XR_SX_EXT_RO("Receive Bit Count Timestamp", FSL_XCVR_RX_D= PTH_BCTR, + 1, 32, 0, 0xffffffff, 0, fsl_asoc_get_xr_sx), + FSL_ASOC_SINGLE_XR_SX_EXT_RO("Receive Latched Timestamp Counter", FSL_XCV= R_RX_DPTH_BCRR, + 1, 32, 0, 0xffffffff, 0, fsl_asoc_get_xr_sx), +}; + static const struct fsl_xcvr_pll_conf { u8 mfi; /* min=3D0x18, max=3D0x38 */ u32 mfn; /* signed int, 2's compl., min=3D0x3FFF0000, max=3D0x00010000 */ @@ -1070,8 +1122,20 @@ static struct snd_soc_dai_driver fsl_xcvr_dai =3D { }, }; =20 +static int fsl_xcvr_component_probe(struct snd_soc_component *component) +{ + struct fsl_xcvr *xcvr =3D snd_soc_component_get_drvdata(component); + + snd_soc_component_init_regmap(component, xcvr->regmap); + + return 0; +} + static const struct snd_soc_component_driver fsl_xcvr_comp =3D { .name =3D "fsl-xcvr-dai", + .probe =3D fsl_xcvr_component_probe, + .controls =3D fsl_xcvr_timestamp_ctrls, + .num_controls =3D ARRAY_SIZE(fsl_xcvr_timestamp_ctrls), .legacy_dai_naming =3D 1, }; =20 diff --git a/sound/soc/fsl/fsl_xcvr.h b/sound/soc/fsl/fsl_xcvr.h index dade3945cc0c..0cc7945b1d9f 100644 --- a/sound/soc/fsl/fsl_xcvr.h +++ b/sound/soc/fsl/fsl_xcvr.h @@ -233,6 +233,24 @@ #define FSL_XCVR_TX_DPTH_CTRL_CLK_RATIO BIT(29) #define FSL_XCVR_TX_DPTH_CTRL_TM_NO_PRE_BME GENMASK(31, 30) =20 +#define FSL_XCVR_RX_DPTH_CNTR_CTRL_TSEN_SHIFT 0 +#define FSL_XCVR_RX_DPTH_CNTR_CTRL_TSEN BIT(0) +#define FSL_XCVR_RX_DPTH_CNTR_CTRL_TSINC_SHIFT 1 +#define FSL_XCVR_RX_DPTH_CNTR_CTRL_TSINC BIT(1) +#define FSL_XCVR_RX_DPTH_CNTR_CTRL_RBC_SHIFT 8 +#define FSL_XCVR_RX_DPTH_CNTR_CTRL_RBC BIT(8) +#define FSL_XCVR_RX_DPTH_CNTR_CTRL_RTSC_SHIFT 9 +#define FSL_XCVR_RX_DPTH_CNTR_CTRL_RTSC BIT(9) + +#define FSL_XCVR_TX_DPTH_CNTR_CTRL_TSEN_SHIFT 0 +#define FSL_XCVR_TX_DPTH_CNTR_CTRL_TSEN BIT(0) +#define FSL_XCVR_TX_DPTH_CNTR_CTRL_TSINC_SHIFT 1 +#define FSL_XCVR_TX_DPTH_CNTR_CTRL_TSINC BIT(1) +#define FSL_XCVR_TX_DPTH_CNTR_CTRL_RBC_SHIFT 8 +#define FSL_XCVR_TX_DPTH_CNTR_CTRL_RBC BIT(8) +#define FSL_XCVR_TX_DPTH_CNTR_CTRL_RTSC_SHIFT 9 +#define FSL_XCVR_TX_DPTH_CNTR_CTRL_RTSC BIT(9) + #define FSL_XCVR_PHY_AI_CTRL_AI_RESETN BIT(15) #define FSL_XCVR_PHY_AI_CTRL_AI_RWB BIT(31) =20 --=20 2.34.1