mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-17 01:04:19 +08:00
ASoC: rt5645: add error checking to rt5645_probe function
Check for return value from various snd_soc_dapm_* calls, as many of them can return errors and this should be handled. Also, reintroduce the allocation failure check for rt5645->eq_param as well. Make all areas where return values are checked lead to the end of the function in the case of an error. Finally, introduce a comment explaining how resources here are actually eventually cleaned up by the caller. Cc: Mark Brown <broonie@kernel.org> Signed-off-by: Phillip Potter <phil@philpotter.co.uk> Link: https://lore.kernel.org/r/20210503115736.2104747-56-gregkh@linuxfoundation.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
1e0ce84215
commit
5e70b8e22b
@ -3388,30 +3388,44 @@ static int rt5645_probe(struct snd_soc_component *component)
|
||||
{
|
||||
struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(component);
|
||||
struct rt5645_priv *rt5645 = snd_soc_component_get_drvdata(component);
|
||||
int ret = 0;
|
||||
|
||||
rt5645->component = component;
|
||||
|
||||
switch (rt5645->codec_type) {
|
||||
case CODEC_TYPE_RT5645:
|
||||
snd_soc_dapm_new_controls(dapm,
|
||||
ret = snd_soc_dapm_new_controls(dapm,
|
||||
rt5645_specific_dapm_widgets,
|
||||
ARRAY_SIZE(rt5645_specific_dapm_widgets));
|
||||
snd_soc_dapm_add_routes(dapm,
|
||||
if (ret < 0)
|
||||
goto exit;
|
||||
|
||||
ret = snd_soc_dapm_add_routes(dapm,
|
||||
rt5645_specific_dapm_routes,
|
||||
ARRAY_SIZE(rt5645_specific_dapm_routes));
|
||||
if (ret < 0)
|
||||
goto exit;
|
||||
|
||||
if (rt5645->v_id < 3) {
|
||||
snd_soc_dapm_add_routes(dapm,
|
||||
ret = snd_soc_dapm_add_routes(dapm,
|
||||
rt5645_old_dapm_routes,
|
||||
ARRAY_SIZE(rt5645_old_dapm_routes));
|
||||
if (ret < 0)
|
||||
goto exit;
|
||||
}
|
||||
break;
|
||||
case CODEC_TYPE_RT5650:
|
||||
snd_soc_dapm_new_controls(dapm,
|
||||
ret = snd_soc_dapm_new_controls(dapm,
|
||||
rt5650_specific_dapm_widgets,
|
||||
ARRAY_SIZE(rt5650_specific_dapm_widgets));
|
||||
snd_soc_dapm_add_routes(dapm,
|
||||
if (ret < 0)
|
||||
goto exit;
|
||||
|
||||
ret = snd_soc_dapm_add_routes(dapm,
|
||||
rt5650_specific_dapm_routes,
|
||||
ARRAY_SIZE(rt5650_specific_dapm_routes));
|
||||
if (ret < 0)
|
||||
goto exit;
|
||||
break;
|
||||
}
|
||||
|
||||
@ -3419,9 +3433,17 @@ static int rt5645_probe(struct snd_soc_component *component)
|
||||
|
||||
/* for JD function */
|
||||
if (rt5645->pdata.jd_mode) {
|
||||
snd_soc_dapm_force_enable_pin(dapm, "JD Power");
|
||||
snd_soc_dapm_force_enable_pin(dapm, "LDO2");
|
||||
snd_soc_dapm_sync(dapm);
|
||||
ret = snd_soc_dapm_force_enable_pin(dapm, "JD Power");
|
||||
if (ret < 0)
|
||||
goto exit;
|
||||
|
||||
ret = snd_soc_dapm_force_enable_pin(dapm, "LDO2");
|
||||
if (ret < 0)
|
||||
goto exit;
|
||||
|
||||
ret = snd_soc_dapm_sync(dapm);
|
||||
if (ret < 0)
|
||||
goto exit;
|
||||
}
|
||||
|
||||
if (rt5645->pdata.long_name)
|
||||
@ -3431,7 +3453,15 @@ static int rt5645_probe(struct snd_soc_component *component)
|
||||
RT5645_HWEQ_NUM, sizeof(struct rt5645_eq_param_s),
|
||||
GFP_KERNEL);
|
||||
|
||||
return 0;
|
||||
if (!rt5645->eq_param)
|
||||
ret = -ENOMEM;
|
||||
exit:
|
||||
/*
|
||||
* If there was an error above, everything will be cleaned up by the
|
||||
* caller if we return an error here. This will be done with a later
|
||||
* call to rt5645_remove().
|
||||
*/
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void rt5645_remove(struct snd_soc_component *component)
|
||||
|
Loading…
Reference in New Issue
Block a user