]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
ASoC: amd: yc: Fix for enabling DMIC on acp6x via _DSD entry
authorVenkata Prasad Potturu <venkataprasad.potturu@amd.com>
Wed, 27 Nov 2024 11:22:25 +0000 (16:52 +0530)
committerMark Brown <broonie@kernel.org>
Wed, 27 Nov 2024 11:28:24 +0000 (11:28 +0000)
Add condition check to register ACP PDM sound card by reading
_WOV acpi entry.

Fixes: 5426f506b584 ("ASoC: amd: Add support for enabling DMIC on acp6x via _DSD")
Signed-off-by: Venkata Prasad Potturu <venkataprasad.potturu@amd.com>
Link: https://patch.msgid.link/20241127112227.227106-1-venkataprasad.potturu@amd.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/amd/yc/acp6x-mach.c

index 6439c175552af965f45fca034dc6768b7d119203..facd82f0f2519445a6dff471a8dc82cb193ea1b3 100644 (file)
@@ -551,8 +551,14 @@ static int acp6x_probe(struct platform_device *pdev)
        struct acp6x_pdm *machine = NULL;
        struct snd_soc_card *card;
        struct acpi_device *adev;
+       acpi_handle handle;
+       acpi_integer dmic_status;
        int ret;
+       bool is_dmic_enable, wov_en;
 
+       /* IF WOV entry not found, enable dmic based on AcpDmicConnected entry*/
+       is_dmic_enable = false;
+       wov_en = true;
        /* check the parent device's firmware node has _DSD or not */
        adev = ACPI_COMPANION(pdev->dev.parent);
        if (adev) {
@@ -560,9 +566,19 @@ static int acp6x_probe(struct platform_device *pdev)
 
                if (!acpi_dev_get_property(adev, "AcpDmicConnected", ACPI_TYPE_INTEGER, &obj) &&
                    obj->integer.value == 1)
-                       platform_set_drvdata(pdev, &acp6x_card);
+                       is_dmic_enable = true;
        }
 
+       handle = ACPI_HANDLE(pdev->dev.parent);
+       ret = acpi_evaluate_integer(handle, "_WOV", NULL, &dmic_status);
+       if (!ACPI_FAILURE(ret))
+               wov_en = dmic_status;
+
+       if (is_dmic_enable && wov_en)
+               platform_set_drvdata(pdev, &acp6x_card);
+       else
+               return 0;
+
        /* check for any DMI overrides */
        dmi_id = dmi_first_match(yc_acp_quirk_table);
        if (dmi_id)