thesofproject / linux

Linux kernel source tree
Other
91 stars 133 forks source link

[BUG] intel-dsp-config is using the wrong driver support for Huawei Matebook D14 NBLB-WAX9N-PCB (2020/2021) #4934

Closed mchehab closed 7 months ago

mchehab commented 7 months ago

Description

There are different models of Huawei Matebook D14. The newer ones come with ES8336, but older models may have different codecs. I had already access to one model with ES8336, and I own one with Realtek ALC 256.

The model with Realtek ALC 256 is reported as:

Manufacturer:      HUAWEI
Product Name:      NBLB-WAX9N
Product Version:   M1240
Firmware Version:  1.45
System SKU:        C100
Board Vendor:      HUAWEI
Board Name:        NBLB-WAX9N-PCB

And it has its latest ACPI BIOS for such model:

BIOS Information
        Vendor: HUAWEI
        Version: 1.45
        Release Date: 01/17/2023

Despite using Realtek ALC 256, its ACPI table also has entries for ES8336:

$ ls /sys/bus/acpi/devices/|grep ES
ESSX8336:00

That makes snd-intel-dspcfg to try using the SOF driver for es8336, which fails, making the device unusable.

To Reproduce

Boot the Kernel 6.8 on such device without any module parameter. The same problem also happens on older Kernels.

Reproduction Rate

It happens 100% of the time with default detection logic enabled. Adding this to /etc/modprobe.d/alsa.conf fixes the issue:

options snd-intel-dspcfg dsp_driver=1

Booting passing dsp_driver parameter makes it work properly [1]: https://alsa-project.org/db/?f=1a5ddeb0b151db8fe051407f5bb1c075b7dd3e4a

[1]: an additional is needed for headset microphone to work with intel_hda:

Expected behavior

A quirk at sound/hda/intel-dsp-config.c should be added to blacklist SOF detection on such device, letting it use the legacy intel HDA driver.

Impact

No audio.

plbossart commented 7 months ago

Thanks @mchehab

Wondering if there is a way to make an ACPI device report "not present"? IOW, fix the misleading information rather than add a quirk to the intel-dsp-config already complicated logic.

mchehab commented 7 months ago

I dunno. Didn't have to deal yet with masking devices reported by ACPI. If it helps, I'm enclosing the decoded file from the ACPI DSDT: dsdt.dsl.

mchehab commented 7 months ago

A quirk to fix detection sounds easy enough: huawei_d14_2021_audio_detection_fix.patch, sent to ML for review: https://lore.kernel.org/linux-sound/20240418110453.10efcb60@sal.lan/T/#t

Tested on my notebook on Kernel 6.8.7, with the headset mix fixup patch and this one:

[    6.757654] snd_hda_intel 0000:00:1f.3: DSP detected with PCI class/subclass/prog-if info 0x040380
[    6.757676] snd_hda_intel 0000:00:1f.3: enabling device (0000 -> 0002)
[    6.758569] snd_hda_intel 0000:00:1f.3: bound 0000:00:02.0 (ops i915_audio_component_bind_ops [i915])
...
[    6.830816] snd_hda_codec_realtek hdaudioC0D0: autoconfig for ALC256: line_outs=1 (0x14/0x0/0x0/0x0/0x0) type:speaker
[    6.830822] snd_hda_codec_realtek hdaudioC0D0:    speaker_outs=0 (0x0/0x0/0x0/0x0/0x0)
[    6.830825] snd_hda_codec_realtek hdaudioC0D0:    hp_outs=1 (0x21/0x0/0x0/0x0/0x0)
[    6.830828] snd_hda_codec_realtek hdaudioC0D0:    mono: mono_out=0x0
[    6.830830] snd_hda_codec_realtek hdaudioC0D0:    inputs:
[    6.830831] snd_hda_codec_realtek hdaudioC0D0:      Headset Mic=0x19
[    6.830833] snd_hda_codec_realtek hdaudioC0D0:      Internal Mic=0x12
plbossart commented 7 months ago

That was precisely what I was afraid of @mchehab, it's a can of worms with an ever-growing list of quirks to maintain....

The two other options are a) provide an option to disable the ES8336 device b) detect the HDaudio mask earlier and see if we detect an HDaudio external codec, in which case we could ignore the I2S selection and use HDaudio. The problem is that we have to enable hardware so it's less of an ACPI directly lookup.

andy-shev commented 7 months ago

Thanks @mchehab

Wondering if there is a way to make an ACPI device report "not present"? IOW, fix the misleading information rather than add a quirk to the intel-dsp-config already complicated logic.

If the question "how to disable ACPI enumeration of the I²C device with a HID ESSX8336 on any platform?" then ignore_serial_bus_ids can be used. If the question of the certain platform, we need to have a quirk in one or another form I am afraid (DMI or as proposed by Mauro).

andy-shev commented 7 months ago

Actually AFAICS this device has 2 I²C resources, which is perfect case for SMI (drivers/platform/x86/serial-multi-instantiate.c) case, which is already covered by that list in the drivers/acpi/scan.c.

plbossart commented 7 months ago

@andy-shev the question was if there's a way to change the 'status' reported by an ACPI device to 'not present'.

What causes the false detection is this:

/sys/bus/acpi/devices/ESSX8336:00/status     15

This is just wrong, so rather than update the intel-dsp-config logic i'd rather squelch that bad information at the source.

mchehab commented 7 months ago

@plbossart, @andy-shev :

On a quick look, this is what we have here at the machine, with regards to I2C:

$ sudo grep . /sys/bus/acpi/devices/ESSX8336:00/*
/sys/bus/acpi/devices/ESSX8336:00/adr:0x00000000
/sys/bus/acpi/devices/ESSX8336:00/hid:ESSX8336
/sys/bus/acpi/devices/ESSX8336:00/modalias:acpi:ESSX8336:ESSX8336:
/sys/bus/acpi/devices/ESSX8336:00/path:\_SB_.PCI0.I2C1.ESSX
grep: /sys/bus/acpi/devices/ESSX8336:00/power: Is a directory
/sys/bus/acpi/devices/ESSX8336:00/power_state:D0
/sys/bus/acpi/devices/ESSX8336:00/status:15
grep: /sys/bus/acpi/devices/ESSX8336:00/subsystem: Is a directory
/sys/bus/acpi/devices/ESSX8336:00/uevent:MODALIAS=acpi:ESSX8336:ESSX8336:
/sys/bus/acpi/devices/ESSX8336:00/uid:1
$ sudo modprobe i2c-dev
$ sudo i2cdetect -l
i2c-3   i2c         i915 gmbus dpb                      I2C adapter
i2c-1   i2c         Synopsys DesignWare I2C adapter     I2C adapter
i2c-8   i2c         AUX C/DDI C/PHY C                   I2C adapter
i2c-6   i2c         i915 gmbus dpd                      I2C adapter
i2c-4   i2c         i915 gmbus dpc                      I2C adapter
i2c-2   i2c         Synopsys DesignWare I2C adapter     I2C adapter
i2c-0   i2c         Synopsys DesignWare I2C adapter     I2C adapter
i2c-9   smbus       SMBus I801 adapter at efa0          SMBus adapter
i2c-7   i2c         AUX A/DDI A/PHY A                   I2C adapter
i2c-5   i2c         i915 gmbus misc                     I2C adapter

Maybe a 0-byte read or write to essx8336 could be used to check if the device or the I2C controller is present or not. Not sure how easy/hard would be to detect that.

mchehab commented 7 months ago

That was precisely what I was afraid of @mchehab, it's a can of worms with an ever-growing list of quirks to maintain....

IMO, if we need to have a list of devices to block, placing them at intel-dsp-config.c seems to be better, as placing a quirk list elsewhere would be worse.

The two other options are a) provide an option to disable the ES8336 device

I don't think that helps. If you browse for Matebook D14, you'll see that there are other reports for the same device where people think that the bug is at es8336 support (instead of the simpler answer: older model using AC97).

Btw, I'm pretty sure that, when I installed Fedora on this machine, audio used to work (it was probably before some SOF-related changes, and before BIOS upgrades). In practice, when I noticed this bug I was suspecting of a regression - but as I was too busy on that time to seek for the bug - I just forced dspconfig to use legacy driver.

b) detect the HDaudio mask earlier and see if we detect an HDaudio external codec, in which case we could ignore the I2S selection and use HDaudio. The problem is that we have to enable hardware so it's less of an ACPI directly lookup.

As Andy mentioned, it is probably easier to detect it via I2C scan: if the I2C bus is not found, or if the device doesn't answer to its I2C port, fall back to AC97. We use such kind of detection on media devices, where it is common that the same USB or PCI hardware to come up with different tuners at different I2C addresses. This would make the code at intel-dsp-config.c a little bit more complex, as it would need to call an i2c scan function, but it may prevent or reduce the number of quirks there.

plbossart commented 7 months ago

These ES8336 devices are so flaky that I2C may or may not work... There was an issue on this some time back.

There's also option c) c) detect the Hdaudio verb table somewhere in the BIOS tables. That might be a simpler problem to solve than accessing hardware.

mchehab commented 7 months ago

These ES8336 devices are so flaky that I2C may or may not work... There was an issue on this some time back.

Perhaps some Runtime PM issue. We had a similar issue on atomisp driver: before probing, the driver needs to ensure that the device was properly reset and power state was successfully changed.

There's also option c) c) detect the Hdaudio verb table somewhere in the BIOS tables. That might be a simpler problem to solve than accessing hardware.

I don't think relying on BIOS would avoid quirks, as firmware developers usually share the same BIOS with different motherboards.

If I2C is not reliable, I suspect that the solution to avoid quirks would be to try probing one driver first (either AC97 or SOF), and, in case of failures, the other one. Some care should be taken with the logs, though, as a failure should be reported only after the second probe.

plbossart commented 7 months ago

@mchehab does the device with the HDaudio codec have an NHLT table, and if yes can you share it?

sudo cat /sys/firmware/acpi/tables/NHLT > nhlt.dat
iasl -d nhlt.dat

The point is that if there is an NHLT we can double-check if indeed there is a link for the I2S codec or not. If there is no NHLT we can dismiss the ES8336 quirk and remove the SOF selection.

mchehab commented 7 months ago

It does:

/*
 * Intel ACPI Component Architecture
 * AML/ASL+ Disassembler version 20240322 (64-bit version)
 * Copyright (c) 2000 - 2023 Intel Corporation
 * 
 * Disassembly of nhlt.dat
 *
 * ACPI Data Table [NHLT]
 *
 * Format: [HexOffset DecimalOffset ByteLength]  FieldName : FieldValue (in hex)
 */

