Linux Sound subsystem development
 help / color / mirror / Atom feed
* [PATCH 0/2] ASoC: cs35l56: Support for restoring calibration on ChromeOS
@ 2025-11-11 13:08 Richard Fitzgerald
  2025-11-11 13:08 ` [PATCH 1/2] ASoC: cs35l56: Add control to read CAL_SET_STATUS Richard Fitzgerald
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Richard Fitzgerald @ 2025-11-11 13:08 UTC (permalink / raw)
  To: broonie; +Cc: linux-sound, linux-kernel, patches

These two patches add ALSA controls to support restoring factory calibration
during OS boot on ChromeOS.

ChromeOS applies calibration during boot using a process that has restricted
access permissions. This process needs ALSA controls for all settings that
it must restore.

Richard Fitzgerald (2):
  ASoC: cs35l56: Add control to read CAL_SET_STATUS
  ASoC: cs35l56: Allow restoring factory calibration through ALSA
    control

 include/sound/cs35l56.h           | 11 ++++
 sound/soc/codecs/Kconfig          | 14 ++++++
 sound/soc/codecs/cs35l56-shared.c | 53 +++++++++++++++++++-
 sound/soc/codecs/cs35l56.c        | 83 +++++++++++++++++++++++++++++++
 4 files changed, 159 insertions(+), 2 deletions(-)

-- 
2.47.3


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 1/2] ASoC: cs35l56: Add control to read CAL_SET_STATUS
  2025-11-11 13:08 [PATCH 0/2] ASoC: cs35l56: Support for restoring calibration on ChromeOS Richard Fitzgerald
@ 2025-11-11 13:08 ` Richard Fitzgerald
  2025-11-11 13:08 ` [PATCH 2/2] ASoC: cs35l56: Allow restoring factory calibration through ALSA control Richard Fitzgerald
  2025-11-11 21:10 ` [PATCH 0/2] ASoC: cs35l56: Support for restoring calibration on ChromeOS Mark Brown
  2 siblings, 0 replies; 7+ messages in thread
From: Richard Fitzgerald @ 2025-11-11 13:08 UTC (permalink / raw)
  To: broonie; +Cc: linux-sound, linux-kernel, patches

Create an ALSA control to read the value of the firmware
CAL_SET_STATUS control. This reports whether the firmware is
using a calibration blob or the default calibration from the
.bin file.

The firmware only reports a valid value in this register while
audio is actually playing and the internal PLL is locked to the
audio clock. Otherwise it returns a status of "unknown".

Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com>
---
 include/sound/cs35l56.h           |  9 ++++++
 sound/soc/codecs/cs35l56-shared.c | 48 +++++++++++++++++++++++++++++++
 sound/soc/codecs/cs35l56.c        | 16 +++++++++++
 3 files changed, 73 insertions(+)

diff --git a/include/sound/cs35l56.h b/include/sound/cs35l56.h
index 0a740a99ad31..bd13958bf19d 100644
--- a/include/sound/cs35l56.h
+++ b/include/sound/cs35l56.h
@@ -16,6 +16,8 @@
 #include <linux/spi/spi.h>
 #include <sound/cs-amp-lib.h>
 
+struct snd_ctl_elem_value;
+
 #define CS35L56_DEVID					0x0000000
 #define CS35L56_REVID					0x0000004
 #define CS35L56_RELID					0x000000C
@@ -268,6 +270,10 @@
 #define CS35L56_CAL_STATUS_SUCCESS			1
 #define CS35L56_CAL_STATUS_OUT_OF_RANGE			3
 
+#define CS35L56_CAL_SET_STATUS_UNKNOWN			0
+#define CS35L56_CAL_SET_STATUS_DEFAULT			1
+#define CS35L56_CAL_SET_STATUS_SET			2
+
 #define CS35L56_CONTROL_PORT_READY_US			2200
 #define CS35L56_HALO_STATE_POLL_US			1000
 #define CS35L56_HALO_STATE_TIMEOUT_US			250000
@@ -363,6 +369,7 @@ extern const struct regmap_config cs35l63_regmap_i2c;
 extern const struct regmap_config cs35l63_regmap_sdw;
 
 extern const struct cirrus_amp_cal_controls cs35l56_calibration_controls;
