]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
ASoC: cs35l41: Steam Deck Shared boost properties quirk
authorLucas Tanure <lucas.tanure@collabora.com>
Thu, 9 Mar 2023 14:00:51 +0000 (14:00 +0000)
committerMark Brown <broonie@kernel.org>
Thu, 9 Mar 2023 14:27:04 +0000 (14:27 +0000)
Add support for Steam Deck bios old properties. If a Steam deck didn't
upgrade the BIOS, the driver should be able to handle the previous
properties for shared boost types.

Signed-off-by: Lucas Tanure <lucas.tanure@collabora.com>
Acked-by: Charles Keepax <ckeepax@opensource.cirrus.com>
Link: https://lore.kernel.org/r/20230309140051.945329-1-lucas.tanure@collabora.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/cs35l41.c

index 1624510d09c0a9391d80191bc31a0ef1dead645f..9ec01a5f09ca6787478b1d47f03e405d6d8981ff 100644 (file)
@@ -1022,9 +1022,21 @@ static int cs35l41_handle_pdata(struct device *dev, struct cs35l41_hw_cfg *hw_cf
        unsigned int val;
        int ret;
 
-       ret = device_property_read_u32(dev, "cirrus,boost-type", &val);
-       if (ret >= 0)
-               hw_cfg->bst_type = val;
+       /* Some ACPI systems received the Shared Boost feature before the upstream driver,
+        * leaving those systems with deprecated _DSD properties.
+        * To correctly configure those systems add shared-boost-active and shared-boost-passive
+        * properties mapped to the correct value in boost-type.
+        * These two are not DT properties and should not be used in new systems designs.
+        */
+       if (device_property_read_bool(dev, "cirrus,shared-boost-active")) {
+               hw_cfg->bst_type = CS35L41_SHD_BOOST_ACTV;
+       } else if (device_property_read_bool(dev, "cirrus,shared-boost-passive")) {
+               hw_cfg->bst_type = CS35L41_SHD_BOOST_PASS;
+       } else {
+               ret = device_property_read_u32(dev, "cirrus,boost-type", &val);
+               if (ret >= 0)
+                       hw_cfg->bst_type = val;
+       }
 
        ret = device_property_read_u32(dev, "cirrus,boost-peak-milliamp", &val);
        if (ret >= 0)