[000h 0000 004h]                   Signature : "NHLT"    [Non HD Audio Link Table]
[004h 0004 004h]                Table Length : 0000002D
[008h 0008 001h]                    Revision : 00
[009h 0009 001h]                    Checksum : BD
[00Ah 0010 006h]                      Oem ID : "XXXXXX"
[010h 0016 008h]                Oem Table ID : "CML-ULT"
[018h 0024 004h]                Oem Revision : 00000002
[01Ch 0028 004h]             Asl Compiler ID : "    "
[020h 0032 004h]       Asl Compiler Revision : 01000013

Raw Table Data: Length 45 (0x2D)

    0000: 4E 48 4C 54 2D 00 00 00 00 BD 58 58 58 58 58 58  // NHLT-.....XXXXXX
    0010: 43 4D 4C 2D 55 4C 54 00 02 00 00 00 20 20 20 20  // CML-ULT.....    
    0020: 13 00 00 01 00 04 00 00 00 DE AD BE EF           // .............
mchehab commented 7 months ago

Btw, this week I'm able to get a the NHLT table from Matebook D15 with es8336:

Manufacturer: HUAWEI
Product Name: BOHB-WAX9
Version: M1110
SKU Number: C100
Family: MateBook D

and NHLT i2S detection works fine there:

[    0.005847] ACPI: NHLT 0x000000008FC2F000 001973 (v00 XXXXXX CML-ULT  00000002      01000013)
[    0.005876] ACPI: Reserving NHLT table memory at [mem 0x8fc2f000-0x8fc30972]
[    4.931329] sof-audio-pci-intel-cnl 0000:00:1f.3: NHLT_DEVICE_I2S detected, ssp_mask 0x1
[    4.931333] sof-audio-pci-intel-cnl 0000:00:1f.3: Overriding topology with MCLK mask 0x1 from NHLT

It is a lot bigger:

/*
 * Intel ACPI Component Architecture
 * AML/ASL+ Disassembler version 20240322 (64-bit version)
 * Copyright (c) 2000 - 2023 Intel Corporation
 * 
 * Disassembly of /tmp/nhlt_matebook_d15.dat
 *
 * ACPI Data Table [NHLT]
 *
 * Format: [HexOffset DecimalOffset ByteLength]  FieldName : FieldValue (in hex)
 */

[000h 0000 004h]                   Signature : "NHLT"    [Non HD Audio Link Table]
[004h 0004 004h]                Table Length : 00001973
[008h 0008 001h]                    Revision : 00
[009h 0009 001h]                    Checksum : 36
[00Ah 0010 006h]                      Oem ID : "XXXXXX"
[010h 0016 008h]                Oem Table ID : "CML-ULT"
[018h 0024 004h]                Oem Revision : 00000002
[01Ch 0028 004h]             Asl Compiler ID : "    "
[020h 0032 004h]       Asl Compiler Revision : 01000013

