ASoC: tlv320aic32x4: Register clocks before registering component
authorAnnaliese McDermond <nh6z@nh6z.net>
Wed, 31 Mar 2021 18:21:38 +0000 (18:21 +0000)
committerPhil Elwell <8911409+pelwell@users.noreply.github.com>
Mon, 12 Apr 2021 07:46:14 +0000 (08:46 +0100)
Commit 1ca1156cfd69 upstream

Clock registration must be performed before the component is
registered.  aic32x4_component_probe attempts to get all the
clocks right off the bat.  If the component is registered before
the clocks there is a race condition where the clocks may not
be registered by the time aic32x4_componet_probe actually runs.

Fixes: d1c859d314d8 ("ASoC: codec: tlv3204: Increased maximum supported channels")
Cc: stable@vger.kernel.org
Signed-off-by: Annaliese McDermond <nh6z@nh6z.net>
Link: https://lore.kernel.org/r/0101017889850206-dcac4cce-8cc8-4a21-80e9-4e4bef44b981-000000@us-west-2.amazonses.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/tlv320aic32x4.c

index 9e3de9d..e0dbedb 100644 (file)
@@ -1243,6 +1243,10 @@ int aic32x4_probe(struct device *dev, struct regmap *regmap)
        if (ret)
                goto err_disable_regulators;
 
+       ret = aic32x4_register_clocks(dev, aic32x4->mclk_name);
+       if (ret)
+               goto err_disable_regulators;
+
        ret = devm_snd_soc_register_component(dev,
                        &soc_component_dev_aic32x4, &aic32x4_dai, 1);
        if (ret) {
@@ -1250,10 +1254,6 @@ int aic32x4_probe(struct device *dev, struct regmap *regmap)
                goto err_disable_regulators;
        }
 
-       ret = aic32x4_register_clocks(dev, aic32x4->mclk_name);
-       if (ret)
-               goto err_disable_regulators;
-
        return 0;
 
 err_disable_regulators: