get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/2217526/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 2217526,
    "url": "http://patchwork.ozlabs.org/api/patches/2217526/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/ubuntu-kernel/patch/20260330041623.2334058-5-chris.chiu@canonical.com/",
    "project": {
        "id": 15,
        "url": "http://patchwork.ozlabs.org/api/projects/15/?format=api",
        "name": "Ubuntu Kernel",
        "link_name": "ubuntu-kernel",
        "list_id": "kernel-team.lists.ubuntu.com",
        "list_email": "kernel-team@lists.ubuntu.com",
        "web_url": null,
        "scm_url": null,
        "webscm_url": null,
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<20260330041623.2334058-5-chris.chiu@canonical.com>",
    "list_archive_url": null,
    "date": "2026-03-30T04:16:17",
    "name": "[SRU,R,4/4] ASoC: cs42l43: Add support for the B variant",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "84b7d6190a6d57405f19f467fd0a1252b7d921e4",
    "submitter": {
        "id": 81418,
        "url": "http://patchwork.ozlabs.org/api/people/81418/?format=api",
        "name": "Chris Chiu",
        "email": "chris.chiu@canonical.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/ubuntu-kernel/patch/20260330041623.2334058-5-chris.chiu@canonical.com/mbox/",
    "series": [
        {
            "id": 497947,
            "url": "http://patchwork.ozlabs.org/api/series/497947/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/ubuntu-kernel/list/?series=497947",
            "date": "2026-03-30T04:16:13",
            "name": "[SRU,R,1/4] ASoC: sdw_utils: Add CS42L43B codec info",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/497947/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2217526/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2217526/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<kernel-team-bounces@lists.ubuntu.com>",
        "X-Original-To": "incoming@patchwork.ozlabs.org",
        "Delivered-To": "patchwork-incoming@legolas.ozlabs.org",
        "Authentication-Results": [
            "legolas.ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (4096-bit key;\n unprotected) header.d=canonical.com header.i=@canonical.com\n header.a=rsa-sha256 header.s=20251003 header.b=D+FO0y85;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=lists.ubuntu.com\n (client-ip=185.125.189.65; helo=lists.ubuntu.com;\n envelope-from=kernel-team-bounces@lists.ubuntu.com;\n receiver=patchwork.ozlabs.org)"
        ],
        "Received": [
            "from lists.ubuntu.com (lists.ubuntu.com [185.125.189.65])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fkdHG6WQnz20Q1\n\tfor <incoming@patchwork.ozlabs.org>; Mon, 30 Mar 2026 15:16:42 +1100 (AEDT)",
            "from localhost ([127.0.0.1] helo=lists.ubuntu.com)\n\tby lists.ubuntu.com with esmtp (Exim 4.86_2)\n\t(envelope-from <kernel-team-bounces@lists.ubuntu.com>)\n\tid 1w743I-0000o7-FP; Mon, 30 Mar 2026 04:16:36 +0000",
            "from smtp-relay-internal-0.internal ([10.131.114.225]\n helo=smtp-relay-internal-0.canonical.com)\n by lists.ubuntu.com with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)\n (Exim 4.86_2) (envelope-from <chris.chiu@canonical.com>)\n id 1w743F-0000kG-RB\n for kernel-team@lists.ubuntu.com; Mon, 30 Mar 2026 04:16:33 +0000",
            "from mail-pf1-f199.google.com (mail-pf1-f199.google.com\n [209.85.210.199])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest\n SHA256)\n (No client certificate requested)\n by smtp-relay-internal-0.canonical.com (Postfix) with ESMTPS id 6E0983F167\n for <kernel-team@lists.ubuntu.com>; Mon, 30 Mar 2026 04:16:33 +0000 (UTC)",
            "by mail-pf1-f199.google.com with SMTP id\n d2e1a72fcca58-82c613194caso2898484b3a.1\n for <kernel-team@lists.ubuntu.com>; Sun, 29 Mar 2026 21:16:33 -0700 (PDT)",
            "from localhost.. (118-163-61-247.hinet-ip.hinet.net.\n [118.163.61.247]) by smtp.gmail.com with ESMTPSA id\n d2e1a72fcca58-82ca84646d3sm5476082b3a.15.2026.03.29.21.16.29\n for <kernel-team@lists.ubuntu.com>\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Sun, 29 Mar 2026 21:16:30 -0700 (PDT)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=canonical.com;\n s=20251003; t=1774844193;\n bh=vho4BfVOAyEsgnyA8lSZ97Ti4FZkv9EzkWLGqKN9KAI=;\n h=From:To:Subject:Date:Message-ID:In-Reply-To:References:\n MIME-Version;\n b=D+FO0y852wi5LLXhem28vEzEtdPt/she4VV20Bha52UDSpNvKSuHFnGu+WWL8iOvT\n L8XaM2v2womBjmleLmx7NQjPJ7GUVP3zXv/dJOXc2eNeFW56YMTbghAkdni591cW9I\n OugfTqlh8Sx5cw1WT90bnHEuqBkCie3g1jpgIi3nVlQTXvG1lHCQM5Qnu2hoQG5oFD\n cE0hKJveBtC3v/esUJLBoq7z2vD23tXYF1GMLvz2lt91gT2t9txK+/QwjBVx+xoLoi\n 8GrYjh8f2B6vHAcO8PA+tMMY9jH37GPhgb11BFp08xtzLhHXtq8hZ9XrIBCOhny9ab\n 0EyLpR5XY/mCmELZo2yHWNXKWQIt7d8E/SKotpQNWUO25lKBqZ1xAKdH+FDLwu3R8Z\n SOJZXJ8p8xbl1Qzq3iud5GmT9l2xfYusuHVhHeGcOUe7bEe+c79lWTlwmKILhLGEfg\n M49OuM5o/WgVslnHTgqaDLCE5JkwWbaB9JsTflRD5FXfcvkhAWWFAxj1g+DKPxckDZ\n LWi3wOLH5x08SPOGkHlOBTTZZFuDim8Ue/ERcHk5cfJXij/Y+1Mc0QdLqVqH1FkS6b\n FkQf0Hvcqunvm7DsRal8mJkoXuPT2f0alSk/cF/9Lqc2QC9a5oMZ3C2SY0E0HUb288\n qndxejq7i3HyeooECj2Uag78=",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1774844192; x=1775448992;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:to:from:x-gm-gg:x-gm-message-state:from:to\n :cc:subject:date:message-id:reply-to;\n bh=vho4BfVOAyEsgnyA8lSZ97Ti4FZkv9EzkWLGqKN9KAI=;\n b=K5jYSyXbuMY8vfw/inDHXJxqhaniWSmzcg61Oui8ggnmClZV692Dz/znWH8nWdwQLN\n TZU3YRZYeOrO0XC3qkWaGvToPIpNWo3AeiFsx320gH+soSLWDA3NimfAQZJZVu3NR55N\n n6Vkn+upXfz/SoBOJVEornHkuuH0uZ/yygrcRda5GoSA5Dnu1QDHLNTXA/5p/dlqD/xg\n Pbj4wFxX5BtJ6/f6S2aF8zfUvbbczlCGyNOowxEriDv8e812R7s1VV5S3VtU0/g9cCLF\n eZ/L47Eu0G25gGPQROXsSNYV4csC4IuW76j/A1BSGJwneTlbuVF4Y23Qn//96pDLX0UH\n 2qYQ==",
        "X-Gm-Message-State": "AOJu0YxvMPx/EwCVzIwYZNuhNO7s47iKLdrF25DOtrvvae81aUHCcXkT\n 4Hv9YHuz3zHk7VQH9so16ob+c+w7BgMF/I2ZfYS/6VJ+jsehLGKXeQy4l+0GPFpjxRgFtAXWvs+\n O+p79VRS24b3+oxj/by6+iMD7tn/7EDMR+vxEF/UBD62NP43rCkiFtvaZ2IJnlaSSxyNFGSwbrg\n z4xHQzQoJ0QiyXEw==",
        "X-Gm-Gg": "ATEYQzxgYsVlh7EGW+aPCzF8ZU6kvvvE8NzU5GHqplK4DRs/xVT6Wsmu4qzi2m8ZFQ2\n k9n11rYrn4XkmitxERTG2Rbp2R7x90O8NoENT931VjN7YgmydzSfRpNPOkytZSrS7DAlli2+1bd\n 2nTru4L/qC0tfE0w4G5q/fky+6+a7GDunupAOnhIb3px+8oPLuNDgcV8ndGS22H1wMNIA+3Ohfb\n ga76umiGsrnZ38eSn1rBM7C1GeFxLJhntwx3h+XkzVd+ukyYgV5sQeTfYp4p5iFo7lmJG74edbt\n 2GkYRmg38i3cadqvZdCLoSmTicsBpDm3mhKMRqDaS2Jn5mY5+plRNeRrEehzDsGlEl4zSj735CR\n xBGf2ac6YevwLS22I7S86mlz+jcS+0i/U4DJbNYkIpAtw+BakhWkBfa8qIIaFoP4=",
        "X-Received": [
            "by 2002:a05:6a00:ab09:b0:82a:1b35:be57 with SMTP id\n d2e1a72fcca58-82c960775f4mr9760723b3a.54.1774844191468;\n Sun, 29 Mar 2026 21:16:31 -0700 (PDT)",
            "by 2002:a05:6a00:ab09:b0:82a:1b35:be57 with SMTP id\n d2e1a72fcca58-82c960775f4mr9760689b3a.54.1774844190605;\n Sun, 29 Mar 2026 21:16:30 -0700 (PDT)"
        ],
        "From": "Chris Chiu <chris.chiu@canonical.com>",
        "To": "kernel-team@lists.ubuntu.com",
        "Subject": "[SRU][R][PATCH 4/4] ASoC: cs42l43: Add support for the B variant",
        "Date": "Mon, 30 Mar 2026 04:16:17 +0000",
        "Message-ID": "<20260330041623.2334058-5-chris.chiu@canonical.com>",
        "X-Mailer": "git-send-email 2.43.0",
        "In-Reply-To": "<20260330041623.2334058-1-chris.chiu@canonical.com>",
        "References": "<20260330041623.2334058-1-chris.chiu@canonical.com>",
        "MIME-Version": "1.0",
        "X-BeenThere": "kernel-team@lists.ubuntu.com",
        "X-Mailman-Version": "2.1.20",
        "Precedence": "list",
        "List-Id": "Kernel team discussions <kernel-team.lists.ubuntu.com>",
        "List-Unsubscribe": "<https://lists.ubuntu.com/mailman/options/kernel-team>,\n <mailto:kernel-team-request@lists.ubuntu.com?subject=unsubscribe>",
        "List-Archive": "<https://lists.ubuntu.com/archives/kernel-team>",
        "List-Post": "<mailto:kernel-team@lists.ubuntu.com>",
        "List-Help": "<mailto:kernel-team-request@lists.ubuntu.com?subject=help>",
        "List-Subscribe": "<https://lists.ubuntu.com/mailman/listinfo/kernel-team>,\n <mailto:kernel-team-request@lists.ubuntu.com?subject=subscribe>",
        "Content-Type": "text/plain; charset=\"utf-8\"",
        "Content-Transfer-Encoding": "base64",
        "Errors-To": "kernel-team-bounces@lists.ubuntu.com",
        "Sender": "\"kernel-team\" <kernel-team-bounces@lists.ubuntu.com>"
    },
    "content": "From: Maciej Strozek <mstrozek@opensource.cirrus.com>\n\nBugLink: https://bugs.launchpad.net/bugs/2143301\n\nIntroducing CS42L43B codec, a variant of CS42L43 which can be driven by\nthe same driver.\n\nChanges in CS42L43 driver specific for CS42L43B:\n- Decimator 1 and 2 are dedicated to ADC, can't be selected for PDM\n- Decimators 3 and 4 are connected to PDM1\n- Added Decimator 5 and 6 for PDM2\n- Supports SoundWire Clock Gearing\n- Updated ROM requiring no patching\n- Reduced RAM space\n- Each ISRC has 4 decimators now\n\nSigned-off-by: Maciej Strozek <mstrozek@opensource.cirrus.com>\nReviewed-by: Charles Keepax <ckeepax@opensource.cirrus.com>\nLink: https://patch.msgid.link/20260306152829.3130530-5-mstrozek@opensource.cirrus.com\nSigned-off-by: Mark Brown <broonie@kernel.org>\n(cherry picked from commit 0a208adefecb287d22321054470d4619cb303839 linux-next)\nSigned-off-by: Chris Chiu <chris.chiu@canonical.com>\n---\n sound/soc/codecs/cs42l43.c | 756 ++++++++++++++++++++++++++++++-------\n sound/soc/codecs/cs42l43.h |   4 +-\n 2 files changed, 625 insertions(+), 135 deletions(-)",
    "diff": "diff --git a/sound/soc/codecs/cs42l43.c b/sound/soc/codecs/cs42l43.c\nindex fd02d8a57e0f..f0d6ff0b2976 100644\n--- a/sound/soc/codecs/cs42l43.c\n+++ b/sound/soc/codecs/cs42l43.c\n@@ -45,12 +45,25 @@ static SOC_VALUE_ENUM_SINGLE_DECL(cs42l43_##name##_enum, reg, \\\n static const struct snd_kcontrol_new cs42l43_##name##_mux = \\\n \t\tSOC_DAPM_ENUM(\"Route\", cs42l43_##name##_enum)\n \n+#define CS42L43B_DECL_MUX(name, reg) \\\n+static SOC_VALUE_ENUM_SINGLE_DECL(cs42l43_##name##_enum, reg, \\\n+\t\t\t\t  0, CS42L43_MIXER_SRC_MASK, \\\n+\t\t\t\t  cs42l43b_mixer_texts, cs42l43b_mixer_values); \\\n+static const struct snd_kcontrol_new cs42l43_##name##_mux = \\\n+\t\tSOC_DAPM_ENUM(\"Route\", cs42l43_##name##_enum)\n+\n #define CS42L43_DECL_MIXER(name, reg) \\\n \tCS42L43_DECL_MUX(name##_in1, reg); \\\n \tCS42L43_DECL_MUX(name##_in2, reg + 0x4); \\\n \tCS42L43_DECL_MUX(name##_in3, reg + 0x8); \\\n \tCS42L43_DECL_MUX(name##_in4, reg + 0xC)\n \n+#define CS42L43B_DECL_MIXER(name, reg) \\\n+\tCS42L43B_DECL_MUX(name##_in1, reg); \\\n+\tCS42L43B_DECL_MUX(name##_in2, reg + 0x4); \\\n+\tCS42L43B_DECL_MUX(name##_in3, reg + 0x8); \\\n+\tCS42L43B_DECL_MUX(name##_in4, reg + 0xC)\n+\n #define CS42L43_DAPM_MUX(name_str, name) \\\n \tSND_SOC_DAPM_MUX(name_str \" Input\", SND_SOC_NOPM, 0, 0, &cs42l43_##name##_mux)\n \n@@ -99,11 +112,23 @@ static const struct snd_kcontrol_new cs42l43_##name##_mux = \\\n \t{ name_str,\t\t\"EQ1\",\t\t\t\"EQ\" }, \\\n \t{ name_str,\t\t\"EQ2\",\t\t\t\"EQ\" }\n \n+#define CS42L43B_BASE_ROUTES(name_str) \\\n+\t{ name_str,\t\t\"Decimator 5\",\t\t\"Decimator 5\" }, \\\n+\t{ name_str,\t\t\"Decimator 6\",\t\t\"Decimator 6\" }, \\\n+\t{ name_str,\t\t\"ISRC1 DEC3\",\t\t\"ISRC1DEC3\" }, \\\n+\t{ name_str,\t\t\"ISRC1 DEC4\",\t\t\"ISRC1DEC4\" }, \\\n+\t{ name_str,\t\t\"ISRC2 DEC3\",\t\t\"ISRC2DEC3\" }, \\\n+\t{ name_str,\t\t\"ISRC2 DEC4\",\t\t\"ISRC2DEC4\" }\n+\n #define CS42L43_MUX_ROUTES(name_str, widget) \\\n \t{ widget,\t\tNULL,\t\t\tname_str \" Input\" }, \\\n \t{ name_str \" Input\",\tNULL,\t\t\t\"Mixer Core\" }, \\\n \tCS42L43_BASE_ROUTES(name_str \" Input\")\n \n+#define CS42L43B_MUX_ROUTES(name_str, widget) \\\n+\tCS42L43_MUX_ROUTES(name_str, widget), \\\n+\tCS42L43B_BASE_ROUTES(name_str \" Input\")\n+\n #define CS42L43_MIXER_ROUTES(name_str, widget) \\\n \t{ name_str \" Mixer\",\tNULL,\t\t\tname_str \" Input 1\" }, \\\n \t{ name_str \" Mixer\",\tNULL,\t\t\tname_str \" Input 2\" }, \\\n@@ -116,6 +141,13 @@ static const struct snd_kcontrol_new cs42l43_##name##_mux = \\\n \tCS42L43_BASE_ROUTES(name_str \" Input 3\"), \\\n \tCS42L43_BASE_ROUTES(name_str \" Input 4\")\n \n+#define CS42L43B_MIXER_ROUTES(name_str, widget) \\\n+\tCS42L43_MIXER_ROUTES(name_str, widget), \\\n+\tCS42L43B_BASE_ROUTES(name_str \" Input 1\"), \\\n+\tCS42L43B_BASE_ROUTES(name_str \" Input 2\"), \\\n+\tCS42L43B_BASE_ROUTES(name_str \" Input 3\"), \\\n+\tCS42L43B_BASE_ROUTES(name_str \" Input 4\")\n+\n #define CS42L43_MIXER_VOLUMES(name_str, base) \\\n \tSOC_SINGLE_RANGE_TLV(name_str \" Input 1 Volume\", base, \\\n \t\t\t     CS42L43_MIXER_VOL_SHIFT, 0x20, 0x50, 0, \\\n@@ -300,6 +332,7 @@ static int cs42l43_startup(struct snd_pcm_substream *substream, struct snd_soc_d\n \tstruct snd_soc_component *component = dai->component;\n \tstruct cs42l43_codec *priv = snd_soc_component_get_drvdata(component);\n \tstruct cs42l43 *cs42l43 = priv->core;\n+\tint ret;\n \tint provider = !dai->id || !!regmap_test_bits(cs42l43->regmap,\n \t\t\t\t\t\t      CS42L43_ASP_CLK_CONFIG2,\n \t\t\t\t\t\t      CS42L43_ASP_MASTER_MODE_MASK);\n@@ -309,6 +342,14 @@ static int cs42l43_startup(struct snd_pcm_substream *substream, struct snd_soc_d\n \telse\n \t\tpriv->constraint.mask = CS42L43_CONSUMER_RATE_MASK;\n \n+\tif (cs42l43->variant_id == CS42L43_DEVID_VAL && (dai->id == 3 || dai->id == 4)) {\n+\t\tret = snd_pcm_hw_constraint_minmax(substream->runtime,\n+\t\t\t\t\t\t   SNDRV_PCM_HW_PARAM_CHANNELS,\n+\t\t\t\t\t\t   1, 2);\n+\t\tif (ret < 0)\n+\t\t\treturn ret;\n+\t}\n+\n \treturn snd_pcm_hw_constraint_list(substream->runtime, 0,\n \t\t\t\t\t  SNDRV_PCM_HW_PARAM_RATE,\n \t\t\t\t\t  &priv->constraint);\n@@ -590,12 +631,25 @@ static int cs42l43_dai_probe(struct snd_soc_dai *dai)\n \t\t\"Decimator 2 Switch\",\n \t\t\"Decimator 3 Switch\",\n \t\t\"Decimator 4 Switch\",\n+\t\t\"Decimator 5 Switch\",\n+\t\t\"Decimator 6 Switch\",\n \t};\n-\tint i;\n+\tint control_size, i;\n \n \tstatic_assert(ARRAY_SIZE(controls) == ARRAY_SIZE(priv->kctl));\n \n-\tfor (i = 0; i < ARRAY_SIZE(controls); i++) {\n+\tswitch (priv->core->variant_id) {\n+\tcase CS42L43_DEVID_VAL:\n+\t\tcontrol_size = ARRAY_SIZE(controls) - 2; // ignore Decimator 5 and 6\n+\t\tbreak;\n+\tcase CS42L43B_DEVID_VAL:\n+\t\tcontrol_size = ARRAY_SIZE(controls);\n+\t\tbreak;\n+\tdefault:\n+\t\treturn -EINVAL;\n+\t}\n+\n+\tfor (i = 0; i < control_size; i++) {\n \t\tif (priv->kctl[i])\n \t\t\tcontinue;\n \n@@ -703,7 +757,7 @@ static struct snd_soc_dai_driver cs42l43_dais[] = {\n \t\t.capture = {\n \t\t\t.stream_name\t= \"DP3 Capture\",\n \t\t\t.channels_min\t= 1,\n-\t\t\t.channels_max\t= 2,\n+\t\t\t.channels_max\t= 4,\n \t\t\t.rates\t\t= SNDRV_PCM_RATE_KNOT,\n \t\t\t.formats\t= CS42L43_SDW_FORMATS,\n \t\t},\n@@ -715,7 +769,7 @@ static struct snd_soc_dai_driver cs42l43_dais[] = {\n \t\t.capture = {\n \t\t\t.stream_name\t= \"DP4 Capture\",\n \t\t\t.channels_min\t= 1,\n-\t\t\t.channels_max\t= 2,\n+\t\t\t.channels_max\t= 4,\n \t\t\t.rates\t\t= SNDRV_PCM_RATE_KNOT,\n \t\t\t.formats\t= CS42L43_SDW_FORMATS,\n \t\t},\n@@ -808,6 +862,10 @@ static SOC_ENUM_SINGLE_DECL(cs42l43_dec3_wnf_corner, CS42L43_DECIM_HPF_WNF_CTRL3\n \t\t\t    CS42L43_DECIM_WNF_CF_SHIFT, cs42l43_wnf_corner_text);\n static SOC_ENUM_SINGLE_DECL(cs42l43_dec4_wnf_corner, CS42L43_DECIM_HPF_WNF_CTRL4,\n \t\t\t    CS42L43_DECIM_WNF_CF_SHIFT, cs42l43_wnf_corner_text);\n+static SOC_ENUM_SINGLE_DECL(cs42l43b_dec5_wnf_corner, CS42L43B_DECIM_HPF_WNF_CTRL5,\n+\t\t\t    CS42L43_DECIM_WNF_CF_SHIFT, cs42l43_wnf_corner_text);\n+static SOC_ENUM_SINGLE_DECL(cs42l43b_dec6_wnf_corner, CS42L43B_DECIM_HPF_WNF_CTRL6,\n+\t\t\t    CS42L43_DECIM_WNF_CF_SHIFT, cs42l43_wnf_corner_text);\n \n static const char * const cs42l43_hpf_corner_text[] = {\n \t\"3Hz\", \"12Hz\", \"48Hz\", \"96Hz\",\n@@ -821,6 +879,10 @@ static SOC_ENUM_SINGLE_DECL(cs42l43_dec3_hpf_corner, CS42L43_DECIM_HPF_WNF_CTRL3\n \t\t\t    CS42L43_DECIM_HPF_CF_SHIFT, cs42l43_hpf_corner_text);\n static SOC_ENUM_SINGLE_DECL(cs42l43_dec4_hpf_corner, CS42L43_DECIM_HPF_WNF_CTRL4,\n \t\t\t    CS42L43_DECIM_HPF_CF_SHIFT, cs42l43_hpf_corner_text);\n+static SOC_ENUM_SINGLE_DECL(cs42l43b_dec5_hpf_corner, CS42L43B_DECIM_HPF_WNF_CTRL5,\n+\t\t\t    CS42L43_DECIM_HPF_CF_SHIFT, cs42l43_hpf_corner_text);\n+static SOC_ENUM_SINGLE_DECL(cs42l43b_dec6_hpf_corner, CS42L43B_DECIM_HPF_WNF_CTRL6,\n+\t\t\t    CS42L43_DECIM_HPF_CF_SHIFT, cs42l43_hpf_corner_text);\n \n static SOC_ENUM_SINGLE_DECL(cs42l43_dec1_ramp_up, CS42L43_DECIM_VOL_CTRL_CH1_CH2,\n \t\t\t    CS42L43_DECIM1_VI_RAMP_SHIFT, cs42l43_ramp_text);\n@@ -839,6 +901,31 @@ static SOC_ENUM_SINGLE_DECL(cs42l43_dec4_ramp_up, CS42L43_DECIM_VOL_CTRL_CH3_CH4\n static SOC_ENUM_SINGLE_DECL(cs42l43_dec4_ramp_down, CS42L43_DECIM_VOL_CTRL_CH3_CH4,\n \t\t\t    CS42L43_DECIM4_VD_RAMP_SHIFT, cs42l43_ramp_text);\n \n+static SOC_ENUM_SINGLE_DECL(cs42l43b_dec1_ramp_up, CS42L43B_DECIM_VOL_CTRL_CH1_CH2,\n+\t\t\t    CS42L43_DECIM1_VI_RAMP_SHIFT, cs42l43_ramp_text);\n+static SOC_ENUM_SINGLE_DECL(cs42l43b_dec1_ramp_down, CS42L43B_DECIM_VOL_CTRL_CH1_CH2,\n+\t\t\t    CS42L43_DECIM1_VD_RAMP_SHIFT, cs42l43_ramp_text);\n+static SOC_ENUM_SINGLE_DECL(cs42l43b_dec2_ramp_up, CS42L43B_DECIM_VOL_CTRL_CH1_CH2,\n+\t\t\t    CS42L43_DECIM2_VI_RAMP_SHIFT, cs42l43_ramp_text);\n+static SOC_ENUM_SINGLE_DECL(cs42l43b_dec2_ramp_down, CS42L43B_DECIM_VOL_CTRL_CH1_CH2,\n+\t\t\t    CS42L43_DECIM2_VD_RAMP_SHIFT, cs42l43_ramp_text);\n+static SOC_ENUM_SINGLE_DECL(cs42l43b_dec3_ramp_up, CS42L43B_DECIM_VOL_CTRL_CH3_CH4,\n+\t\t\t    CS42L43_DECIM3_VI_RAMP_SHIFT, cs42l43_ramp_text);\n+static SOC_ENUM_SINGLE_DECL(cs42l43b_dec3_ramp_down, CS42L43B_DECIM_VOL_CTRL_CH3_CH4,\n+\t\t\t    CS42L43_DECIM3_VD_RAMP_SHIFT, cs42l43_ramp_text);\n+static SOC_ENUM_SINGLE_DECL(cs42l43b_dec4_ramp_up, CS42L43B_DECIM_VOL_CTRL_CH3_CH4,\n+\t\t\t    CS42L43_DECIM4_VI_RAMP_SHIFT, cs42l43_ramp_text);\n+static SOC_ENUM_SINGLE_DECL(cs42l43b_dec4_ramp_down, CS42L43B_DECIM_VOL_CTRL_CH3_CH4,\n+\t\t\t    CS42L43_DECIM4_VD_RAMP_SHIFT, cs42l43_ramp_text);\n+static SOC_ENUM_SINGLE_DECL(cs42l43b_dec5_ramp_up, CS42L43B_DECIM_VOL_CTRL_CH5_CH6,\n+\t\t\t    CS42L43B_DECIM5_PATH1_VOL_RISE_RATE_SHIFT, cs42l43_ramp_text);\n+static SOC_ENUM_SINGLE_DECL(cs42l43b_dec5_ramp_down, CS42L43B_DECIM_VOL_CTRL_CH5_CH6,\n+\t\t\t    CS42L43B_DECIM5_PATH1_VOL_FALL_RATE_SHIFT, cs42l43_ramp_text);\n+static SOC_ENUM_SINGLE_DECL(cs42l43b_dec6_ramp_up, CS42L43B_DECIM_VOL_CTRL_CH5_CH6,\n+\t\t\t    CS42L43B_DECIM6_PATH1_VOL_RISE_RATE_SHIFT, cs42l43_ramp_text);\n+static SOC_ENUM_SINGLE_DECL(cs42l43b_dec6_ramp_down, CS42L43B_DECIM_VOL_CTRL_CH5_CH6,\n+\t\t\t    CS42L43B_DECIM6_PATH1_VOL_FALL_RATE_SHIFT, cs42l43_ramp_text);\n+\n static DECLARE_TLV_DB_SCALE(cs42l43_speaker_tlv, -6400, 50, 0);\n \n static SOC_ENUM_SINGLE_DECL(cs42l43_speaker_ramp_up, CS42L43_AMP1_2_VOL_RAMP,\n@@ -898,6 +985,37 @@ static const unsigned int cs42l43_mixer_values[] = {\n \t0x58, 0x59, // EQ1, 2\n };\n \n+static const char * const cs42l43b_mixer_texts[] = {\n+\t\"None\",\n+\t\"Tone Generator 1\", \"Tone Generator 2\",\n+\t\"Decimator 1\", \"Decimator 2\", \"Decimator 3\", \"Decimator 4\", \"Decimator 5\", \"Decimator 6\",\n+\t\"ASPRX1\", \"ASPRX2\", \"ASPRX3\", \"ASPRX4\", \"ASPRX5\", \"ASPRX6\",\n+\t\"DP5RX1\", \"DP5RX2\", \"DP6RX1\", \"DP6RX2\", \"DP7RX1\", \"DP7RX2\",\n+\t\"ASRC INT1\", \"ASRC INT2\", \"ASRC INT3\", \"ASRC INT4\",\n+\t\"ASRC DEC1\", \"ASRC DEC2\", \"ASRC DEC3\", \"ASRC DEC4\",\n+\t\"ISRC1 INT1\", \"ISRC1 INT2\",\n+\t\"ISRC1 DEC1\", \"ISRC1 DEC2\", \"ISRC1 DEC3\", \"ISRC1 DEC4\",\n+\t\"ISRC2 INT1\", \"ISRC2 INT2\",\n+\t\"ISRC2 DEC1\", \"ISRC2 DEC2\", \"ISRC2 DEC3\", \"ISRC2 DEC4\",\n+\t\"EQ1\", \"EQ2\",\n+};\n+\n+static const unsigned int cs42l43b_mixer_values[] = {\n+\t0x00, // None\n+\t0x04, 0x05, // Tone Generator 1, 2\n+\t0x10, 0x11, 0x80, 0x81, 0x12, 0x13, // Decimator 1, 2, 3, 4, 5, 6\n+\t0x20, 0x21, 0x22, 0x23, 0x24, 0x25, // ASPRX1,2,3,4,5,6\n+\t0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, // DP5, 6, 7RX1, 2\n+\t0x40, 0x41, 0x42, 0x43, // ASRC INT1, 2, 3, 4\n+\t0x44, 0x45, 0x46, 0x47, // ASRC DEC1, 2, 3, 4\n+\t0x50, 0x51, // ISRC1 INT1, 2\n+\t0x52, 0x53, 0x78, 0x79, // ISRC1 DEC1, 2, 3, 4\n+\t0x54, 0x55, // ISRC2 INT1, 2\n+\t0x56, 0x57, 0x7A, 0x7B, // ISRC2 DEC1, 2, 3, 4\n+\t0x58, 0x59, // EQ1, 2\n+};\n+\n+/* A variant */\n CS42L43_DECL_MUX(asptx1, CS42L43_ASPTX1_INPUT);\n CS42L43_DECL_MUX(asptx2, CS42L43_ASPTX2_INPUT);\n CS42L43_DECL_MUX(asptx3, CS42L43_ASPTX3_INPUT);\n@@ -946,6 +1064,63 @@ CS42L43_DECL_MIXER(amp2, CS42L43_AMP2MIX_INPUT1);\n CS42L43_DECL_MIXER(amp3, CS42L43_AMP3MIX_INPUT1);\n CS42L43_DECL_MIXER(amp4, CS42L43_AMP4MIX_INPUT1);\n \n+/* B variant */\n+CS42L43B_DECL_MUX(b_asptx1, CS42L43_ASPTX1_INPUT);\n+CS42L43B_DECL_MUX(b_asptx2, CS42L43_ASPTX2_INPUT);\n+CS42L43B_DECL_MUX(b_asptx3, CS42L43_ASPTX3_INPUT);\n+CS42L43B_DECL_MUX(b_asptx4, CS42L43_ASPTX4_INPUT);\n+CS42L43B_DECL_MUX(b_asptx5, CS42L43_ASPTX5_INPUT);\n+CS42L43B_DECL_MUX(b_asptx6, CS42L43_ASPTX6_INPUT);\n+\n+CS42L43B_DECL_MUX(b_dp1tx1, CS42L43_SWIRE_DP1_CH1_INPUT);\n+CS42L43B_DECL_MUX(b_dp1tx2, CS42L43_SWIRE_DP1_CH2_INPUT);\n+CS42L43B_DECL_MUX(b_dp1tx3, CS42L43_SWIRE_DP1_CH3_INPUT);\n+CS42L43B_DECL_MUX(b_dp1tx4, CS42L43_SWIRE_DP1_CH4_INPUT);\n+CS42L43B_DECL_MUX(b_dp2tx1, CS42L43_SWIRE_DP2_CH1_INPUT);\n+CS42L43B_DECL_MUX(b_dp2tx2, CS42L43_SWIRE_DP2_CH2_INPUT);\n+CS42L43B_DECL_MUX(b_dp3tx1, CS42L43_SWIRE_DP3_CH1_INPUT);\n+CS42L43B_DECL_MUX(b_dp3tx2, CS42L43_SWIRE_DP3_CH2_INPUT);\n+CS42L43B_DECL_MUX(b_dp3tx3, CS42L43B_SWIRE_DP3_CH3_INPUT);\n+CS42L43B_DECL_MUX(b_dp3tx4, CS42L43B_SWIRE_DP3_CH4_INPUT);\n+CS42L43B_DECL_MUX(b_dp4tx1, CS42L43_SWIRE_DP4_CH1_INPUT);\n+CS42L43B_DECL_MUX(b_dp4tx2, CS42L43_SWIRE_DP4_CH2_INPUT);\n+CS42L43B_DECL_MUX(b_dp4tx3, CS42L43B_SWIRE_DP4_CH3_INPUT);\n+CS42L43B_DECL_MUX(b_dp4tx4, CS42L43B_SWIRE_DP4_CH4_INPUT);\n+\n+CS42L43B_DECL_MUX(b_asrcint1, CS42L43_ASRC_INT1_INPUT1);\n+CS42L43B_DECL_MUX(b_asrcint2, CS42L43_ASRC_INT2_INPUT1);\n+CS42L43B_DECL_MUX(b_asrcint3, CS42L43_ASRC_INT3_INPUT1);\n+CS42L43B_DECL_MUX(b_asrcint4, CS42L43_ASRC_INT4_INPUT1);\n+CS42L43B_DECL_MUX(b_asrcdec1, CS42L43_ASRC_DEC1_INPUT1);\n+CS42L43B_DECL_MUX(b_asrcdec2, CS42L43_ASRC_DEC2_INPUT1);\n+CS42L43B_DECL_MUX(b_asrcdec3, CS42L43_ASRC_DEC3_INPUT1);\n+CS42L43B_DECL_MUX(b_asrcdec4, CS42L43_ASRC_DEC4_INPUT1);\n+\n+CS42L43B_DECL_MUX(b_isrc1int1, CS42L43_ISRC1INT1_INPUT1);\n+CS42L43B_DECL_MUX(b_isrc1int2, CS42L43_ISRC1INT2_INPUT1);\n+CS42L43B_DECL_MUX(b_isrc1dec1, CS42L43_ISRC1DEC1_INPUT1);\n+CS42L43B_DECL_MUX(b_isrc1dec2, CS42L43_ISRC1DEC2_INPUT1);\n+CS42L43B_DECL_MUX(b_isrc1dec3, CS42L43B_ISRC1DEC3_INPUT1);\n+CS42L43B_DECL_MUX(b_isrc1dec4, CS42L43B_ISRC1DEC4_INPUT1);\n+CS42L43B_DECL_MUX(b_isrc2int1, CS42L43_ISRC2INT1_INPUT1);\n+CS42L43B_DECL_MUX(b_isrc2int2, CS42L43_ISRC2INT2_INPUT1);\n+CS42L43B_DECL_MUX(b_isrc2dec1, CS42L43_ISRC2DEC1_INPUT1);\n+CS42L43B_DECL_MUX(b_isrc2dec2, CS42L43_ISRC2DEC2_INPUT1);\n+CS42L43B_DECL_MUX(b_isrc2dec3, CS42L43B_ISRC2DEC3_INPUT1);\n+CS42L43B_DECL_MUX(b_isrc2dec4, CS42L43B_ISRC2DEC4_INPUT1);\n+\n+CS42L43B_DECL_MUX(b_spdif1, CS42L43_SPDIF1_INPUT1);\n+CS42L43B_DECL_MUX(b_spdif2, CS42L43_SPDIF2_INPUT1);\n+\n+CS42L43B_DECL_MIXER(b_eq1, CS42L43_EQ1MIX_INPUT1);\n+CS42L43B_DECL_MIXER(b_eq2, CS42L43_EQ2MIX_INPUT1);\n+\n+CS42L43B_DECL_MIXER(b_amp1, CS42L43_AMP1MIX_INPUT1);\n+CS42L43B_DECL_MIXER(b_amp2, CS42L43_AMP2MIX_INPUT1);\n+\n+CS42L43B_DECL_MIXER(b_amp3, CS42L43_AMP3MIX_INPUT1);\n+CS42L43B_DECL_MIXER(b_amp4, CS42L43_AMP4MIX_INPUT1);\n+\n static int cs42l43_dapm_get_volsw(struct snd_kcontrol *kcontrol,\n \t\t\t\t  struct snd_ctl_elem_value *ucontrol)\n {\n@@ -1174,44 +1349,6 @@ static const struct snd_kcontrol_new cs42l43_controls[] = {\n \tSOC_ENUM(\"Decimator 3 HPF Corner Frequency\", cs42l43_dec3_hpf_corner),\n \tSOC_ENUM(\"Decimator 4 HPF Corner Frequency\", cs42l43_dec4_hpf_corner),\n \n-\tSOC_SINGLE_TLV(\"Decimator 1 Volume\", CS42L43_DECIM_VOL_CTRL_CH1_CH2,\n-\t\t       CS42L43_DECIM1_VOL_SHIFT, 0xBF, 0, cs42l43_dec_tlv),\n-\tSOC_SINGLE_EXT(\"Decimator 1 Switch\", CS42L43_DECIM_VOL_CTRL_CH1_CH2,\n-\t\t       CS42L43_DECIM1_MUTE_SHIFT, 1, 1,\n-\t\t       cs42l43_decim_get, cs42l43_dapm_put_volsw),\n-\tSOC_SINGLE_TLV(\"Decimator 2 Volume\", CS42L43_DECIM_VOL_CTRL_CH1_CH2,\n-\t\t       CS42L43_DECIM2_VOL_SHIFT, 0xBF, 0, cs42l43_dec_tlv),\n-\tSOC_SINGLE_EXT(\"Decimator 2 Switch\", CS42L43_DECIM_VOL_CTRL_CH1_CH2,\n-\t\t       CS42L43_DECIM2_MUTE_SHIFT, 1, 1,\n-\t\t       cs42l43_decim_get, cs42l43_dapm_put_volsw),\n-\tSOC_SINGLE_TLV(\"Decimator 3 Volume\", CS42L43_DECIM_VOL_CTRL_CH3_CH4,\n-\t\t       CS42L43_DECIM3_VOL_SHIFT, 0xBF, 0, cs42l43_dec_tlv),\n-\tSOC_SINGLE_EXT(\"Decimator 3 Switch\", CS42L43_DECIM_VOL_CTRL_CH3_CH4,\n-\t\t       CS42L43_DECIM3_MUTE_SHIFT, 1, 1,\n-\t\t       cs42l43_decim_get, cs42l43_dapm_put_volsw),\n-\tSOC_SINGLE_TLV(\"Decimator 4 Volume\", CS42L43_DECIM_VOL_CTRL_CH3_CH4,\n-\t\t       CS42L43_DECIM4_VOL_SHIFT, 0xBF, 0, cs42l43_dec_tlv),\n-\tSOC_SINGLE_EXT(\"Decimator 4 Switch\", CS42L43_DECIM_VOL_CTRL_CH3_CH4,\n-\t\t       CS42L43_DECIM4_MUTE_SHIFT, 1, 1,\n-\t\t       cs42l43_decim_get, cs42l43_dapm_put_volsw),\n-\n-\tSOC_ENUM_EXT(\"Decimator 1 Ramp Up\", cs42l43_dec1_ramp_up,\n-\t\t     cs42l43_dapm_get_enum, cs42l43_dapm_put_enum),\n-\tSOC_ENUM_EXT(\"Decimator 1 Ramp Down\", cs42l43_dec1_ramp_down,\n-\t\t     cs42l43_dapm_get_enum, cs42l43_dapm_put_enum),\n-\tSOC_ENUM_EXT(\"Decimator 2 Ramp Up\", cs42l43_dec2_ramp_up,\n-\t\t     cs42l43_dapm_get_enum, cs42l43_dapm_put_enum),\n-\tSOC_ENUM_EXT(\"Decimator 2 Ramp Down\", cs42l43_dec2_ramp_down,\n-\t\t     cs42l43_dapm_get_enum, cs42l43_dapm_put_enum),\n-\tSOC_ENUM_EXT(\"Decimator 3 Ramp Up\", cs42l43_dec3_ramp_up,\n-\t\t     cs42l43_dapm_get_enum, cs42l43_dapm_put_enum),\n-\tSOC_ENUM_EXT(\"Decimator 3 Ramp Down\", cs42l43_dec3_ramp_down,\n-\t\t     cs42l43_dapm_get_enum, cs42l43_dapm_put_enum),\n-\tSOC_ENUM_EXT(\"Decimator 4 Ramp Up\", cs42l43_dec4_ramp_up,\n-\t\t     cs42l43_dapm_get_enum, cs42l43_dapm_put_enum),\n-\tSOC_ENUM_EXT(\"Decimator 4 Ramp Down\", cs42l43_dec4_ramp_down,\n-\t\t     cs42l43_dapm_get_enum, cs42l43_dapm_put_enum),\n-\n \tSOC_DOUBLE_R_EXT(\"Speaker Digital Switch\",\n \t\t\t CS42L43_INTP_VOLUME_CTRL1, CS42L43_INTP_VOLUME_CTRL2,\n \t\t\t CS42L43_AMP_MUTE_SHIFT, 1, 1,\n@@ -1601,35 +1738,81 @@ static int cs42l43_mic_ev(struct snd_soc_dapm_widget *w,\n \tunsigned int *val;\n \tint ret;\n \n-\tswitch (w->shift) {\n-\tcase CS42L43_ADC1_EN_SHIFT:\n-\tcase CS42L43_PDM1_DIN_L_EN_SHIFT:\n-\t\treg = CS42L43_DECIM_VOL_CTRL_CH1_CH2;\n-\t\tramp = CS42L43_DECIM1_VD_RAMP_MASK;\n-\t\tmute = CS42L43_DECIM1_MUTE_MASK;\n-\t\tval = &priv->decim_cache[0];\n-\t\tbreak;\n-\tcase CS42L43_ADC2_EN_SHIFT:\n-\tcase CS42L43_PDM1_DIN_R_EN_SHIFT:\n-\t\treg = CS42L43_DECIM_VOL_CTRL_CH1_CH2;\n-\t\tramp = CS42L43_DECIM2_VD_RAMP_MASK;\n-\t\tmute = CS42L43_DECIM2_MUTE_MASK;\n-\t\tval = &priv->decim_cache[1];\n-\t\tbreak;\n-\tcase CS42L43_PDM2_DIN_L_EN_SHIFT:\n-\t\treg = CS42L43_DECIM_VOL_CTRL_CH3_CH4;\n-\t\tramp  = CS42L43_DECIM3_VD_RAMP_MASK;\n-\t\tmute = CS42L43_DECIM3_MUTE_MASK;\n-\t\tval = &priv->decim_cache[2];\n-\t\tbreak;\n-\tcase CS42L43_PDM2_DIN_R_EN_SHIFT:\n-\t\treg = CS42L43_DECIM_VOL_CTRL_CH3_CH4;\n-\t\tramp = CS42L43_DECIM4_VD_RAMP_MASK;\n-\t\tmute = CS42L43_DECIM4_MUTE_MASK;\n-\t\tval = &priv->decim_cache[3];\n-\t\tbreak;\n-\tdefault:\n-\t\tdev_err(priv->dev, \"Invalid microphone shift: %d\\n\", w->shift);\n+\tif (cs42l43->variant_id == CS42L43_DEVID_VAL) {\n+\t\tswitch (w->shift) {\n+\t\tcase CS42L43_ADC1_EN_SHIFT:\n+\t\tcase CS42L43_PDM1_DIN_L_EN_SHIFT:\n+\t\t\treg = CS42L43_DECIM_VOL_CTRL_CH1_CH2;\n+\t\t\tramp = CS42L43_DECIM1_VD_RAMP_MASK;\n+\t\t\tmute = CS42L43_DECIM1_MUTE_MASK;\n+\t\t\tval = &priv->decim_cache[0];\n+\t\t\tbreak;\n+\t\tcase CS42L43_ADC2_EN_SHIFT:\n+\t\tcase CS42L43_PDM1_DIN_R_EN_SHIFT:\n+\t\t\treg = CS42L43_DECIM_VOL_CTRL_CH1_CH2;\n+\t\t\tramp = CS42L43_DECIM2_VD_RAMP_MASK;\n+\t\t\tmute = CS42L43_DECIM2_MUTE_MASK;\n+\t\t\tval = &priv->decim_cache[1];\n+\t\t\tbreak;\n+\t\tcase CS42L43_PDM2_DIN_L_EN_SHIFT:\n+\t\t\treg = CS42L43_DECIM_VOL_CTRL_CH3_CH4;\n+\t\t\tramp  = CS42L43_DECIM3_VD_RAMP_MASK;\n+\t\t\tmute = CS42L43_DECIM3_MUTE_MASK;\n+\t\t\tval = &priv->decim_cache[2];\n+\t\t\tbreak;\n+\t\tcase CS42L43_PDM2_DIN_R_EN_SHIFT:\n+\t\t\treg = CS42L43_DECIM_VOL_CTRL_CH3_CH4;\n+\t\t\tramp = CS42L43_DECIM4_VD_RAMP_MASK;\n+\t\t\tmute = CS42L43_DECIM4_MUTE_MASK;\n+\t\t\tval = &priv->decim_cache[3];\n+\t\t\tbreak;\n+\t\tdefault:\n+\t\t\tdev_err(priv->dev, \"Invalid microphone shift: %d\\n\", w->shift);\n+\t\t\treturn -EINVAL;\n+\t\t}\n+\t} else if (cs42l43->variant_id == CS42L43B_DEVID_VAL) {\n+\t\tswitch (w->shift) {\n+\t\tcase CS42L43_ADC1_EN_SHIFT:\n+\t\t\treg = CS42L43B_DECIM_VOL_CTRL_CH1_CH2;\n+\t\t\tramp = CS42L43_DECIM1_VD_RAMP_MASK;\n+\t\t\tmute = CS42L43_DECIM1_MUTE_MASK;\n+\t\t\tval = &priv->decim_cache[0];\n+\t\t\tbreak;\n+\t\tcase CS42L43_ADC2_EN_SHIFT:\n+\t\t\treg = CS42L43B_DECIM_VOL_CTRL_CH1_CH2;\n+\t\t\tramp = CS42L43_DECIM2_VD_RAMP_MASK;\n+\t\t\tmute = CS42L43_DECIM2_MUTE_MASK;\n+\t\t\tval = &priv->decim_cache[1];\n+\t\t\tbreak;\n+\t\tcase CS42L43_PDM1_DIN_L_EN_SHIFT:\n+\t\t\treg = CS42L43B_DECIM_VOL_CTRL_CH3_CH4;\n+\t\t\tramp  = CS42L43_DECIM3_VD_RAMP_MASK;\n+\t\t\tmute = CS42L43_DECIM3_MUTE_MASK;\n+\t\t\tval = &priv->decim_cache[2];\n+\t\t\tbreak;\n+\t\tcase CS42L43_PDM1_DIN_R_EN_SHIFT:\n+\t\t\treg = CS42L43B_DECIM_VOL_CTRL_CH3_CH4;\n+\t\t\tramp = CS42L43_DECIM4_VD_RAMP_MASK;\n+\t\t\tmute = CS42L43_DECIM4_MUTE_MASK;\n+\t\t\tval = &priv->decim_cache[3];\n+\t\t\tbreak;\n+\t\tcase CS42L43_PDM2_DIN_L_EN_SHIFT:\n+\t\t\treg = CS42L43B_DECIM_VOL_CTRL_CH5_CH6;\n+\t\t\tramp  = CS42L43B_DECIM5_PATH1_VOL_FALL_RATE_MASK;\n+\t\t\tmute = CS42L43B_DECIM5_MUTE_MASK;\n+\t\t\tval = &priv->decim_cache[4];\n+\t\t\tbreak;\n+\t\tcase CS42L43_PDM2_DIN_R_EN_SHIFT:\n+\t\t\treg = CS42L43B_DECIM_VOL_CTRL_CH5_CH6;\n+\t\t\tramp = CS42L43B_DECIM6_PATH1_VOL_FALL_RATE_MASK;\n+\t\t\tmute = CS42L43B_DECIM6_MUTE_MASK;\n+\t\t\tval = &priv->decim_cache[5];\n+\t\t\tbreak;\n+\t\tdefault:\n+\t\t\tdev_err(priv->dev, \"Invalid microphone shift: %d\\n\", w->shift);\n+\t\t\treturn -EINVAL;\n+\t\t}\n+\t} else {\n \t\treturn -EINVAL;\n \t}\n \n@@ -1722,11 +1905,6 @@ static const struct snd_soc_dapm_widget cs42l43_widgets[] = {\n \t\t\t   0, NULL, 0, cs42l43_mic_ev,\n \t\t\t   SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU),\n \n-\tSND_SOC_DAPM_MUX(\"Decimator 1 Mode\", SND_SOC_NOPM, 0, 0,\n-\t\t\t &cs42l43_dec_mode_ctl[0]),\n-\tSND_SOC_DAPM_MUX(\"Decimator 2 Mode\", SND_SOC_NOPM, 0, 0,\n-\t\t\t &cs42l43_dec_mode_ctl[1]),\n-\n \tSND_SOC_DAPM_PGA(\"Decimator 1\", SND_SOC_NOPM, 0, 0, NULL, 0),\n \tSND_SOC_DAPM_PGA(\"Decimator 2\", SND_SOC_NOPM, 0, 0, NULL, 0),\n \tSND_SOC_DAPM_PGA(\"Decimator 3\", SND_SOC_NOPM, 0, 0, NULL, 0),\n@@ -1871,53 +2049,6 @@ static const struct snd_soc_dapm_widget cs42l43_widgets[] = {\n \n \tSND_SOC_DAPM_SUPPLY(\"Mixer Core\", CS42L43_BLOCK_EN6, CS42L43_MIXER_EN_SHIFT,\n \t\t\t    0, NULL, 0),\n-\tCS42L43_DAPM_MUX(\"ASPTX1\", asptx1),\n-\tCS42L43_DAPM_MUX(\"ASPTX2\", asptx2),\n-\tCS42L43_DAPM_MUX(\"ASPTX3\", asptx3),\n-\tCS42L43_DAPM_MUX(\"ASPTX4\", asptx4),\n-\tCS42L43_DAPM_MUX(\"ASPTX5\", asptx5),\n-\tCS42L43_DAPM_MUX(\"ASPTX6\", asptx6),\n-\n-\tCS42L43_DAPM_MUX(\"DP1TX1\", dp1tx1),\n-\tCS42L43_DAPM_MUX(\"DP1TX2\", dp1tx2),\n-\tCS42L43_DAPM_MUX(\"DP1TX3\", dp1tx3),\n-\tCS42L43_DAPM_MUX(\"DP1TX4\", dp1tx4),\n-\tCS42L43_DAPM_MUX(\"DP2TX1\", dp2tx1),\n-\tCS42L43_DAPM_MUX(\"DP2TX2\", dp2tx2),\n-\tCS42L43_DAPM_MUX(\"DP3TX1\", dp3tx1),\n-\tCS42L43_DAPM_MUX(\"DP3TX2\", dp3tx2),\n-\tCS42L43_DAPM_MUX(\"DP4TX1\", dp4tx1),\n-\tCS42L43_DAPM_MUX(\"DP4TX2\", dp4tx2),\n-\n-\tCS42L43_DAPM_MUX(\"ASRC INT1\", asrcint1),\n-\tCS42L43_DAPM_MUX(\"ASRC INT2\", asrcint2),\n-\tCS42L43_DAPM_MUX(\"ASRC INT3\", asrcint3),\n-\tCS42L43_DAPM_MUX(\"ASRC INT4\", asrcint4),\n-\tCS42L43_DAPM_MUX(\"ASRC DEC1\", asrcdec1),\n-\tCS42L43_DAPM_MUX(\"ASRC DEC2\", asrcdec2),\n-\tCS42L43_DAPM_MUX(\"ASRC DEC3\", asrcdec3),\n-\tCS42L43_DAPM_MUX(\"ASRC DEC4\", asrcdec4),\n-\n-\tCS42L43_DAPM_MUX(\"ISRC1INT1\", isrc1int1),\n-\tCS42L43_DAPM_MUX(\"ISRC1INT2\", isrc1int2),\n-\tCS42L43_DAPM_MUX(\"ISRC1DEC1\", isrc1dec1),\n-\tCS42L43_DAPM_MUX(\"ISRC1DEC2\", isrc1dec2),\n-\tCS42L43_DAPM_MUX(\"ISRC2INT1\", isrc2int1),\n-\tCS42L43_DAPM_MUX(\"ISRC2INT2\", isrc2int2),\n-\tCS42L43_DAPM_MUX(\"ISRC2DEC1\", isrc2dec1),\n-\tCS42L43_DAPM_MUX(\"ISRC2DEC2\", isrc2dec2),\n-\n-\tCS42L43_DAPM_MUX(\"SPDIF1\", spdif1),\n-\tCS42L43_DAPM_MUX(\"SPDIF2\", spdif2),\n-\n-\tCS42L43_DAPM_MIXER(\"EQ1\", eq1),\n-\tCS42L43_DAPM_MIXER(\"EQ2\", eq2),\n-\n-\tCS42L43_DAPM_MIXER(\"Speaker L\", amp1),\n-\tCS42L43_DAPM_MIXER(\"Speaker R\", amp2),\n-\n-\tCS42L43_DAPM_MIXER(\"Headphone L\", amp3),\n-\tCS42L43_DAPM_MIXER(\"Headphone R\", amp4),\n };\n \n static const struct snd_soc_dapm_route cs42l43_routes[] = {\n@@ -1963,16 +2094,6 @@ static const struct snd_soc_dapm_route cs42l43_routes[] = {\n \t{ \"PDM2L\",\t\tNULL,\t\"PDM2_DIN\" },\n \t{ \"PDM2R\",\t\tNULL,\t\"PDM2_DIN\" },\n \n-\t{ \"Decimator 1 Mode\",\t\"PDM\",\t\"PDM1L\" },\n-\t{ \"Decimator 1 Mode\",\t\"ADC\",\t\"ADC1\" },\n-\t{ \"Decimator 2 Mode\",\t\"PDM\",\t\"PDM1R\" },\n-\t{ \"Decimator 2 Mode\",\t\"ADC\",\t\"ADC2\" },\n-\n-\t{ \"Decimator 1\",\tNULL,\t\"Decimator 1 Mode\" },\n-\t{ \"Decimator 2\",\tNULL,\t\"Decimator 2 Mode\" },\n-\t{ \"Decimator 3\",\tNULL,\t\"PDM2L\" },\n-\t{ \"Decimator 4\",\tNULL,\t\"PDM2R\" },\n-\n \t{ \"ASP Capture\",\tNULL,\t\"ASPTX1\" },\n \t{ \"ASP Capture\",\tNULL,\t\"ASPTX2\" },\n \t{ \"ASP Capture\",\tNULL,\t\"ASPTX3\" },\n@@ -2060,6 +2181,261 @@ static const struct snd_soc_dapm_route cs42l43_routes[] = {\n \t{ \"ASRC_DEC4\",\t\tNULL,\t\"ASRC_DEC\" },\n \n \t{ \"EQ\",\t\t\tNULL,\t\"EQ Clock\" },\n+};\n+\n+static const struct snd_kcontrol_new cs42l43_a_controls[] = {\n+\tSOC_ENUM_EXT(\"Decimator 1 Ramp Up\", cs42l43_dec1_ramp_up,\n+\t\t     cs42l43_dapm_get_enum, cs42l43_dapm_put_enum),\n+\tSOC_ENUM_EXT(\"Decimator 1 Ramp Down\", cs42l43_dec1_ramp_down,\n+\t\t     cs42l43_dapm_get_enum, cs42l43_dapm_put_enum),\n+\tSOC_ENUM_EXT(\"Decimator 2 Ramp Up\", cs42l43_dec2_ramp_up,\n+\t\t     cs42l43_dapm_get_enum, cs42l43_dapm_put_enum),\n+\tSOC_ENUM_EXT(\"Decimator 2 Ramp Down\", cs42l43_dec2_ramp_down,\n+\t\t     cs42l43_dapm_get_enum, cs42l43_dapm_put_enum),\n+\tSOC_ENUM_EXT(\"Decimator 3 Ramp Up\", cs42l43_dec3_ramp_up,\n+\t\t     cs42l43_dapm_get_enum, cs42l43_dapm_put_enum),\n+\tSOC_ENUM_EXT(\"Decimator 3 Ramp Down\", cs42l43_dec3_ramp_down,\n+\t\t     cs42l43_dapm_get_enum, cs42l43_dapm_put_enum),\n+\tSOC_ENUM_EXT(\"Decimator 4 Ramp Up\", cs42l43_dec4_ramp_up,\n+\t\t     cs42l43_dapm_get_enum, cs42l43_dapm_put_enum),\n+\tSOC_ENUM_EXT(\"Decimator 4 Ramp Down\", cs42l43_dec4_ramp_down,\n+\t\t     cs42l43_dapm_get_enum, cs42l43_dapm_put_enum),\n+\n+\tSOC_SINGLE_TLV(\"Decimator 1 Volume\", CS42L43_DECIM_VOL_CTRL_CH1_CH2,\n+\t\t       CS42L43_DECIM1_VOL_SHIFT, 0xBF, 0, cs42l43_dec_tlv),\n+\tSOC_SINGLE_EXT(\"Decimator 1 Switch\", CS42L43_DECIM_VOL_CTRL_CH1_CH2,\n+\t\t       CS42L43_DECIM1_MUTE_SHIFT, 1, 1,\n+\t\t       cs42l43_decim_get, cs42l43_dapm_put_volsw),\n+\tSOC_SINGLE_TLV(\"Decimator 2 Volume\", CS42L43_DECIM_VOL_CTRL_CH1_CH2,\n+\t\t       CS42L43_DECIM2_VOL_SHIFT, 0xBF, 0, cs42l43_dec_tlv),\n+\tSOC_SINGLE_EXT(\"Decimator 2 Switch\", CS42L43_DECIM_VOL_CTRL_CH1_CH2,\n+\t\t       CS42L43_DECIM2_MUTE_SHIFT, 1, 1,\n+\t\t       cs42l43_decim_get, cs42l43_dapm_put_volsw),\n+\tSOC_SINGLE_TLV(\"Decimator 3 Volume\", CS42L43_DECIM_VOL_CTRL_CH3_CH4,\n+\t\t       CS42L43_DECIM3_VOL_SHIFT, 0xBF, 0, cs42l43_dec_tlv),\n+\tSOC_SINGLE_EXT(\"Decimator 3 Switch\", CS42L43_DECIM_VOL_CTRL_CH3_CH4,\n+\t\t       CS42L43_DECIM3_MUTE_SHIFT, 1, 1,\n+\t\t       cs42l43_decim_get, cs42l43_dapm_put_volsw),\n+\tSOC_SINGLE_TLV(\"Decimator 4 Volume\", CS42L43_DECIM_VOL_CTRL_CH3_CH4,\n+\t\t       CS42L43_DECIM4_VOL_SHIFT, 0xBF, 0, cs42l43_dec_tlv),\n+\tSOC_SINGLE_EXT(\"Decimator 4 Switch\", CS42L43_DECIM_VOL_CTRL_CH3_CH4,\n+\t\t       CS42L43_DECIM4_MUTE_SHIFT, 1, 1,\n+\t\t       cs42l43_decim_get, cs42l43_dapm_put_volsw),\n+};\n+\n+static const struct snd_kcontrol_new cs42l43_b_controls[] = {\n+\tSOC_SINGLE_TLV(\"Decimator 1 Volume\", CS42L43B_DECIM_VOL_CTRL_CH1_CH2,\n+\t\t       CS42L43_DECIM1_VOL_SHIFT, 0xBF, 0, cs42l43_dec_tlv),\n+\tSOC_SINGLE_EXT(\"Decimator 1 Switch\", CS42L43B_DECIM_VOL_CTRL_CH1_CH2,\n+\t\t       CS42L43_DECIM1_MUTE_SHIFT, 1, 1,\n+\t\t       cs42l43_decim_get, cs42l43_dapm_put_volsw),\n+\tSOC_SINGLE_TLV(\"Decimator 2 Volume\", CS42L43B_DECIM_VOL_CTRL_CH1_CH2,\n+\t\t       CS42L43_DECIM2_VOL_SHIFT, 0xBF, 0, cs42l43_dec_tlv),\n+\tSOC_SINGLE_EXT(\"Decimator 2 Switch\", CS42L43B_DECIM_VOL_CTRL_CH1_CH2,\n+\t\t       CS42L43_DECIM2_MUTE_SHIFT, 1, 1,\n+\t\t       cs42l43_decim_get, cs42l43_dapm_put_volsw),\n+\tSOC_SINGLE_TLV(\"Decimator 3 Volume\", CS42L43B_DECIM_VOL_CTRL_CH3_CH4,\n+\t\t       CS42L43_DECIM3_VOL_SHIFT, 0xBF, 0, cs42l43_dec_tlv),\n+\tSOC_SINGLE_EXT(\"Decimator 3 Switch\", CS42L43B_DECIM_VOL_CTRL_CH3_CH4,\n+\t\t       CS42L43_DECIM3_MUTE_SHIFT, 1, 1,\n+\t\t       cs42l43_decim_get, cs42l43_dapm_put_volsw),\n+\tSOC_SINGLE_TLV(\"Decimator 4 Volume\", CS42L43B_DECIM_VOL_CTRL_CH3_CH4,\n+\t\t       CS42L43_DECIM4_VOL_SHIFT, 0xBF, 0, cs42l43_dec_tlv),\n+\tSOC_SINGLE_EXT(\"Decimator 4 Switch\", CS42L43B_DECIM_VOL_CTRL_CH3_CH4,\n+\t\t       CS42L43_DECIM4_MUTE_SHIFT, 1, 1,\n+\t\t       cs42l43_decim_get, cs42l43_dapm_put_volsw),\n+\tSOC_SINGLE_TLV(\"Decimator 5 Volume\", CS42L43B_DECIM_VOL_CTRL_CH5_CH6,\n+\t\t       CS42L43B_DECIM5_VOL_SHIFT, 0xBF, 0, cs42l43_dec_tlv),\n+\tSOC_SINGLE_EXT(\"Decimator 5 Switch\", CS42L43B_DECIM_VOL_CTRL_CH5_CH6,\n+\t\t       CS42L43B_DECIM5_MUTE_SHIFT, 1, 1,\n+\t\t       cs42l43_decim_get, cs42l43_dapm_put_volsw),\n+\tSOC_SINGLE_TLV(\"Decimator 6 Volume\", CS42L43B_DECIM_VOL_CTRL_CH5_CH6,\n+\t\t       CS42L43B_DECIM6_VOL_SHIFT, 0xBF, 0, cs42l43_dec_tlv),\n+\tSOC_SINGLE_EXT(\"Decimator 6 Switch\", CS42L43B_DECIM_VOL_CTRL_CH5_CH6,\n+\t\t       CS42L43B_DECIM6_MUTE_SHIFT, 1, 1,\n+\t\t       cs42l43_decim_get, cs42l43_dapm_put_volsw),\n+\n+\tSOC_ENUM_EXT(\"Decimator 1 Ramp Up\", cs42l43b_dec1_ramp_up,\n+\t\t     cs42l43_dapm_get_enum, cs42l43_dapm_put_enum),\n+\tSOC_ENUM_EXT(\"Decimator 1 Ramp Down\", cs42l43b_dec1_ramp_down,\n+\t\t     cs42l43_dapm_get_enum, cs42l43_dapm_put_enum),\n+\tSOC_ENUM_EXT(\"Decimator 2 Ramp Up\", cs42l43b_dec2_ramp_up,\n+\t\t     cs42l43_dapm_get_enum, cs42l43_dapm_put_enum),\n+\tSOC_ENUM_EXT(\"Decimator 2 Ramp Down\", cs42l43b_dec2_ramp_down,\n+\t\t     cs42l43_dapm_get_enum, cs42l43_dapm_put_enum),\n+\tSOC_ENUM_EXT(\"Decimator 3 Ramp Up\", cs42l43b_dec3_ramp_up,\n+\t\t     cs42l43_dapm_get_enum, cs42l43_dapm_put_enum),\n+\tSOC_ENUM_EXT(\"Decimator 3 Ramp Down\", cs42l43b_dec3_ramp_down,\n+\t\t     cs42l43_dapm_get_enum, cs42l43_dapm_put_enum),\n+\tSOC_ENUM_EXT(\"Decimator 4 Ramp Up\", cs42l43b_dec4_ramp_up,\n+\t\t     cs42l43_dapm_get_enum, cs42l43_dapm_put_enum),\n+\tSOC_ENUM_EXT(\"Decimator 4 Ramp Down\", cs42l43b_dec4_ramp_down,\n+\t\t     cs42l43_dapm_get_enum, cs42l43_dapm_put_enum),\n+\tSOC_ENUM_EXT(\"Decimator 5 Ramp Up\", cs42l43b_dec5_ramp_up,\n+\t\t     cs42l43_dapm_get_enum, cs42l43_dapm_put_enum),\n+\tSOC_ENUM_EXT(\"Decimator 5 Ramp Down\", cs42l43b_dec5_ramp_down,\n+\t\t     cs42l43_dapm_get_enum, cs42l43_dapm_put_enum),\n+\tSOC_ENUM_EXT(\"Decimator 6 Ramp Up\", cs42l43b_dec6_ramp_up,\n+\t\t     cs42l43_dapm_get_enum, cs42l43_dapm_put_enum),\n+\tSOC_ENUM_EXT(\"Decimator 6 Ramp Down\", cs42l43b_dec6_ramp_down,\n+\t\t     cs42l43_dapm_get_enum, cs42l43_dapm_put_enum),\n+\n+\tSOC_SINGLE(\"Decimator 5 WNF Switch\", CS42L43B_DECIM_HPF_WNF_CTRL5,\n+\t\t   CS42L43_DECIM_WNF_EN_SHIFT, 1, 0),\n+\tSOC_SINGLE(\"Decimator 6 WNF Switch\", CS42L43B_DECIM_HPF_WNF_CTRL6,\n+\t\t   CS42L43_DECIM_WNF_EN_SHIFT, 1, 0),\n+\n+\tSOC_ENUM(\"Decimator 5 WNF Corner Frequency\", cs42l43b_dec5_wnf_corner),\n+\tSOC_ENUM(\"Decimator 6 WNF Corner Frequency\", cs42l43b_dec6_wnf_corner),\n+\n+\tSOC_SINGLE(\"Decimator 5 HPF Switch\", CS42L43B_DECIM_HPF_WNF_CTRL5,\n+\t\t   CS42L43_DECIM_HPF_EN_SHIFT, 1, 0),\n+\tSOC_SINGLE(\"Decimator 6 HPF Switch\", CS42L43B_DECIM_HPF_WNF_CTRL6,\n+\t\t   CS42L43_DECIM_HPF_EN_SHIFT, 1, 0),\n+\n+\tSOC_ENUM(\"Decimator 5 HPF Corner Frequency\", cs42l43b_dec5_hpf_corner),\n+\tSOC_ENUM(\"Decimator 6 HPF Corner Frequency\", cs42l43b_dec6_hpf_corner),\n+};\n+\n+static const struct snd_soc_dapm_widget cs42l43_a_widgets[] = {\n+\tSND_SOC_DAPM_MUX(\"Decimator 1 Mode\", SND_SOC_NOPM, 0, 0,\n+\t\t\t &cs42l43_dec_mode_ctl[0]),\n+\tSND_SOC_DAPM_MUX(\"Decimator 2 Mode\", SND_SOC_NOPM, 0, 0,\n+\t\t\t &cs42l43_dec_mode_ctl[1]),\n+\tCS42L43_DAPM_MUX(\"ASPTX1\", asptx1),\n+\tCS42L43_DAPM_MUX(\"ASPTX2\", asptx2),\n+\tCS42L43_DAPM_MUX(\"ASPTX3\", asptx3),\n+\tCS42L43_DAPM_MUX(\"ASPTX4\", asptx4),\n+\tCS42L43_DAPM_MUX(\"ASPTX5\", asptx5),\n+\tCS42L43_DAPM_MUX(\"ASPTX6\", asptx6),\n+\n+\tCS42L43_DAPM_MUX(\"DP1TX1\", dp1tx1),\n+\tCS42L43_DAPM_MUX(\"DP1TX2\", dp1tx2),\n+\tCS42L43_DAPM_MUX(\"DP1TX3\", dp1tx3),\n+\tCS42L43_DAPM_MUX(\"DP1TX4\", dp1tx4),\n+\tCS42L43_DAPM_MUX(\"DP2TX1\", dp2tx1),\n+\tCS42L43_DAPM_MUX(\"DP2TX2\", dp2tx2),\n+\tCS42L43_DAPM_MUX(\"DP3TX1\", dp3tx1),\n+\tCS42L43_DAPM_MUX(\"DP3TX2\", dp3tx2),\n+\tCS42L43_DAPM_MUX(\"DP4TX1\", dp4tx1),\n+\tCS42L43_DAPM_MUX(\"DP4TX2\", dp4tx2),\n+\n+\tCS42L43_DAPM_MUX(\"ASRC INT1\", asrcint1),\n+\tCS42L43_DAPM_MUX(\"ASRC INT2\", asrcint2),\n+\tCS42L43_DAPM_MUX(\"ASRC INT3\", asrcint3),\n+\tCS42L43_DAPM_MUX(\"ASRC INT4\", asrcint4),\n+\tCS42L43_DAPM_MUX(\"ASRC DEC1\", asrcdec1),\n+\tCS42L43_DAPM_MUX(\"ASRC DEC2\", asrcdec2),\n+\tCS42L43_DAPM_MUX(\"ASRC DEC3\", asrcdec3),\n+\tCS42L43_DAPM_MUX(\"ASRC DEC4\", asrcdec4),\n+\n+\tCS42L43_DAPM_MUX(\"ISRC1INT1\", isrc1int1),\n+\tCS42L43_DAPM_MUX(\"ISRC1INT2\", isrc1int2),\n+\tCS42L43_DAPM_MUX(\"ISRC1DEC1\", isrc1dec1),\n+\tCS42L43_DAPM_MUX(\"ISRC1DEC2\", isrc1dec2),\n+\tCS42L43_DAPM_MUX(\"ISRC2INT1\", isrc2int1),\n+\tCS42L43_DAPM_MUX(\"ISRC2INT2\", isrc2int2),\n+\tCS42L43_DAPM_MUX(\"ISRC2DEC1\", isrc2dec1),\n+\tCS42L43_DAPM_MUX(\"ISRC2DEC2\", isrc2dec2),\n+\n+\tCS42L43_DAPM_MUX(\"SPDIF1\", spdif1),\n+\tCS42L43_DAPM_MUX(\"SPDIF2\", spdif2),\n+\n+\tCS42L43_DAPM_MIXER(\"EQ1\", eq1),\n+\tCS42L43_DAPM_MIXER(\"EQ2\", eq2),\n+\n+\tCS42L43_DAPM_MIXER(\"Speaker L\", amp1),\n+\tCS42L43_DAPM_MIXER(\"Speaker R\", amp2),\n+\n+\tCS42L43_DAPM_MIXER(\"Headphone L\", amp3),\n+\tCS42L43_DAPM_MIXER(\"Headphone R\", amp4),\n+};\n+\n+static const struct snd_soc_dapm_widget cs42l43_b_widgets[] = {\n+\tSND_SOC_DAPM_AIF_OUT(\"DP3TX3\", NULL, 2, SND_SOC_NOPM, 0, 0),\n+\tSND_SOC_DAPM_AIF_OUT(\"DP3TX4\", NULL, 3, SND_SOC_NOPM, 0, 0),\n+\tSND_SOC_DAPM_AIF_OUT(\"DP4TX3\", NULL, 2, SND_SOC_NOPM, 0, 0),\n+\tSND_SOC_DAPM_AIF_OUT(\"DP4TX4\", NULL, 3, SND_SOC_NOPM, 0, 0),\n+\n+\tSND_SOC_DAPM_PGA(\"Decimator 5\", SND_SOC_NOPM, 0, 0, NULL, 0),\n+\tSND_SOC_DAPM_PGA(\"Decimator 6\", SND_SOC_NOPM, 0, 0, NULL, 0),\n+\n+\tSND_SOC_DAPM_PGA(\"ISRC1DEC3\", CS42L43_ISRC1_CTRL,\n+\t\t\t CS42L43B_ISRC_DEC3_EN_SHIFT, 0, NULL, 0),\n+\tSND_SOC_DAPM_PGA(\"ISRC1DEC4\", CS42L43_ISRC1_CTRL,\n+\t\t\t CS42L43B_ISRC_DEC4_EN_SHIFT, 0, NULL, 0),\n+\tSND_SOC_DAPM_PGA(\"ISRC2DEC3\", CS42L43_ISRC2_CTRL,\n+\t\t\t CS42L43B_ISRC_DEC3_EN_SHIFT, 0, NULL, 0),\n+\tSND_SOC_DAPM_PGA(\"ISRC2DEC4\", CS42L43_ISRC2_CTRL,\n+\t\t\t CS42L43B_ISRC_DEC4_EN_SHIFT, 0, NULL, 0),\n+\n+\tCS42L43_DAPM_MUX(\"ASPTX1\", b_asptx1),\n+\tCS42L43_DAPM_MUX(\"ASPTX2\", b_asptx2),\n+\tCS42L43_DAPM_MUX(\"ASPTX3\", b_asptx3),\n+\tCS42L43_DAPM_MUX(\"ASPTX4\", b_asptx4),\n+\tCS42L43_DAPM_MUX(\"ASPTX5\", b_asptx5),\n+\tCS42L43_DAPM_MUX(\"ASPTX6\", b_asptx6),\n+\n+\tCS42L43_DAPM_MUX(\"DP1TX1\", b_dp1tx1),\n+\tCS42L43_DAPM_MUX(\"DP1TX2\", b_dp1tx2),\n+\tCS42L43_DAPM_MUX(\"DP1TX3\", b_dp1tx3),\n+\tCS42L43_DAPM_MUX(\"DP1TX4\", b_dp1tx4),\n+\tCS42L43_DAPM_MUX(\"DP2TX1\", b_dp2tx1),\n+\tCS42L43_DAPM_MUX(\"DP2TX2\", b_dp2tx2),\n+\tCS42L43_DAPM_MUX(\"DP3TX1\", b_dp3tx1),\n+\tCS42L43_DAPM_MUX(\"DP3TX2\", b_dp3tx2),\n+\tCS42L43_DAPM_MUX(\"DP3TX3\", b_dp3tx3),\n+\tCS42L43_DAPM_MUX(\"DP3TX4\", b_dp3tx4),\n+\tCS42L43_DAPM_MUX(\"DP4TX1\", b_dp4tx1),\n+\tCS42L43_DAPM_MUX(\"DP4TX2\", b_dp4tx2),\n+\tCS42L43_DAPM_MUX(\"DP4TX3\", b_dp4tx3),\n+\tCS42L43_DAPM_MUX(\"DP4TX4\", b_dp4tx4),\n+\n+\tCS42L43_DAPM_MUX(\"ASRC INT1\", b_asrcint1),\n+\tCS42L43_DAPM_MUX(\"ASRC INT2\", b_asrcint2),\n+\tCS42L43_DAPM_MUX(\"ASRC INT3\", b_asrcint3),\n+\tCS42L43_DAPM_MUX(\"ASRC INT4\", b_asrcint4),\n+\tCS42L43_DAPM_MUX(\"ASRC DEC1\", b_asrcdec1),\n+\tCS42L43_DAPM_MUX(\"ASRC DEC2\", b_asrcdec2),\n+\tCS42L43_DAPM_MUX(\"ASRC DEC3\", b_asrcdec3),\n+\tCS42L43_DAPM_MUX(\"ASRC DEC4\", b_asrcdec4),\n+\n+\tCS42L43_DAPM_MUX(\"ISRC1INT1\", b_isrc1int1),\n+\tCS42L43_DAPM_MUX(\"ISRC1INT2\", b_isrc1int2),\n+\tCS42L43_DAPM_MUX(\"ISRC1DEC1\", b_isrc1dec1),\n+\tCS42L43_DAPM_MUX(\"ISRC1DEC2\", b_isrc1dec2),\n+\tCS42L43_DAPM_MUX(\"ISRC1DEC3\", b_isrc1dec3),\n+\tCS42L43_DAPM_MUX(\"ISRC1DEC4\", b_isrc1dec4),\n+\tCS42L43_DAPM_MUX(\"ISRC2INT1\", b_isrc2int1),\n+\tCS42L43_DAPM_MUX(\"ISRC2INT2\", b_isrc2int2),\n+\tCS42L43_DAPM_MUX(\"ISRC2DEC1\", b_isrc2dec1),\n+\tCS42L43_DAPM_MUX(\"ISRC2DEC2\", b_isrc2dec2),\n+\tCS42L43_DAPM_MUX(\"ISRC2DEC3\", b_isrc2dec3),\n+\tCS42L43_DAPM_MUX(\"ISRC2DEC4\", b_isrc2dec4),\n+\n+\tCS42L43_DAPM_MUX(\"SPDIF1\", b_spdif1),\n+\tCS42L43_DAPM_MUX(\"SPDIF2\", b_spdif2),\n+\n+\tCS42L43_DAPM_MIXER(\"EQ1\", b_eq1),\n+\tCS42L43_DAPM_MIXER(\"EQ2\", b_eq2),\n+\n+\tCS42L43_DAPM_MIXER(\"Speaker L\", b_amp1),\n+\tCS42L43_DAPM_MIXER(\"Speaker R\", b_amp2),\n+\n+\tCS42L43_DAPM_MIXER(\"Headphone L\", b_amp3),\n+\tCS42L43_DAPM_MIXER(\"Headphone R\", b_amp4),\n+};\n+\n+static const struct snd_soc_dapm_route cs42l43_a_routes[] = {\n+\t{ \"Decimator 1 Mode\",\t\"PDM\",\t\"PDM1L\" },\n+\t{ \"Decimator 1 Mode\",\t\"ADC\",\t\"ADC1\" },\n+\t{ \"Decimator 2 Mode\",\t\"PDM\",\t\"PDM1R\" },\n+\t{ \"Decimator 2 Mode\",\t\"ADC\",\t\"ADC2\" },\n+\n+\t{ \"Decimator 1\",\tNULL,\t\"Decimator 1 Mode\" },\n+\t{ \"Decimator 2\",\tNULL,\t\"Decimator 2 Mode\" },\n+\t{ \"Decimator 3\",\tNULL,\t\"PDM2L\" },\n+\t{ \"Decimator 4\",\tNULL,\t\"PDM2R\" },\n \n \tCS42L43_MUX_ROUTES(\"ASPTX1\", \"ASPTX1\"),\n \tCS42L43_MUX_ROUTES(\"ASPTX2\", \"ASPTX2\"),\n@@ -2110,6 +2486,81 @@ static const struct snd_soc_dapm_route cs42l43_routes[] = {\n \tCS42L43_MIXER_ROUTES(\"Headphone R\", \"HP\"),\n };\n \n+static const struct snd_soc_dapm_route cs42l43_b_routes[] = {\n+\t{ \"Decimator 1\",\tNULL,\t\"ADC1\" },\n+\t{ \"Decimator 2\",\tNULL,\t\"ADC2\" },\n+\t{ \"Decimator 3\",\tNULL,\t\"PDM1L\" },\n+\t{ \"Decimator 4\",\tNULL,\t\"PDM1R\" },\n+\t{ \"Decimator 5\",\tNULL,\t\"PDM2L\" },\n+\t{ \"Decimator 6\",\tNULL,\t\"PDM2R\" },\n+\n+\t{ \"DP3 Capture\",\tNULL, \"DP3TX3\" },\n+\t{ \"DP3 Capture\",\tNULL, \"DP3TX4\" },\n+\t{ \"DP4 Capture\",\tNULL, \"DP4TX3\" },\n+\t{ \"DP4 Capture\",\tNULL, \"DP4TX4\" },\n+\n+\t{ \"ISRC1DEC3\",\t\tNULL,\t\"ISRC1\" },\n+\t{ \"ISRC1DEC4\",\t\tNULL,\t\"ISRC1\" },\n+\t{ \"ISRC2DEC3\",\t\tNULL,\t\"ISRC2\" },\n+\t{ \"ISRC2DEC4\",\t\tNULL,\t\"ISRC2\" },\n+\n+\tCS42L43B_MUX_ROUTES(\"ASPTX1\", \"ASPTX1\"),\n+\tCS42L43B_MUX_ROUTES(\"ASPTX2\", \"ASPTX2\"),\n+\tCS42L43B_MUX_ROUTES(\"ASPTX3\", \"ASPTX3\"),\n+\tCS42L43B_MUX_ROUTES(\"ASPTX4\", \"ASPTX4\"),\n+\tCS42L43B_MUX_ROUTES(\"ASPTX5\", \"ASPTX5\"),\n+\tCS42L43B_MUX_ROUTES(\"ASPTX6\", \"ASPTX6\"),\n+\n+\tCS42L43B_MUX_ROUTES(\"DP1TX1\", \"DP1TX1\"),\n+\tCS42L43B_MUX_ROUTES(\"DP1TX2\", \"DP1TX2\"),\n+\tCS42L43B_MUX_ROUTES(\"DP1TX3\", \"DP1TX3\"),\n+\tCS42L43B_MUX_ROUTES(\"DP1TX4\", \"DP1TX4\"),\n+\tCS42L43B_MUX_ROUTES(\"DP2TX1\", \"DP2TX1\"),\n+\tCS42L43B_MUX_ROUTES(\"DP2TX2\", \"DP2TX2\"),\n+\tCS42L43B_MUX_ROUTES(\"DP3TX1\", \"DP3TX1\"),\n+\tCS42L43B_MUX_ROUTES(\"DP3TX2\", \"DP3TX2\"),\n+\tCS42L43B_MUX_ROUTES(\"DP3TX3\", \"DP3TX3\"),\n+\tCS42L43B_MUX_ROUTES(\"DP3TX4\", \"DP3TX4\"),\n+\tCS42L43B_MUX_ROUTES(\"DP4TX1\", \"DP4TX1\"),\n+\tCS42L43B_MUX_ROUTES(\"DP4TX2\", \"DP4TX2\"),\n+\tCS42L43B_MUX_ROUTES(\"DP4TX3\", \"DP4TX3\"),\n+\tCS42L43B_MUX_ROUTES(\"DP4TX4\", \"DP4TX4\"),\n+\n+\tCS42L43B_MUX_ROUTES(\"ASRC INT1\", \"ASRC_INT1\"),\n+\tCS42L43B_MUX_ROUTES(\"ASRC INT2\", \"ASRC_INT2\"),\n+\tCS42L43B_MUX_ROUTES(\"ASRC INT3\", \"ASRC_INT3\"),\n+\tCS42L43B_MUX_ROUTES(\"ASRC INT4\", \"ASRC_INT4\"),\n+\tCS42L43B_MUX_ROUTES(\"ASRC DEC1\", \"ASRC_DEC1\"),\n+\tCS42L43B_MUX_ROUTES(\"ASRC DEC2\", \"ASRC_DEC2\"),\n+\tCS42L43B_MUX_ROUTES(\"ASRC DEC3\", \"ASRC_DEC3\"),\n+\tCS42L43B_MUX_ROUTES(\"ASRC DEC4\", \"ASRC_DEC4\"),\n+\n+\tCS42L43B_MUX_ROUTES(\"ISRC1INT1\", \"ISRC1INT1\"),\n+\tCS42L43B_MUX_ROUTES(\"ISRC1INT2\", \"ISRC1INT2\"),\n+\tCS42L43B_MUX_ROUTES(\"ISRC1DEC1\", \"ISRC1DEC1\"),\n+\tCS42L43B_MUX_ROUTES(\"ISRC1DEC2\", \"ISRC1DEC2\"),\n+\tCS42L43B_MUX_ROUTES(\"ISRC1DEC3\", \"ISRC1DEC3\"),\n+\tCS42L43B_MUX_ROUTES(\"ISRC1DEC4\", \"ISRC1DEC4\"),\n+\tCS42L43B_MUX_ROUTES(\"ISRC2INT1\", \"ISRC2INT1\"),\n+\tCS42L43B_MUX_ROUTES(\"ISRC2INT2\", \"ISRC2INT2\"),\n+\tCS42L43B_MUX_ROUTES(\"ISRC2DEC1\", \"ISRC2DEC1\"),\n+\tCS42L43B_MUX_ROUTES(\"ISRC2DEC2\", \"ISRC2DEC2\"),\n+\tCS42L43B_MUX_ROUTES(\"ISRC2DEC3\", \"ISRC2DEC3\"),\n+\tCS42L43B_MUX_ROUTES(\"ISRC2DEC4\", \"ISRC2DEC4\"),\n+\n+\tCS42L43B_MUX_ROUTES(\"SPDIF1\", \"SPDIF\"),\n+\tCS42L43B_MUX_ROUTES(\"SPDIF2\", \"SPDIF\"),\n+\n+\tCS42L43B_MIXER_ROUTES(\"EQ1\", \"EQ\"),\n+\tCS42L43B_MIXER_ROUTES(\"EQ2\", \"EQ\"),\n+\n+\tCS42L43B_MIXER_ROUTES(\"Speaker L\", \"AMP1\"),\n+\tCS42L43B_MIXER_ROUTES(\"Speaker R\", \"AMP2\"),\n+\n+\tCS42L43B_MIXER_ROUTES(\"Headphone L\", \"HP\"),\n+\tCS42L43B_MIXER_ROUTES(\"Headphone R\", \"HP\"),\n+};\n+\n static int cs42l43_set_sysclk(struct snd_soc_component *component, int clk_id,\n \t\t\t      int src, unsigned int freq, int dir)\n {\n@@ -2126,8 +2577,14 @@ static int cs42l43_set_sysclk(struct snd_soc_component *component, int clk_id,\n \n static int cs42l43_component_probe(struct snd_soc_component *component)\n {\n+\tstruct snd_soc_dapm_context *dapm = snd_soc_component_to_dapm(component);\n \tstruct cs42l43_codec *priv = snd_soc_component_get_drvdata(component);\n+\tunsigned int num_controls, num_widgets, num_routes;\n+\tconst struct snd_soc_dapm_widget *widgets;\n+\tconst struct snd_kcontrol_new *controls;\n+\tconst struct snd_soc_dapm_route *routes;\n \tstruct cs42l43 *cs42l43 = priv->core;\n+\tint ret;\n \n \tsnd_soc_component_init_regmap(component, cs42l43->regmap);\n \n@@ -2139,6 +2596,39 @@ static int cs42l43_component_probe(struct snd_soc_component *component)\n \tpriv->component = component;\n \tpriv->constraint = cs42l43_constraint;\n \n+\tswitch (cs42l43->variant_id) {\n+\tcase CS42L43_DEVID_VAL:\n+\t\tcontrols = cs42l43_a_controls;\n+\t\tnum_controls = ARRAY_SIZE(cs42l43_a_controls);\n+\t\twidgets = cs42l43_a_widgets;\n+\t\tnum_widgets = ARRAY_SIZE(cs42l43_a_widgets);\n+\t\troutes = cs42l43_a_routes;\n+\t\tnum_routes = ARRAY_SIZE(cs42l43_a_routes);\n+\t\tbreak;\n+\tcase CS42L43B_DEVID_VAL:\n+\t\tcontrols = cs42l43_b_controls;\n+\t\tnum_controls = ARRAY_SIZE(cs42l43_b_controls);\n+\t\twidgets = cs42l43_b_widgets;\n+\t\tnum_widgets = ARRAY_SIZE(cs42l43_b_widgets);\n+\t\troutes = cs42l43_b_routes;\n+\t\tnum_routes = ARRAY_SIZE(cs42l43_b_routes);\n+\t\tbreak;\n+\tdefault:\n+\t\treturn -EINVAL;\n+\t}\n+\n+\tret = snd_soc_add_component_controls(component, controls, num_controls);\n+\tif (ret)\n+\t\treturn ret;\n+\n+\tret = snd_soc_dapm_new_controls(dapm, widgets, num_widgets);\n+\tif (ret)\n+\t\treturn ret;\n+\n+\tret = snd_soc_dapm_add_routes(dapm, routes, num_routes);\n+\tif (ret)\n+\t\treturn ret;\n+\n \treturn 0;\n }\n \ndiff --git a/sound/soc/codecs/cs42l43.h b/sound/soc/codecs/cs42l43.h\nindex b2fa2cd1d99f..fd50feb26ae9 100644\n--- a/sound/soc/codecs/cs42l43.h\n+++ b/sound/soc/codecs/cs42l43.h\n@@ -61,7 +61,7 @@ struct cs42l43_codec {\n \tunsigned int refclk_freq;\n \tstruct completion pll_ready;\n \n-\tunsigned int decim_cache[4];\n+\tunsigned int decim_cache[6];\n \tunsigned int adc_ena;\n \tunsigned int hp_ena;\n \n@@ -103,7 +103,7 @@ struct cs42l43_codec {\n \tbool hp_ilimited;\n \tint hp_ilimit_count;\n \n-\tstruct snd_kcontrol *kctl[5];\n+\tstruct snd_kcontrol *kctl[7];\n };\n \n #if IS_REACHABLE(CONFIG_SND_SOC_CS42L43_SDW)\n",
    "prefixes": [
        "SRU",
        "R",
        "4/4"
    ]
}