[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