+extern const char * const cs35l56_cal_set_status_text[3];
 
 extern const char * const cs35l56_tx_input_texts[CS35L56_NUM_INPUT_SRC];
 extern const unsigned int cs35l56_tx_input_values[CS35L56_NUM_INPUT_SRC];
@@ -396,6 +403,8 @@ ssize_t cs35l56_cal_data_debugfs_write(struct cs35l56_base *cs35l56_base,
 void cs35l56_create_cal_debugfs(struct cs35l56_base *cs35l56_base,
 				const struct cs35l56_cal_debugfs_fops *fops);
 void cs35l56_remove_cal_debugfs(struct cs35l56_base *cs35l56_base);
+int cs35l56_cal_set_status_get(struct cs35l56_base *cs35l56_base,
+			       struct snd_ctl_elem_value *uvalue);
 int cs35l56_read_prot_status(struct cs35l56_base *cs35l56_base,
 			     bool *fw_missing, unsigned int *fw_version);
 void cs35l56_log_tuning(struct cs35l56_base *cs35l56_base, struct cs_dsp *cs_dsp);
diff --git a/sound/soc/codecs/cs35l56-shared.c b/sound/soc/codecs/cs35l56-shared.c
index fe0693c3f7de..4fba4127c40c 100644
--- a/sound/soc/codecs/cs35l56-shared.c
+++ b/sound/soc/codecs/cs35l56-shared.c
@@ -1262,6 +1262,54 @@ void cs35l56_remove_cal_debugfs(struct cs35l56_base *cs35l56_base)
 }
 EXPORT_SYMBOL_NS_GPL(cs35l56_remove_cal_debugfs, "SND_SOC_CS35L56_SHARED");
 
