* [PATCH v2] ALSA: hda/tas2781: Skip UEFI calibration on ASUS ROG Xbox Ally X
@ 2026-01-08 9:36 Matthew Schwartz
2026-01-08 9:43 ` Antheas Kapenekakis
2026-01-08 13:08 ` Takashi Iwai
0 siblings, 2 replies; 3+ messages in thread
From: Matthew Schwartz @ 2026-01-08 9:36 UTC (permalink / raw)
To: Shenghao Ding, Baojun Xu, tiwai
Cc: linux-sound, linux-kernel, Antheas Kapenekakis, Matthew Schwartz,
stable
There is currently an issue with UEFI calibration data parsing for some
TAS devices, like the ASUS ROG Xbox Ally X (RC73XA), that causes audio
quality issues such as gaps in playback. Until the issue is root caused
and fixed, add a quirk to skip using the UEFI calibration data and fall
back to using the calibration data provided by the DSP firmware, which
restores full speaker functionality on affected devices.
Cc: stable@vger.kernel.org # 6.18
Link: https://lore.kernel.org/all/160aef32646c4d5498cbfd624fd683cc@ti.com/
Closes: https://lore.kernel.org/all/0ba100d0-9b6f-4a3b-bffa-61abe1b46cd5@linux.dev/
Suggested-by: Baojun Xu <baojun.xu@ti.com>
Signed-off-by: Matthew Schwartz <matthew.schwartz@linux.dev>
---
v1->v2: drop wrong Fixes tag, amend commit to clarify suspected root cause
and workaround being used.
---
sound/hda/codecs/side-codecs/tas2781_hda_i2c.c | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/sound/hda/codecs/side-codecs/tas2781_hda_i2c.c b/sound/hda/codecs/side-codecs/tas2781_hda_i2c.c
index c8619995b1d7..ec3761050cab 100644
--- a/sound/hda/codecs/side-codecs/tas2781_hda_i2c.c
+++ b/sound/hda/codecs/side-codecs/tas2781_hda_i2c.c
@@ -60,6 +60,7 @@ struct tas2781_hda_i2c_priv {
int (*save_calibration)(struct tas2781_hda *h);
int hda_chip_id;
+ bool skip_calibration;
};
static int tas2781_get_i2c_res(struct acpi_resource *ares, void *data)
@@ -489,7 +490,8 @@ static void tasdevice_dspfw_init(void *context)
/* If calibrated data occurs error, dsp will still works with default
* calibrated data inside algo.
*/
- hda_priv->save_calibration(tas_hda);
+ if (!hda_priv->skip_calibration)
+ hda_priv->save_calibration(tas_hda);
}
static void tasdev_fw_ready(const struct firmware *fmw, void *context)
@@ -546,6 +548,7 @@ static int tas2781_hda_bind(struct device *dev, struct device *master,
void *master_data)
{
struct tas2781_hda *tas_hda = dev_get_drvdata(dev);
+ struct tas2781_hda_i2c_priv *hda_priv = tas_hda->hda_priv;
struct hda_component_parent *parent = master_data;
struct hda_component *comp;
struct hda_codec *codec;
@@ -571,6 +574,14 @@ static int tas2781_hda_bind(struct device *dev, struct device *master,
break;
}
+ /*
+ * Using ASUS ROG Xbox Ally X (RC73XA) UEFI calibration data
+ * causes audio dropouts during playback, use fallback data
+ * from DSP firmware as a workaround.
+ */
+ if (codec->core.subsystem_id == 0x10431384)
+ hda_priv->skip_calibration = true;
+
pm_runtime_get_sync(dev);
comp->dev = dev;
--
2.52.0
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH v2] ALSA: hda/tas2781: Skip UEFI calibration on ASUS ROG Xbox Ally X
2026-01-08 9:36 [PATCH v2] ALSA: hda/tas2781: Skip UEFI calibration on ASUS ROG Xbox Ally X Matthew Schwartz
@ 2026-01-08 9:43 ` Antheas Kapenekakis
2026-01-08 13:08 ` Takashi Iwai
1 sibling, 0 replies; 3+ messages in thread
From: Antheas Kapenekakis @ 2026-01-08 9:43 UTC (permalink / raw)
To: Matthew Schwartz
Cc: Shenghao Ding, Baojun Xu, tiwai, linux-sound, linux-kernel,
stable
On Thu, 8 Jan 2026 at 11:38, Matthew Schwartz
<matthew.schwartz@linux.dev> wrote:
>
> There is currently an issue with UEFI calibration data parsing for some
> TAS devices, like the ASUS ROG Xbox Ally X (RC73XA), that causes audio
> quality issues such as gaps in playback. Until the issue is root caused
> and fixed, add a quirk to skip using the UEFI calibration data and fall
> back to using the calibration data provided by the DSP firmware, which
> restores full speaker functionality on affected devices.
>
> Cc: stable@vger.kernel.org # 6.18
> Link: https://lore.kernel.org/all/160aef32646c4d5498cbfd624fd683cc@ti.com/
> Closes: https://lore.kernel.org/all/0ba100d0-9b6f-4a3b-bffa-61abe1b46cd5@linux.dev/
> Suggested-by: Baojun Xu <baojun.xu@ti.com>
Reviewed-by: Antheas Kapenekakis <lkml@antheas.dev>
> Signed-off-by: Matthew Schwartz <matthew.schwartz@linux.dev>
> ---
> v1->v2: drop wrong Fixes tag, amend commit to clarify suspected root cause
> and workaround being used.
> ---
> sound/hda/codecs/side-codecs/tas2781_hda_i2c.c | 13 ++++++++++++-
> 1 file changed, 12 insertions(+), 1 deletion(-)
>
> diff --git a/sound/hda/codecs/side-codecs/tas2781_hda_i2c.c b/sound/hda/codecs/side-codecs/tas2781_hda_i2c.c
> index c8619995b1d7..ec3761050cab 100644
> --- a/sound/hda/codecs/side-codecs/tas2781_hda_i2c.c
> +++ b/sound/hda/codecs/side-codecs/tas2781_hda_i2c.c
> @@ -60,6 +60,7 @@ struct tas2781_hda_i2c_priv {
> int (*save_calibration)(struct tas2781_hda *h);
>
> int hda_chip_id;
> + bool skip_calibration;
> };
>
> static int tas2781_get_i2c_res(struct acpi_resource *ares, void *data)
> @@ -489,7 +490,8 @@ static void tasdevice_dspfw_init(void *context)
> /* If calibrated data occurs error, dsp will still works with default
> * calibrated data inside algo.
> */
> - hda_priv->save_calibration(tas_hda);
> + if (!hda_priv->skip_calibration)
> + hda_priv->save_calibration(tas_hda);
> }
>
> static void tasdev_fw_ready(const struct firmware *fmw, void *context)
> @@ -546,6 +548,7 @@ static int tas2781_hda_bind(struct device *dev, struct device *master,
> void *master_data)
> {
> struct tas2781_hda *tas_hda = dev_get_drvdata(dev);
> + struct tas2781_hda_i2c_priv *hda_priv = tas_hda->hda_priv;
> struct hda_component_parent *parent = master_data;
> struct hda_component *comp;
> struct hda_codec *codec;
> @@ -571,6 +574,14 @@ static int tas2781_hda_bind(struct device *dev, struct device *master,
> break;
> }
>
> + /*
> + * Using ASUS ROG Xbox Ally X (RC73XA) UEFI calibration data
> + * causes audio dropouts during playback, use fallback data
> + * from DSP firmware as a workaround.
> + */
> + if (codec->core.subsystem_id == 0x10431384)
> + hda_priv->skip_calibration = true;
> +
> pm_runtime_get_sync(dev);
>
> comp->dev = dev;
> --
> 2.52.0
>
>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH v2] ALSA: hda/tas2781: Skip UEFI calibration on ASUS ROG Xbox Ally X
2026-01-08 9:36 [PATCH v2] ALSA: hda/tas2781: Skip UEFI calibration on ASUS ROG Xbox Ally X Matthew Schwartz
2026-01-08 9:43 ` Antheas Kapenekakis
@ 2026-01-08 13:08 ` Takashi Iwai
1 sibling, 0 replies; 3+ messages in thread
From: Takashi Iwai @ 2026-01-08 13:08 UTC (permalink / raw)
To: Matthew Schwartz
Cc: Shenghao Ding, Baojun Xu, tiwai, linux-sound, linux-kernel,
Antheas Kapenekakis, stable
On Thu, 08 Jan 2026 10:36:50 +0100,
Matthew Schwartz wrote:
>
> There is currently an issue with UEFI calibration data parsing for some
> TAS devices, like the ASUS ROG Xbox Ally X (RC73XA), that causes audio
> quality issues such as gaps in playback. Until the issue is root caused
> and fixed, add a quirk to skip using the UEFI calibration data and fall
> back to using the calibration data provided by the DSP firmware, which
> restores full speaker functionality on affected devices.
>
> Cc: stable@vger.kernel.org # 6.18
> Link: https://lore.kernel.org/all/160aef32646c4d5498cbfd624fd683cc@ti.com/
> Closes: https://lore.kernel.org/all/0ba100d0-9b6f-4a3b-bffa-61abe1b46cd5@linux.dev/
> Suggested-by: Baojun Xu <baojun.xu@ti.com>
> Signed-off-by: Matthew Schwartz <matthew.schwartz@linux.dev>
> ---
> v1->v2: drop wrong Fixes tag, amend commit to clarify suspected root cause
> and workaround being used.
Applied now. Thanks.
Takashi
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-01-08 13:08 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-01-08 9:36 [PATCH v2] ALSA: hda/tas2781: Skip UEFI calibration on ASUS ROG Xbox Ally X Matthew Schwartz
2026-01-08 9:43 ` Antheas Kapenekakis
2026-01-08 13:08 ` Takashi Iwai
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox