According to TI, there is an issue with the UEFI calibration result on some devices where the calibration can cause audio dropouts and other quality issues. The ASUS ROG Xbox Ally X (RC73XA) is one such device.
Skipping the UEFI calibration result and using the fallback in the DSP firmware fixes the audio issues.
Fixes: 945865a0ddf3 ("ALSA: hda/tas2781: fix speaker id retrieval for multiple probes") 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 --- 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; }
+ /* + * ASUS ROG Xbox Ally X (RC73XA) UEFI calibration data + * causes audio dropouts during playback, use fallback data + * from DSP firmware instead. + */ + if (codec->core.subsystem_id == 0x10431384) + hda_priv->skip_calibration = true; + pm_runtime_get_sync(dev);
comp->dev = dev;
On Thu, 8 Jan 2026 at 07:44, Matthew Schwartz matthew.schwartz@linux.dev wrote:
According to TI, there is an issue with the UEFI calibration result on some devices where the calibration can cause audio dropouts and other quality issues. The ASUS ROG Xbox Ally X (RC73XA) is one such device.
Skipping the UEFI calibration result and using the fallback in the DSP firmware fixes the audio issues.
Fixes: 945865a0ddf3 ("ALSA: hda/tas2781: fix speaker id retrieval for multiple probes") 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
Hi,
can you remove the Fixes? Commit 945865a0ddf3 is not related or caused this issue.
My interpretation of Jim's email was that he wanted to do a root cause analysis and e.g. find out that it is the UEFI parser. Which it is.
The device does not have this issue in Windows, so it is not clear that there is an issue with the calibration data such that the proper fix is to ignore it. And I do not think this was suggested by TI. In addition, your patch introduces a quirk for TAS, even if temporary.
Therefore, you should update the commit text to state that there is currently a regression in UEFI calibration data parsing for TAS devices, and until the parser is properly fixed, adding a quirk allows for restoring full functionality in affected devices, such as the ROG Xbox Ally X.
With those and as a temporary fix, this is fine to be merged by me
Best, Antheas
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; }
/** ASUS ROG Xbox Ally X (RC73XA) UEFI calibration data* causes audio dropouts during playback, use fallback data* from DSP firmware instead.*/if (codec->core.subsystem_id == 0x10431384)hda_priv->skip_calibration = true;pm_runtime_get_sync(dev); comp->dev = dev;-- 2.52.0
On Jan 8, 2026, at 12:14 AM, Antheas Kapenekakis lkml@antheas.dev wrote:
On Thu, 8 Jan 2026 at 07:44, Matthew Schwartz matthew.schwartz@linux.dev wrote:
According to TI, there is an issue with the UEFI calibration result on some devices where the calibration can cause audio dropouts and other quality issues. The ASUS ROG Xbox Ally X (RC73XA) is one such device.
Skipping the UEFI calibration result and using the fallback in the DSP firmware fixes the audio issues.
Fixes: 945865a0ddf3 ("ALSA: hda/tas2781: fix speaker id retrieval for multiple probes") 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
Hi,
can you remove the Fixes? Commit 945865a0ddf3 is not related or caused this issue.
I chose Fixes with that particular commit because prior to this, when there were no kernel patches for the device, the functional audio issue did not occur. But I can see your point because technically it wasn’t using the firmware at all, so I can remove it for a v2.
My interpretation of Jim's email was that he wanted to do a root cause analysis and e.g. find out that it is the UEFI parser. Which it is.
If further root cause analysis is wanted by TI from us then I’d like to them to clarify that first. I interpreted Takashi’s email as suggesting this was sufficient for now as a “trivial fix”, based on Jim’s email and the fact it worked.
The device does not have this issue in Windows, so it is not clear that there is an issue with the calibration data such that the proper fix is to ignore it. And I do not think this was suggested by TI. In addition, your patch introduces a quirk for TAS, even if temporary.
Therefore, you should update the commit text to state that there is currently a regression in UEFI calibration data parsing for TAS devices, and until the parser is properly fixed, adding a quirk allows for restoring full functionality in affected devices, such as the ROG Xbox Ally X.
Sure, can do.
Matt
With those and as a temporary fix, this is fine to be merged by me
Best, Antheas
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; }
/** ASUS ROG Xbox Ally X (RC73XA) UEFI calibration data* causes audio dropouts during playback, use fallback data* from DSP firmware instead.*/if (codec->core.subsystem_id == 0x10431384)hda_priv->skip_calibration = true;pm_runtime_get_sync(dev); comp->dev = dev;-- 2.52.0
linux-stable-mirror@lists.linaro.org