Raw Table Data: Length 6515 (0x1973)

    0000: 4E 48 4C 54 73 19 00 00 00 36 58 58 58 58 58 58  // NHLTs....6XXXXXX
    0010: 43 4D 4C 2D 55 4C 54 00 02 00 00 00 20 20 20 20  // CML-ULT.....    
    0020: 13 00 00 01 04 44 17 00 00 02 00 86 80 20 AE 01  // .....D....... ..
    0030: 00 01 00 00 00 00 01 00 03 00 00 00 00 01 0A 02  // ................
    0040: FE FF 02 00 80 BB 00 00 00 EE 02 00 04 00 10 00  // ................
    0050: 16 00 10 00 03 00 00 00 01 00 00 00 00 00 10 00  // ................
    0060: 80 00 00 AA 00 38 9B 71 68 0B 00 00 01 00 00 00  // .....8.qh.......
    0070: 10 32 FF FF 10 FF FF FF 32 FF FF FF FF FF FF FF  // .2......2.......
    0080: 03 00 00 00 03 00 00 00 03 00 30 00 03 00 30 00  // ..........0...0.
    0090: 03 00 00 00 01 00 00 00 03 13 00 09 00 00 00 00  // ................
    00A0: 03 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00  // ................
    00B0: 00 00 00 00 11 00 00 00 A0 02 04 00 00 00 00 00  // ................
    00C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  // ................
    00D0: 00 00 00 00 11 00 00 00 AE 03 0E 00 00 00 00 00  // ................
    00E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  // ................
    00F0: 00 00 00 00 08 00 00 00 AE FF 0F 00 12 FF 0F 00  // ................
    0100: FB FD 0F 00 61 FC 0F 00 5A FA 0F 00 2B F8 0F 00  // ....a...Z...+...
    0110: 41 F6 0F 00 20 F5 0F 00 44 F5 0F 00 F4 F6 0F 00  // A... ...D.......
    0120: 25 FA 0F 00 65 FE 0F 00 E0 02 00 00 8F 06 00 00  // %...e...........
    0130: 76 08 00 00 F1 07 00 00 F5 04 00 00 2A 00 00 00  // v...........*...
    0140: D4 FA 0F 00 8A F6 0F 00 BF F4 0F 00 4F F6 0F 00  // ............O...
    0150: 20 FB 0F 00 0F 02 00 00 29 09 00 00 2D 0E 00 00  //  .......)...-...
    0160: 40 0F 00 00 92 0B 00 00 BF 03 00 00 CD F9 0F 00  // @...............
    0170: B0 F0 0F 00 6E EB 0F 00 2A EC 0F 00 51 F3 0F 00  // ....n...*...Q...
    0180: 4F FF 0F 00 CD 0C 00 00 9D 17 00 00 FC 1B 00 00  // O...............
    0190: D7 17 00 00 A3 0B 00 00 7E FA 0F 00 6F E9 0F 00  // ........~...o...
    01A0: F5 DD 0F 00 4D DC 0F 00 EE E5 0F 00 CE F8 0F 00  // ....M...........
    01B0: B7 0F 00 00 A8 23 00 00 F5 2D 00 00 74 2A 00 00  // .....#...-..t*..
    01C0: 10 19 00 00 2C FE 0F 00 9C E1 0F 00 64 CC 0F 00  // ....,.......d...
    01D0: EE C5 0F 00 7E D1 0F 00 D4 EC 0F 00 71 10 00 00  // ....~.......q...
    01E0: 98 31 00 00 7E 45 00 00 C9 44 00 00 24 2E 00 00  // .1..~E...D..$...
    01F0: 28 07 00 00 0E DB 0F 00 81 B7 0F 00 6B A8 0F 00  // (...........k...
    0200: 08 B4 0F 00 84 D8 0F 00 02 0C 00 00 37 3F 00 00  // ............7?..
    0210: E8 61 00 00 07 68 00 00 C5 4D 00 00 54 19 00 00  // .a...h...M..T...
    0220: 8C D9 0F 00 C8 A1 0F 00 0F 84 0F 00 52 8B 0F 00  // ............R...
    0230: 8C B7 0F 00 23 FD 0F 00 DB 47 00 00 B1 80 00 00  // ....#....G......
    0240: E3 94 00 00 08 7C 00 00 41 3B 00 00 5E E4 0F 00  // .....|..A;..^...
    0250: 01 91 0F 00 1E 5B 0F 00 F4 54 0F 00 07 83 0F 00  // .....[...T......
    0260: 0B DA 0F 00 8F 41 00 00 D0 9A 00 00 D6 C9 00 00  // .....A..........
    0270: 16 BE 00 00 0B 78 00 00 DD 09 00 00 BA 92 0F 00  // .....x..........
    0280: 06 36 0F 00 ED 10 0F 00 5E 31 0F 00 35 91 0F 00  // .6......^1..5...
    0290: 2C 17 00 00 83 9D 00 00 9E FC 00 00 95 16 01 00  // ,...............
    02A0: 5B E0 00 00 BF 65 00 00 ED C6 0F 00 F4 2F 0F 00  // [....e......./..
    02B0: 96 CC 0E 00 C9 BB 0E 00 68 06 0F 00 E7 9B 0F 00  // ........h.......
    02C0: 01 56 00 00 9E 02 01 00 40 71 01 00 65 80 01 00  // .V......@q..e...
    02D0: 28 27 01 00 74 78 00 00 DB 9E 0F 00 02 D2 0E 00  // ('..tx..........
    02E0: 6C 48 0E 00 4D 29 0E 00 0F 82 0E 00 4A 42 0F 00  // lH..M)......JB..
    02F0: 29 3F 00 00 68 3D 01 00 61 FF 01 00 B2 53 02 00  // )?..h=..a....S..
    0300: FA 20 02 00 E1 6B 01 00 38 56 00 00 98 17 0F 00  // . ...k..8V......
    0310: 65 F1 0D 00 1A 21 0D 00 F9 D3 0C 00 B5 1E 0D 00  // e....!..........
    0320: 89 FA 0D 00 02 48 0F 00 56 D6 00 00 63 6D 02 00  // .....H..V...cm..
    0330: 08 D8 03 00 C3 EC 04 00 15 93 05 00 20 C5 05 00  // ............ ...
    0340: B6 8D 05 00 D6 03 05 00 DD 44 04 00 CB 6E 03 00  // .........D...n..
    0350: 9A 9B 02 00 5D DE 01 00 34 42 01 00 E0 CA 00 00  // ....]...4B......
    0360: 69 76 00 00 40 3F 00 00 4E 1E 00 00 95 0C 00 00  // iv..@?..N.......
    0370: 3B 04 00 00 F9 00 00 00 61 F9 0F 00 23 08 00 00  // ;.......a...#...
    0380: 4F 08 00 00 39 0A 00 00 21 0D 00 00 A8 10 00 00  // O...9...!.......
    0390: 9A 14 00 00 CC 18 00 00 15 1D 00 00 4D 21 00 00  // ............M!..
    03A0: 43 25 00 00 C8 28 00 00 AA 2B 00 00 B8 2D 00 00  // C%...(...+...-..
    03B0: C6 2E 00 00 AC 2E 00 00 4C 2D 00 00 90 2A 00 00  // ........L-...*..
    03C0: 72 26 00 00 F9 20 00 00 3B 1A 00 00 5C 12 00 00  // r&... ..;...\...
    03D0: 94 09 00 00 25 00 00 00 62 F6 0F 00 A3 EC 0F 00  // ....%...b.......
    03E0: 4C E3 0F 00 BE DA 0F 00 64 D3 0F 00 94 CD 0F 00  // L.......d.......
    03F0: A4 C9 0F 00 DD C7 0F 00 6B C8 0F 00 6E CB 0F 00  // ........k...n...
    0400: E6 D0 0F 00 BB D8 0F 00 B9 E2 0F 00 8F EE 0F 00  // ................
    0410: D5 FB 0F 00 0C 0A 00 00 A3 18 00 00 FC 26 00 00  // .............&..
    0420: 74 34 00 00 65 40 00 00 36 4A 00 00 5A 51 00 00  // t4..e@..6J..ZQ..
    0430: 5A 55 00 00 DF 55 00 00 B2 52 00 00 C3 4B 00 00  // ZU...U...R...K..
    0440: 2C 41 00 00 32 33 00 00 42 22 00 00 F3 0E 00 00  // ,A..23..B"......
    0450: FB F9 0F 00 30 E4 0F 00 78 CE 0F 00 C6 B9 0F 00  // ....0...x.......
    0460: 0F A7 0F 00 3A 97 0F 00 1E 8B 0F 00 6E 83 0F 00  // ....:.......n...
    0470: B7 80 0F 00 55 83 0F 00 6E 8B 0F 00 EA 98 0F 00  // ....U...n.......
    0480: 78 AB 0F 00 88 C2 0F 00 52 DD 0F 00 DF FA 0F 00  // x.......R.......
    0490: 0A 1A 00 00 92 39 00 00 23 58 00 00 65 74 00 00  // .....9..#X..et..
    04A0: 0C 8D 00 00 E3 A0 00 00 DC AE 00 00 1F B6 00 00  // ................
    04B0: 14 B6 00 00 6B AE 00 00 23 9F 00 00 8D 88 00 00  // ....k...#.......
    04C0: 4C 6B 00 00 50 48 00 00 D3 20 00 00 47 F6 0F 00  // Lk..PH... ..G...
    04D0: 4F CA 0F 00 AE 9E 0F 00 33 75 0F 00 A8 4F 0F 00  // O.......3u...O..
    04E0: C0 2F 0F 00 02 17 0F 00 BA 06 0F 00 E6 FF 0E 00  // ./..............
    04F0: 2D 03 0F 00 D3 10 0F 00 B4 28 0F 00 42 4A 0F 00  // -........(..BJ..
    0500: 86 74 0F 00 2A A6 0F 00 81 DD 0F 00 96 18 00 00  // .t..*...........
    0510: 3D 55 00 00 28 91 00 00 FE C9 00 00 6F FD 00 00  // =U..(.......o...
    0520: 4E 29 01 00 A5 4B 01 00 CB 62 01 00 75 6D 01 00  // N)...K...b..um..
    0530: C4 6A 01 00 52 5A 01 00 38 3C 01 00 0D 11 01 00  // .j..RZ..8<......
    0540: E9 D9 00 00 56 98 00 00 4A 4E 00 00 17 FE 0F 00  // ....V...JN......
    0550: 51 AA 0F 00 C4 55 0F 00 50 03 0F 00 D6 B5 0E 00  // Q....U..P.......
    0560: 20 70 0E 00 C8 34 0E 00 20 06 0E 00 1C E6 0D 00  //  p...4.. .......
    0570: 4B D6 0D 00 BD D7 0D 00 03 EB 0D 00 2A 10 0E 00  // K...........*...
    0580: B5 46 0E 00 AB 8D 0E 00 97 E3 0E 00 99 46 0F 00  // .F...........F..
    0590: 79 B4 0F 00 B3 2A 00 00 91 A6 00 00 3C 25 01 00  // y....*......<%..
    05A0: D9 A3 01 00 98 1F 02 00 CC 95 02 00 00 04 03 00  // ................
    05B0: 03 68 03 00 F8 BF 03 00 63 0A 04 00 28 46 04 00  // .h......c...(F..
    05C0: 9B 72 04 00 76 8F 04 00 D2 9C 04 00 35 9B 04 00  // .r..v.......5...
    05D0: 71 8B 04 00 A5 6E 04 00 32 46 04 00 A6 13 04 00  // q....n..2F......
    05E0: B3 D8 03 00 1B 97 03 00 A6 50 03 00 16 07 03 00  // .........P......
    05F0: 15 BC 02 00 31 71 02 00 CB 27 02 00 1D E1 01 00  // ....1q...'......
    0600: 2A 9E 01 00 C1 5F 01 00 7C 26 01 00 C0 F2 00 00  // *...._..|&......
    0610: C2 C4 00 00 8B 9C 00 00 FB 79 00 00 D2 5C 00 00  // .........y...\..
    0620: B2 44 00 00 2D 31 00 00 C5 21 00 00 F4 15 00 00  // .D..-1...!......
    0630: 5E 13 00 00 01 00 00 00 03 13 00 09 00 00 00 00  // ^...............
    0640: 03 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00  // ................
    0650: 00 00 00 00 11 00 00 00 A0 02 04 00 00 00 00 00  // ................
    0660: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  // ................
    0670: 00 00 00 00 11 00 00 00 AE 03 0E 00 00 00 00 00  // ................
    0680: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  // ................
    0690: 00 00 00 00 08 00 00 00 AE FF 0F 00 12 FF 0F 00  // ................
    06A0: FB FD 0F 00 61 FC 0F 00 5A FA 0F 00 2B F8 0F 00  // ....a...Z...+...
    06B0: 41 F6 0F 00 20 F5 0F 00 44 F5 0F 00 F4 F6 0F 00  // A... ...D.......
    06C0: 25 FA 0F 00 65 FE 0F 00 E0 02 00 00 8F 06 00 00  // %...e...........
    06D0: 76 08 00 00 F1 07 00 00 F5 04 00 00 2A 00 00 00  // v...........*...
    06E0: D4 FA 0F 00 8A F6 0F 00 BF F4 0F 00 4F F6 0F 00  // ............O...
    06F0: 20 FB 0F 00 0F 02 00 00 29 09 00 00 2D 0E 00 00  //  .......)...-...
    0700: 40 0F 00 00 92 0B 00 00 BF 03 00 00 CD F9 0F 00  // @...............
    0710: B0 F0 0F 00 6E EB 0F 00 2A EC 0F 00 51 F3 0F 00  // ....n...*...Q...
    0720: 4F FF 0F 00 CD 0C 00 00 9D 17 00 00 FC 1B 00 00  // O...............
    0730: D7 17 00 00 A3 0B 00 00 7E FA 0F 00 6F E9 0F 00  // ........~...o...
    0740: F5 DD 0F 00 4D DC 0F 00 EE E5 0F 00 CE F8 0F 00  // ....M...........
    0750: B7 0F 00 00 A8 23 00 00 F5 2D 00 00 74 2A 00 00  // .....#...-..t*..
    0760: 10 19 00 00 2C FE 0F 00 9C E1 0F 00 64 CC 0F 00  // ....,.......d...
    0770: EE C5 0F 00 7E D1 0F 00 D4 EC 0F 00 71 10 00 00  // ....~.......q...
    0780: 98 31 00 00 7E 45 00 00 C9 44 00 00 24 2E 00 00  // .1..~E...D..$...
    0790: 28 07 00 00 0E DB 0F 00 81 B7 0F 00 6B A8 0F 00  // (...........k...
    07A0: 08 B4 0F 00 84 D8 0F 00 02 0C 00 00 37 3F 00 00  // ............7?..
    07B0: E8 61 00 00 07 68 00 00 C5 4D 00 00 54 19 00 00  // .a...h...M..T...
    07C0: 8C D9 0F 00 C8 A1 0F 00 0F 84 0F 00 52 8B 0F 00  // ............R...
    07D0: 8C B7 0F 00 23 FD 0F 00 DB 47 00 00 B1 80 00 00  // ....#....G......
    07E0: E3 94 00 00 08 7C 00 00 41 3B 00 00 5E E4 0F 00  // .....|..A;..^...
    07F0: 01 91 0F 00 1E 5B 0F 00 F4 54 0F 00 07 83 0F 00  // .....[...T......
    0800: 0B DA 0F 00 8F 41 00 00 D0 9A 00 00 D6 C9 00 00  // .....A..........
    0810: 16 BE 00 00 0B 78 00 00 DD 09 00 00 BA 92 0F 00  // .....x..........
    0820: 06 36 0F 00 ED 10 0F 00 5E 31 0F 00 35 91 0F 00  // .6......^1..5...
    0830: 2C 17 00 00 83 9D 00 00 9E FC 00 00 95 16 01 00  // ,...............
    0840: 5B E0 00 00 BF 65 00 00 ED C6 0F 00 F4 2F 0F 00  // [....e......./..
    0850: 96 CC 0E 00 C9 BB 0E 00 68 06 0F 00 E7 9B 0F 00  // ........h.......
    0860: 01 56 00 00 9E 02 01 00 40 71 01 00 65 80 01 00  // .V......@q..e...
    0870: 28 27 01 00 74 78 00 00 DB 9E 0F 00 02 D2 0E 00  // ('..tx..........
    0880: 6C 48 0E 00 4D 29 0E 00 0F 82 0E 00 4A 42 0F 00  // lH..M)......JB..
    0890: 29 3F 00 00 68 3D 01 00 61 FF 01 00 B2 53 02 00  // )?..h=..a....S..
    08A0: FA 20 02 00 E1 6B 01 00 38 56 00 00 98 17 0F 00  // . ...k..8V......
    08B0: 65 F1 0D 00 1A 21 0D 00 F9 D3 0C 00 B5 1E 0D 00  // e....!..........
    08C0: 89 FA 0D 00 02 48 0F 00 56 D6 00 00 63 6D 02 00  // .....H..V...cm..
    08D0: 08 D8 03 00 C3 EC 04 00 15 93 05 00 20 C5 05 00  // ............ ...
    08E0: B6 8D 05 00 D6 03 05 00 DD 44 04 00 CB 6E 03 00  // .........D...n..
    08F0: 9A 9B 02 00 5D DE 01 00 34 42 01 00 E0 CA 00 00  // ....]...4B......
    0900: 69 76 00 00 40 3F 00 00 4E 1E 00 00 95 0C 00 00  // iv..@?..N.......
    0910: 3B 04 00 00 F9 00 00 00 61 F9 0F 00 23 08 00 00  // ;.......a...#...
    0920: 4F 08 00 00 39 0A 00 00 21 0D 00 00 A8 10 00 00  // O...9...!.......
    0930: 9A 14 00 00 CC 18 00 00 15 1D 00 00 4D 21 00 00  // ............M!..
    0940: 43 25 00 00 C8 28 00 00 AA 2B 00 00 B8 2D 00 00  // C%...(...+...-..
    0950: C6 2E 00 00 AC 2E 00 00 4C 2D 00 00 90 2A 00 00  // ........L-...*..
    0960: 72 26 00 00 F9 20 00 00 3B 1A 00 00 5C 12 00 00  // r&... ..;...\...
    0970: 94 09 00 00 25 00 00 00 62 F6 0F 00 A3 EC 0F 00  // ....%...b.......
    0980: 4C E3 0F 00 BE DA 0F 00 64 D3 0F 00 94 CD 0F 00  // L.......d.......
    0990: A4 C9 0F 00 DD C7 0F 00 6B C8 0F 00 6E CB 0F 00  // ........k...n...
    09A0: E6 D0 0F 00 BB D8 0F 00 B9 E2 0F 00 8F EE 0F 00  // ................
    09B0: D5 FB 0F 00 0C 0A 00 00 A3 18 00 00 FC 26 00 00  // .............&..
    09C0: 74 34 00 00 65 40 00 00 36 4A 00 00 5A 51 00 00  // t4..e@..6J..ZQ..
    09D0: 5A 55 00 00 DF 55 00 00 B2 52 00 00 C3 4B 00 00  // ZU...U...R...K..
    09E0: 2C 41 00 00 32 33 00 00 42 22 00 00 F3 0E 00 00  // ,A..23..B"......
    09F0: FB F9 0F 00 30 E4 0F 00 78 CE 0F 00 C6 B9 0F 00  // ....0...x.......
    0A00: 0F A7 0F 00 3A 97 0F 00 1E 8B 0F 00 6E 83 0F 00  // ....:.......n...
    0A10: B7 80 0F 00 55 83 0F 00 6E 8B 0F 00 EA 98 0F 00  // ....U...n.......
    0A20: 78 AB 0F 00 88 C2 0F 00 52 DD 0F 00 DF FA 0F 00  // x.......R.......
    0A30: 0A 1A 00 00 92 39 00 00 23 58 00 00 65 74 00 00  // .....9..#X..et..
    0A40: 0C 8D 00 00 E3 A0 00 00 DC AE 00 00 1F B6 00 00  // ................
    0A50: 14 B6 00 00 6B AE 00 00 23 9F 00 00 8D 88 00 00  // ....k...#.......
    0A60: 4C 6B 00 00 50 48 00 00 D3 20 00 00 47 F6 0F 00  // Lk..PH... ..G...
    0A70: 4F CA 0F 00 AE 9E 0F 00 33 75 0F 00 A8 4F 0F 00  // O.......3u...O..
    0A80: C0 2F 0F 00 02 17 0F 00 BA 06 0F 00 E6 FF 0E 00  // ./..............
    0A90: 2D 03 0F 00 D3 10 0F 00 B4 28 0F 00 42 4A 0F 00  // -........(..BJ..
    0AA0: 86 74 0F 00 2A A6 0F 00 81 DD 0F 00 96 18 00 00  // .t..*...........
    0AB0: 3D 55 00 00 28 91 00 00 FE C9 00 00 6F FD 00 00  // =U..(.......o...
    0AC0: 4E 29 01 00 A5 4B 01 00 CB 62 01 00 75 6D 01 00  // N)...K...b..um..
    0AD0: C4 6A 01 00 52 5A 01 00 38 3C 01 00 0D 11 01 00  // .j..RZ..8<......
    0AE0: E9 D9 00 00 56 98 00 00 4A 4E 00 00 17 FE 0F 00  // ....V...JN......
    0AF0: 51 AA 0F 00 C4 55 0F 00 50 03 0F 00 D6 B5 0E 00  // Q....U..P.......
    0B00: 20 70 0E 00 C8 34 0E 00 20 06 0E 00 1C E6 0D 00  //  p...4.. .......
    0B10: 4B D6 0D 00 BD D7 0D 00 03 EB 0D 00 2A 10 0E 00  // K...........*...
    0B20: B5 46 0E 00 AB 8D 0E 00 97 E3 0E 00 99 46 0F 00  // .F...........F..
    0B30: 79 B4 0F 00 B3 2A 00 00 91 A6 00 00 3C 25 01 00  // y....*......<%..
    0B40: D9 A3 01 00 98 1F 02 00 CC 95 02 00 00 04 03 00  // ................
    0B50: 03 68 03 00 F8 BF 03 00 63 0A 04 00 28 46 04 00  // .h......c...(F..
    0B60: 9B 72 04 00 76 8F 04 00 D2 9C 04 00 35 9B 04 00  // .r..v.......5...
    0B70: 71 8B 04 00 A5 6E 04 00 32 46 04 00 A6 13 04 00  // q....n..2F......
    0B80: B3 D8 03 00 1B 97 03 00 A6 50 03 00 16 07 03 00  // .........P......
    0B90: 15 BC 02 00 31 71 02 00 CB 27 02 00 1D E1 01 00  // ....1q...'......
    0BA0: 2A 9E 01 00 C1 5F 01 00 7C 26 01 00 C0 F2 00 00  // *...._..|&......
    0BB0: C2 C4 00 00 8B 9C 00 00 FB 79 00 00 D2 5C 00 00  // .........y...\..
    0BC0: B2 44 00 00 2D 31 00 00 C5 21 00 00 F4 15 00 00  // .D..-1...!......
    0BD0: 5E 13 00 00 FE FF 02 00 80 BB 00 00 00 DC 05 00  // ^...............
    0BE0: 08 00 20 00 16 00 18 00 03 00 00 00 01 00 00 00  // .. .............
    0BF0: 00 00 10 00 80 00 00 AA 00 38 9B 71 68 0B 00 00  // .........8.qh...
    0C00: 01 00 00 00 10 32 FF FF 10 FF FF FF 32 FF FF FF  // .....2......2...
    0C10: FF FF FF FF 03 00 00 00 03 00 00 00 03 00 38 00  // ..............8.
    0C20: 03 00 38 00 03 00 00 00 01 00 00 00 03 13 00 09  // ..8.............
    0C30: 00 00 00 00 03 03 00 00 00 00 00 00 00 00 00 00  // ................
    0C40: 00 00 00 00 00 00 00 00 11 00 00 00 A0 02 04 00  // ................
    0C50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  // ................
    0C60: 00 00 00 00 00 00 00 00 11 00 00 00 AE 03 0E 00  // ................
    0C70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  // ................
    0C80: 00 00 00 00 00 00 00 00 08 00 00 00 AE FF 0F 00  // ................
    0C90: 12 FF 0F 00 FB FD 0F 00 61 FC 0F 00 5A FA 0F 00  // ........a...Z...
    0CA0: 2B F8 0F 00 41 F6 0F 00 20 F5 0F 00 44 F5 0F 00  // +...A... ...D...
    0CB0: F4 F6 0F 00 25 FA 0F 00 65 FE 0F 00 E0 02 00 00  // ....%...e.......
    0CC0: 8F 06 00 00 76 08 00 00 F1 07 00 00 F5 04 00 00  // ....v...........
    0CD0: 2A 00 00 00 D4 FA 0F 00 8A F6 0F 00 BF F4 0F 00  // *...............
    0CE0: 4F F6 0F 00 20 FB 0F 00 0F 02 00 00 29 09 00 00  // O... .......)...
    0CF0: 2D 0E 00 00 40 0F 00 00 92 0B 00 00 BF 03 00 00  // -...@...........
    0D00: CD F9 0F 00 B0 F0 0F 00 6E EB 0F 00 2A EC 0F 00  // ........n...*...
    0D10: 51 F3 0F 00 4F FF 0F 00 CD 0C 00 00 9D 17 00 00  // Q...O...........
    0D20: FC 1B 00 00 D7 17 00 00 A3 0B 00 00 7E FA 0F 00  // ............~...
    0D30: 6F E9 0F 00 F5 DD 0F 00 4D DC 0F 00 EE E5 0F 00  // o.......M.......
    0D40: CE F8 0F 00 B7 0F 00 00 A8 23 00 00 F5 2D 00 00  // .........#...-..
    0D50: 74 2A 00 00 10 19 00 00 2C FE 0F 00 9C E1 0F 00  // t*......,.......
    0D60: 64 CC 0F 00 EE C5 0F 00 7E D1 0F 00 D4 EC 0F 00  // d.......~.......
    0D70: 71 10 00 00 98 31 00 00 7E 45 00 00 C9 44 00 00  // q....1..~E...D..
    0D80: 24 2E 00 00 28 07 00 00 0E DB 0F 00 81 B7 0F 00  // $...(...........
    0D90: 6B A8 0F 00 08 B4 0F 00 84 D8 0F 00 02 0C 00 00  // k...............
    0DA0: 37 3F 00 00 E8 61 00 00 07 68 00 00 C5 4D 00 00  // 7?...a...h...M..
    0DB0: 54 19 00 00 8C D9 0F 00 C8 A1 0F 00 0F 84 0F 00  // T...............
    0DC0: 52 8B 0F 00 8C B7 0F 00 23 FD 0F 00 DB 47 00 00  // R.......#....G..
    0DD0: B1 80 00 00 E3 94 00 00 08 7C 00 00 41 3B 00 00  // .........|..A;..
    0DE0: 5E E4 0F 00 01 91 0F 00 1E 5B 0F 00 F4 54 0F 00  // ^........[...T..
    0DF0: 07 83 0F 00 0B DA 0F 00 8F 41 00 00 D0 9A 00 00  // .........A......
    0E00: D6 C9 00 00 16 BE 00 00 0B 78 00 00 DD 09 00 00  // .........x......
    0E10: BA 92 0F 00 06 36 0F 00 ED 10 0F 00 5E 31 0F 00  // .....6......^1..
    0E20: 35 91 0F 00 2C 17 00 00 83 9D 00 00 9E FC 00 00  // 5...,...........
    0E30: 95 16 01 00 5B E0 00 00 BF 65 00 00 ED C6 0F 00  // ....[....e......
    0E40: F4 2F 0F 00 96 CC 0E 00 C9 BB 0E 00 68 06 0F 00  // ./..........h...
    0E50: E7 9B 0F 00 01 56 00 00 9E 02 01 00 40 71 01 00  // .....V......@q..
    0E60: 65 80 01 00 28 27 01 00 74 78 00 00 DB 9E 0F 00  // e...('..tx......
    0E70: 02 D2 0E 00 6C 48 0E 00 4D 29 0E 00 0F 82 0E 00  // ....lH..M)......
    0E80: 4A 42 0F 00 29 3F 00 00 68 3D 01 00 61 FF 01 00  // JB..)?..h=..a...
    0E90: B2 53 02 00 FA 20 02 00 E1 6B 01 00 38 56 00 00  // .S... ...k..8V..
    0EA0: 98 17 0F 00 65 F1 0D 00 1A 21 0D 00 F9 D3 0C 00  // ....e....!......
    0EB0: B5 1E 0D 00 89 FA 0D 00 02 48 0F 00 56 D6 00 00  // .........H..V...
    0EC0: 63 6D 02 00 08 D8 03 00 C3 EC 04 00 15 93 05 00  // cm..............
    0ED0: 20 C5 05 00 B6 8D 05 00 D6 03 05 00 DD 44 04 00  //  ............D..
    0EE0: CB 6E 03 00 9A 9B 02 00 5D DE 01 00 34 42 01 00  // .n......]...4B..
    0EF0: E0 CA 00 00 69 76 00 00 40 3F 00 00 4E 1E 00 00  // ....iv..@?..N...
    0F00: 95 0C 00 00 3B 04 00 00 F9 00 00 00 61 F9 0F 00  // ....;.......a...
    0F10: 23 08 00 00 4F 08 00 00 39 0A 00 00 21 0D 00 00  // #...O...9...!...
    0F20: A8 10 00 00 9A 14 00 00 CC 18 00 00 15 1D 00 00  // ................
    0F30: 4D 21 00 00 43 25 00 00 C8 28 00 00 AA 2B 00 00  // M!..C%...(...+..
    0F40: B8 2D 00 00 C6 2E 00 00 AC 2E 00 00 4C 2D 00 00  // .-..........L-..
    0F50: 90 2A 00 00 72 26 00 00 F9 20 00 00 3B 1A 00 00  // .*..r&... ..;...
    0F60: 5C 12 00 00 94 09 00 00 25 00 00 00 62 F6 0F 00  // \.......%...b...
    0F70: A3 EC 0F 00 4C E3 0F 00 BE DA 0F 00 64 D3 0F 00  // ....L.......d...
    0F80: 94 CD 0F 00 A4 C9 0F 00 DD C7 0F 00 6B C8 0F 00  // ............k...
    0F90: 6E CB 0F 00 E6 D0 0F 00 BB D8 0F 00 B9 E2 0F 00  // n...............
    0FA0: 8F EE 0F 00 D5 FB 0F 00 0C 0A 00 00 A3 18 00 00  // ................
    0FB0: FC 26 00 00 74 34 00 00 65 40 00 00 36 4A 00 00  // .&..t4..e@..6J..
    0FC0: 5A 51 00 00 5A 55 00 00 DF 55 00 00 B2 52 00 00  // ZQ..ZU...U...R..
    0FD0: C3 4B 00 00 2C 41 00 00 32 33 00 00 42 22 00 00  // .K..,A..23..B"..
    0FE0: F3 0E 00 00 FB F9 0F 00 30 E4 0F 00 78 CE 0F 00  // ........0...x...
    0FF0: C6 B9 0F 00 0F A7 0F 00 3A 97 0F 00 1E 8B 0F 00  // ........:.......
    1000: 6E 83 0F 00 B7 80 0F 00 55 83 0F 00 6E 8B 0F 00  // n.......U...n...
    1010: EA 98 0F 00 78 AB 0F 00 88 C2 0F 00 52 DD 0F 00  // ....x.......R...
    1020: DF FA 0F 00 0A 1A 00 00 92 39 00 00 23 58 00 00  // .........9..#X..
    1030: 65 74 00 00 0C 8D 00 00 E3 A0 00 00 DC AE 00 00  // et..............
    1040: 1F B6 00 00 14 B6 00 00 6B AE 00 00 23 9F 00 00  // ........k...#...
    1050: 8D 88 00 00 4C 6B 00 00 50 48 00 00 D3 20 00 00  // ....Lk..PH... ..
    1060: 47 F6 0F 00 4F CA 0F 00 AE 9E 0F 00 33 75 0F 00  // G...O.......3u..
    1070: A8 4F 0F 00 C0 2F 0F 00 02 17 0F 00 BA 06 0F 00  // .O.../..........
    1080: E6 FF 0E 00 2D 03 0F 00 D3 10 0F 00 B4 28 0F 00  // ....-........(..
    1090: 42 4A 0F 00 86 74 0F 00 2A A6 0F 00 81 DD 0F 00  // BJ...t..*.......
    10A0: 96 18 00 00 3D 55 00 00 28 91 00 00 FE C9 00 00  // ....=U..(.......
    10B0: 6F FD 00 00 4E 29 01 00 A5 4B 01 00 CB 62 01 00  // o...N)...K...b..
    10C0: 75 6D 01 00 C4 6A 01 00 52 5A 01 00 38 3C 01 00  // um...j..RZ..8<..
    10D0: 0D 11 01 00 E9 D9 00 00 56 98 00 00 4A 4E 00 00  // ........V...JN..
    10E0: 17 FE 0F 00 51 AA 0F 00 C4 55 0F 00 50 03 0F 00  // ....Q....U..P...
    10F0: D6 B5 0E 00 20 70 0E 00 C8 34 0E 00 20 06 0E 00  // .... p...4.. ...
    1100: 1C E6 0D 00 4B D6 0D 00 BD D7 0D 00 03 EB 0D 00  // ....K...........
    1110: 2A 10 0E 00 B5 46 0E 00 AB 8D 0E 00 97 E3 0E 00  // *....F..........
    1120: 99 46 0F 00 79 B4 0F 00 B3 2A 00 00 91 A6 00 00  // .F..y....*......
    1130: 3C 25 01 00 D9 A3 01 00 98 1F 02 00 CC 95 02 00  // <%..............
    1140: 00 04 03 00 03 68 03 00 F8 BF 03 00 63 0A 04 00  // .....h......c...
    1150: 28 46 04 00 9B 72 04 00 76 8F 04 00 D2 9C 04 00  // (F...r..v.......
    1160: 35 9B 04 00 71 8B 04 00 A5 6E 04 00 32 46 04 00  // 5...q....n..2F..
    1170: A6 13 04 00 B3 D8 03 00 1B 97 03 00 A6 50 03 00  // .............P..
    1180: 16 07 03 00 15 BC 02 00 31 71 02 00 CB 27 02 00  // ........1q...'..
    1190: 1D E1 01 00 2A 9E 01 00 C1 5F 01 00 7C 26 01 00  // ....*...._..|&..
    11A0: C0 F2 00 00 C2 C4 00 00 8B 9C 00 00 FB 79 00 00  // .............y..
    11B0: D2 5C 00 00 B2 44 00 00 2D 31 00 00 C5 21 00 00  // .\...D..-1...!..
    11C0: F4 15 00 00 5E 13 00 00 01 00 00 00 03 13 00 09  // ....^...........
    11D0: 00 00 00 00 03 03 00 00 00 00 00 00 00 00 00 00  // ................
    11E0: 00 00 00 00 00 00 00 00 11 00 00 00 A0 02 04 00  // ................
    11F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  // ................
    1200: 00 00 00 00 00 00 00 00 11 00 00 00 AE 03 0E 00  // ................
    1210: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  // ................
    1220: 00 00 00 00 00 00 00 00 08 00 00 00 AE FF 0F 00  // ................
    1230: 12 FF 0F 00 FB FD 0F 00 61 FC 0F 00 5A FA 0F 00  // ........a...Z...
    1240: 2B F8 0F 00 41 F6 0F 00 20 F5 0F 00 44 F5 0F 00  // +...A... ...D...
    1250: F4 F6 0F 00 25 FA 0F 00 65 FE 0F 00 E0 02 00 00  // ....%...e.......
    1260: 8F 06 00 00 76 08 00 00 F1 07 00 00 F5 04 00 00  // ....v...........
    1270: 2A 00 00 00 D4 FA 0F 00 8A F6 0F 00 BF F4 0F 00  // *...............
    1280: 4F F6 0F 00 20 FB 0F 00 0F 02 00 00 29 09 00 00  // O... .......)...
    1290: 2D 0E 00 00 40 0F 00 00 92 0B 00 00 BF 03 00 00  // -...@...........
    12A0: CD F9 0F 00 B0 F0 0F 00 6E EB 0F 00 2A EC 0F 00  // ........n...*...
    12B0: 51 F3 0F 00 4F FF 0F 00 CD 0C 00 00 9D 17 00 00  // Q...O...........
    12C0: FC 1B 00 00 D7 17 00 00 A3 0B 00 00 7E FA 0F 00  // ............~...
    12D0: 6F E9 0F 00 F5 DD 0F 00 4D DC 0F 00 EE E5 0F 00  // o.......M.......
    12E0: CE F8 0F 00 B7 0F 00 00 A8 23 00 00 F5 2D 00 00  // .........#...-..
    12F0: 74 2A 00 00 10 19 00 00 2C FE 0F 00 9C E1 0F 00  // t*......,.......
    1300: 64 CC 0F 00 EE C5 0F 00 7E D1 0F 00 D4 EC 0F 00  // d.......~.......
    1310: 71 10 00 00 98 31 00 00 7E 45 00 00 C9 44 00 00  // q....1..~E...D..
    1320: 24 2E 00 00 28 07 00 00 0E DB 0F 00 81 B7 0F 00  // $...(...........
    1330: 6B A8 0F 00 08 B4 0F 00 84 D8 0F 00 02 0C 00 00  // k...............
    1340: 37 3F 00 00 E8 61 00 00 07 68 00 00 C5 4D 00 00  // 7?...a...h...M..
    1350: 54 19 00 00 8C D9 0F 00 C8 A1 0F 00 0F 84 0F 00  // T...............
    1360: 52 8B 0F 00 8C B7 0F 00 23 FD 0F 00 DB 47 00 00  // R.......#....G..
    1370: B1 80 00 00 E3 94 00 00 08 7C 00 00 41 3B 00 00  // .........|..A;..
    1380: 5E E4 0F 00 01 91 0F 00 1E 5B 0F 00 F4 54 0F 00  // ^........[...T..
    1390: 07 83 0F 00 0B DA 0F 00 8F 41 00 00 D0 9A 00 00  // .........A......
    13A0: D6 C9 00 00 16 BE 00 00 0B 78 00 00 DD 09 00 00  // .........x......
    13B0: BA 92 0F 00 06 36 0F 00 ED 10 0F 00 5E 31 0F 00  // .....6......^1..
    13C0: 35 91 0F 00 2C 17 00 00 83 9D 00 00 9E FC 00 00  // 5...,...........
    13D0: 95 16 01 00 5B E0 00 00 BF 65 00 00 ED C6 0F 00  // ....[....e......
    13E0: F4 2F 0F 00 96 CC 0E 00 C9 BB 0E 00 68 06 0F 00  // ./..........h...
    13F0: E7 9B 0F 00 01 56 00 00 9E 02 01 00 40 71 01 00  // .....V......@q..
    1400: 65 80 01 00 28 27 01 00 74 78 00 00 DB 9E 0F 00  // e...('..tx......
    1410: 02 D2 0E 00 6C 48 0E 00 4D 29 0E 00 0F 82 0E 00  // ....lH..M)......
    1420: 4A 42 0F 00 29 3F 00 00 68 3D 01 00 61 FF 01 00  // JB..)?..h=..a...
    1430: B2 53 02 00 FA 20 02 00 E1 6B 01 00 38 56 00 00  // .S... ...k..8V..
    1440: 98 17 0F 00 65 F1 0D 00 1A 21 0D 00 F9 D3 0C 00  // ....e....!......
    1450: B5 1E 0D 00 89 FA 0D 00 02 48 0F 00 56 D6 00 00  // .........H..V...
    1460: 63 6D 02 00 08 D8 03 00 C3 EC 04 00 15 93 05 00  // cm..............
    1470: 20 C5 05 00 B6 8D 05 00 D6 03 05 00 DD 44 04 00  //  ............D..
    1480: CB 6E 03 00 9A 9B 02 00 5D DE 01 00 34 42 01 00  // .n......]...4B..
    1490: E0 CA 00 00 69 76 00 00 40 3F 00 00 4E 1E 00 00  // ....iv..@?..N...
    14A0: 95 0C 00 00 3B 04 00 00 F9 00 00 00 61 F9 0F 00  // ....;.......a...
    14B0: 23 08 00 00 4F 08 00 00 39 0A 00 00 21 0D 00 00  // #...O...9...!...
    14C0: A8 10 00 00 9A 14 00 00 CC 18 00 00 15 1D 00 00  // ................
    14D0: 4D 21 00 00 43 25 00 00 C8 28 00 00 AA 2B 00 00  // M!..C%...(...+..
    14E0: B8 2D 00 00 C6 2E 00 00 AC 2E 00 00 4C 2D 00 00  // .-..........L-..
    14F0: 90 2A 00 00 72 26 00 00 F9 20 00 00 3B 1A 00 00  // .*..r&... ..;...
    1500: 5C 12 00 00 94 09 00 00 25 00 00 00 62 F6 0F 00  // \.......%...b...
    1510: A3 EC 0F 00 4C E3 0F 00 BE DA 0F 00 64 D3 0F 00  // ....L.......d...
    1520: 94 CD 0F 00 A4 C9 0F 00 DD C7 0F 00 6B C8 0F 00  // ............k...
    1530: 6E CB 0F 00 E6 D0 0F 00 BB D8 0F 00 B9 E2 0F 00  // n...............
    1540: 8F EE 0F 00 D5 FB 0F 00 0C 0A 00 00 A3 18 00 00  // ................
    1550: FC 26 00 00 74 34 00 00 65 40 00 00 36 4A 00 00  // .&..t4..e@..6J..
    1560: 5A 51 00 00 5A 55 00 00 DF 55 00 00 B2 52 00 00  // ZQ..ZU...U...R..
    1570: C3 4B 00 00 2C 41 00 00 32 33 00 00 42 22 00 00  // .K..,A..23..B"..
    1580: F3 0E 00 00 FB F9 0F 00 30 E4 0F 00 78 CE 0F 00  // ........0...x...
    1590: C6 B9 0F 00 0F A7 0F 00 3A 97 0F 00 1E 8B 0F 00  // ........:.......
    15A0: 6E 83 0F 00 B7 80 0F 00 55 83 0F 00 6E 8B 0F 00  // n.......U...n...
    15B0: EA 98 0F 00 78 AB 0F 00 88 C2 0F 00 52 DD 0F 00  // ....x.......R...
    15C0: DF FA 0F 00 0A 1A 00 00 92 39 00 00 23 58 00 00  // .........9..#X..
    15D0: 65 74 00 00 0C 8D 00 00 E3 A0 00 00 DC AE 00 00  // et..............
    15E0: 1F B6 00 00 14 B6 00 00 6B AE 00 00 23 9F 00 00  // ........k...#...
    15F0: 8D 88 00 00 4C 6B 00 00 50 48 00 00 D3 20 00 00  // ....Lk..PH... ..
    1600: 47 F6 0F 00 4F CA 0F 00 AE 9E 0F 00 33 75 0F 00  // G...O.......3u..
    1610: A8 4F 0F 00 C0 2F 0F 00 02 17 0F 00 BA 06 0F 00  // .O.../..........
    1620: E6 FF 0E 00 2D 03 0F 00 D3 10 0F 00 B4 28 0F 00  // ....-........(..
    1630: 42 4A 0F 00 86 74 0F 00 2A A6 0F 00 81 DD 0F 00  // BJ...t..*.......
    1640: 96 18 00 00 3D 55 00 00 28 91 00 00 FE C9 00 00  // ....=U..(.......
    1650: 6F FD 00 00 4E 29 01 00 A5 4B 01 00 CB 62 01 00  // o...N)...K...b..
    1660: 75 6D 01 00 C4 6A 01 00 52 5A 01 00 38 3C 01 00  // um...j..RZ..8<..
    1670: 0D 11 01 00 E9 D9 00 00 56 98 00 00 4A 4E 00 00  // ........V...JN..
    1680: 17 FE 0F 00 51 AA 0F 00 C4 55 0F 00 50 03 0F 00  // ....Q....U..P...
    1690: D6 B5 0E 00 20 70 0E 00 C8 34 0E 00 20 06 0E 00  // .... p...4.. ...
    16A0: 1C E6 0D 00 4B D6 0D 00 BD D7 0D 00 03 EB 0D 00  // ....K...........
    16B0: 2A 10 0E 00 B5 46 0E 00 AB 8D 0E 00 97 E3 0E 00  // *....F..........
    16C0: 99 46 0F 00 79 B4 0F 00 B3 2A 00 00 91 A6 00 00  // .F..y....*......
    16D0: 3C 25 01 00 D9 A3 01 00 98 1F 02 00 CC 95 02 00  // <%..............
    16E0: 00 04 03 00 03 68 03 00 F8 BF 03 00 63 0A 04 00  // .....h......c...
    16F0: 28 46 04 00 9B 72 04 00 76 8F 04 00 D2 9C 04 00  // (F...r..v.......
    1700: 35 9B 04 00 71 8B 04 00 A5 6E 04 00 32 46 04 00  // 5...q....n..2F..
    1710: A6 13 04 00 B3 D8 03 00 1B 97 03 00 A6 50 03 00  // .............P..
    1720: 16 07 03 00 15 BC 02 00 31 71 02 00 CB 27 02 00  // ........1q...'..
    1730: 1D E1 01 00 2A 9E 01 00 C1 5F 01 00 7C 26 01 00  // ....*...._..|&..
    1740: C0 F2 00 00 C2 C4 00 00 8B 9C 00 00 FB 79 00 00  // .............y..
    1750: D2 5C 00 00 B2 44 00 00 2D 31 00 00 C5 21 00 00  // .\...D..-1...!..
    1760: F4 15 00 00 5E 13 00 00 00 AB 00 00 00 03 01 86  // ....^...........
    1770: 80 34 AE 01 00 01 00 00 00 04 00 00 00 00 00 00  // .4..............
    1780: 01 FE FF 02 00 80 BB 00 00 00 DC 05 00 08 00 20  // ............... 
    1790: 00 16 00 18 00 03 00 00 00 01 00 00 00 00 00 10  // ................
    17A0: 00 80 00 00 AA 00 38 9B 71 54 00 00 00 00 00 00  // ......8.qT......
    17B0: 00 10 FF FF FF 32 FF FF FF 10 32 FF FF 10 32 FF  // .....2....2...2.
    17C0: FF 10 32 FF FF 10 32 FF FF 10 32 FF FF 10 32 FF  // ..2...2...2...2.
    17D0: FF 37 04 D0 83 00 00 70 C0 00 00 00 00 04 00 01  // .7.....p........
    17E0: 02 0F 00 00 00 0F 00 00 00 02 40 00 00 04 00 00  // ..........@.....
    17F0: 00 00 0F 07 07 20 00 00 00 01 00 00 00 FF 0F 00  // ..... ..........
    1800: 00 01 49 4E 54 33 34 43 32 00 00 00 00 00 00 00  // ..INT34C2.......
    1810: 00 00 00 01 AC 00 00 00 03 01 86 80 34 AE 01 00  // ............4...
    1820: 01 00 00 00 04 00 00 01 00 00 00 01 01 FE FF 02  // ................
    1830: 00 80 BB 00 00 00 DC 05 00 08 00 20 00 16 00 18  // ........... ....
    1840: 00 03 00 00 00 01 00 00 00 00 00 10 00 80 00 00  // ................
    1850: AA 00 38 9B 71 54 00 00 00 00 00 00 00 10 FF FF  // ..8.qT..........
    1860: FF 32 FF FF FF 10 32 FF FF 10 32 FF FF 10 32 FF  // .2....2...2...2.
    1870: FF 10 32 FF FF 10 32 FF FF 10 32 FF FF 37 04 D0  // ..2...2...2..7..
    1880: 83 00 00 70 C0 00 00 00 00 04 00 01 02 0F 00 00  // ...p............
    1890: 00 0F 00 00 00 02 40 00 00 04 00 00 00 00 0F 07  // ......@.........
    18A0: 07 20 00 00 00 01 00 00 00 FF 0F 00 00 01 49 4E  // . ............IN
    18B0: 54 33 34 43 32 00 00 00 00 00 00 00 00 00 00 01  // T34C2...........
    18C0: AB 00 00 00 03 01 86 80 34 AE 01 00 01 00 00 00  // ........4.......
    18D0: 04 01 00 00 00 00 00 01 FE FF 02 00 80 BB 00 00  // ................
    18E0: 00 DC 05 00 08 00 20 00 16 00 18 00 03 00 00 00  // ...... .........
    18F0: 01 00 00 00 00 00 10 00 80 00 00 AA 00 38 9B 71  // .............8.q
    1900: 54 00 00 00 00 00 00 00 10 FF FF FF 10 FF FF FF  // T...............
    1910: 10 FF FF FF 10 FF FF FF 10 FF FF FF 10 FF FF FF  // ................
    1920: 10 FF FF FF 10 FF FF FF 37 04 D0 83 00 00 70 C0  // ........7.....p.
    1930: 00 00 00 00 04 00 01 02 0F 00 00 00 0F 00 00 00  // ................
    1940: 02 40 00 00 04 00 00 00 00 0F 07 07 20 00 00 00  // .@.......... ...
    1950: 01 00 00 00 FF 0F 00 00 01 49 4E 54 33 34 43 32  // .........INT34C2
    1960: 00 00 00 00 00 00 00 00 00 00 01 04 00 00 00 DE  // ................
    1970: AD BE EF                                         // ...
plbossart commented 7 months ago

ha, that's interesting, thanks @mchehab

Can you share the nhlt.dat, a more recent version of iasl should give a better printout with each endpoint listed.

mchehab commented 7 months ago

I guess I can't share .dat here, as github doesn't like sharing binaries.

Yet, from the logs produced by sof-audio-pci-intel-cnl,, it sounds this is a good way to detect it:

machine with ES8336:

[    4.912285] sof-audio-pci-intel-cnl 0000:00:1f.3: DSP detected with PCI class/subclass/prog-if info 0x040100
[    4.912340] sof-audio-pci-intel-cnl 0000:00:1f.3: enabling device (0000 -> 0002)
[    4.912463] sof-audio-pci-intel-cnl 0000:00:1f.3: DSP detected with PCI class/subclass/prog-if 0x040100
[    4.912505] sof-audio-pci-intel-cnl 0000:00:1f.3: bound 0000:00:02.0 (ops i915_audio_component_bind_ops [i915])
[    4.919447] sof-audio-pci-intel-cnl 0000:00:1f.3: use msi interrupt mode
[    4.931329] sof-audio-pci-intel-cnl 0000:00:1f.3: NHLT_DEVICE_I2S detected, ssp_mask 0x1
[    4.931333] sof-audio-pci-intel-cnl 0000:00:1f.3: Overriding topology with MCLK mask 0x1 from NHLT
[    4.931335] sof-audio-pci-intel-cnl 0000:00:1f.3: hda codecs found, mask 4
[    4.950220] sof-audio-pci-intel-cnl 0000:00:1f.3: Firmware paths/files for ipc type 0:
[    4.950222] sof-audio-pci-intel-cnl 0000:00:1f.3:  Firmware file:     intel/sof/sof-cml.ri
[    4.950223] sof-audio-pci-intel-cnl 0000:00:1f.3:  Topology file:     intel/sof-tplg/sof-cml-es8336-dmic2ch-ssp0.tplg
[    4.966127] sof-audio-pci-intel-cnl 0000:00:1f.3: Firmware info: version 2:2:0-57864
[    4.966129] sof-audio-pci-intel-cnl 0000:00:1f.3: Firmware: ABI 3:22:1 Kernel ABI 3:23:0
[    4.966133] sof-audio-pci-intel-cnl 0000:00:1f.3: unknown sof_ext_man header type 3 size 0x30
[    5.066596] sof-audio-pci-intel-cnl 0000:00:1f.3: Firmware info: version 2:2:0-57864
[    5.066598] sof-audio-pci-intel-cnl 0000:00:1f.3: Firmware: ABI 3:22:1 Kernel ABI 3:23:0
[    5.070760] sof-audio-pci-intel-cnl 0000:00:1f.3: Topology: ABI 3:20:1 Kernel ABI 3:23:0

