Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/2217518/?format=api
{ "id": 2217518, "url": "http://patchwork.ozlabs.org/api/patches/2217518/?format=api", "web_url": "http://patchwork.ozlabs.org/project/ubuntu-kernel/patch/20260330025400.2010331-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": "<20260330025400.2010331-5-chris.chiu@canonical.com>", "list_archive_url": null, "date": "2026-03-30T02:53:56", "name": "[SRU,R,4/7] ASoC: SDCA: Pull the Q7.8 volume helpers out of soc-ops", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "4fee230819612d93ac08751a82638570e809a639", "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/20260330025400.2010331-5-chris.chiu@canonical.com/mbox/", "series": [ { "id": 497946, "url": "http://patchwork.ozlabs.org/api/series/497946/?format=api", "web_url": "http://patchwork.ozlabs.org/project/ubuntu-kernel/list/?series=497946", "date": "2026-03-30T02:53:52", "name": "Enable audio functions on Dell Huracan/Renegade platforms w/o built-in microphone", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/497946/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2217518/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2217518/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=ZopbuLLO;\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 4fkbSc0BlJz20Q1\n\tfor <incoming@patchwork.ozlabs.org>; Mon, 30 Mar 2026 13:54:39 +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 1w72lu-0001Pa-9Y; Mon, 30 Mar 2026 02:54:34 +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 1w72lt-0001OE-0L\n for kernel-team@lists.ubuntu.com; Mon, 30 Mar 2026 02:54:33 +0000", "from mail-wm1-f71.google.com (mail-wm1-f71.google.com\n [209.85.128.71])\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 D1AE33F071\n for <kernel-team@lists.ubuntu.com>; Mon, 30 Mar 2026 02:54:32 +0000 (UTC)", "by mail-wm1-f71.google.com with SMTP id\n 5b1f17b1804b1-48532df52c5so38487635e9.1\n for <kernel-team@lists.ubuntu.com>; Sun, 29 Mar 2026 19:54:32 -0700 (PDT)", "from localhost.localdomain (211-75-139-218.hinet-ip.hinet.net.\n [211.75.139.218]) by smtp.gmail.com with ESMTPSA id\n 5b1f17b1804b1-48730628efasm242867945e9.5.2026.03.29.19.54.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 19:54:30 -0700 (PDT)" ], "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=canonical.com;\n s=20251003; t=1774839272;\n bh=tOXROqJZ9H2weUGgaZ5nS15+O477BcZzUgAfk18ugog=;\n h=From:To:Subject:Date:Message-ID:In-Reply-To:References:\n MIME-Version;\n b=ZopbuLLOf16b0Jpo2uQI4qUVafgqDe6RiCijUTmwBjYNjEEJ80lDQqdGxTY11Vm2N\n Om6VXihj7M42owE/UeVWYiwM1LM1UevH4ZpEn6Z0g2SqnvVHcgvEpRfvSYQwvrTgMM\n PkKWo8gSz3rHOK9fV2EvO0q3oqDgt0SV2JjbU10AoOi1H8EAw/+6GBFps5KzsITqZ2\n qJ7yTBzgis7k9bPw6kiWlDEmWe5mpWBR8nM44duKEJtUBXKgtGsCBk1C8GGXu5Rjlk\n aP44dKJNJxt7Yk4qhEmbvTg7/md5/3GcBDs+ogeeL1OJSeJrpmcn2OZoAda/nyEpT2\n rnAjrTe9j53MvtTSJSXq5yO/WGSSplib79w3ratedFzIcJhwRooFCA+nnY7/Pvm+Dc\n K1ReGTvav1UKfWBwAcfJ2dwXN9j9wr1rBTXAcrD1R5myuDQFBtdPVSeyWoSc1Es5Ac\n ZH3wmxzAySQwQHVTJHujFW/ki6ahxpid/UEMxvLz2K/pCoFdRM250x+Y+c/ZhXcR4y\n 2VNuSK1o7zs5dIogQPufrZ/JKr9/hUzfmVYAgVjY5GGzHwaDMUeETJu/1v7HfqlcA5\n C23m7WhiIVAyR2FPZH+OzzKuv+G+u3CRu/JucZ58s93xzBhf8d1bubofn+3y0EJq8Q\n CCcfz+RTEgux3h16yhBss20c=", "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1774839272; x=1775444072;\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=tOXROqJZ9H2weUGgaZ5nS15+O477BcZzUgAfk18ugog=;\n b=hFwImAV90GpixcHWbhRZUKryONOyacD/emeUfVMcYv1AP4zHGZ1e3PfHgNxbrCuOAz\n Su/MBiWaV7zMY8JguR+BoUEZQd7PaUxPVhz1Bn/TDBzz6a2iek95ugV9y3z1WAGOJfAi\n 9eaHB7emiK4r00hJcClbGac9Rl0cX19NWIKdARKEt9mMrWpyD4r9S+n8Ahnnbv4h20xL\n Tk9cjirO/VZWl2pZUWwPh4ibxMucjZ8oSwgHtvmYtY1P3BSATHUtT+N98cD1kX+TJFT8\n tB8KYCnCExvfu/iW7DYaTAiu0bf5yUiMWBixpEMVTqyBQKm/8CHWYZji612LMIRlr6qz\n yFSg==", "X-Gm-Message-State": "AOJu0YwBM58yXkpqt6siyBJRGuw+ld7Q6JiZoDfANrrxBfFXt+tehFVj\n sMjBEQQFJOcGzfeMhQw/qbCQm06dHxDYeuPGoxpT37wIR13sJ35Mb7SktjvtTHeMk23apS6ZRAX\n 0WF6y69U8vBTNMuMLpsUixzmycxTm8sHf3b9xTMjAH81531rf2sZuOWUVi7iYv7CYESOAxqQHlg\n aOdBaDOphN7H6a8Q==", "X-Gm-Gg": "ATEYQzzBbyXHzloKAtcZupLvRBMEqh2gZVSRATB9+ylS/n/pJSgO0ZrHrehZPRXTQmC\n sjrmmH+7r5HYZ5o2nkVkODOZonhGPKWJOj4bFja+0n8d6cXYmkDaGX/xaZrMEi/4PP27N59k5fs\n 8Ai9Fb3rLLs97DxRK2onJ21utKd+s3erprtkRVQCJDLVbKQVTstCDgPm0OsAGCUShJ79sigtUz2\n 5OVLM0wAju2d+9Ku2YDYY+yrLqhtwcdDS1dSm3c8LmaB37p2cCXVNSAukknyg1IupGP1mS+0vzY\n UpeJRpF0BvNet/Hb3T2e7e8oHXOpG1GYKT1c6zx+60oIUWHZGeItOsGwoq/czpUNU18MHy7QibJ\n CnZzGX1UQezTWgpODrEwAsvDGOxfxLDrIfKN9M9pu/su7q/ShdEHC+GNPDP/PQHH9nNiWNAl88R\n jY", "X-Received": [ "by 2002:a05:600c:a06:b0:487:1108:48af with SMTP id\n 5b1f17b1804b1-48727d59ce3mr194923595e9.4.1774839271869;\n Sun, 29 Mar 2026 19:54:31 -0700 (PDT)", "by 2002:a05:600c:a06:b0:487:1108:48af with SMTP id\n 5b1f17b1804b1-48727d59ce3mr194923435e9.4.1774839271314;\n Sun, 29 Mar 2026 19:54:31 -0700 (PDT)" ], "From": "Chris Chiu <chris.chiu@canonical.com>", "To": "kernel-team@lists.ubuntu.com", "Subject": "[SRU][R][PATCH 4/7] ASoC: SDCA: Pull the Q7.8 volume helpers out of\n soc-ops", "Date": "Mon, 30 Mar 2026 02:53:56 +0000", "Message-ID": "<20260330025400.2010331-5-chris.chiu@canonical.com>", "X-Mailer": "git-send-email 2.43.0", "In-Reply-To": "<20260330025400.2010331-1-chris.chiu@canonical.com>", "References": "<20260330025400.2010331-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: Charles Keepax <ckeepax@opensource.cirrus.com>\n\nBugLink: https://bugs.launchpad.net/bugs/2143902\n\nIt is cleaner to keep the SDCA code contained and not update the core\ncode for things that are unlikely to see reuse outside of SDCA. Move the\nQ7.8 volume helpers back into the SDCA core code.\n\nReviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.dev>\nSigned-off-by: Charles Keepax <ckeepax@opensource.cirrus.com>\nLink: https://patch.msgid.link/20260225140118.402695-5-ckeepax@opensource.cirrus.com\nSigned-off-by: Mark Brown <broonie@kernel.org>\n(cherry picked from commit 501efdcb3b3ab099fc0ce2f6e668b1c4095dd476 linux-next)\nSigned-off-by: Chris Chiu <chris.chiu@canonical.com>\n---\n include/sound/soc.h | 1 -\n sound/soc/sdca/sdca_asoc.c | 67 +++++++++++++++++++++++++++++++++++++-\n sound/soc/soc-ops.c | 56 +++++++------------------------\n 3 files changed, 77 insertions(+), 47 deletions(-)", "diff": "diff --git a/include/sound/soc.h b/include/sound/soc.h\nindex 34365d0e0ed3..1fffef311c41 100644\n--- a/include/sound/soc.h\n+++ b/include/sound/soc.h\n@@ -1220,7 +1220,6 @@ struct soc_mixer_control {\n \tunsigned int sign_bit;\n \tunsigned int invert:1;\n \tunsigned int autodisable:1;\n-\tunsigned int sdca_q78:1;\n #ifdef CONFIG_SND_SOC_TOPOLOGY\n \tstruct snd_soc_dobj dobj;\n #endif\ndiff --git a/sound/soc/sdca/sdca_asoc.c b/sound/soc/sdca/sdca_asoc.c\nindex beee024622a5..a590dcb6e993 100644\n--- a/sound/soc/sdca/sdca_asoc.c\n+++ b/sound/soc/sdca/sdca_asoc.c\n@@ -769,6 +769,70 @@ int sdca_asoc_populate_dapm(struct device *dev, struct sdca_function_data *funct\n }\n EXPORT_SYMBOL_NS(sdca_asoc_populate_dapm, \"SND_SOC_SDCA\");\n \n+static int q78_write(struct snd_soc_component *component,\n+\t\t struct soc_mixer_control *mc,\n+\t\t unsigned int reg, const int val)\n+{\n+\tunsigned int mask = GENMASK(mc->sign_bit, 0);\n+\tunsigned int reg_val;\n+\n+\tif (val < 0 || val > mc->max - mc->min)\n+\t\treturn -EINVAL;\n+\n+\treg_val = (val + mc->min) * mc->shift;\n+\n+\treturn snd_soc_component_update_bits(component, reg, mask, reg_val);\n+}\n+\n+static int q78_put_volsw(struct snd_kcontrol *kcontrol,\n+\t\t\t struct snd_ctl_elem_value *ucontrol)\n+{\n+\tstruct soc_mixer_control *mc = (struct soc_mixer_control *)kcontrol->private_value;\n+\tstruct snd_soc_component *component = snd_kcontrol_chip(kcontrol);\n+\tint ret;\n+\n+\tret = q78_write(component, mc, mc->reg, ucontrol->value.integer.value[0]);\n+\tif (ret < 0)\n+\t\treturn ret;\n+\n+\tif (snd_soc_volsw_is_stereo(mc)) {\n+\t\tint err; /* Don't drop change flag */\n+\n+\t\terr = q78_write(component, mc, mc->rreg, ucontrol->value.integer.value[1]);\n+\t\tif (err)\n+\t\t\treturn err;\n+\t}\n+\n+\treturn ret;\n+}\n+\n+static int q78_read(struct snd_soc_component *component,\n+\t\t struct soc_mixer_control *mc, unsigned int reg)\n+{\n+\tunsigned int reg_val;\n+\tint val;\n+\n+\treg_val = snd_soc_component_read(component, reg);\n+\n+\tval = (sign_extend32(reg_val, mc->sign_bit) / mc->shift) - mc->min;\n+\n+\treturn val & GENMASK(mc->sign_bit, 0);\n+}\n+\n+static int q78_get_volsw(struct snd_kcontrol *kcontrol,\n+\t\t\t struct snd_ctl_elem_value *ucontrol)\n+{\n+\tstruct soc_mixer_control *mc = (struct soc_mixer_control *)kcontrol->private_value;\n+\tstruct snd_soc_component *component = snd_kcontrol_chip(kcontrol);\n+\n+\tucontrol->value.integer.value[0] = q78_read(component, mc, mc->reg);\n+\n+\tif (snd_soc_volsw_is_stereo(mc))\n+\t\tucontrol->value.integer.value[1] = q78_read(component, mc, mc->rreg);\n+\n+\treturn 0;\n+}\n+\n static int control_limit_kctl(struct device *dev,\n \t\t\t struct sdca_entity *entity,\n \t\t\t struct sdca_control *control,\n@@ -809,10 +873,11 @@ static int control_limit_kctl(struct device *dev,\n \tmc->max = max / step;\n \tmc->shift = step;\n \tmc->sign_bit = 15;\n-\tmc->sdca_q78 = 1;\n \n \tkctl->tlv.p = tlv;\n \tkctl->access |= SNDRV_CTL_ELEM_ACCESS_TLV_READ;\n+\tkctl->get = q78_get_volsw;\n+\tkctl->put = q78_put_volsw;\n \n \treturn 0;\n }\ndiff --git a/sound/soc/soc-ops.c b/sound/soc/soc-ops.c\nindex 133a2e6fbd7a..e2fb1b4595e0 100644\n--- a/sound/soc/soc-ops.c\n+++ b/sound/soc/soc-ops.c\n@@ -110,29 +110,6 @@ int snd_soc_put_enum_double(struct snd_kcontrol *kcontrol,\n }\n EXPORT_SYMBOL_GPL(snd_soc_put_enum_double);\n \n-static int sdca_soc_q78_reg_to_ctl(struct soc_mixer_control *mc, unsigned int reg_val,\n-\t\t\t\t unsigned int mask, unsigned int shift, int max,\n-\t\t\t\t bool sx)\n-{\n-\tint val = reg_val;\n-\n-\tif (WARN_ON(!mc->shift))\n-\t\treturn -EINVAL;\n-\n-\tval = sign_extend32(val, mc->sign_bit);\n-\n-\treturn ((val / mc->shift) - mc->min) & mask;\n-}\n-\n-static unsigned int sdca_soc_q78_ctl_to_reg(struct soc_mixer_control *mc, int val,\n-\t\t\t\t\t unsigned int mask, unsigned int shift, int max)\n-{\n-\tif (WARN_ON(!mc->shift))\n-\t\treturn -EINVAL;\n-\n-\treturn ((val + mc->min) * mc->shift) & mask;\n-}\n-\n static int soc_mixer_reg_to_ctl(struct soc_mixer_control *mc, unsigned int reg_val,\n \t\t\t\tunsigned int mask, unsigned int shift, int max,\n \t\t\t\tbool sx)\n@@ -226,27 +203,19 @@ static int soc_put_volsw(struct snd_kcontrol *kcontrol,\n \t\t\t struct snd_ctl_elem_value *ucontrol,\n \t\t\t struct soc_mixer_control *mc, int mask, int max)\n {\n-\tunsigned int (*ctl_to_reg)(struct soc_mixer_control *, int, unsigned int, unsigned int, int);\n \tstruct snd_soc_component *component = snd_kcontrol_chip(kcontrol);\n \tunsigned int val1, val_mask;\n \tunsigned int val2 = 0;\n \tbool double_r = false;\n \tint ret;\n \n-\tif (mc->sdca_q78) {\n-\t\tctl_to_reg = sdca_soc_q78_ctl_to_reg;\n-\t\tval_mask = mask;\n-\t} else {\n-\t\tctl_to_reg = soc_mixer_ctl_to_reg;\n-\t\tval_mask = mask << mc->shift;\n-\t}\n-\n \tret = soc_mixer_valid_ctl(mc, ucontrol->value.integer.value[0], max);\n \tif (ret)\n \t\treturn ret;\n \n-\tval1 = ctl_to_reg(mc, ucontrol->value.integer.value[0],\n+\tval1 = soc_mixer_ctl_to_reg(mc, ucontrol->value.integer.value[0],\n \t\t\t\t mask, mc->shift, max);\n+\tval_mask = mask << mc->shift;\n \n \tif (snd_soc_volsw_is_stereo(mc)) {\n \t\tret = soc_mixer_valid_ctl(mc, ucontrol->value.integer.value[1], max);\n@@ -254,10 +223,14 @@ static int soc_put_volsw(struct snd_kcontrol *kcontrol,\n \t\t\treturn ret;\n \n \t\tif (mc->reg == mc->rreg) {\n-\t\t\tval1 |= ctl_to_reg(mc, ucontrol->value.integer.value[1], mask, mc->rshift, max);\n+\t\t\tval1 |= soc_mixer_ctl_to_reg(mc,\n+\t\t\t\t\t\t ucontrol->value.integer.value[1],\n+\t\t\t\t\t\t mask, mc->rshift, max);\n \t\t\tval_mask |= mask << mc->rshift;\n \t\t} else {\n-\t\t\tval2 = ctl_to_reg(mc, ucontrol->value.integer.value[1], mask, mc->shift, max);\n+\t\t\tval2 = soc_mixer_ctl_to_reg(mc,\n+\t\t\t\t\t\t ucontrol->value.integer.value[1],\n+\t\t\t\t\t\t mask, mc->shift, max);\n \t\t\tdouble_r = true;\n \t\t}\n \t}\n@@ -281,28 +254,21 @@ static int soc_get_volsw(struct snd_kcontrol *kcontrol,\n \t\t\t struct snd_ctl_elem_value *ucontrol,\n \t\t\t struct soc_mixer_control *mc, int mask, int max, bool sx)\n {\n-\tint (*reg_to_ctl)(struct soc_mixer_control *, unsigned int, unsigned int,\n-\t\t\t unsigned int, int, bool);\n \tstruct snd_soc_component *component = snd_kcontrol_chip(kcontrol);\n \tunsigned int reg_val;\n \tint val;\n \n-\tif (mc->sdca_q78)\n-\t\treg_to_ctl = sdca_soc_q78_reg_to_ctl;\n-\telse\n-\t\treg_to_ctl = soc_mixer_reg_to_ctl;\n-\n \treg_val = snd_soc_component_read(component, mc->reg);\n-\tval = reg_to_ctl(mc, reg_val, mask, mc->shift, max, sx);\n+\tval = soc_mixer_reg_to_ctl(mc, reg_val, mask, mc->shift, max, sx);\n \n \tucontrol->value.integer.value[0] = val;\n \n \tif (snd_soc_volsw_is_stereo(mc)) {\n \t\tif (mc->reg == mc->rreg) {\n-\t\t\tval = reg_to_ctl(mc, reg_val, mask, mc->rshift, max, sx);\n+\t\t\tval = soc_mixer_reg_to_ctl(mc, reg_val, mask, mc->rshift, max, sx);\n \t\t} else {\n \t\t\treg_val = snd_soc_component_read(component, mc->rreg);\n-\t\t\tval = reg_to_ctl(mc, reg_val, mask, mc->shift, max, sx);\n+\t\t\tval = soc_mixer_reg_to_ctl(mc, reg_val, mask, mc->shift, max, sx);\n \t\t}\n \n \t\tucontrol->value.integer.value[1] = val;\n", "prefixes": [ "SRU", "R", "4/7" ] }