drm/vc4: hdmi: Move audio structure offset checks
authorMaxime Ripard <maxime@cerno.tech>
Mon, 11 Jul 2022 17:39:16 +0000 (19:39 +0200)
committerMaxime Ripard <maxime@cerno.tech>
Wed, 13 Jul 2022 08:46:10 +0000 (10:46 +0200)
The HDMI driver unbind hook doesn't have any ALSA-related code anymore, so
let's move the ALSA sanity checks and comments we have to some other part
of the driver dedicated to ALSA.

Acked-by: Thomas Zimmermann <tzimmermann@suse.de>
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
Link: https://lore.kernel.org/r/20220711173939.1132294-47-maxime@cerno.tech
drivers/gpu/drm/vc4/vc4_hdmi.c

index 6275db4..a130b7d 100644 (file)
@@ -2076,6 +2076,26 @@ static int vc4_hdmi_audio_init(struct vc4_hdmi *vc4_hdmi)
        int index, len;
        int ret;
 
+       /*
+        * ASoC makes it a bit hard to retrieve a pointer to the
+        * vc4_hdmi structure. Registering the card will overwrite our
+        * device drvdata with a pointer to the snd_soc_card structure,
+        * which can then be used to retrieve whatever drvdata we want
+        * to associate.
+        *
+        * However, that doesn't fly in the case where we wouldn't
+        * register an ASoC card (because of an old DT that is missing
+        * the dmas properties for example), then the card isn't
+        * registered and the device drvdata wouldn't be set.
+        *
+        * We can deal with both cases by making sure a snd_soc_card
+        * pointer and a vc4_hdmi structure are pointing to the same
+        * memory address, so we can treat them indistinctly without any
+        * issue.
+        */
+       BUILD_BUG_ON(offsetof(struct vc4_hdmi_audio, card) != 0);
+       BUILD_BUG_ON(offsetof(struct vc4_hdmi, audio) != 0);
+
        if (!of_find_property(dev->of_node, "dmas", &len) || !len) {
                dev_warn(dev,
                         "'dmas' DT property is missing or empty, no HDMI audio\n");
@@ -3082,26 +3102,6 @@ err_disable_runtime_pm:
 static void vc4_hdmi_unbind(struct device *dev, struct device *master,
                            void *data)
 {
-       /*
-        * ASoC makes it a bit hard to retrieve a pointer to the
-        * vc4_hdmi structure. Registering the card will overwrite our
-        * device drvdata with a pointer to the snd_soc_card structure,
-        * which can then be used to retrieve whatever drvdata we want
-        * to associate.
-        *
-        * However, that doesn't fly in the case where we wouldn't
-        * register an ASoC card (because of an old DT that is missing
-        * the dmas properties for example), then the card isn't
-        * registered and the device drvdata wouldn't be set.
-        *
-        * We can deal with both cases by making sure a snd_soc_card
-        * pointer and a vc4_hdmi structure are pointing to the same
-        * memory address, so we can treat them indistinctly without any
-        * issue.
-        */
-       BUILD_BUG_ON(offsetof(struct vc4_hdmi_audio, card) != 0);
-       BUILD_BUG_ON(offsetof(struct vc4_hdmi, audio) != 0);
-
        pm_runtime_disable(dev);
 }