Commit 05f45628 authored by Christophe JAILLET's avatar Christophe JAILLET Committed by Viresh Kumar
Browse files

cpufreq: brcmstb-avs-cpufreq: Free resources in error path



If 'cpufreq_register_driver()' fails, we must release the resources
allocated in 'brcm_avs_prepare_init()' as already done in the remove
function.

To do that, introduce a new function 'brcm_avs_prepare_uninit()' in order
to avoid code duplication. This also makes the code more readable (IMHO).

Fixes: de322e08 ("cpufreq: brcmstb-avs-cpufreq: AVS CPUfreq driver for Broadcom STB SoCs")
Signed-off-by: default avatarChristophe JAILLET <christophe.jaillet@wanadoo.fr>
[ Viresh: Updated Subject ]
Signed-off-by: default avatarViresh Kumar <viresh.kumar@linaro.org>
parent 26699172
Loading
Loading
Loading
Loading
+16 −5
Original line number Diff line number Diff line
@@ -597,6 +597,16 @@ static int brcm_avs_prepare_init(struct platform_device *pdev)
	return ret;
}

static void brcm_avs_prepare_uninit(struct platform_device *pdev)
{
	struct private_data *priv;

	priv = platform_get_drvdata(pdev);

	iounmap(priv->avs_intr_base);
	iounmap(priv->base);
}

static int brcm_avs_cpufreq_init(struct cpufreq_policy *policy)
{
	struct cpufreq_frequency_table *freq_table;
@@ -732,21 +742,22 @@ static int brcm_avs_cpufreq_probe(struct platform_device *pdev)

	brcm_avs_driver.driver_data = pdev;

	return cpufreq_register_driver(&brcm_avs_driver);
	ret = cpufreq_register_driver(&brcm_avs_driver);
	if (ret)
		brcm_avs_prepare_uninit(pdev);

	return ret;
}

static int brcm_avs_cpufreq_remove(struct platform_device *pdev)
{
	struct private_data *priv;
	int ret;

	ret = cpufreq_unregister_driver(&brcm_avs_driver);
	if (ret)
		return ret;

	priv = platform_get_drvdata(pdev);
	iounmap(priv->base);
	iounmap(priv->avs_intr_base);
	brcm_avs_prepare_uninit(pdev);

	return 0;
}