ASoC: wm97xx: fix uninitialized regmap pointer problem
gcc notices that without either the ac97 bus or the pdata, we never
initialize the regmap pointer, which leads to an uninitialized variable
access:
sound/soc/codecs/wm9712.c: In function 'wm9712_soc_probe':
sound/soc/codecs/wm9712.c:666:2: error: 'regmap' may be used uninitialized in this function [-Werror=maybe-uninitialized]
Since that configuration is invalid, it's better to return an error
here. I tried to avoid adding complexity to the conditions, and turned
the #ifdef into a regular if(IS_ENABLED()) check for readability.
This in turn requires moving some header file declarations out of
an #ifdef.
The same code is used in three drivers, all of which I'm changing
the same way.
Fixes: 2ed1a8e0ce
("ASoC: wm9712: add ac97 new bus support")
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:

committed by
Mark Brown

parent
ff60005e45
commit
576ce4075b
@@ -325,8 +325,7 @@ static int wm9705_soc_probe(struct snd_soc_component *component)
|
||||
if (wm9705->mfd_pdata) {
|
||||
wm9705->ac97 = wm9705->mfd_pdata->ac97;
|
||||
regmap = wm9705->mfd_pdata->regmap;
|
||||
} else {
|
||||
#ifdef CONFIG_SND_SOC_AC97_BUS
|
||||
} else if (IS_ENABLED(CONFIG_SND_SOC_AC97_BUS)) {
|
||||
wm9705->ac97 = snd_soc_new_ac97_component(component, WM9705_VENDOR_ID,
|
||||
WM9705_VENDOR_ID_MASK);
|
||||
if (IS_ERR(wm9705->ac97)) {
|
||||
@@ -339,7 +338,8 @@ static int wm9705_soc_probe(struct snd_soc_component *component)
|
||||
snd_soc_free_ac97_component(wm9705->ac97);
|
||||
return PTR_ERR(regmap);
|
||||
}
|
||||
#endif
|
||||
} else {
|
||||
return -ENXIO;
|
||||
}
|
||||
|
||||
snd_soc_component_set_drvdata(component, wm9705->ac97);
|
||||
@@ -350,14 +350,12 @@ static int wm9705_soc_probe(struct snd_soc_component *component)
|
||||
|
||||
static void wm9705_soc_remove(struct snd_soc_component *component)
|
||||
{
|
||||
#ifdef CONFIG_SND_SOC_AC97_BUS
|
||||
struct wm9705_priv *wm9705 = snd_soc_component_get_drvdata(component);
|
||||
|
||||
if (!wm9705->mfd_pdata) {
|
||||
if (IS_ENABLED(CONFIG_SND_SOC_AC97_BUS) && !wm9705->mfd_pdata) {
|
||||
snd_soc_component_exit_regmap(component);
|
||||
snd_soc_free_ac97_component(wm9705->ac97);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
static const struct snd_soc_component_driver soc_component_dev_wm9705 = {
|
||||
|
Reference in New Issue
Block a user