Hi Marian,
Thanks for the query.
On 1/7/2023 12:17 AM, Marian Postevca wrote:
I have a Huawei Matebook 14 AMD 2021 laptop for which the sound isn't
supported on Linux. On further investigation in Windows and ACPI tables
I could determine that this particular SKU has an ES8336 codec connected
to the CPU ACP module.
The CPU of my laptop is an AMD Ryzen 5 5500U which seems to be codenamed
Lucienne and is a derivation of the Renoir family.
Acording to lspci the ACP is revision 1:
03:00.5 Multimedia controller [0480]: Advanced Micro Devices, Inc. [AMD] Raven/Raven2/FireFlight/Renoir Audio Processor [1022:15e2] (rev 01)
Subsystem: Device [1e83:3e4d]
Kernel driver in use: snd_rn_pci_acp3x
Kernel modules: snd_pci_acp3x, snd_rn_pci_acp3x, snd_pci_acp5x,
snd_pci_acp6x, snd_acp_pci, snd_rpl_pci_acp6x,
snd_sof_amd_renoir
I have written a machine driver for this platform and managed to make
the sound and internal microphone work. I am looking to integrate this
support but there are some issues with the current implementation of ACP
support.
As far as I can tell there are 4 directions I could take to add support:
1. A standalone machine driver in sound/soc/amd that uses the platform
drivers from sound/soc/amd/raven/
2. An embedded driver in sound/soc/amd/acp/acp-legacy-mach.c
3. A standalone machine driver in sound/soc/amd that uses the platform
drivers from sound/soc/amd/renoir
4. Use the SOF infrastructure
Now as far as I can tell, all of these directions have issues:
1. The pci driver from sound/soc/amd/raven/pci-acp3x.c doesn't support Lucienne
since it blocks rev 1 devices in :
/* Raven device detection */
if (pci->revision != 0x00)
return -ENODEV;
This is the approach I took and just changed the check to add support
for rev 1.
The sound and internal microphone worked ok and I didn't encounter any
issues with it. Of course I don't know the internals of ACP and
don't know what are the differences between rev 0 and rev 1.
Not recommended
2. This approach could work but I would need to change the structure
acp_card_drvdata and struct snd_soc_dapm_widget acp_widgets,
to add proper support for jack handling (and maybe some other
modifications).
This driver seems to support rev 1 (in sound/soc/amd/acp/acp-pci.c):
switch (pci->revision) {
case 0x01:
chip->name = "acp_asoc_renoir";
chip->acp_rev = ACP3X_DEV;
break;
Also from the module description it seems that these drivers are
meant only for chromebook support.
Recommended. Please add below code
{
.flags = FLAG_AMD_LEGACY,
.device = ACP_PCI_DEV_ID,
.dmi_table = (const struct dmi_system_id []) {
{
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, ""),///change accordingly DMI_MATCH(DMI_PRODUCT_NAME, ""),///change accordingly
},
},
at https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git/tree/sound/soc/amd/acp-config.c#n50
As you said add the structure static struct acp_card_drvdata and also add the required dai_link of codec.
3. This seems like it would the best approach in theory, but the problem
is that the drivers inside only seem to add support for DMIC.
4. I tried to use SOF early when I started tinkering, but I always got a
timeout during init phase when loading the renoir firmware.
Could you please send the error, we will check and let you know what is missing.