]> git.itanic.dy.fi Git - linux-stable/commitdiff
ASoC: Intel: bytcr_wm5102: Add support for Lenovo Yoga Tab 3 Pro YT3-X90
authorHans de Goede <hdegoede@redhat.com>
Sat, 21 Oct 2023 21:15:29 +0000 (23:15 +0200)
committerMark Brown <broonie@kernel.org>
Tue, 24 Oct 2023 17:03:12 +0000 (18:03 +0100)
The Lenovo Yoga Tab 3 Pro YT3-X90 x86 tablet, which ships with Android
with a custom kernel as factory OS, does not list the used WM5102 codec
inside its DSDT.

So acpi_dev_get_first_match_dev() is going to fail on this board.
Fallback to using "spi-$(mach->id)" as codec device name in this case
to allow bytcr_wm5102 to work on these tablets.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Link: https://lore.kernel.org/r/20231021211534.114991-2-hdegoede@redhat.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/intel/boards/bytcr_wm5102.c

index 643f1d0094c4c511a1594aee10950aa5c5173e2d..fd7d5fdfd3fd1a949f10353e1c2195edd100f0e5 100644 (file)
@@ -413,14 +413,15 @@ static int snd_byt_wm5102_mc_probe(struct platform_device *pdev)
         */
        mach = dev->platform_data;
        adev = acpi_dev_get_first_match_dev(mach->id, NULL, -1);
-       if (!adev) {
-               dev_err(dev, "Error cannot find acpi-dev for codec\n");
-               return -ENOENT;
+       if (adev) {
+               snprintf(codec_name, sizeof(codec_name), "spi-%s", acpi_dev_name(adev));
+               acpi_dev_put(adev);
+       } else {
+               /* Special case for when the codec is missing from the DSTD */
+               strscpy(codec_name, "spi1.0", sizeof(codec_name));
        }
-       snprintf(codec_name, sizeof(codec_name), "spi-%s", acpi_dev_name(adev));
 
        codec_dev = bus_find_device_by_name(&spi_bus_type, NULL, codec_name);
-       acpi_dev_put(adev);
        if (!codec_dev)
                return -EPROBE_DEFER;