mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-03 01:36:52 +09:00
drm/vc4: hdmi: Move audio structure offset checks
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
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user