The NHLT messages there detected an endpoint with I2S on it:

[    4.931329] sof-audio-pci-intel-cnl 0000:00:1f.3: NHLT_DEVICE_I2S detected, ssp_mask 0x1

Now, the machine with AC97 reports, instead, with unpatched 6.8.6-300.fc40.x86_64 kernel:

kern  :info  : [ter abr 23 00:09:23 2024] sof-audio-pci-intel-cnl 0000:00:1f.3: DSP detected with PCI class/subclass/prog-if info 0x040380
kern  :info  : [ter abr 23 00:09:23 2024] sof-audio-pci-intel-cnl 0000:00:1f.3: enabling device (0000 -> 0002)
kern  :info  : [ter abr 23 00:09:23 2024] sof-audio-pci-intel-cnl 0000:00:1f.3: DSP detected with PCI class/subclass/prog-if 0x040380
kern  :info  : [ter abr 23 00:09:23 2024] sof-audio-pci-intel-cnl 0000:00:1f.3: bound 0000:00:02.0 (ops i915_audio_component_bind_ops [i915])
kern  :info  : [ter abr 23 00:09:23 2024] sof-audio-pci-intel-cnl 0000:00:1f.3: use msi interrupt mode
kern  :info  : [ter abr 23 00:09:23 2024] sof-audio-pci-intel-cnl 0000:00:1f.3: hda codecs found, mask 5
kern  :info  : [ter abr 23 00:09:23 2024] sof-audio-pci-intel-cnl 0000:00:1f.3: Firmware paths/files for ipc type 0:
kern  :info  : [ter abr 23 00:09:23 2024] sof-audio-pci-intel-cnl 0000:00:1f.3:  Firmware file:     intel/sof/sof-cml.ri
kern  :info  : [ter abr 23 00:09:23 2024] sof-audio-pci-intel-cnl 0000:00:1f.3:  Topology file:     intel/sof-tplg/sof-cml-es8336
kern  :info  : [ter abr 23 00:09:23 2024] sof-audio-pci-intel-cnl 0000:00:1f.3: Firmware info: version 2:2:0-57864
kern  :info  : [ter abr 23 00:09:23 2024] sof-audio-pci-intel-cnl 0000:00:1f.3: Firmware: ABI 3:22:1 Kernel ABI 3:23:0
kern  :info  : [ter abr 23 00:09:23 2024] sof-audio-pci-intel-cnl 0000:00:1f.3: unknown sof_ext_man header type 3 size 0x30
kern  :info  : [ter abr 23 00:09:23 2024] sof-audio-pci-intel-cnl 0000:00:1f.3: Firmware info: version 2:2:0-57864
kern  :info  : [ter abr 23 00:09:23 2024] sof-audio-pci-intel-cnl 0000:00:1f.3: Firmware: ABI 3:22:1 Kernel ABI 3:23:0

