Commit 916cccb5 authored by Mark Brown's avatar Mark Brown

ASoC: rt5645: Avoid upgrading static warnings to errors

One of the fixes reverted as part of the UMN fallout was actually fine,
however rather than undoing the revert the process that handled all this
stuff resulted in a patch which attempted to add extra error checks
instead.  Unfortunately this new change wasn't really based on a good
understanding of the subsystem APIs and bypassed the usual patch flow
without ensuring it was reviewed by people with subsystem knowledge and
was merged as a fix rather than during the merge window.

The effect of the new fix is to upgrade what were previously warnings on
static data in the code to hard errors on that data.  If this actually
happens then it would break existing systems, if it doesn't happen then
the change has no effect so this was not a safe change to apply as a fix
to the release candidates.  Since the new code has not been tested and
doesn't in practice improve error handling revert it instead, and also
drop the original revert since the original fix was fine.  This takes
the driver back to what it was in -rc1.

Fixes: 5e70b8e2 ("ASoC: rt5645: add error checking to rt5645_probe function")
Fixes: 1e0ce842 ("Revert "ASoC: rt5645: fix a NULL pointer dereference")
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Phillip Potter <phil@philpotter.co.uk>
Reviewed-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Link: https://lore.kernel.org/r/20210608160713.21040-1-broonie@kernel.orgSigned-off-by: default avatarMark Brown <broonie@kernel.org>
parent c441bfb5
...@@ -3388,44 +3388,30 @@ static int rt5645_probe(struct snd_soc_component *component) ...@@ -3388,44 +3388,30 @@ static int rt5645_probe(struct snd_soc_component *component)
{ {
struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(component); struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(component);
struct rt5645_priv *rt5645 = snd_soc_component_get_drvdata(component); struct rt5645_priv *rt5645 = snd_soc_component_get_drvdata(component);
int ret = 0;
rt5645->component = component; rt5645->component = component;
switch (rt5645->codec_type) { switch (rt5645->codec_type) {
case CODEC_TYPE_RT5645: case CODEC_TYPE_RT5645:
ret = snd_soc_dapm_new_controls(dapm, snd_soc_dapm_new_controls(dapm,
rt5645_specific_dapm_widgets, rt5645_specific_dapm_widgets,
ARRAY_SIZE(rt5645_specific_dapm_widgets)); ARRAY_SIZE(rt5645_specific_dapm_widgets));
if (ret < 0) snd_soc_dapm_add_routes(dapm,
goto exit;
ret = snd_soc_dapm_add_routes(dapm,
rt5645_specific_dapm_routes, rt5645_specific_dapm_routes,
ARRAY_SIZE(rt5645_specific_dapm_routes)); ARRAY_SIZE(rt5645_specific_dapm_routes));
if (ret < 0)
goto exit;
if (rt5645->v_id < 3) { if (rt5645->v_id < 3) {
ret = snd_soc_dapm_add_routes(dapm, snd_soc_dapm_add_routes(dapm,
rt5645_old_dapm_routes, rt5645_old_dapm_routes,
ARRAY_SIZE(rt5645_old_dapm_routes)); ARRAY_SIZE(rt5645_old_dapm_routes));
if (ret < 0)
goto exit;
} }
break; break;
case CODEC_TYPE_RT5650: case CODEC_TYPE_RT5650:
ret = snd_soc_dapm_new_controls(dapm, snd_soc_dapm_new_controls(dapm,
rt5650_specific_dapm_widgets, rt5650_specific_dapm_widgets,
ARRAY_SIZE(rt5650_specific_dapm_widgets)); ARRAY_SIZE(rt5650_specific_dapm_widgets));
if (ret < 0) snd_soc_dapm_add_routes(dapm,
goto exit;
ret = snd_soc_dapm_add_routes(dapm,
rt5650_specific_dapm_routes, rt5650_specific_dapm_routes,
ARRAY_SIZE(rt5650_specific_dapm_routes)); ARRAY_SIZE(rt5650_specific_dapm_routes));
if (ret < 0)
goto exit;
break; break;
} }
...@@ -3433,17 +3419,9 @@ static int rt5645_probe(struct snd_soc_component *component) ...@@ -3433,17 +3419,9 @@ static int rt5645_probe(struct snd_soc_component *component)
/* for JD function */ /* for JD function */
if (rt5645->pdata.jd_mode) { if (rt5645->pdata.jd_mode) {
ret = snd_soc_dapm_force_enable_pin(dapm, "JD Power"); snd_soc_dapm_force_enable_pin(dapm, "JD Power");
if (ret < 0) snd_soc_dapm_force_enable_pin(dapm, "LDO2");
goto exit; snd_soc_dapm_sync(dapm);
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) if (rt5645->pdata.long_name)
...@@ -3454,14 +3432,9 @@ static int rt5645_probe(struct snd_soc_component *component) ...@@ -3454,14 +3432,9 @@ static int rt5645_probe(struct snd_soc_component *component)
GFP_KERNEL); GFP_KERNEL);
if (!rt5645->eq_param) if (!rt5645->eq_param)
ret = -ENOMEM; return -ENOMEM;
exit:
/* return 0;
* 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) static void rt5645_remove(struct snd_soc_component *component)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment