[RFC] Sound support for Huawei line of AMD laptops using ACP and ES8336 codec

Reddy, V sujith kumar vsujithkumar.reddy at amd.com
Sat Jan 7 07:58:07 CET 2023


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.


>
> So the reason for this email is to get some idea, on how to best add
> support for these laptops.


More information about the Alsa-devel mailing list