From patchwork Thu Jan 20 19:58:29 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Robert Hancock X-Patchwork-Id: 533702 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 AD44DC433FE for ; Thu, 20 Jan 2022 19:59:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1377447AbiATT7Q (ORCPT ); Thu, 20 Jan 2022 14:59:16 -0500 Received: from mx0c-0054df01.pphosted.com ([67.231.159.91]:44332 "EHLO mx0c-0054df01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1377512AbiATT7P (ORCPT ); Thu, 20 Jan 2022 14:59:15 -0500 Received: from pps.filterd (m0208999.ppops.net [127.0.0.1]) by mx0c-0054df01.pphosted.com (8.16.1.2/8.16.1.2) with ESMTP id 20KCf0Ls006546; Thu, 20 Jan 2022 14:59:01 -0500 Received: from can01-qb1-obe.outbound.protection.outlook.com (mail-qb1can01lp2050.outbound.protection.outlook.com [104.47.60.50]) by mx0c-0054df01.pphosted.com (PPS) with ESMTPS id 3dprrpgswg-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 20 Jan 2022 14:59:00 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Ym8iAURX5hKGrreYK0T1LRks9GtE3Lq3QjMGnpLLMomsS39TgjxOh4lZiwQk909177SozkTfNFoNYZFOdCGrmPUM4kuv0EPy0Svi0I4GtMWBasBlkWah5yoOopg37QAeHdjGC6RoWXAUM4Q2tAdFr25s1iG8nR4XrYrZhcSr+TCYSmP9uSvEAeTZ/N312Mbg+R1qa80Beg0sdDNLrAK6ePLKyxIF63ZdrD5d7A7dNiCb0hm2z6Pa7AaxntWvEABFVM4n3zz8iAn9BLcPPj7HDeU9BwZKIpsP9nSe1OxBObaRYlnygmzOjDjePdl1fBuzGRSp8TD1DNS/cIuuRKecZA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=Y+VYeQgNfAkaq5cWPQq7rK1TRYIGbNZAzXN4PRP/q2I=; b=apwzorxkP/EexWZ5hw9x0/Xk21p2QlE6rUpwot3A/SYFOpcdw+daI6eim/fiHwBSzDTQtLEykfHB6ocbPWJc1eH3rV1wGQeH/Cn2lUCPuX0Gru+Kn18gQenQmiJ46jb8Film7YHIiZly3gOYeg2w1a9ZjaMzNa8If8UUFDhEwaJdGdBah7EW6DjgvCVFAQnsrcTIZTYFDKek1mNhJ+DKIpMGCNk5ic+5b6zBnW+SMoJZ2NywKtWhZLF5Yw8xoctIhu0cCr9N7Hsbyn/yWvtjYdOhc9IA4af0WmZzvjSITJ+WM+9TxsxakyEyvnnxHeVgfbFf/LmBrK45C/sHx6ZqTQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=calian.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Y+VYeQgNfAkaq5cWPQq7rK1TRYIGbNZAzXN4PRP/q2I=; b=1divPMbiGqZ3NyGpA9ZcquRxrZe+9eU5pYNWjuBh9APgi8scjg5Tu0XXd1AOaBcMK6JtzSm8lqr8IFfvCmjfAEJuWH8RFV9czlZUKNSvWvIuPXU/iUpfEA3wcGgcyGFRajf7hXGpKWOh/vuzLXmeMIafKDjYaSw6+isfAnyPg50= Received: from YT3PR01MB6274.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:b01:6a::19) by QB1PR01MB2563.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c00:32::31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4909.10; Thu, 20 Jan 2022 19:58:59 +0000 Received: from YT3PR01MB6274.CANPRD01.PROD.OUTLOOK.COM ([fe80::6929:c39f:d893:b6c8]) by YT3PR01MB6274.CANPRD01.PROD.OUTLOOK.COM ([fe80::6929:c39f:d893:b6c8%2]) with mapi id 15.20.4888.014; Thu, 20 Jan 2022 19:58:57 +0000 From: Robert Hancock To: alsa-devel@alsa-project.org Cc: lgirdwood@gmail.com, broonie@kernel.org, robh+dt@kernel.org, perex@perex.cz, tiwai@suse.com, michal.simek@xilinx.com, kuninori.morimoto.gx@renesas.com, maruthi.srinivas.bayyavarapu@xilinx.com, devicetree@vger.kernel.org, Robert Hancock Subject: [PATCH v3 3/6] ASoC: xilinx: xlnx_i2s: Handle sysclk setting Date: Thu, 20 Jan 2022 13:58:29 -0600 Message-Id: <20220120195832.1742271-4-robert.hancock@calian.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20220120195832.1742271-1-robert.hancock@calian.com> References: <20220120195832.1742271-1-robert.hancock@calian.com> X-ClientProxiedBy: CH0PR04CA0024.namprd04.prod.outlook.com (2603:10b6:610:76::29) To YT3PR01MB6274.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:b01:6a::19) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 4027f644-cf0a-4fe5-bd7a-08d9dc4f4a9c X-MS-TrafficTypeDiagnostic: QB1PR01MB2563:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:5516; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: AJ2L+bJ5ZNrqjm3mH06ur9rYjL6GsQ9Szg1I3UaMyf9htjMmCKl/USuMlFFH2l/dMl9ZwhObrDxDfWCHxLrxcxd8Qyi7x8Qd8SwqHQ4TJfuhkNvkLtoReN01Ga3j/ASy/zu6w1U8g90hb9281Gykeax/mOeUOqXIzM2WnvEoz4Rf1h8w+BfHpDcrT8L1BLbWGfdcMRfaX0gSozKJ1R95DCdcVvB0wxfY+VSmWo7X7T8fJf5fCxLIDIp+up/iXh9fVoQ4ApBh5YJI5IUYKvvCDSJdxozPmbwTZJ4Ww5JxE0V05d6tnK0WDcb8ejNKuIfXMLx46CE9a9EqObzS3+7cMLvdhl8en6Dfz6300EkKR0sKu5uXKK08XnFpuDz0CNd703jO9yRQVPMHR39cwWaNB/PuaK6vsWoqfhQLv3UGwoG12qyrCeA1vX4wTAnSPcppPxyYsdvhn6LfXze9jmc2TKnMkooZ6W96WXZ7B+64pId28X/tOo0ElROwkxyU6tc+4hAHDMEWZTPxjEzGrQIJF639kYJJBueXNCbGfoYgNiz8LtlH8hPhZNPY/50kEE0TShG33c5pKjTkMyxtCxN/a7WZVFhL0T5PQIxPrJIXgRYQTXPkajVfnJYSsKvVVXJFIxrM/RZNXfVH/nFih+vgrWtWObVGP5kGEkjDIF4otSqkephNcwGLsSoQjyI8g2AYKX9aGqPdFpCV0dNGJTKAxA== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:YT3PR01MB6274.CANPRD01.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(4636009)(366004)(4326008)(86362001)(8936002)(6486002)(1076003)(83380400001)(8676002)(6512007)(2616005)(107886003)(5660300002)(6916009)(66556008)(66946007)(66476007)(2906002)(508600001)(38350700002)(38100700002)(44832011)(26005)(7416002)(52116002)(186003)(6506007)(316002)(36756003)(6666004); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 9LP6tL+l0D9hB/u60aiKqaiSQQBlL/4LcMU+TwuwGa4GR0BIuNdF1Kusho0bHIvJBm44HNVww9kYrnmZIq505s1XDTNNE5BB+TOGtz+ohG0rFLGOjDGJ/99eeDAL5cV0m7YUANmAUQcCJ6tMD2NDov9jCEIUyiV99S9FDW6eGIWJDjD5sH3m31si8FTcPSG34vwEtzX5dWUKd3njMo5TqBpIrjD9ZGuRSzIViV8m5DLLN/fmEJftdd5eBvReUgL970iKldfHjB+SaP24M/z+gMfPwdWVxA1QsU+Wir2uMnNAH2BytiqOWTYXVvZ+jI2EEoEPCid8T3j23k2t1/cs9o6kyFoDMSwSXwssBzNSMYEgArmdDlRxJK08GZehU3N/lgMNonbjwBC5bThiTs6QMAwc9es/MNkVFDiDPT3RmQ3ysqKM1kuZwlCIjr6Y+7opiqIXXjmt429HqLc/k6ZcFSo7YydqNCCOZKvJsPrw5i2HQl10cRgR8+LJiXzupkw67wteC4ZdMG9OIKPyGvkceQAsIRudHj93OgHAFQVb3AcDHXsy0zX2Hy4wChiHFBLtYWYQzF1DRJGrtBkTXDuHfo5yOiQIs7aSccga0/yJLcHl+vEoMSNo3XqrEuXaQkNjSEfA3lTieDcKXYY/sdkSa9cd7NUZfnRnatjjxe1aNuDyhtQ97g2VlCRRcUah+ORgTPLs75lihaAR5rsbgEgmv38dljh96tBbORkHkNlH8pfiAJTQgfR0XH1kLuKrfD5K0fOkFM0SyKx6RUE63N8GJSgPmUhMCu+wQX6EWiGwPTqQdv350cW/PAyp0YNMnNN2uAsDxW5/BAgIj3lWw0x2AWvygoALwX9L/xUm1k0YPQiMYSnj3eAjfL6bmHCYZxYfukyZW682mhjrJbAwb7YJWs8Pc2rDKaypak5KLdgR7MzMGj90fjZby78GE4fqx6zJA64EkDBCPn4X8/lIC8g+zG1bssx55TcZd2KqlHLOielOJoJOBDx83F61CHf9ShmMgaNV+O8IdAbRZV3Ju1GcspnaU7wN70DmID7TscqF+G8+v02aLO1sVuVvvMXX6nju8D0x3NOnbfdafiq8ALkR3JY56W4U7/Z3x7s+uFdvgu0w7hwH91PyuMBf2hQbLAXhuIED9anUJHraUxqgWtxmkCX073Dkr5407B8CLHtN99/uUohFJE+V22CmobeXoikSXY56gCqgZkREOWdilft2SBcqJJHusbw2y5cwfNohR+WzC3loPueYlx/5YmV25Hg2lRNZ0d5yBltXELRlKmUY3qfz5Edh6x7txAFofM5e9i85NFNGhCVCRYy3MIlxTc9c1RoJj3DLXHorGISmHJC/006puA8cyozMgwVB12y8JLBRl7pWoDSEMBKJwYStSKpq4ecLg0f9ZlIPTy5VxoewarTOK3ZWNOdiuv8Q9xbY+mKcJus/b19g3QGxdMS5DOdOMygaGlCjYFN25aRechXMVw7kiGJVTitQCabwdaLZRfvjFRgEmtDDb1HlhZtAjpqGYkronYqFWCZvJhFcPIw0HfgTwUvFowv6MPTxJEZrH6N8HE+1K3asDlBs1t7b6Po+ICnRpx7yMwDE+HPJUXHxQ18hvSF76/OOnmxVpTdg5jUWZA3YEaWVqEZehU4mjOnaKpOwzAk4RyJ9m6wIP+tavQMMj6MJr4uDLy31EFjwcLk= X-OriginatorOrg: calian.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4027f644-cf0a-4fe5-bd7a-08d9dc4f4a9c X-MS-Exchange-CrossTenant-AuthSource: YT3PR01MB6274.CANPRD01.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Jan 2022 19:58:56.3980 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 23b57807-562f-49ad-92c4-3bb0f07a1fdf X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: XViaf50huznmEPcCtRAsi4ru75fPJ+AZMddE0M88JeJTVC4+Wcl7CEoQ9qC7H4NBJZYdlu/gqqMK8+bvYi8yEd2jWXXW6Hnk8fc0eKHuj0Q= X-MS-Exchange-Transport-CrossTenantHeadersStamped: QB1PR01MB2563 X-Proofpoint-ORIG-GUID: q1voieaYanJoeKkmZ9gQ1yuKlHIGcFP4 X-Proofpoint-GUID: q1voieaYanJoeKkmZ9gQ1yuKlHIGcFP4 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.816,Hydra:6.0.425,FMLib:17.11.62.513 definitions=2022-01-20_08,2022-01-20_01,2021-12-02_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 bulkscore=0 adultscore=0 lowpriorityscore=0 mlxlogscore=704 phishscore=0 mlxscore=0 priorityscore=1501 malwarescore=0 suspectscore=0 spamscore=0 impostorscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2110150000 definitions=main-2201200100 Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org This driver previously only handled the set_clkdiv divider callback when setting the SCLK Out Divider field in the I2S Timing Control register. However, when using the simple-audio-card driver, the set_sysclk function is called but not set_clkdiv. This caused the divider not to be set, leaving it at an invalid value of 0 and resulting in a very low SCLK output rate. Handle set_clkdiv and store the sysclk (MCLK) value for later use in hw_params to set the SCLK Out Divider such that: MCLK/SCLK = divider * 2 Signed-off-by: Robert Hancock --- sound/soc/xilinx/xlnx_i2s.c | 91 +++++++++++++++++++++++++++++++++---- 1 file changed, 81 insertions(+), 10 deletions(-) diff --git a/sound/soc/xilinx/xlnx_i2s.c b/sound/soc/xilinx/xlnx_i2s.c index 3bafa34b789a..4cc6ee7c81a3 100644 --- a/sound/soc/xilinx/xlnx_i2s.c +++ b/sound/soc/xilinx/xlnx_i2s.c @@ -18,6 +18,8 @@ #define DRV_NAME "xlnx_i2s" #define I2S_CORE_CTRL_OFFSET 0x08 +#define I2S_CORE_CTRL_32BIT_LRCLK BIT(3) +#define I2S_CORE_CTRL_ENABLE BIT(0) #define I2S_I2STIM_OFFSET 0x20 #define I2S_CH0_OFFSET 0x30 #define I2S_I2STIM_VALID_MASK GENMASK(7, 0) @@ -25,6 +27,12 @@ struct xlnx_i2s_drv_data { struct snd_soc_dai_driver dai_drv; void __iomem *base; + unsigned int sysclk; + u32 data_width; + u32 channels; + bool is_32bit_lrclk; + struct snd_ratnum ratnum; + struct snd_pcm_hw_constraint_ratnums rate_constraints; }; static int xlnx_i2s_set_sclkout_div(struct snd_soc_dai *cpu_dai, @@ -35,11 +43,50 @@ static int xlnx_i2s_set_sclkout_div(struct snd_soc_dai *cpu_dai, if (!div || (div & ~I2S_I2STIM_VALID_MASK)) return -EINVAL; + drv_data->sysclk = 0; + writel(div, drv_data->base + I2S_I2STIM_OFFSET); return 0; } +static int xlnx_i2s_set_sysclk(struct snd_soc_dai *dai, + int clk_id, unsigned int freq, int dir) +{ + struct xlnx_i2s_drv_data *drv_data = snd_soc_dai_get_drvdata(dai); + + drv_data->sysclk = freq; + if (freq) { + unsigned int bits_per_sample; + + if (drv_data->is_32bit_lrclk) + bits_per_sample = 32; + else + bits_per_sample = drv_data->data_width; + + drv_data->ratnum.num = freq / (bits_per_sample * drv_data->channels) / 2; + drv_data->ratnum.den_step = 1; + drv_data->ratnum.den_min = 1; + drv_data->ratnum.den_max = 255; + drv_data->rate_constraints.rats = &drv_data->ratnum; + drv_data->rate_constraints.nrats = 1; + } + return 0; +} + +static int xlnx_i2s_startup(struct snd_pcm_substream *substream, + struct snd_soc_dai *dai) +{ + struct xlnx_i2s_drv_data *drv_data = snd_soc_dai_get_drvdata(dai); + + if (drv_data->sysclk) + return snd_pcm_hw_constraint_ratnums(substream->runtime, 0, + SNDRV_PCM_HW_PARAM_RATE, + &drv_data->rate_constraints); + + return 0; +} + static int xlnx_i2s_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params, struct snd_soc_dai *i2s_dai) @@ -47,6 +94,26 @@ static int xlnx_i2s_hw_params(struct snd_pcm_substream *substream, u32 reg_off, chan_id; struct xlnx_i2s_drv_data *drv_data = snd_soc_dai_get_drvdata(i2s_dai); + if (drv_data->sysclk) { + unsigned int bits_per_sample, sclk, sclk_div; + + if (drv_data->is_32bit_lrclk) + bits_per_sample = 32; + else + bits_per_sample = drv_data->data_width; + + sclk = params_rate(params) * bits_per_sample * params_channels(params); + sclk_div = drv_data->sysclk / sclk / 2; + + if ((drv_data->sysclk % sclk != 0) || + !sclk_div || (sclk_div & ~I2S_I2STIM_VALID_MASK)) { + dev_warn(i2s_dai->dev, "invalid SCLK divisor for sysclk %u and sclk %u\n", + drv_data->sysclk, sclk); + return -EINVAL; + } + writel(sclk_div, drv_data->base + I2S_I2STIM_OFFSET); + } + chan_id = params_channels(params) / 2; while (chan_id > 0) { @@ -67,7 +134,7 @@ static int xlnx_i2s_trigger(struct snd_pcm_substream *substream, int cmd, case SNDRV_PCM_TRIGGER_START: case SNDRV_PCM_TRIGGER_RESUME: case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: - writel(1, drv_data->base + I2S_CORE_CTRL_OFFSET); + writel(I2S_CORE_CTRL_ENABLE, drv_data->base + I2S_CORE_CTRL_OFFSET); break; case SNDRV_PCM_TRIGGER_STOP: case SNDRV_PCM_TRIGGER_SUSPEND: @@ -83,7 +150,9 @@ static int xlnx_i2s_trigger(struct snd_pcm_substream *substream, int cmd, static const struct snd_soc_dai_ops xlnx_i2s_dai_ops = { .trigger = xlnx_i2s_trigger, + .set_sysclk = xlnx_i2s_set_sysclk, .set_clkdiv = xlnx_i2s_set_sclkout_div, + .startup = xlnx_i2s_startup, .hw_params = xlnx_i2s_hw_params }; @@ -102,7 +171,7 @@ static int xlnx_i2s_probe(struct platform_device *pdev) { struct xlnx_i2s_drv_data *drv_data; int ret; - u32 ch, format, data_width; + u32 format; struct device *dev = &pdev->dev; struct device_node *node = dev->of_node; @@ -114,19 +183,19 @@ static int xlnx_i2s_probe(struct platform_device *pdev) if (IS_ERR(drv_data->base)) return PTR_ERR(drv_data->base); - ret = of_property_read_u32(node, "xlnx,num-channels", &ch); + ret = of_property_read_u32(node, "xlnx,num-channels", &drv_data->channels); if (ret < 0) { dev_err(dev, "cannot get supported channels\n"); return ret; } - ch = ch * 2; + drv_data->channels *= 2; - ret = of_property_read_u32(node, "xlnx,dwidth", &data_width); + ret = of_property_read_u32(node, "xlnx,dwidth", &drv_data->data_width); if (ret < 0) { dev_err(dev, "cannot get data width\n"); return ret; } - switch (data_width) { + switch (drv_data->data_width) { case 16: format = SNDRV_PCM_FMTBIT_S16_LE; break; @@ -141,21 +210,23 @@ static int xlnx_i2s_probe(struct platform_device *pdev) drv_data->dai_drv.name = "xlnx_i2s_playback"; drv_data->dai_drv.playback.stream_name = "Playback"; drv_data->dai_drv.playback.formats = format; - drv_data->dai_drv.playback.channels_min = ch; - drv_data->dai_drv.playback.channels_max = ch; + drv_data->dai_drv.playback.channels_min = drv_data->channels; + drv_data->dai_drv.playback.channels_max = drv_data->channels; drv_data->dai_drv.playback.rates = SNDRV_PCM_RATE_8000_192000; drv_data->dai_drv.ops = &xlnx_i2s_dai_ops; } else if (of_device_is_compatible(node, "xlnx,i2s-receiver-1.0")) { drv_data->dai_drv.name = "xlnx_i2s_capture"; drv_data->dai_drv.capture.stream_name = "Capture"; drv_data->dai_drv.capture.formats = format; - drv_data->dai_drv.capture.channels_min = ch; - drv_data->dai_drv.capture.channels_max = ch; + drv_data->dai_drv.capture.channels_min = drv_data->channels; + drv_data->dai_drv.capture.channels_max = drv_data->channels; drv_data->dai_drv.capture.rates = SNDRV_PCM_RATE_8000_192000; drv_data->dai_drv.ops = &xlnx_i2s_dai_ops; } else { return -ENODEV; } + drv_data->is_32bit_lrclk = readl(drv_data->base + I2S_CORE_CTRL_OFFSET) & + I2S_CORE_CTRL_32BIT_LRCLK; dev_set_drvdata(&pdev->dev, drv_data); From patchwork Thu Jan 20 19:58:31 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Robert Hancock X-Patchwork-Id: 533701 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 7DBABC433FE for ; Thu, 20 Jan 2022 19:59:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1347040AbiATT7s (ORCPT ); Thu, 20 Jan 2022 14:59:48 -0500 Received: from mx0d-0054df01.pphosted.com ([67.231.150.19]:17397 "EHLO mx0d-0054df01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1377518AbiATT7r (ORCPT ); Thu, 20 Jan 2022 14:59:47 -0500 Received: from pps.filterd (m0209000.ppops.net [127.0.0.1]) by mx0c-0054df01.pphosted.com (8.16.1.2/8.16.1.2) with ESMTP id 20KBlB4W009477; Thu, 20 Jan 2022 14:59:03 -0500 Received: from can01-qb1-obe.outbound.protection.outlook.com (mail-qb1can01lp2057.outbound.protection.outlook.com [104.47.60.57]) by mx0c-0054df01.pphosted.com (PPS) with ESMTPS id 3dpmt68sbh-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 20 Jan 2022 14:59:02 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cFFID0xniu+6EAjZGa1vp12g6eGpJvV5tZkAEeYf/ApXrIKC0iAwHuCeUUx0HN/qFVvh/ec7G+JUbwgv+4hqdNugWwIyHuZazdPMkEWBzI7ZTeupWNw1vI3iKBjbMfrvQBEI6K286ZIqPOSnv0L8yMMZcGE0ugvv3pje9F/0YM+UK9F57/V97SgcRkCaKx8FtKgdK+q+JSpE3Ihcy7o8aKmWyx2wkQTotYAn6loNh3kA155jtvehfSgTMgh0T8GEG/L53di1ltI/dujE+0fpJ3Fj6596hv/rW+rO3LCeftycykQzY1DrgoC6IrItbZB4PFL9MaX2UqtsfqmWDfaVbA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=jSl/POU3KzFauayXA4pKCo4khldV4nGRDbvejzPM0Pc=; b=c0WbrEtXN/cJXyAIJZeo7n0tIR/RIvyFXifd5rrJfflmTaZmpzuOvvARkda2HRuhF8CvsdbS35QDZsIhX4nuKY7GBXrN6A86F6c4r1jZgV0YkXcgjaKwY1GDOJpZHOn0rL09YDgNuLGf0KuWNT5PUVMhqx3qwwwu0NvuxZWnziso8LSiZ5tma/13S/NjcjOig8vF9j7rkW8ID4L8B2tLzVrDMkL7Ejew8LVBZEnTS/3z299ki54SoEE7MAQqHUc82bKidnoD9W1WuTlPALjV/4T/4CKcON9XBF2kKdKgHiKn+Jfp05jbCjVGYXQogIx/ZYPAxk4t+nN7gKSj2C789w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=calian.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=jSl/POU3KzFauayXA4pKCo4khldV4nGRDbvejzPM0Pc=; b=SYkVYK1Y+6QKE1O5VFyTqpgtWnSPpbYsURQ5LACQ/qqzCczVCpUoEpc1/iuOI1y7jSTQa4neFw5EthhR+gRpHz0+yNWD91eEq6ufUo/3N3PP+gka502VSvVmzv1jTjq0g8RUD0WUoVJjho8VCL8EbGcna5+grBDw452seDt5ZtQ= Received: from YT3PR01MB6274.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:b01:6a::19) by YQXPR01MB5019.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c01:27::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4909.10; Thu, 20 Jan 2022 19:59:00 +0000 Received: from YT3PR01MB6274.CANPRD01.PROD.OUTLOOK.COM ([fe80::6929:c39f:d893:b6c8]) by YT3PR01MB6274.CANPRD01.PROD.OUTLOOK.COM ([fe80::6929:c39f:d893:b6c8%2]) with mapi id 15.20.4888.014; Thu, 20 Jan 2022 19:59:00 +0000 From: Robert Hancock To: alsa-devel@alsa-project.org Cc: lgirdwood@gmail.com, broonie@kernel.org, robh+dt@kernel.org, perex@perex.cz, tiwai@suse.com, michal.simek@xilinx.com, kuninori.morimoto.gx@renesas.com, maruthi.srinivas.bayyavarapu@xilinx.com, devicetree@vger.kernel.org, Robert Hancock Subject: [PATCH v3 5/6] ASoC: dt-bindings: simple-card: document new system-clock-fixed flag Date: Thu, 20 Jan 2022 13:58:31 -0600 Message-Id: <20220120195832.1742271-6-robert.hancock@calian.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20220120195832.1742271-1-robert.hancock@calian.com> References: <20220120195832.1742271-1-robert.hancock@calian.com> X-ClientProxiedBy: CH0PR04CA0024.namprd04.prod.outlook.com (2603:10b6:610:76::29) To YT3PR01MB6274.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:b01:6a::19) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 458bb950-4588-42f1-0f30-08d9dc4f4c32 X-MS-TrafficTypeDiagnostic: YQXPR01MB5019:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:8273; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 4cmdW7nazTAIzt65SV9c2qnnQ54/V5ZJwlBk/QNKi4iqmOc3+EXYBQCzuNfnhJZZcedLKk2SZ58ZRPkzbWQrv1l2aw++hKqfHj6EIVco33mXIak/QUXnw0rBa+mGrWiWCWSfqO+8tXBxpkx5h5f48Ayt0W2wvaW0j+j7mgYq5B9qAWPFY4/i4dxcnRu0Dkvml5kOvmNWTfptbGoROUdUO0zGWVj7MbI8kmSdGp4oPGB/dPe8seyk3JzzmnjZX16MllNihZ9HBGO4NGDvJRWTQCzK0zCIylZSzJbiNBdnENMDP6bfvopZnzX099TMPWU+3yA3bqJMHwShGFPBXvyHL+jXjVAhW23AE/VD/mRn6FuqmSStKTruOgpQp7dgN1d0/MqNSGXEQjd4CeB0BhV42mHXJiStfWKBRY+f8qGt+ijawGUHNOGcdX6+IcRiS8JzwLahgGLSHNPmpPPuCA6Fc+5HBLHZBhHsBoJVu6kUO6XEfrTuKXNJlDebbzAcOLc3lBTk5YREO03NEPIpjeheTJ7uO3XKDeTtOp+b18e2UMWPzbz3q2Jd6bqbEXgrTypnJ19fR9vdRBFAUIGcgE01//te4PMdWPorqfTSewyVyCrr+uW8MjlmscLs+VKbRFc3OJFQJMZAFMxQORs2oanRzjyL+UB6aUPyrOWdZGT499ZdU//cOOdbPnko0/wSepu2rmDOF4OmIZeNWD5ZytxI5w== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:YT3PR01MB6274.CANPRD01.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(4636009)(366004)(26005)(38350700002)(6916009)(186003)(38100700002)(1076003)(36756003)(6506007)(8936002)(86362001)(4326008)(2906002)(6666004)(107886003)(52116002)(83380400001)(7416002)(508600001)(316002)(2616005)(5660300002)(44832011)(66556008)(6486002)(66476007)(66946007)(8676002)(6512007); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Q9i78p6XXxnDm94dE6Vm+ZlKpDI8iIhU4Q4T1RKtKFeutbURTRlBAkHUEVMn8kAZM9q1lAIJXX5BscO7VImIzM9deUsPezsVmEVfHMeQWCOKvacLppfJVMum66pDKX3/nyz8Xq/pnFENNgPCh6FaKA8IVwWxeQ3jc9PnDTL5p9sAFfvrtZnSzgcMzbqawT7zPHnGG0qsO1rMwU51m6w4NENdVyYXzfMqcZDxluih7k7QBUf2e169VuI296zJNk/eCEqZLuiL58TsFWsbdn4TvPev1Qz8eyPwNnR1/MQzoJbkPbZ9IT8l6PpxaEUXmrYu6qFQ4u1R37L/AMN8L7mPgDNc2+HG72Bhu20TXYkP6kzPbkGa5EzByu0Y7xsBP/m/YRevAZbStXvBlN+vKUrQZoC9QE7u438jlhbxlY5ObtEft55oZfh+WQQEVUn46gYjib+zFTG8ntdT1wLY/rOqgBMI5c21EUtu2StOcXemueg3yaG7w62TAF6IIwt4e+JXxzGE3yxu+ZrwtCpc5HQCj50D6EuH36pIe4xRAW59KMrUitnEZp3zxCnQpAc2dhIa7tlYIexYNBpmXtYIBGCG8EmW+IjyPcZ2p2OPLCSVFoSYO/yGBNdbsbDzs842w3iAJh9GEkHNbZCMjcbN9cqUV+C3XGF+fJcZeRTRxZlerdyIwEcTZDbE7CQGKDoDJm/0lPepxjTXvUFw+Xe09vVsEualcWMB7BHUWZyH9UHyZ4eQOYTUjaz9WFzTSAJua+oLbOPYvIIexiEdDFfvT4D+iS99siI+vUe9Q0W2vuRJQrxTszGXCfhVftN/82FRclmqzWIUJ74xYZD2gnbVV7TV5w5ccR6TDcdSwX6IlWMzFUN3eHcT4YvYhw05cVBWLNtZlXnp5oy6+BjEOHtwVk2sbPt6g/rqHTeNt6cRKW52m/0tSIpq2osZqqoLLrZljeSqoN1TOXE7u2pZl1W/mMT4B7FKlMZoO4CcPujKk4zVkwemhXoZtdZgbgBTmUy5CbJNxBlcKJO/8tKnYsrfwoLhlj0J1y/xiCzsuNObp3CJD+tRV9KbkIT1Q5QYUZNg1qtmokK0jSeSGXXTJdjmI4Tbyjs3paLBDM0E8K9Pvd3/kMJK/vyYK54bmqwnpV8EN3KK8GPB16pRNYDwX6S3AkWWd9B7x8ujA9SZwbNerI9hAwqwmnkWAG+/NwQ3r3CQDnv7asJPnbJ9CCG1irP+giHAHb9dPNnByLam2OfoPMuxPgjZu5q4H+JKpnVm1HLnlq7gu18RiYZONgRvmtqcLagWkp7te6gCALkVA7mHpB7mUJN9bzTeWG/j5USXpaEN9L82EXqRKrnvBrjtWb6DcCzilkhIaXzRrwhR82s0N5woF1/blAWibmD+6W+kPy+zSFWa3HItiuMqsdi8E6bWmXNQxKZLQUycaoU36ZdGo9cedJbuaC/CmNquGczhSpqb8BRnHP/5HRoZgNaVyHADFITreN3EhAzt9NU4IpGsw9i87gf9YMwCw+Vv4bQgKWoYggKyL+72K0zpS4aHHuWR99GAflgdyMFOf+dt8peUYXUW6kpfQqwZ2mBzrEW9h1R5KcxS30CwtiDIkGW2iBpM9u5RzOsktq1BqiFXyM2YiWLAGuuXz6cQsNohfgTTGVamtovziuHnNvhlRgRq5iDKG/9GEJX5AxfzbP7V127PWyeXk0U= X-OriginatorOrg: calian.com X-MS-Exchange-CrossTenant-Network-Message-Id: 458bb950-4588-42f1-0f30-08d9dc4f4c32 X-MS-Exchange-CrossTenant-AuthSource: YT3PR01MB6274.CANPRD01.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Jan 2022 19:58:58.9918 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 23b57807-562f-49ad-92c4-3bb0f07a1fdf X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: GvHTEHhn6kMkmBm/4qDVmmXppnIVvgz+NVlJbHmSGBs4GOJ8B9bNVVQpV+fzou9Yi1FcdP5YsIx89ThqDokAA+qvek3Zu97ITgMjJBXOSPk= X-MS-Exchange-Transport-CrossTenantHeadersStamped: YQXPR01MB5019 X-Proofpoint-GUID: 0NKANkMP3z_8fDW69PV31J1PA_GNfocm X-Proofpoint-ORIG-GUID: 0NKANkMP3z_8fDW69PV31J1PA_GNfocm X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.816,Hydra:6.0.425,FMLib:17.11.62.513 definitions=2022-01-20_08,2022-01-20_01,2021-12-02_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 mlxscore=0 impostorscore=0 adultscore=0 spamscore=0 mlxlogscore=543 suspectscore=0 priorityscore=1501 malwarescore=0 clxscore=1015 phishscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2110150000 definitions=main-2201200100 Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org Document the new system-clock-fixed flag, which can be used to specify that the driver cannot or should not allow the clock frequency of the mapped clock to be modified. Signed-off-by: Robert Hancock --- .../devicetree/bindings/sound/simple-card.yaml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Documentation/devicetree/bindings/sound/simple-card.yaml b/Documentation/devicetree/bindings/sound/simple-card.yaml index 45fd9fd9eb54..00597dc4f396 100644 --- a/Documentation/devicetree/bindings/sound/simple-card.yaml +++ b/Documentation/devicetree/bindings/sound/simple-card.yaml @@ -48,6 +48,15 @@ definitions: It is useful for some aCPUs with fixed clocks. $ref: /schemas/types.yaml#/definitions/flag + system-clock-fixed: + description: | + Specifies that the clock frequency should not be modified. + Implied when system-clock-frequency is specified, but can be used when + a clock is mapped to the device whose frequency cannot or should not be + changed. When mclk-fs is also specified, this restricts the device to a + single fixed sampling rate. + $ref: /schemas/types.yaml#/definitions/flag + mclk-fs: description: | Multiplication factor between stream rate and codec mclk. @@ -134,6 +143,8 @@ definitions: $ref: "#/definitions/system-clock-frequency" system-clock-direction-out: $ref: "#/definitions/system-clock-direction-out" + system-clock-fixed: + $ref: "#/definitions/system-clock-fixed" required: - sound-dai From patchwork Thu Jan 20 19:58:32 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Robert Hancock X-Patchwork-Id: 533700 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 AADD6C433EF for ; Thu, 20 Jan 2022 19:59:56 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1377523AbiATT7y (ORCPT ); Thu, 20 Jan 2022 14:59:54 -0500 Received: from mx0d-0054df01.pphosted.com ([67.231.150.19]:20748 "EHLO mx0d-0054df01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1377524AbiATT7u (ORCPT ); Thu, 20 Jan 2022 14:59:50 -0500 Received: from pps.filterd (m0209000.ppops.net [127.0.0.1]) by mx0c-0054df01.pphosted.com (8.16.1.2/8.16.1.2) with ESMTP id 20KBU4fp019111; Thu, 20 Jan 2022 14:59:03 -0500 Received: from can01-to1-obe.outbound.protection.outlook.com (mail-to1can01lp2054.outbound.protection.outlook.com [104.47.61.54]) by mx0c-0054df01.pphosted.com (PPS) with ESMTPS id 3dpmt68sbj-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 20 Jan 2022 14:59:02 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=eJedHcep6vc2WjPEq0AUP+GIRflWYp8vgYsgqfTjtPNdaN6r9DcEFdAmMSjqFP2O/K56eRArHUv+eHATRC2K/IfFZG4QPqMpMiIQ7sb3sQqRyNsqJf4Ax8qpJyCUhkekP8zUQS07/eWpXzC/+ZrKvNvj5H8RhIc3Zw0/cgpMQh+u653TY2xaq36ObXUDLY35fE+JGr+GSB0ieWQplwnK+XfDhSu9HejM2zR5ZaoaSjw51xxpj1QS6AQ4x/ohJEyVzZYkElhz+ReO4e+C6NiIahLw6f/5RMF1k6bCPrW3yJZ01saVqWUx7RJIwn7JspvU01uG67SqtBlZsEAjpcH9Pw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=gMgsfwpumy/jE8Gq3Tpjiu55FEOAd72bTZuTjwVjA24=; b=mXGoeslt9k6gvIQ0hggy35pPwsy/Ky2cjSfr0E62RqnsopRbMF80Q9OMmcCVMz+7tk4JhUqpMPQSMkcIEeTqr/ZXUfdOwOaSZ9Lsl+JoBeuFNQTXdFlvGpqegIvN/5pawEeXDFZ2hLhkL/+d1hyG3DbcShFoCqrWWhcIEGnplPRSPLmbBtzYOg6dJBPBbp5W5XHuwP8BxxARc7Bw8uJjDEENJr/Kr1apRUG15PiGFDRh/iH28tB9dGKJ/w/r2z/rCRe4ZQEV8PtPQev6QCwuQr0CP5i72ZVy0YMgGXlsLpTQMkgc8BeoejBqg0X9hQ5BrnNlHDlDh5cIn8jjG5NyYQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=calian.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=gMgsfwpumy/jE8Gq3Tpjiu55FEOAd72bTZuTjwVjA24=; b=Pm95KuRbHls4ftSs7NxGnPpd4GUn+4JNHJP9wkpzG8WTIPllpnkVSmZuvQIXrZupHtwgTL+r9csHy8cU2JvXbAeG4jW7/plhTS99I7QbawcE788uOIi3YqH8gyTUSUZ5tEd90RZegt5o7Rago/a96KA+sWdtZfIoRMLi6Ti80Jk= Received: from YT3PR01MB6274.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:b01:6a::19) by YQXPR01MB2710.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c00:48::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4909.7; Thu, 20 Jan 2022 19:59:00 +0000 Received: from YT3PR01MB6274.CANPRD01.PROD.OUTLOOK.COM ([fe80::6929:c39f:d893:b6c8]) by YT3PR01MB6274.CANPRD01.PROD.OUTLOOK.COM ([fe80::6929:c39f:d893:b6c8%2]) with mapi id 15.20.4888.014; Thu, 20 Jan 2022 19:59:00 +0000 From: Robert Hancock To: alsa-devel@alsa-project.org Cc: lgirdwood@gmail.com, broonie@kernel.org, robh+dt@kernel.org, perex@perex.cz, tiwai@suse.com, michal.simek@xilinx.com, kuninori.morimoto.gx@renesas.com, maruthi.srinivas.bayyavarapu@xilinx.com, devicetree@vger.kernel.org, Robert Hancock Subject: [PATCH v3 6/6] ASoC: simple-card-utils: Add new system-clock-fixed flag Date: Thu, 20 Jan 2022 13:58:32 -0600 Message-Id: <20220120195832.1742271-7-robert.hancock@calian.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20220120195832.1742271-1-robert.hancock@calian.com> References: <20220120195832.1742271-1-robert.hancock@calian.com> X-ClientProxiedBy: CH0PR04CA0024.namprd04.prod.outlook.com (2603:10b6:610:76::29) To YT3PR01MB6274.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:b01:6a::19) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 667fbdcb-4a50-44b7-a185-08d9dc4f4d20 X-MS-TrafficTypeDiagnostic: YQXPR01MB2710:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:3513; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 5fdxjapaczwiEDcb4blO3fBjZxOrBJB2pNPA6Xm6yp0W4OXbSM90PmS5CkfcTAvTKBDTORComXEpyeM7DjM0Yf7f4n6nAu92HjdbywX9eQvhyhaXGjqpVy7533R6P+ksLwl6qDuvG58joRQvbh+UL8HdZWr83YPhVJw/L3IW606iJFSBIg5+R8+5ntTanSmDEYivsUDNhDDpFD+vdlZjPBo2X9xEMC6hr8vsbjq7tTD8YPMLi2DCDb31WV084scLGS6V9Lq0YNDr6weryNs+XYxz4dsl4UzHQ8slsMB8t3lLkiFgkUEpYdeGYySXb+/p80RjmaA9UvRVQL6Nkl0hg9BmFVf+B+0PsoVx8CfwLQBmlI/MAVbmfUmKkwNphdze/Z0k2VYLcum6cXSfC/rrdM+VsKNjJC/mVimJxH7n9vHWSLYx0EpBan6BPRfpaJh4sBktHVKj74Bc8MzTfTfiMGJoxeWoBBUQ7I/0wn+/YamtBBgmTR3/p+p8ebxCATLLAKpPZzSI4FkpFYZRjGAftzV7FElRtIDUgf+ySsLNn+IblIXWN3IT1EBKzGetwwFGzn2aEjKKesKVdPMTp7P5zvKfKvk7cQgM/2qvCv9YMOT4ZDse5LcYIcb8uSba3aHXXQw0r11ByEnMF3ZT6Gex1KJlsJxLhsgzJZc+HmIxx+SWfDXTuszWVu2LZgsRWnJZnV5BOvVy4Czh8GMAi9TlwQ== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:YT3PR01MB6274.CANPRD01.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(4636009)(366004)(6916009)(36756003)(6666004)(26005)(2616005)(6512007)(66946007)(38100700002)(38350700002)(508600001)(8676002)(5660300002)(186003)(1076003)(7416002)(2906002)(6486002)(4326008)(107886003)(83380400001)(52116002)(86362001)(66476007)(66556008)(316002)(6506007)(8936002)(44832011); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: SnLm3EIExwGONin1DZ0kP+jwXEJ5TfE5iFFVmtygdtxjhphc0K0GxurTGax4KbiqTyfeYZsEOxCSExR/eo66H58QtxUzQkCvTqZMJaO/kAmgVJxeapTfVclyvbBBs5xGXEPLL+Z2wQBQ1mxfKnHcCsfPK6jit/HN/2gSc+bVa8TmSQq1U0pq+CySHhrYgqBJrDHnPXwFV4SRlWSPMseXploCRE5FtsPbfimBi33Q6uFxBZ7u3URpCqjEVwSldNk41pE0WQIvTrEE/5BPf2cCyixTSu9ikaFXHelL4zIl2BMZjn21ht7mUpRzxNlCOdJ7Ic+z359Fcmo0Lb4FPQxmmNoEYCyn65zX1sg1Eu93dU2ssR9FYXkFYU3H5cHdLJiK/jPMEUiJCr/ZaRZL1U+XnF0/fg1DyYvlAYoXLiu25vW0huNDJ0Ho96DkcVMG06AGHgGN4pwVWWdftIYunL31JckrUyL+YPphJ3aEKny5/IA+vILpfXY/E0Dv1UkV5KNMMa+wRBuoCUfZY9/WfBJWJIcryPtpshEhnDQShe61uYqQkj+YfA35lsIlEN2NHLZGEC3ObSdWqHzfK5Lfg9juM6lgsuf4UYw2y+KcV5hr6JX3f0tAmwd6KPKEGcGyfZarx1F4vUbrk5Ap0VmJLIsxhX3pP9rZR3srxBhSwC+7wrhLEySP5KA2umc3GjDrPSu4mNfugI5LqF/xoEWJL9rJ0Ey/EEqKzwIabGbgxBGkeycgJg+o5E4vJXOMjSPfYso18J+KY6NZKLhApFtQ1SpcaLgZLJdHX7NQqKcdCZ5BA7i1CFu4y74+Q/GTy6V5m7A/mY92F+WyGinDnBHCtZfG3UYQVCs88QxCQ6aWRuh54Fh1BiO7jcaP0SBR0/SbuioHZNEhmsF0Cwj811rzJHgdsfTAS2h9mtIKAe2/VbTSardI2H+APH/8YUSvBDSKaesPLFL5eW4zcZsWEpSksUlKvsjt7p2vpNqg87O6Z/xmHQd+94macnmVBlyaEJMCsdmbkq6IEJ/7gMLByBwByaOaeOEXyLKEKTOrKHhs3EBgzLhVLQthpvLV2vFKMJIMDd565KCC8pR6kHauI+2dN1RzJI0ljr7ZHqfE07rQ0HiyrT+faeZoODirLXPJzDkvKIE6ZiXv6QCaT6G5dzkMHP9/0ktgnGEq4ud3rxWfLLvTg1MZbJ/8h0iD8LCtywTeMXFvedxMge+HYo3Hn5rOfWvAJ8FFNtbFvD4MuhZZxDAwq3OughT2nnOaQTqeNWWLzq9bO/m2uLFrEicHcZY3RATH8G7gwx8VGOZ1W/mbn4+KgW/GbFBv+KcqDHjoVMYh22zpjs2vOTryb6AmrtHNBw92chz6WNUUcnYIjGAUSWMvvKpQzPg4Y6QUiDf/grkRGX9k1+JtqYd+kQlHZ5O9OzwU7V6waRDungiNymc/WvTwAVAQxV98Xp3QrQ4NnkokSwSROqwsh/ESBo6Fd3uM6R4Oj6Dta1088bok9D8ZJA8Lgov0QqsCm3RTf3LBDxQtARFdoyAnskRf+U2Ewlao6FwdyLq2eFQu8E5dVgJ6R4jRny1D6j82Ul5d90zwvMSq2lGsmv/v6trvioU/f9ce2VJV5+LK7rA2rYA0dgVQqVtnSojz0pF0KOfBdzSjAFY1gLZ4j+JSgsOfmt53dTNaEp19GrOgUFCRuxbFo1oyHodfkiY= X-OriginatorOrg: calian.com X-MS-Exchange-CrossTenant-Network-Message-Id: 667fbdcb-4a50-44b7-a185-08d9dc4f4d20 X-MS-Exchange-CrossTenant-AuthSource: YT3PR01MB6274.CANPRD01.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Jan 2022 19:59:00.5553 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 23b57807-562f-49ad-92c4-3bb0f07a1fdf X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: iem8qUkhS3umLSx61Tan5OCcZhiGd8n/QVgJwUi+9E1tfnlyB5vZrjtv81HRKeQjOlVtg22GlzQvhbd0ConddIccunJA0beiY2ZGG5deXOM= X-MS-Exchange-Transport-CrossTenantHeadersStamped: YQXPR01MB2710 X-Proofpoint-GUID: BXCxIuEB3ECbKYhvCn9VJ8tRNdm0jZYr X-Proofpoint-ORIG-GUID: BXCxIuEB3ECbKYhvCn9VJ8tRNdm0jZYr X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.816,Hydra:6.0.425,FMLib:17.11.62.513 definitions=2022-01-20_08,2022-01-20_01,2021-12-02_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 mlxscore=0 impostorscore=0 adultscore=0 spamscore=0 mlxlogscore=970 suspectscore=0 priorityscore=1501 malwarescore=0 clxscore=1015 phishscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2110150000 definitions=main-2201200100 Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org Add a new system-clock-fixed flag, which can be used to specify that the driver cannot or should not allow the clock frequency of the mapped clock to be modified. This behavior is also implied if the system-clock-frequency parameter is set explicitly - the flag is meant for cases where a clock is mapped to the DAI but which is, or should be treated as, fixed. When mclk-fs is also specified, this causes a PCM constraint to be added which enforces that only the corresponding valid sample rate can be used. Signed-off-by: Robert Hancock --- include/sound/simple_card_utils.h | 1 + sound/soc/generic/simple-card-utils.c | 71 ++++++++++++++++++++++----- 2 files changed, 61 insertions(+), 11 deletions(-) diff --git a/include/sound/simple_card_utils.h b/include/sound/simple_card_utils.h index df430f1c2a10..5ee269c59aac 100644 --- a/include/sound/simple_card_utils.h +++ b/include/sound/simple_card_utils.h @@ -25,6 +25,7 @@ struct asoc_simple_dai { unsigned int tx_slot_mask; unsigned int rx_slot_mask; struct clk *clk; + bool clk_fixed; }; struct asoc_simple_data { diff --git a/sound/soc/generic/simple-card-utils.c b/sound/soc/generic/simple-card-utils.c index 9736102e6808..a4babfb63175 100644 --- a/sound/soc/generic/simple-card-utils.c +++ b/sound/soc/generic/simple-card-utils.c @@ -165,12 +165,15 @@ int asoc_simple_parse_clk(struct device *dev, * or device's module clock. */ clk = devm_get_clk_from_child(dev, node, NULL); + simple_dai->clk_fixed = of_property_read_bool( + node, "system-clock-fixed"); if (!IS_ERR(clk)) { simple_dai->sysclk = clk_get_rate(clk); simple_dai->clk = clk; } else if (!of_property_read_u32(node, "system-clock-frequency", &val)) { simple_dai->sysclk = val; + simple_dai->clk_fixed = true; } else { clk = devm_get_clk_from_child(dev, dlc->of_node, NULL); if (!IS_ERR(clk)) @@ -184,12 +187,29 @@ int asoc_simple_parse_clk(struct device *dev, } EXPORT_SYMBOL_GPL(asoc_simple_parse_clk); +static int asoc_simple_check_fixed_sysclk(struct device *dev, + struct asoc_simple_dai *dai, + unsigned int *fixed_sysclk) +{ + if (dai->clk_fixed) { + if (*fixed_sysclk && *fixed_sysclk != dai->sysclk) { + dev_err(dev, "inconsistent fixed sysclk rates (%u vs %u)\n", + *fixed_sysclk, dai->sysclk); + return -EINVAL; + } + *fixed_sysclk = dai->sysclk; + } + + return 0; +} + int asoc_simple_startup(struct snd_pcm_substream *substream) { struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream); struct asoc_simple_priv *priv = snd_soc_card_get_drvdata(rtd->card); struct simple_dai_props *props = simple_priv_to_props(priv, rtd->num); struct asoc_simple_dai *dai; + unsigned int fixed_sysclk = 0; int i1, i2, i; int ret; @@ -197,12 +217,32 @@ int asoc_simple_startup(struct snd_pcm_substream *substream) ret = asoc_simple_clk_enable(dai); if (ret) goto cpu_err; + ret = asoc_simple_check_fixed_sysclk(rtd->dev, dai, &fixed_sysclk); + if (ret) + goto cpu_err; } for_each_prop_dai_codec(props, i2, dai) { ret = asoc_simple_clk_enable(dai); if (ret) goto codec_err; + ret = asoc_simple_check_fixed_sysclk(rtd->dev, dai, &fixed_sysclk); + if (ret) + goto codec_err; + } + + if (fixed_sysclk && props->mclk_fs) { + unsigned int fixed_rate = fixed_sysclk / props->mclk_fs; + + if (fixed_sysclk % props->mclk_fs) { + dev_err(rtd->dev, "fixed sysclk %u not divisible by mclk_fs %u\n", + fixed_sysclk, props->mclk_fs); + return -EINVAL; + } + ret = snd_pcm_hw_constraint_minmax(substream->runtime, SNDRV_PCM_HW_PARAM_RATE, + fixed_rate, fixed_rate); + if (ret) + goto codec_err; } return 0; @@ -226,31 +266,40 @@ EXPORT_SYMBOL_GPL(asoc_simple_startup); void asoc_simple_shutdown(struct snd_pcm_substream *substream) { struct snd_soc_pcm_runtime *rtd = asoc_substream_to_rtd(substream); - struct snd_soc_dai *codec_dai = asoc_rtd_to_codec(rtd, 0); - struct snd_soc_dai *cpu_dai = asoc_rtd_to_cpu(rtd, 0); struct asoc_simple_priv *priv = snd_soc_card_get_drvdata(rtd->card); struct simple_dai_props *props = simple_priv_to_props(priv, rtd->num); struct asoc_simple_dai *dai; int i; - if (props->mclk_fs) { - snd_soc_dai_set_sysclk(codec_dai, 0, 0, SND_SOC_CLOCK_IN); - snd_soc_dai_set_sysclk(cpu_dai, 0, 0, SND_SOC_CLOCK_OUT); - } + for_each_prop_dai_cpu(props, i, dai) { + if (props->mclk_fs && !dai->clk_fixed) + snd_soc_dai_set_sysclk(asoc_rtd_to_cpu(rtd, i), + 0, 0, SND_SOC_CLOCK_IN); - for_each_prop_dai_cpu(props, i, dai) asoc_simple_clk_disable(dai); - for_each_prop_dai_codec(props, i, dai) + } + for_each_prop_dai_codec(props, i, dai) { + if (props->mclk_fs && !dai->clk_fixed) + snd_soc_dai_set_sysclk(asoc_rtd_to_codec(rtd, i), + 0, 0, SND_SOC_CLOCK_IN); + asoc_simple_clk_disable(dai); + } } EXPORT_SYMBOL_GPL(asoc_simple_shutdown); -static int asoc_simple_set_clk_rate(struct asoc_simple_dai *simple_dai, +static int asoc_simple_set_clk_rate(struct device *dev, + struct asoc_simple_dai *simple_dai, unsigned long rate) { if (!simple_dai) return 0; + if (simple_dai->clk_fixed && rate != simple_dai->sysclk) { + dev_err(dev, "dai %s invalid clock rate %lu\n", simple_dai->name, rate); + return -EINVAL; + } + if (!simple_dai->clk) return 0; @@ -279,13 +328,13 @@ int asoc_simple_hw_params(struct snd_pcm_substream *substream, mclk = params_rate(params) * mclk_fs; for_each_prop_dai_codec(props, i, pdai) { - ret = asoc_simple_set_clk_rate(pdai, mclk); + ret = asoc_simple_set_clk_rate(rtd->dev, pdai, mclk); if (ret < 0) return ret; } for_each_prop_dai_cpu(props, i, pdai) { - ret = asoc_simple_set_clk_rate(pdai, mclk); + ret = asoc_simple_set_clk_rate(rtd->dev, pdai, mclk); if (ret < 0) return ret; }