The cs35l41 driver does not work on several laptop models that lack the _DSD block.

XiaoYan Li lxy.lixiaoyan at gmail.com
Mon Aug 22 08:29:33 CEST 2022


Hi,

Several laptop models employ CSC3551 but lack a corresponding _DSD
block in the ACPI table, including but not limited to:
- Zenbook S 13 OLED (UM5302TA)
- HP Envy x360 ey0xxx
- Lenovo Legion 7i Gen 7
Here are some relevant links:
- https://bugzilla.kernel.org/show_bug.cgi?id=216194
- https://lore.kernel.org/all/20220703053225.2203-1-xw897002528@gmail.com/T/#u
- https://lore.kernel.org/all/20220811152923.10143-1-faenkhauser@gmail.com/T/#u

The following is a snippet of the ACPI table from my laptop (UM5302TA):
---
Device (SPKR)
{
    Name (_HID, "CSC3551")  // _HID: Hardware ID
    Name (_SUB, "10431F12")  // _SUB: Subsystem ID
    Name (_UID, One)  // _UID: Unique ID
    Method (_CRS, 0, NotSerialized)  // _CRS: Current Resource Settings
    {
        Name (RBUF, ResourceTemplate ()
        {
            I2cSerialBusV2 (0x0040, ControllerInitiated, 0x000F4240,
                AddressingMode7Bit, "\\_SB.I2CA",
                0x00, ResourceConsumer, , Exclusive,
                )
            I2cSerialBusV2 (0x0041, ControllerInitiated, 0x000F4240,
                AddressingMode7Bit, "\\_SB.I2CA",
                0x00, ResourceConsumer, , Exclusive,
                )
            GpioIo (Exclusive, PullDown, 0x0000, 0x0000,
IoRestrictionOutputOnly,
                "\\_SB.GPIO", 0x00, ResourceConsumer, ,
                )
                {   // Pin list
                    0x0004
                }
            GpioIo (Exclusive, PullUp, 0x0000, 0x0000, IoRestrictionInputOnly,
                "\\_SB.GPIO", 0x00, ResourceConsumer, ,
                )
                {   // Pin list
                    0x009B
                }
            GpioIo (Shared, PullUp, 0x0064, 0x0000, IoRestrictionInputOnly,
                "\\_SB.GPIO", 0x00, ResourceConsumer, ,
                )
                {   // Pin list
                    0x0009
                }
            GpioInt (Edge, ActiveBoth, Shared, PullUp, 0x0064,
                "\\_SB.GPIO", 0x00, ResourceConsumer, ,
                )
                {   // Pin list
                    0x0009
                }
        })
        Return (RBUF) /* \_SB_.I2CA.SPKR._CRS.RBUF */
    }

    Method (_STA, 0, NotSerialized)  // _STA: Status
    {
        If ((AMPD == Zero))
        {
            Return (Zero)
        }
        Else
        {
            Return (0x0F)
        }
    }

    Method (_DIS, 0, NotSerialized)  // _DIS: Disable Device
    {
    }
}
---

The Cirrus driver for Windows works perfectly. I don't see anything
related to the _DSD stuff in the INF files that came with the driver
(if I read them correctly).
For reference, here are the two INF files from UM5302TA:
https://gist.github.com/lixiaoyan/7e1f11b153b38339007f6ec9aa149f81

I think we should support those devices out of the box, as the Windows
driver does. This problem does not appear to be limited to a single
model; rather, it appears to be a widespread issue. At least, we
should add some quirks for the models listed above.

Thanks.


More information about the Alsa-devel mailing list