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;
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
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
linux-stable-mirror@lists.linaro.org