+const char * const cs35l56_cal_set_status_text[] = {
+	"Unknown", "Default", "Set",
+};
+EXPORT_SYMBOL_NS_GPL(cs35l56_cal_set_status_text, "SND_SOC_CS35L56_SHARED");
+
+int cs35l56_cal_set_status_get(struct cs35l56_base *cs35l56_base,
+			       struct snd_ctl_elem_value *uvalue)
+{
+	struct cs_dsp *dsp = cs35l56_base->dsp;
+	__be32 cal_set_status_be;
+	int alg_id;
+	int ret;
+
+	switch (cs35l56_base->type) {
+	case 0x54:
+	case 0x56:
+	case 0x57:
+		alg_id = 0x9f210;
+		break;
+	default:
+		alg_id = 0xbf210;
+		break;
+	}
+
+	scoped_guard(mutex, &dsp->pwr_lock) {
+		ret = cs_dsp_coeff_read_ctrl(cs_dsp_get_ctl(dsp,
+							    "CAL_SET_STATUS",
+							    WMFW_ADSP2_YM, alg_id),
+					      0, &cal_set_status_be,
+					      sizeof(cal_set_status_be));
+	}
+	if (ret) {
+		uvalue->value.enumerated.item[0] = CS35L56_CAL_SET_STATUS_UNKNOWN;
+		return 0;
+	}
+
+	switch (be32_to_cpu(cal_set_status_be)) {
+	case CS35L56_CAL_SET_STATUS_DEFAULT:
+	case CS35L56_CAL_SET_STATUS_SET:
+		uvalue->value.enumerated.item[0] = be32_to_cpu(cal_set_status_be);
+		return 0;
+	default:
+		uvalue->value.enumerated.item[0] = CS35L56_CAL_SET_STATUS_UNKNOWN;
+		return 0;
+	}
+}
+EXPORT_SYMBOL_NS_GPL(cs35l56_cal_set_status_get, "SND_SOC_CS35L56_SHARED");
+
 int cs35l56_read_prot_status(struct cs35l56_base *cs35l56_base,
 			     bool *fw_missing, unsigned int *fw_version)
 {
diff --git a/sound/soc/codecs/cs35l56.c b/sound/soc/codecs/cs35l56.c
index 091a72325507..e1eb7360b058 100644
--- a/sound/soc/codecs/cs35l56.c
+++ b/sound/soc/codecs/cs35l56.c
@@ -66,6 +66,18 @@ static int cs35l56_dspwait_put_volsw(struct snd_kcontrol *kcontrol,
 
 static DECLARE_TLV_DB_SCALE(vol_tlv, -10000, 25, 0);
 
+static SOC_ENUM_SINGLE_DECL(cs35l56_cal_set_status_enum, SND_SOC_NOPM, 0,
+			    cs35l56_cal_set_status_text);
+
+static int cs35l56_cal_set_status_ctl_get(struct snd_kcontrol *kcontrol,
+					  struct snd_ctl_elem_value *ucontrol)
+{
+	struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
+	struct cs35l56_private *cs35l56 = snd_soc_component_get_drvdata(component);
+
+	return cs35l56_cal_set_status_get(&cs35l56->base, ucontrol);
+}
+
 static const struct snd_kcontrol_new cs35l56_controls[] = {
 	SOC_SINGLE_EXT("Speaker Switch",
 		       CS35L56_MAIN_RENDER_USER_MUTE, 0, 1, 1,
@@ -83,6 +95,8 @@ static const struct snd_kcontrol_new cs35l56_controls[] = {
 	SOC_SINGLE_EXT("Posture Number", CS35L56_MAIN_POSTURE_NUMBER,
 		       0, 255, 0,
 		       cs35l56_dspwait_get_volsw, cs35l56_dspwait_put_volsw),
+	SOC_ENUM_EXT("CAL_SET_STATUS", cs35l56_cal_set_status_enum,
+		     cs35l56_cal_set_status_ctl_get, NULL),
 };
 
 static const struct snd_kcontrol_new cs35l63_controls[] = {
@@ -102,6 +116,8 @@ static const struct snd_kcontrol_new cs35l63_controls[] = {
 	SOC_SINGLE_EXT("Posture Number", CS35L63_MAIN_POSTURE_NUMBER,
 		       0, 255, 0,
 		       cs35l56_dspwait_get_volsw, cs35l56_dspwait_put_volsw),
+	SOC_ENUM_EXT("CAL_SET_STATUS", cs35l56_cal_set_status_enum,
+		     cs35l56_cal_set_status_ctl_get, NULL),
 };
 
 static SOC_VALUE_ENUM_SINGLE_DECL(cs35l56_asp1tx1_enum,
-- 
2.47.3


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 2/2] ASoC: cs35l56: Allow restoring factory calibration through ALSA control
  2025-11-11 13:08 [PATCH 0/2] ASoC: cs35l56: Support for restoring calibration on ChromeOS Richard Fitzgerald
  2025-11-11 13:08 ` [PATCH 1/2] ASoC: cs35l56: Add control to read CAL_SET_STATUS Richard Fitzgerald
@ 2025-11-11 13:08 ` Richard Fitzgerald
  2025-11-11 13:51   ` Mark Brown
  2025-11-11 21:10 ` [PATCH 0/2] ASoC: cs35l56: Support for restoring calibration on ChromeOS Mark Brown
  2 siblings, 1 reply; 7+ messages in thread
From: Richard Fitzgerald @ 2025-11-11 13:08 UTC (permalink / raw)
  To: broonie; +Cc: linux-sound, linux-kernel, patches

Add an ALSA control (CAL_DATA) that can be used to restore amp calibration,
instead of using debugfs. A readback control (CAL_DATA_RB) is also added
for factory testing.

On ChromeOS the process that restores amp calibration from NVRAM has
limited permissions and cannot access debugfs. It requires an ALSA control
that it can write the calibration blob into. ChromeOS also restricts access
to ALSA controls, which avoids the risk of accidental or malicious
overwriting of good calibration data with bad data. As this control is not
needed for normal Linux-based distros it is a Kconfig option.

A separate control, CAL_DATA_RB, provides a readback of the current
calibration data, which could be either from a write to CAL_DATA or the
result of factory production-line calibration.

The write and read are intentionally separate controls to defeat "dumb"
save-and-restore tools like alsa-restore that assume it is safe to save
all control values and write them back in any order at some undefined
future time. Such behavior carries the risk of restoring stale or bad data
over the top of good data.

Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com>
---
 include/sound/cs35l56.h           |  2 +
 sound/soc/codecs/Kconfig          | 14 +++++++
 sound/soc/codecs/cs35l56-shared.c |  5 ++-
 sound/soc/codecs/cs35l56.c        | 67 +++++++++++++++++++++++++++++++
 4 files changed, 86 insertions(+), 2 deletions(-)

diff --git a/include/sound/cs35l56.h b/include/sound/cs35l56.h
index bd13958bf19d..883f6a7e50aa 100644
--- a/include/sound/cs35l56.h
+++ b/include/sound/cs35l56.h
@@ -388,6 +388,8 @@ int cs35l56_runtime_suspend_common(struct cs35l56_base *cs35l56_base);
 int cs35l56_runtime_resume_common(struct cs35l56_base *cs35l56_base, bool is_soundwire);
 void cs35l56_init_cs_dsp(struct cs35l56_base *cs35l56_base, struct cs_dsp *cs_dsp);
 int cs35l56_get_calibration(struct cs35l56_base *cs35l56_base);
+int cs35l56_stash_calibration(struct cs35l56_base *cs35l56_base,
+			      const struct cirrus_amp_cal_data *data);
 ssize_t cs35l56_calibrate_debugfs_write(struct cs35l56_base *cs35l56_base,
 					const char __user *from, size_t count,
 					loff_t *ppos);
diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig
index 6da2fff9323c..433af9bc7564 100644
--- a/sound/soc/codecs/Kconfig
+++ b/sound/soc/codecs/Kconfig
@@ -912,6 +912,20 @@ config SND_SOC_CS35L56_CAL_DEBUGFS
 	  Create debugfs entries used during factory-line manufacture
 	  for factory calibration.
 
+	  If unsure select "N".
+
+config SND_SOC_CS35L56_CAL_SET_CTRL
+	bool "CS35L56 ALSA control to restore factory calibration"
+	default N
+	select SND_SOC_CS35L56_CAL_SYSFS_COMMON
+	help
+	  Allow restoring factory calibration data through an ALSA
+	  control. This is only needed on platforms without UEFI or
+	  some other method of non-volatile storage that the driver
+	  can access directly.
+
+	  On most platforms this is not needed.
+
 	  If unsure select "N".
 endmenu
 
diff --git a/sound/soc/codecs/cs35l56-shared.c b/sound/soc/codecs/cs35l56-shared.c
index 4fba4127c40c..7424e1353062 100644
--- a/sound/soc/codecs/cs35l56-shared.c
+++ b/sound/soc/codecs/cs35l56-shared.c
@@ -962,8 +962,8 @@ int cs35l56_get_calibration(struct cs35l56_base *cs35l56_base)
 }
 EXPORT_SYMBOL_NS_GPL(cs35l56_get_calibration, "SND_SOC_CS35L56_SHARED");
 
-static int cs35l56_stash_calibration(struct cs35l56_base *cs35l56_base,
-				     const struct cirrus_amp_cal_data *data)
+int cs35l56_stash_calibration(struct cs35l56_base *cs35l56_base,
+			      const struct cirrus_amp_cal_data *data)
 {
 
 	/* Ignore if it is empty */
@@ -980,6 +980,7 @@ static int cs35l56_stash_calibration(struct cs35l56_base *cs35l56_base,
 
 	return 0;
 }
+EXPORT_SYMBOL_NS_GPL(cs35l56_stash_calibration, "SND_SOC_CS35L56_SHARED");
 
 static int cs35l56_perform_calibration(struct cs35l56_base *cs35l56_base)
 {
diff --git a/sound/soc/codecs/cs35l56.c b/sound/soc/codecs/cs35l56.c
index e1eb7360b058..6feef971024b 100644
--- a/sound/soc/codecs/cs35l56.c
+++ b/sound/soc/codecs/cs35l56.c
@@ -1040,6 +1040,67 @@ static const struct cs35l56_cal_debugfs_fops cs35l56_cal_debugfs_fops = {
 	},
 };
 
+static int cs35l56_cal_data_rb_ctl_get(struct snd_kcontrol *kcontrol,
+				    struct snd_ctl_elem_value *ucontrol)
+{
+	struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
+	struct cs35l56_private *cs35l56 = snd_soc_component_get_drvdata(component);
+
+	if (!cs35l56->base.cal_data_valid)
+		return -ENODATA;
+
+	memcpy(ucontrol->value.bytes.data, &cs35l56->base.cal_data,
+	       sizeof(cs35l56->base.cal_data));
+
+	return 0;
+}
+
+static int cs35l56_cal_data_ctl_get(struct snd_kcontrol *kcontrol,
+				    struct snd_ctl_elem_value *ucontrol)
+{
+	struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
+	struct cs35l56_private *cs35l56 = snd_soc_component_get_drvdata(component);
+
+	/*
+	 * This control is write-only but mixer libraries often try to read
+	 * a control before writing it. So we have to implement read.
+	 * Return zeros so a write of valid data will always be a change
+	 * from its "current value".
+	 */
+	memset(ucontrol->value.bytes.data, 0, sizeof(cs35l56->base.cal_data));
+
+	return 0;
+}
+
+static int cs35l56_cal_data_ctl_set(struct snd_kcontrol *kcontrol,
+				    struct snd_ctl_elem_value *ucontrol)
+{
+	struct snd_soc_component *component = snd_kcontrol_chip(kcontrol);
+	struct cs35l56_private *cs35l56 = snd_soc_component_get_drvdata(component);
+	const struct cirrus_amp_cal_data *cal_data = (const void *)ucontrol->value.bytes.data;
+	int ret;
+
+	if (cs35l56->base.cal_data_valid)
+		return -EACCES;
+
+	ret = cs35l56_stash_calibration(&cs35l56->base, cal_data);
+	if (ret)
+		return ret;
+
+	ret = cs35l56_new_cal_data_apply(cs35l56);
+	if (ret < 0)
+		return ret;
+
+	return 1;
+}
+
+static const struct snd_kcontrol_new cs35l56_cal_data_restore_controls[] = {
+	SND_SOC_BYTES_E("CAL_DATA", 0, sizeof(struct cirrus_amp_cal_data) / sizeof(u32),
+			cs35l56_cal_data_ctl_get, cs35l56_cal_data_ctl_set),
+	SND_SOC_BYTES_E("CAL_DATA_RB", 0, sizeof(struct cirrus_amp_cal_data) / sizeof(u32),
+			cs35l56_cal_data_rb_ctl_get, NULL),
+};
+
 static int cs35l56_set_fw_suffix(struct cs35l56_private *cs35l56)
 {
 	if (cs35l56->dsp.fwf_suffix)
@@ -1134,6 +1195,12 @@ static int cs35l56_component_probe(struct snd_soc_component *component)
 		break;
 	}
 
+	if (!ret && IS_ENABLED(CONFIG_SND_SOC_CS35L56_CAL_SET_CTRL)) {
+		ret = snd_soc_add_component_controls(component,
+						     cs35l56_cal_data_restore_controls,
+						     ARRAY_SIZE(cs35l56_cal_data_restore_controls));
+	}
+
 	if (ret)
 		return dev_err_probe(cs35l56->base.dev, ret, "unable to add controls\n");
 
-- 
2.47.3


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH 2/2] ASoC: cs35l56: Allow restoring factory calibration through ALSA control
  2025-11-11 13:08 ` [PATCH 2/2] ASoC: cs35l56: Allow restoring factory calibration through ALSA control Richard Fitzgerald
@ 2025-11-11 13:51   ` Mark Brown
  2025-11-11 13:59     ` Richard Fitzgerald
  0 siblings, 1 reply; 7+ messages in thread
From: Mark Brown @ 2025-11-11 13:51 UTC (permalink / raw)
  To: Richard Fitzgerald; +Cc: linux-sound, linux-kernel, patches

[-- Attachment #1: Type: text/plain, Size: 309 bytes --]

On Tue, Nov 11, 2025 at 01:08:50PM +0000, Richard Fitzgerald wrote:

> +config SND_SOC_CS35L56_CAL_SET_CTRL
> +	bool "CS35L56 ALSA control to restore factory calibration"
> +	default N
> +	select SND_SOC_CS35L56_CAL_SYSFS_COMMON

Not a big deal (don't bother with a new version) but N is the default
default.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 2/2] ASoC: cs35l56: Allow restoring factory calibration through ALSA control
  2025-11-11 13:51   ` Mark Brown
@ 2025-11-11 13:59     ` Richard Fitzgerald
  2025-11-11 14:51       ` Mark Brown
  0 siblings, 1 reply; 7+ messages in thread
From: Richard Fitzgerald @ 2025-11-11 13:59 UTC (permalink / raw)
  To: Mark Brown; +Cc: linux-sound, linux-kernel, patches

On 11/11/2025 1:51 pm, Mark Brown wrote:
> On Tue, Nov 11, 2025 at 01:08:50PM +0000, Richard Fitzgerald wrote:
> 
>> +config SND_SOC_CS35L56_CAL_SET_CTRL
>> +	bool "CS35L56 ALSA control to restore factory calibration"
>> +	default N
>> +	select SND_SOC_CS35L56_CAL_SYSFS_COMMON
> 
> Not a big deal (don't bother with a new version) but N is the default
> default.

Well, at least it self-documents that we _want_ N to be the default.
But if that's considered bad grammar I don't mind if it's removed.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 2/2] ASoC: cs35l56: Allow restoring factory calibration through ALSA control
  2025-11-11 13:59     ` Richard Fitzgerald
@ 2025-11-11 14:51       ` Mark Brown
  0 siblings, 0 replies; 7+ messages in thread
From: Mark Brown @ 2025-11-11 14:51 UTC (permalink / raw)
  To: Richard Fitzgerald; +Cc: linux-sound, linux-kernel, patches

[-- Attachment #1: Type: text/plain, Size: 459 bytes --]

On Tue, Nov 11, 2025 at 01:59:28PM +0000, Richard Fitzgerald wrote:
> On 11/11/2025 1:51 pm, Mark Brown wrote:

> > Not a big deal (don't bother with a new version) but N is the default
> > default.

> Well, at least it self-documents that we _want_ N to be the default.
> But if that's considered bad grammar I don't mind if it's removed.

Yes, I can see why you did it.  I don't super care either way, but I
suspect someone will come along and clean it up.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 0/2] ASoC: cs35l56: Support for restoring calibration on ChromeOS
  2025-11-11 13:08 [PATCH 0/2] ASoC: cs35l56: Support for restoring calibration on ChromeOS Richard Fitzgerald
  2025-11-11 13:08 ` [PATCH 1/2] ASoC: cs35l56: Add control to read CAL_SET_STATUS Richard Fitzgerald
  2025-11-11 13:08 ` [PATCH 2/2] ASoC: cs35l56: Allow restoring factory calibration through ALSA control Richard Fitzgerald
@ 2025-11-11 21:10 ` Mark Brown
  2 siblings, 0 replies; 7+ messages in thread
From: Mark Brown @ 2025-11-11 21:10 UTC (permalink / raw)
  To: Richard Fitzgerald; +Cc: linux-sound, linux-kernel, patches

On Tue, 11 Nov 2025 13:08:48 +0000, Richard Fitzgerald wrote:
> These two patches add ALSA controls to support restoring factory calibration
> during OS boot on ChromeOS.
> 
> ChromeOS applies calibration during boot using a process that has restricted
> access permissions. This process needs ALSA controls for all settings that
> it must restore.
> 
> [...]

Applied to

   https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next

Thanks!

[1/2] ASoC: cs35l56: Add control to read CAL_SET_STATUS
      commit: 69f3474a01e9867dd99fc4b703fa834ea1835c7d
[2/2] ASoC: cs35l56: Allow restoring factory calibration through ALSA control
      commit: 32172cf3cb543a04c41a1677c97a38e60cad05b6

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark


^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2025-11-11 21:10 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-11-11 13:08 [PATCH 0/2] ASoC: cs35l56: Support for restoring calibration on ChromeOS Richard Fitzgerald
2025-11-11 13:08 ` [PATCH 1/2] ASoC: cs35l56: Add control to read CAL_SET_STATUS Richard Fitzgerald
2025-11-11 13:08 ` [PATCH 2/2] ASoC: cs35l56: Allow restoring factory calibration through ALSA control Richard Fitzgerald
2025-11-11 13:51   ` Mark Brown
2025-11-11 13:59     ` Richard Fitzgerald
2025-11-11 14:51       ` Mark Brown
2025-11-11 21:10 ` [PATCH 0/2] ASoC: cs35l56: Support for restoring calibration on ChromeOS Mark Brown

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox