From nobody Tue Apr 7 09:06:50 2026 Received: from mail-pg1-f169.google.com (mail-pg1-f169.google.com [209.85.215.169]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 11E5E2765D2 for ; Sat, 14 Mar 2026 00:27:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773448043; cv=none; b=IJ5g2SmvqQWgXeATocPDk6FxVb3IADy8mug6OeUEiyFieUAPgdazMuYfSCIolVgiidH5V6sdLrBqiq5hqmD2dLrsUZpM3Z7asq5guSZW8/WoFL5OtSdyu964xuc3lA20lRMN01WvXGqENj125rPxvG+6ti5XVJLPBa86F6NG5UE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773448043; c=relaxed/simple; bh=Sqx3SXPJXXnhV+A3P+IhV85mWKhQbsDPRWBYpEMIubE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:To:Cc; b=PiKLuplPTVYc4vUAwrfCuPs2oJ2e2arQlo6YZY963ZiUBet2Bb2lp7pOsa8oX2M1TRqqsWzQ8rjedTt7Njh4oMeEK6NBLbjL+iz14AiSK+zBIgOZ4Q8oNzZ91SvV9K7HsQeY/RNBtm1nXeD+SlCUIiFL76kEKeFIywEPIsSgxoU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=HlKrXrEf; arc=none smtp.client-ip=209.85.215.169 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="HlKrXrEf" Received: by mail-pg1-f169.google.com with SMTP id 41be03b00d2f7-c73eb827becso374645a12.2 for ; Fri, 13 Mar 2026 17:27:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773448041; x=1774052841; darn=vger.kernel.org; h=cc:to:message-id:content-transfer-encoding:mime-version:subject :date:from:from:to:cc:subject:date:message-id:reply-to; bh=MEcjecI/5dgQBjsSrAQH+cGhELB2YBKO6wW+gUuNwdI=; b=HlKrXrEf9Flh9bmr24k89wwJRc98vvVeEChu7UDUn2hpHJur47ipVj9yLrWutv5UDC lAju5CUBxMkyQbCabCOP4yaFsLgBk3xbbdzw9M9yHqataKQqWZOXZNnhSpcAfXxJFoLT 9u5kfX9IdSAI+es6FuFC9becwkNNEumYcP53jBTA1+cNZvOSuQlD1UDEY1i9qgY3hiFn DbV0ci/yVhZqXzp/Zzmnl6+wZxxXIozL2P1Hrlad7yoPlt1s/NBvnw6gugf2DcW/P+23 L+JELVc7rIt+P3E3T36Ck2V42hNTaqa98hKzgFxFX9arxkkrjRoc7VDd7G8pxkpnLFXq xPJw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773448041; x=1774052841; h=cc:to:message-id:content-transfer-encoding:mime-version:subject :date:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=MEcjecI/5dgQBjsSrAQH+cGhELB2YBKO6wW+gUuNwdI=; b=hjxqL7jOpS0+e/ElChf9P8Ru7baZMG4yPsGbKIO5N8uGZH28+vi5OtbTx1ZVRseYaK kaeGk5w8YblhsAS5Mgot8ISXANbozUKa0MOBalrkNNqu6wYUc8uWXIGipeJGq1zymhLJ yeJwmX+cWWGLGYO7XdxHhxU6ICr0JAkIBRa9Xe4NfVmH0YMmkQK2W3sYnJ1mmt7s7Xf+ h6B4jkTQ3GT5R9u+635SU/uOlxt5H89jK4CgVLabxkA6Y2jgX/oX2uyWTVPvbYQlk64O MQayxr06R+Z7JoUUAJweAbm2+1HfOu0/6LQ/2iZBMgFZ9lp1RTbptGWQZE06aNuRAl3G PA8g== X-Forwarded-Encrypted: i=1; AJvYcCW6qKFb6j/Os/upJQu8nRz2SdYjQwlYjYu/5xh+rhD4aL07FLIXqSn9ej50AtL+XfVOekiwse3V/T7qJx0=@vger.kernel.org X-Gm-Message-State: AOJu0YyXH7PKyRRyR8vSGR4buYrDbXHjGZt1EaPk62oU5zSUJWDS2jfP 5vkJ+rJ56d11EZrSlUAmqKpYiO5UuRRXjZDo1me+cI6npkG+36F/tjw7 X-Gm-Gg: ATEYQzyvagYJtll3qD0O5cjSKMlpajpPj16264V+PSwhazK3TgK+x+NYibrg0J/y4uP VIhJFw3i1Ae1uyZ9wae8+NF9k6X19rbzvdimOqMLoLjnW0jPkayEfvCU6uIoYiEC9ssDCHtAN6f B7qSf5yVndf9ZsZyzX2iEE5PHROp+/2KCVfNJgkYUL706H6HdmH3B3y7IzpqnaO+6LFmdtcBnHD h4Qno39WU8Iq4UeuiuI56gtb/tYVG18NVuqOqQIia8OTf9CdlPKbgL9Er+0UQSTWsRy3TaZlsIZ wTCmOe40busBCyzkC3vljtsDP2x6bV/ZQS1p3wiWqyGJQg95Z86PiMu2Et+tZ/gtO5RsgtAOzdu pYNtG+RZxCnprpByh+0ALEu2pajKAwgNUkhWxp8BzuF4SkSVYgGBPsEgv4vCVtCv+RB7Uhl6DSx KGsefjUc8odNOhh/nwSjGCuQKow+EBIMPhOWZs3UzDgCQZoHkb4l5CMUIoaoLU319S37OBZhrEg VdA55M3sb+bpXMaBXuY3Tca55afsxYNVpKbBSIar0a97PhdOodum/enMu+k7Ko7Nyd9ATVvcgB8 X-Received: by 2002:a17:90b:574f:b0:356:24f0:aef5 with SMTP id 98e67ed59e1d1-35a21fd71f2mr4196895a91.22.1773448041331; Fri, 13 Mar 2026 17:27:21 -0700 (PDT) Received: from [192.168.2.3] ([2403:581e:d87e:0:fc2d:ed31:e80e:412d]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-35a02ba23adsm9409521a91.0.2026.03.13.17.27.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 13 Mar 2026 17:27:20 -0700 (PDT) From: James Calligeros Date: Sat, 14 Mar 2026 10:27:11 +1000 Subject: [PATCH v2] ASoC: codecs: cs42l84: set up PLL for more sample rates Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260314-cs42l84-rates-v2-1-ea8a5af52542@gmail.com> X-B4-Tracking: v=1; b=H4sIAF6rtGkC/3WMzQqDMBCEX0X23JT8GK099T2KhxC3uqBGshJaJ O/e1HuZ0zfDfAcwRkKGe3VAxERMYS2gLxX4ya0jChoKg5a6kUa2wnOt51stotuRhe9QGyyj7AY ony3ii96n79kXnoj3ED+nPqlf+8+UlCjx1jrbtEYa9RgXR/PVhwX6nPMXCa2Ft6oAAAA= X-Change-ID: 20260307-cs42l84-rates-c9e23e20209d To: David Rhodes , Richard Fitzgerald , =?utf-8?q?Martin_Povi=C5=A1er?= , Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai Cc: asahi@lists.linux.dev, linux-sound@vger.kernel.org, patches@opensource.cirrus.com, linux-kernel@vger.kernel.org, James Calligeros X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=3538; i=jcalligeros99@gmail.com; h=from:subject:message-id; bh=Sqx3SXPJXXnhV+A3P+IhV85mWKhQbsDPRWBYpEMIubE=; b=owGbwMvMwCV2xczoYuD3ygTG02pJDJlbVqdMfPT4rqoTr8vCmf9uujN5Kt3/+VLs3ey88zq+N 8I3Hm2I7pjIwiDGxWAppsiyoUnIY7YR281+kcq9MHNYmUCGSIs0MAABCwNfbmJeqZGOkZ6ptqGe oZGOsY4RAxenAEy11wlGhme8M1OfVjmtmWp3daeHWcCy3fMlSjVreK5WCqZV5t86bMXIsGVOsg4 T79rdTfefr9ynzCnwlmW2x12G9525rPVLO97tZgAA X-Developer-Key: i=jcalligeros99@gmail.com; a=openpgp; fpr=B08212489B3206D98F1479BDD43632D151F77960 Previously, this driver only advertised support for 48 kHz and 96 kHz sample rates, as there was no PLL configuration data specified for any other sample rate/BCLK. The CS42L84 is an Apple-specific variant of CS42L42. The PLL configuration parameters for a variety of common BCLKs are available in the latter's datasheet. What happens if we just use those? As it turns out, they work just fine. Fill out more PLL config parameters in the PLL config lookup table, and advertise the corresponding sample rates to userspace. This enables 44.1, 88.2, 176.4 and 192 kHz output and input. Signed-off-by: James Calligeros --- Changes in v2: - Added explicit handling of new MCLK values to MCLK_F config - Added comment explaining the MCLK_F config process - Link to v1: https://lore.kernel.org/r/20260307-cs42l84-rates-v1-1-1c55a56= 73031@gmail.com --- sound/soc/codecs/cs42l84.c | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/sound/soc/codecs/cs42l84.c b/sound/soc/codecs/cs42l84.c index 1e1307a16f81..e590a43559e4 100644 --- a/sound/soc/codecs/cs42l84.c +++ b/sound/soc/codecs/cs42l84.c @@ -357,8 +357,11 @@ struct cs42l84_pll_params { * Common PLL Settings for given BCLK */ static const struct cs42l84_pll_params pll_ratio_table[] =3D { + { 2822400, 1, 0, 0x40, 0x000000, 0x03, 0x10, 11289600}, { 3072000, 1, 0, 0x40, 0x000000, 0x03, 0x10, 12288000}, + { 5644800, 1, 0, 0x40, 0x000000, 0x03, 0x10, 11289600}, { 6144000, 1, 1, 0x40, 0x000000, 0x03, 0x10, 12288000}, + { 11289600, 0, 0, 0, 0, 0, 0, 11289600}, { 12288000, 0, 0, 0, 0, 0, 0, 12288000}, { 24576000, 1, 3, 0x40, 0x000000, 0x03, 0x10, 12288000}, }; @@ -408,11 +411,18 @@ static int cs42l84_pll_config(struct snd_soc_componen= t *component) CS42L84_ASP_FSYNC_CTL3_BCLK_PERIOD_HI, FIELD_PREP(CS42L84_ASP_FSYNC_CTL3_BCLK_PERIOD_HI, fsync >> 7)); =20 - /* Save what the MCLK will be */ + /* + * MCLK values are binned into 12 or 24 MHz regions. If MCLK is exactly + * 12 or 24 MHz, the high bit of CCM_CTL1_MCLK_F is set. If MCLK + * is in the region of 24 MHz, the low bit is set. This seemingly + * corresponds to CS42L42's documented INTERNAL_FS and MCLKDIV + * behaviour respectively. + */ switch (pll_ratio_table[i].mclk_int) { case 12000000: cs42l84->pll_mclk_f =3D CS42L84_CCM_CTL1_MCLK_F_12MHZ; break; + case 11289600: case 12288000: cs42l84->pll_mclk_f =3D CS42L84_CCM_CTL1_MCLK_F_12_288KHZ; break; @@ -670,14 +680,18 @@ static struct snd_soc_dai_driver cs42l84_dai =3D { .stream_name =3D "Playback", .channels_min =3D 1, .channels_max =3D 2, - .rates =3D SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_96000, + .rates =3D SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000 | + SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000 | + SNDRV_PCM_RATE_176400 | SNDRV_PCM_RATE_192000, .formats =3D CS42L84_FORMATS, }, .capture =3D { .stream_name =3D "Capture", .channels_min =3D 1, .channels_max =3D 1, - .rates =3D SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_96000, + .rates =3D SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000 | + SNDRV_PCM_RATE_88200 | SNDRV_PCM_RATE_96000 | + SNDRV_PCM_RATE_176400 | SNDRV_PCM_RATE_192000, .formats =3D CS42L84_FORMATS, }, .symmetric_rate =3D 1, --- base-commit: c40816209b5768d45aabb81f9c6ff8296ec58c32 change-id: 20260307-cs42l84-rates-c9e23e20209d Best regards, --=20 James Calligeros