mirror of
https://github.com/torvalds/linux.git
synced 2026-05-30 18:13:41 +02:00
ALSA: hda/tas2781: Skip UEFI calibration on ASUS ROG Xbox Ally X
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> Reviewed-by: Antheas Kapenekakis <lkml@antheas.dev> Link: https://patch.msgid.link/20260108093650.1142176-1-matthew.schwartz@linux.dev Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
47c27c9c9c
commit
b7e26c8bda
|
|
@ -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)
|
||||
|
|
@ -491,7 +492,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)
|
||||
|
|
@ -548,6 +550,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;
|
||||
|
|
@ -573,6 +576,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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user