diff mbox series

ALSA: hda/realtek: tas2781: Fix ROG ALLY X audio

Message ID 20240812045325.47736-1-jlobue10@gmail.com
State Accepted
Commit ebfb5a57caa4e2e2203883ac6669bf8a294e7c89
Headers show
Series ALSA: hda/realtek: tas2781: Fix ROG ALLY X audio | expand

Commit Message

Jonathan LoBue Aug. 12, 2024, 4:53 a.m. UTC
This patch enables the TI TAS2781 amplifier SoC for the ASUS ROG ALLY X.
This is a design change from the original ASUS ROG ALLY, creating the need
for this patch. All other Realtek Codec settings seem to be re-used from
the original ROG ALLY design (on the ROG ALLY X). This patch maintains the
previous settings for the Realtek codec portion, but enables the I2C
binding for the TI TAS2781 amplifier (instead of the Cirrus CS35L41 amp
used on the original ASUS ROG ALLY).

One other requirement must be met for audio to work on the ASUS ROG ALLY X.
A proper firmware file in the correct location with a proper symlink. We
had reached out to TI engineers and confirmed that the firmware found in
the Windows' driver package has a GPL license. Bazzite Github is hosting
this firmware file for now until proper linux-firmware upstreaming can
occur. https://github.com/ublue-os/bazzite

This firmware file should be placed in
/usr/lib/firmware/ti/tas2781/TAS2XXX1EB3.bin with a symlink to it from
/usr/lib/firmware/TAS2XXX1EB3.bin

Co-developed by: Kyle Gospodnetich <me@kylegospodneti.ch>
Signed-off-by: Kyle Gospodnetich <me@kylegospodneti.ch>
Co-developed by: Jan Drogehoff <sentrycraft123@gmail.com>
Signed-off-by: Jan Drogehoff <sentrycraft123@gmail.com>
Signed-off-by: Antheas Kapenekakis <lkml@antheas.dev>
Tested-by: Richard Alvarez <alvarez.richard@gmail.com>
Tested-by: Miles Montierth <cyber_dopamine@intheblackmedia.com>
Signed-off-by: Jonathan LoBue <jlobue10@gmail.com>
---
 sound/pci/hda/patch_realtek.c | 8 ++++++++
 1 file changed, 8 insertions(+)

Comments

Philip Müller Oct. 11, 2024, 5:20 a.m. UTC | #1
On 15/8/24 19:58, Antheas Kapenekakis wrote:
> Hi everyone,
> I created the following Draft MR for the Ally firmware files:
> https://gitlab.com/kernel-firmware/linux-firmware/-/merge_requests/272
> 
> Please comment on it at your leisure. I will remove the Draft status once
> all the sign-off members verify it for correctness.
> 
> @Shenghao: can you restate publicly the license of the firmware files and if
> there are no issues, sign-off on the MR?
> 
> Best,
> Antheas

The firmware is now finally merged upstream: 
https://gitlab.com/kernel-firmware/linux-firmware/-/merge_requests/317/diffs

For now a symlink was added to make the current driver implementation by 
Jonathan work: 
https://gitlab.com/kernel-firmware/linux-firmware/-/merge_requests/318/diffs

Jim and Robin from TI will adjust the tas2781_hda_i2c driver to load the 
correct firmware per speaker vendor so the different optimized 
protection parameters are given.

For example the following can be used to readout the GUID for 
calibration data in UEFI BIOS:

status = efi.get_variable(efi_name, &efi_guid, &attr, &total_sz, data);

Example source:

find /sys/firmware/efi/efivars/ -name *-1f52* -print -exec hexdump -C {} \;
/sys/firmware/efi/efivars/CALI_DATA-1f52d2a1-bb3a-457d-bc09-43a3f4310a92
00000000  07 00 00 00 dd f5 15 41  4d ab bb 0f f4 11 bd 31 
|.......AM......1|
00000010  bf 5e 97 00 00 00 00 24  2f 8d 10 3e 77 b9 7f 10 
|.^.....$/..>w...|
00000020  f3 07 6e 2f b3 d0 93 00  00 00 00 24 00 00 00 00 
|..n/.......$....|
00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 
|................|
*
00000050  00 00 00 00 f2 e1 73 66  8e 08 d9 2b 00 00 00 01 
|......sf...+....|
00000060  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 
|................|
*
00000080  00 00 00 00                                       |....|
00000084
diff mbox series

Patch

diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index 480e82df7a4c..9bc39c2ee6b9 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -7410,6 +7410,7 @@  enum {
 	ALC285_FIXUP_THINKPAD_X1_GEN7,
 	ALC285_FIXUP_THINKPAD_HEADSET_JACK,
 	ALC294_FIXUP_ASUS_ALLY,
+	ALC294_FIXUP_ASUS_ALLY_X,
 	ALC294_FIXUP_ASUS_ALLY_PINS,
 	ALC294_FIXUP_ASUS_ALLY_VERBS,
 	ALC294_FIXUP_ASUS_ALLY_SPEAKER,
@@ -8877,6 +8878,12 @@  static const struct hda_fixup alc269_fixups[] = {
 		.chained = true,
 		.chain_id = ALC294_FIXUP_ASUS_ALLY_PINS
 	},
+	[ALC294_FIXUP_ASUS_ALLY_X] = {
+		.type = HDA_FIXUP_FUNC,
+		.v.func = tas2781_fixup_i2c,
+		.chained = true,
+		.chain_id = ALC294_FIXUP_ASUS_ALLY_PINS
+	},
 	[ALC294_FIXUP_ASUS_ALLY_PINS] = {
 		.type = HDA_FIXUP_PINS,
 		.v.pins = (const struct hda_pintbl[]) {
@@ -10313,6 +10320,7 @@  static const struct snd_pci_quirk alc269_fixup_tbl[] = {
 	SND_PCI_QUIRK(0x1043, 0x1740, "ASUS UX430UA", ALC295_FIXUP_ASUS_DACS),
 	SND_PCI_QUIRK(0x1043, 0x17d1, "ASUS UX431FL", ALC294_FIXUP_ASUS_DUAL_SPK),
 	SND_PCI_QUIRK(0x1043, 0x17f3, "ROG Ally NR2301L/X", ALC294_FIXUP_ASUS_ALLY),
+	SND_PCI_QUIRK(0x1043, 0x1eb3, "ROG Ally X RC72LA", ALC294_FIXUP_ASUS_ALLY_X),
 	SND_PCI_QUIRK(0x1043, 0x1863, "ASUS UX6404VI/VV", ALC245_FIXUP_CS35L41_SPI_2),
 	SND_PCI_QUIRK(0x1043, 0x1881, "ASUS Zephyrus S/M", ALC294_FIXUP_ASUS_GX502_PINS),
 	SND_PCI_QUIRK(0x1043, 0x18b1, "Asus MJ401TA", ALC256_FIXUP_ASUS_HEADSET_MIC),