No message related to NHLT, meaning that the logic at check_nhlt_ssp_mask() function from sound/soc/sof/intel/hda.c was unable to detect an endpoint with I2S data filled.

mchehab commented 7 months ago

It sounds that, if we add a function similar to this at sound/hda/intel-dsp-config.c:

diff --git a/sound/hda/intel-dsp-config.c b/sound/hda/intel-dsp-config.c
index 6a384b922e4f..85d7b9b98237 100644
--- a/sound/hda/intel-dsp-config.c
+++ b/sound/hda/intel-dsp-config.c
@@ -568,6 +568,22 @@ static const struct config_entry *snd_intel_dsp_find_config
    return NULL;
 }

+static int snd_intel_dsp_has_sof_i2s_endpoint(struct pci_dev *pci)
+{
+   struct nhlt_acpi_table *nhlt;
+   int ret = 0;
+
+   nhlt = intel_nhlt_init(&pci->dev);
+        if (nhlt) {
+       if (intel_nhlt_has_endpoint_type(nhlt, NHLT_LINK_SSP))
+           if (intel_nhlt_ssp_endpoint_mask(nhlt, NHLT_DEVICE_I2S))
+               ret = 1;
+
+       intel_nhlt_free(nhlt);
+   }
+   return ret;
+}
+
 static int snd_intel_dsp_check_dmic(struct pci_dev *pci)
 {
    struct nhlt_acpi_table *nhlt;
@@ -647,8 +665,11 @@ int snd_intel_dsp_driver_probe(struct pci_dev *pci)

    /* find the configuration for the specific device */
    cfg = snd_intel_dsp_find_config(pci, config_table, ARRAY_SIZE(config_table));
-   if (!cfg)
-       return SND_INTEL_DSP_DRIVER_ANY;
+   if (!cfg) {
+       if (snd_intel_dsp_has_sof_i2s_endpoint(pci))
+           return SND_INTEL_DSP_DRIVER_ANY;
+       return SND_INTEL_DSP_DRIVER_LEGACY;
+   }

    if (cfg->flags & FLAG_SOF) {
        if (cfg->flags & FLAG_SOF_ONLY_IF_SOUNDWIRE &&

This can be autodetected.

plbossart commented 7 months ago

so the rule should be (in that order)

a) the number of endpoints is > 0 b) the number of ssp_endpoints is > 0 c) the number of ssp_endpoints with the device type AE34 (codec) > 0

