Skip to content

Commit

Permalink
ASoC: rt5645: add error checking to rt5645_probe function
Browse files Browse the repository at this point in the history
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 <[email protected]>
Signed-off-by: Phillip Potter <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Greg Kroah-Hartman <[email protected]>
  • Loading branch information
PhilPotter authored and gregkh committed May 13, 2021
1 parent 1e0ce84 commit 5e70b8e
Showing 1 changed file with 39 additions and 9 deletions.
48 changes: 39 additions & 9 deletions sound/soc/codecs/rt5645.c
Original file line number Diff line number Diff line change
Expand Up @@ -3388,40 +3388,62 @@ 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;
}

snd_soc_component_force_bias_level(component, SND_SOC_BIAS_OFF);

/* 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)
Expand All @@ -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)
Expand Down

0 comments on commit 5e70b8e

Please sign in to comment.