From the Matebook DSP I can these those values which seem correct

Link Type : 03 [Type SSP]
Vendor Id : 8086
Device Id : AE34 [I2S/TDM Codecs]
Device Type : 04

Those are a clear sign of an SSP link enabled.

plbossart commented 7 months ago

except that of course ACPI tells us of a different value for device Id haha

define ACPI_NHLT_I2S_TDM_CODECS 0xAE23

So I guess we should only use

Link Type : 03 [Type SSP]
Vendor Id : 8086
Device Type : 04
mchehab commented 7 months ago

Could you prepare a patch? Mine didn't work, as the checks I added weren't enough.

plbossart commented 7 months ago

Can you try this patch @mchehab:

https://github.com/plbossart/sound/commits/fix/es8336-detection/

Compile-tested only.

mchehab commented 7 months ago

Can you try this patch @mchehab:

https://github.com/plbossart/sound/commits/fix/es8336-detection/

Compile-tested only.

It worked fine at the notebook with AC97. Didn't test with SOF.

Feel free to add to the patch a comment like:

Tested on Huawei Matebook D14 (NBLB-WAX9N) using an AC97
codec linked to HDA.

Tested-by: Mauro Carvalho Chehab <mchehab@kernel.org>

As a reference, those are the logs with the patch applied:

[    7.858249] snd_hda_intel 0000:00:1f.3: DSP detected with PCI class/subclass/prog-if info 0x040380
[    7.858312] snd_hda_intel 0000:00:1f.3: snd_intel_dsp_find_config: no valid SSP found for HID ESSX8336, skipped
[    7.858470] snd_hda_intel 0000:00:1f.3: enabling device (0000 -> 0002)
[    7.859146] snd_hda_intel 0000:00:1f.3: bound 0000:00:02.0 (ops i915_audio_component_bind_ops [i915])
[    7.928616] snd_hda_codec_realtek hdaudioC0D0: autoconfig for ALC256: line_outs=1 (0x14/0x0/0x0/0x0/0x0) type:speaker
[    7.928622] snd_hda_codec_realtek hdaudioC0D0:    speaker_outs=0 (0x0/0x0/0x0/0x0/0x0)
[    7.928626] snd_hda_codec_realtek hdaudioC0D0:    hp_outs=1 (0x21/0x0/0x0/0x0/0x0)
[    7.928628] snd_hda_codec_realtek hdaudioC0D0:    mono: mono_out=0x0
[    7.928630] snd_hda_codec_realtek hdaudioC0D0:    inputs:
[    7.928632] snd_hda_codec_realtek hdaudioC0D0:      Headset Mic=0x19
[    7.928634] snd_hda_codec_realtek hdaudioC0D0:      Internal Mic=0x12
[    8.017903] input: HDA Intel PCH Headset Mic as /devices/pci0000:00/0000:00:1f.3/sound/card0/input35
[    8.017958] input: HDA Intel PCH Headphone as /devices/pci0000:00/0000:00:1f.3/sound/card0/input36
[    8.018008] input: HDA Intel PCH HDMI/DP,pcm=3 as /devices/pci0000:00/0000:00:1f.3/sound/card0/input37
[    8.018054] input: HDA Intel PCH HDMI/DP,pcm=7 as /devices/pci0000:00/0000:00:1f.3/sound/card0/input38
[    8.018099] input: HDA Intel PCH HDMI/DP,pcm=8 as /devices/pci0000:00/0000:00:1f.3/sound/card0/input39