mirror of
git://nv-tegra.nvidia.com/linux-nv-oot.git
synced 2025-12-22 09:11:26 +03:00
ASoC: tegra-alt: remove devm_clk_put() APIs
Clock resource is associated with a device and when the device is unbound, the resource is freed. Drivers get the clock handle by using devm_clk_get(). No need for an explicit devm_clk_put() to release the clock, this is handled automatically when the device lifetime ends. Bug 200346429 Change-Id: I0885723e3a9a3fb41e54524ddacc3415f571576c Signed-off-by: Sameer Pujar <spujar@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1574311 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: svccoveritychecker <svccoveritychecker@nvidia.com> Reviewed-by: Mohan Kumar D <mkumard@nvidia.com> GVS: Gerrit_Virtual_Submit Reviewed-by: Dipesh Gandhi <dipeshg@nvidia.com> Reviewed-by: Ravindra Lokhande <rlokhande@nvidia.com>
This commit is contained in:
@@ -77,10 +77,6 @@ struct tegra_asoc_audio_clock_info {
|
||||
u32 clk_rates[MAX_NUM_RATES];
|
||||
};
|
||||
|
||||
struct clk *tegra_alt_asoc_utils_get_clk(struct device *dev,
|
||||
bool dev_id,
|
||||
const char *clk_name);
|
||||
void tegra_alt_asoc_utils_clk_put(struct device *dev, struct clk *clk);
|
||||
int tegra_alt_asoc_utils_set_rate(struct tegra_asoc_audio_clock_info *data,
|
||||
int srate,
|
||||
int mclk,
|
||||
@@ -90,7 +86,6 @@ void tegra_alt_asoc_utils_lock_clk_rate(
|
||||
int lock);
|
||||
int tegra_alt_asoc_utils_init(struct tegra_asoc_audio_clock_info *data,
|
||||
struct device *dev, struct snd_soc_card *card);
|
||||
void tegra_alt_asoc_utils_fini(struct tegra_asoc_audio_clock_info *data);
|
||||
|
||||
int tegra_alt_asoc_utils_set_extern_parent(
|
||||
struct tegra_asoc_audio_clock_info *data, const char *parent);
|
||||
|
||||
@@ -1258,7 +1258,7 @@ static int tegra_machine_driver_probe(struct platform_device *pdev)
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "snd_soc_register_card failed (%d)\n",
|
||||
ret);
|
||||
goto err_fini_utils;
|
||||
goto err_alloc_dai_link;
|
||||
}
|
||||
|
||||
rtd = snd_soc_get_pcm_runtime(card, "rt565x-playback");
|
||||
@@ -1283,8 +1283,6 @@ static int tegra_machine_driver_probe(struct platform_device *pdev)
|
||||
|
||||
return 0;
|
||||
|
||||
err_fini_utils:
|
||||
tegra_alt_asoc_utils_fini(&machine->audio_clock);
|
||||
err_alloc_dai_link:
|
||||
tegra_machine_remove_dai_link();
|
||||
tegra_machine_remove_codec_conf();
|
||||
@@ -1295,13 +1293,11 @@ err:
|
||||
static int tegra_machine_driver_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct snd_soc_card *card = platform_get_drvdata(pdev);
|
||||
struct tegra_machine *machine = snd_soc_card_get_drvdata(card);
|
||||
|
||||
snd_soc_unregister_card(card);
|
||||
|
||||
tegra_machine_remove_dai_link();
|
||||
tegra_machine_remove_codec_conf();
|
||||
tegra_alt_asoc_utils_fini(&machine->audio_clock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -479,13 +479,13 @@ static int tegra186_dspk_platform_probe(struct platform_device *pdev)
|
||||
if (IS_ERR_OR_NULL(dspk->clk_pll_a_out0)) {
|
||||
dev_err(&pdev->dev, "Can't retrieve pll_a_out0 clock\n");
|
||||
ret = -ENOENT;
|
||||
goto err_clk_put;
|
||||
goto err;
|
||||
}
|
||||
|
||||
ret = clk_set_parent(dspk->clk_dspk, dspk->clk_pll_a_out0);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "Can't set parent of dspk clock\n");
|
||||
goto err_plla_clk_put;
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -592,10 +592,6 @@ err_suspend:
|
||||
tegra186_dspk_runtime_suspend(&pdev->dev);
|
||||
err_pm_disable:
|
||||
pm_runtime_disable(&pdev->dev);
|
||||
err_plla_clk_put:
|
||||
devm_clk_put(&pdev->dev, dspk->clk_pll_a_out0);
|
||||
err_clk_put:
|
||||
devm_clk_put(&pdev->dev, dspk->clk_dspk);
|
||||
err:
|
||||
return ret;
|
||||
}
|
||||
@@ -618,9 +614,6 @@ static int tegra186_dspk_platform_remove(struct platform_device *pdev)
|
||||
if (!pm_runtime_status_suspended(&pdev->dev))
|
||||
tegra186_dspk_runtime_suspend(&pdev->dev);
|
||||
|
||||
devm_clk_put(&pdev->dev, dspk->clk_pll_a_out0);
|
||||
devm_clk_put(&pdev->dev, dspk->clk_dspk);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -5147,39 +5147,13 @@ err_unregister_platform:
|
||||
err_pm_disable:
|
||||
pm_runtime_disable(&pdev->dev);
|
||||
err:
|
||||
if (!adsp->soc_data->is_soc_t210)
|
||||
if (!IS_ERR_OR_NULL(adsp->apb2ape_clk))
|
||||
tegra_alt_asoc_utils_clk_put
|
||||
(&pdev->dev, adsp->apb2ape_clk);
|
||||
|
||||
if (!IS_ERR_OR_NULL(adsp->ape_clk))
|
||||
tegra_alt_asoc_utils_clk_put
|
||||
(&pdev->dev, adsp->ape_clk);
|
||||
if (!IS_ERR_OR_NULL(adsp->ahub_clk))
|
||||
tegra_alt_asoc_utils_clk_put
|
||||
(&pdev->dev, adsp->ahub_clk);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int __maybe_unused tegra210_adsp_audio_platform_remove(
|
||||
struct platform_device *pdev)
|
||||
{
|
||||
struct tegra210_adsp *adsp = dev_get_drvdata(&pdev->dev);
|
||||
|
||||
pm_runtime_disable(&pdev->dev);
|
||||
if (!adsp->soc_data->is_soc_t210)
|
||||
if (!IS_ERR_OR_NULL(adsp->apb2ape_clk))
|
||||
tegra_alt_asoc_utils_clk_put
|
||||
(&pdev->dev, adsp->apb2ape_clk);
|
||||
|
||||
if (!IS_ERR_OR_NULL(adsp->ape_clk))
|
||||
tegra_alt_asoc_utils_clk_put
|
||||
(&pdev->dev, adsp->ape_clk);
|
||||
|
||||
if (!IS_ERR_OR_NULL(adsp->ahub_clk))
|
||||
tegra_alt_asoc_utils_clk_put
|
||||
(&pdev->dev, adsp->ahub_clk);
|
||||
|
||||
tegra_pd_remove_device(&pdev->dev);
|
||||
snd_soc_unregister_platform(&pdev->dev);
|
||||
return 0;
|
||||
|
||||
@@ -569,13 +569,13 @@ static int tegra210_dmic_platform_probe(struct platform_device *pdev)
|
||||
if (IS_ERR_OR_NULL(dmic->clk_pll_a_out0)) {
|
||||
dev_err(&pdev->dev, "Can't retrieve pll_a_out0 clock\n");
|
||||
ret = -ENOENT;
|
||||
goto err_clk_put;
|
||||
goto err;
|
||||
}
|
||||
|
||||
ret = clk_set_parent(dmic->clk_dmic, dmic->clk_pll_a_out0);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "Can't set parent of dmic clock\n");
|
||||
goto err_plla_clk_put;
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -583,7 +583,7 @@ static int tegra210_dmic_platform_probe(struct platform_device *pdev)
|
||||
if (!mem) {
|
||||
dev_err(&pdev->dev, "No memory resource\n");
|
||||
ret = -ENODEV;
|
||||
goto err_plla_clk_put;
|
||||
goto err;
|
||||
}
|
||||
|
||||
memregion = devm_request_mem_region(&pdev->dev, mem->start,
|
||||
@@ -591,14 +591,14 @@ static int tegra210_dmic_platform_probe(struct platform_device *pdev)
|
||||
if (!memregion) {
|
||||
dev_err(&pdev->dev, "Memory region already claimed\n");
|
||||
ret = -EBUSY;
|
||||
goto err_plla_clk_put;
|
||||
goto err;
|
||||
}
|
||||
|
||||
regs = devm_ioremap(&pdev->dev, mem->start, resource_size(mem));
|
||||
if (!regs) {
|
||||
dev_err(&pdev->dev, "ioremap failed\n");
|
||||
ret = -ENOMEM;
|
||||
goto err_plla_clk_put;
|
||||
goto err;
|
||||
}
|
||||
|
||||
dmic->regmap = devm_regmap_init_mmio(&pdev->dev, regs,
|
||||
@@ -606,7 +606,7 @@ static int tegra210_dmic_platform_probe(struct platform_device *pdev)
|
||||
if (IS_ERR(dmic->regmap)) {
|
||||
dev_err(&pdev->dev, "regmap init failed\n");
|
||||
ret = PTR_ERR(dmic->regmap);
|
||||
goto err_plla_clk_put;
|
||||
goto err;
|
||||
}
|
||||
regcache_cache_only(dmic->regmap, true);
|
||||
|
||||
@@ -619,7 +619,7 @@ static int tegra210_dmic_platform_probe(struct platform_device *pdev)
|
||||
dev_err(&pdev->dev,
|
||||
"Missing property nvidia,ahub-dmic-id\n");
|
||||
ret = -ENODEV;
|
||||
goto err_plla_clk_put;
|
||||
goto err;
|
||||
}
|
||||
|
||||
pm_runtime_enable(&pdev->dev);
|
||||
@@ -686,11 +686,6 @@ err_suspend:
|
||||
tegra210_dmic_runtime_suspend(&pdev->dev);
|
||||
err_pm_disable:
|
||||
pm_runtime_disable(&pdev->dev);
|
||||
err_plla_clk_put:
|
||||
devm_clk_put(&pdev->dev, dmic->clk_pll_a_out0);
|
||||
err_clk_put:
|
||||
if (!(tegra_platform_is_unit_fpga() || tegra_platform_is_fpga()))
|
||||
devm_clk_put(&pdev->dev, dmic->clk_dmic);
|
||||
err:
|
||||
return ret;
|
||||
}
|
||||
@@ -713,8 +708,6 @@ static int tegra210_dmic_platform_remove(struct platform_device *pdev)
|
||||
if (!pm_runtime_status_suspended(&pdev->dev))
|
||||
tegra210_dmic_runtime_suspend(&pdev->dev);
|
||||
|
||||
devm_clk_put(&pdev->dev, dmic->clk_pll_a_out0);
|
||||
devm_clk_put(&pdev->dev, dmic->clk_dmic);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -1061,28 +1061,28 @@ static int tegra210_i2s_platform_probe(struct platform_device *pdev)
|
||||
if (IS_ERR(i2s->clk_i2s_sync)) {
|
||||
dev_err(&pdev->dev, "Can't retrieve i2s_sync clock\n");
|
||||
ret = PTR_ERR(i2s->clk_i2s_sync);
|
||||
goto err_clk_put;
|
||||
goto err;
|
||||
}
|
||||
|
||||
i2s->clk_audio_sync = devm_clk_get(&pdev->dev, "audio_sync");
|
||||
if (IS_ERR(i2s->clk_audio_sync)) {
|
||||
dev_err(&pdev->dev, "Can't retrieve audio sync clock\n");
|
||||
ret = PTR_ERR(i2s->clk_audio_sync);
|
||||
goto err_i2s_sync_clk_put;
|
||||
goto err;
|
||||
}
|
||||
|
||||
i2s->clk_i2s_source = devm_clk_get(&pdev->dev, "pll_a_out0");
|
||||
if (IS_ERR(i2s->clk_i2s_source)) {
|
||||
dev_err(&pdev->dev, "Can't retrieve pll_a_out0 clock\n");
|
||||
ret = PTR_ERR(i2s->clk_i2s_source);
|
||||
goto err_audio_sync_clk_put;
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
if (!mem) {
|
||||
dev_err(&pdev->dev, "No memory resource\n");
|
||||
ret = -ENODEV;
|
||||
goto err_pll_a_out0_clk_put;
|
||||
goto err;
|
||||
}
|
||||
|
||||
memregion = devm_request_mem_region(&pdev->dev, mem->start,
|
||||
@@ -1090,14 +1090,14 @@ static int tegra210_i2s_platform_probe(struct platform_device *pdev)
|
||||
if (!memregion) {
|
||||
dev_err(&pdev->dev, "Memory region already claimed\n");
|
||||
ret = -EBUSY;
|
||||
goto err_pll_a_out0_clk_put;
|
||||
goto err;
|
||||
}
|
||||
|
||||
regs = devm_ioremap(&pdev->dev, mem->start, resource_size(mem));
|
||||
if (!regs) {
|
||||
dev_err(&pdev->dev, "ioremap failed\n");
|
||||
ret = -ENOMEM;
|
||||
goto err_pll_a_out0_clk_put;
|
||||
goto err;
|
||||
}
|
||||
|
||||
i2s->regmap = devm_regmap_init_mmio(&pdev->dev, regs,
|
||||
@@ -1105,7 +1105,7 @@ static int tegra210_i2s_platform_probe(struct platform_device *pdev)
|
||||
if (IS_ERR(i2s->regmap)) {
|
||||
dev_err(&pdev->dev, "regmap init failed\n");
|
||||
ret = PTR_ERR(i2s->regmap);
|
||||
goto err_pll_a_out0_clk_put;
|
||||
goto err;
|
||||
}
|
||||
|
||||
i2s->slgc_notifier.notifier_call = _tegra210_i2s_slcg_notifier;
|
||||
@@ -1120,7 +1120,7 @@ static int tegra210_i2s_platform_probe(struct platform_device *pdev)
|
||||
dev_err(&pdev->dev,
|
||||
"Missing property nvidia,ahub-i2s-id\n");
|
||||
ret = -ENODEV;
|
||||
goto err_pll_a_out0_clk_put;
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (of_property_read_u32(pdev->dev.of_node,
|
||||
@@ -1152,7 +1152,7 @@ static int tegra210_i2s_platform_probe(struct platform_device *pdev)
|
||||
sizeof(*i2s->supplies), GFP_KERNEL);
|
||||
if (!i2s->supplies) {
|
||||
ret = -ENOMEM;
|
||||
goto err_pll_a_out0_clk_put;
|
||||
goto err;
|
||||
}
|
||||
of_property_for_each_string(np,
|
||||
"regulator-supplies", prop, supply)
|
||||
@@ -1219,15 +1219,6 @@ err_suspend:
|
||||
tegra210_i2s_runtime_suspend(&pdev->dev);
|
||||
err_pm_disable:
|
||||
pm_runtime_disable(&pdev->dev);
|
||||
err_pll_a_out0_clk_put:
|
||||
if (!(tegra_platform_is_unit_fpga() || tegra_platform_is_fpga()))
|
||||
devm_clk_put(&pdev->dev, i2s->clk_i2s_source);
|
||||
err_audio_sync_clk_put:
|
||||
devm_clk_put(&pdev->dev, i2s->clk_audio_sync);
|
||||
err_i2s_sync_clk_put:
|
||||
devm_clk_put(&pdev->dev, i2s->clk_i2s_sync);
|
||||
err_clk_put:
|
||||
devm_clk_put(&pdev->dev, i2s->clk_i2s);
|
||||
err:
|
||||
return ret;
|
||||
}
|
||||
@@ -1241,21 +1232,12 @@ static void tegra210_i2s_platform_shutdown(struct platform_device *pdev)
|
||||
|
||||
static int tegra210_i2s_platform_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct tegra210_i2s *i2s = dev_get_drvdata(&pdev->dev);
|
||||
|
||||
snd_soc_unregister_codec(&pdev->dev);
|
||||
|
||||
pm_runtime_disable(&pdev->dev);
|
||||
if (!pm_runtime_status_suspended(&pdev->dev))
|
||||
tegra210_i2s_runtime_suspend(&pdev->dev);
|
||||
|
||||
if (!(tegra_platform_is_unit_fpga() || tegra_platform_is_fpga())) {
|
||||
devm_clk_put(&pdev->dev, i2s->clk_i2s);
|
||||
devm_clk_put(&pdev->dev, i2s->clk_audio_sync);
|
||||
devm_clk_put(&pdev->dev, i2s->clk_i2s_sync);
|
||||
clk_put(i2s->clk_i2s_source);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -361,7 +361,7 @@ static int tegra210_iqc_platform_probe(struct platform_device *pdev)
|
||||
if (!mem) {
|
||||
dev_err(&pdev->dev, "No memory resource\n");
|
||||
ret = -ENODEV;
|
||||
goto err_clk_put;
|
||||
goto err;
|
||||
}
|
||||
|
||||
memregion = devm_request_mem_region(&pdev->dev, mem->start,
|
||||
@@ -369,14 +369,14 @@ static int tegra210_iqc_platform_probe(struct platform_device *pdev)
|
||||
if (!memregion) {
|
||||
dev_err(&pdev->dev, "Memory region already claimed\n");
|
||||
ret = -EBUSY;
|
||||
goto err_clk_put;
|
||||
goto err;
|
||||
}
|
||||
|
||||
regs = devm_ioremap(&pdev->dev, mem->start, resource_size(mem));
|
||||
if (!regs) {
|
||||
dev_err(&pdev->dev, "ioremap failed\n");
|
||||
ret = -ENOMEM;
|
||||
goto err_clk_put;
|
||||
goto err;
|
||||
}
|
||||
|
||||
iqc->regmap = devm_regmap_init_mmio(&pdev->dev, regs,
|
||||
@@ -384,7 +384,7 @@ static int tegra210_iqc_platform_probe(struct platform_device *pdev)
|
||||
if (IS_ERR(iqc->regmap)) {
|
||||
dev_err(&pdev->dev, "regmap init failed\n");
|
||||
ret = PTR_ERR(iqc->regmap);
|
||||
goto err_clk_put;
|
||||
goto err;
|
||||
}
|
||||
regcache_cache_only(iqc->regmap, true);
|
||||
|
||||
@@ -394,7 +394,7 @@ static int tegra210_iqc_platform_probe(struct platform_device *pdev)
|
||||
dev_err(&pdev->dev,
|
||||
"Missing property nvidia,ahub-iqc-id\n");
|
||||
ret = -ENODEV;
|
||||
goto err_clk_put;
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (of_property_read_u32(pdev->dev.of_node,
|
||||
@@ -437,8 +437,6 @@ err_suspend:
|
||||
tegra210_iqc_runtime_suspend(&pdev->dev);
|
||||
err_pm_disable:
|
||||
pm_runtime_disable(&pdev->dev);
|
||||
err_clk_put:
|
||||
devm_clk_put(&pdev->dev, iqc->clk_iqc);
|
||||
err:
|
||||
return ret;
|
||||
}
|
||||
@@ -453,8 +451,6 @@ static int tegra210_iqc_platform_remove(struct platform_device *pdev)
|
||||
if (!pm_runtime_status_suspended(&pdev->dev))
|
||||
tegra210_iqc_runtime_suspend(&pdev->dev);
|
||||
|
||||
devm_clk_put(&pdev->dev, iqc->clk_iqc);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -491,21 +491,21 @@ static int tegra210_spdif_platform_probe(struct platform_device *pdev)
|
||||
if (IS_ERR(spdif->clk_pll_p_out0)) {
|
||||
dev_err(&pdev->dev, "Can't retrieve pll_p_out0 clock\n");
|
||||
ret = PTR_ERR(spdif->clk_pll_p_out0);
|
||||
goto err_spdif_plla_clk_put;
|
||||
goto err;
|
||||
}
|
||||
|
||||
spdif->clk_spdif_out = devm_clk_get(&pdev->dev, "spdif_out");
|
||||
if (IS_ERR(spdif->clk_spdif_out)) {
|
||||
dev_err(&pdev->dev, "Can't retrieve spdif clock\n");
|
||||
ret = PTR_ERR(spdif->clk_spdif_out);
|
||||
goto err_spdif_pllp_clk_put;
|
||||
goto err;
|
||||
}
|
||||
|
||||
spdif->clk_spdif_in = devm_clk_get(&pdev->dev, "spdif_in");
|
||||
if (IS_ERR(spdif->clk_spdif_in)) {
|
||||
dev_err(&pdev->dev, "Can't retrieve spdif clock\n");
|
||||
ret = PTR_ERR(spdif->clk_spdif_in);
|
||||
goto err_spdif_out_clk_put;
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -513,7 +513,7 @@ static int tegra210_spdif_platform_probe(struct platform_device *pdev)
|
||||
if (!mem) {
|
||||
dev_err(&pdev->dev, "No memory resource\n");
|
||||
ret = -ENODEV;
|
||||
goto err_spdif_in_clk_put;
|
||||
goto err;
|
||||
}
|
||||
|
||||
memregion = devm_request_mem_region(&pdev->dev, mem->start,
|
||||
@@ -521,14 +521,14 @@ static int tegra210_spdif_platform_probe(struct platform_device *pdev)
|
||||
if (!memregion) {
|
||||
dev_err(&pdev->dev, "Memory region already claimed\n");
|
||||
ret = -EBUSY;
|
||||
goto err_spdif_in_clk_put;
|
||||
goto err;
|
||||
}
|
||||
|
||||
regs = devm_ioremap(&pdev->dev, mem->start, resource_size(mem));
|
||||
if (!regs) {
|
||||
dev_err(&pdev->dev, "ioremap failed\n");
|
||||
ret = -ENOMEM;
|
||||
goto err_spdif_in_clk_put;
|
||||
goto err;
|
||||
}
|
||||
|
||||
spdif->regmap = devm_regmap_init_mmio(&pdev->dev, regs,
|
||||
@@ -536,7 +536,7 @@ static int tegra210_spdif_platform_probe(struct platform_device *pdev)
|
||||
if (IS_ERR(spdif->regmap)) {
|
||||
dev_err(&pdev->dev, "regmap init failed\n");
|
||||
ret = PTR_ERR(spdif->regmap);
|
||||
goto err_spdif_in_clk_put;
|
||||
goto err;
|
||||
}
|
||||
regcache_cache_only(spdif->regmap, true);
|
||||
|
||||
@@ -545,7 +545,7 @@ static int tegra210_spdif_platform_probe(struct platform_device *pdev)
|
||||
dev_err(&pdev->dev,
|
||||
"Missing property nvidia,ahub-spdif-id\n");
|
||||
ret = -ENODEV;
|
||||
goto err_spdif_in_clk_put;
|
||||
goto err;
|
||||
}
|
||||
|
||||
pm_runtime_enable(&pdev->dev);
|
||||
@@ -613,18 +613,6 @@ err_suspend:
|
||||
tegra210_spdif_runtime_suspend(&pdev->dev);
|
||||
err_pm_disable:
|
||||
pm_runtime_disable(&pdev->dev);
|
||||
err_spdif_in_clk_put:
|
||||
if (!(tegra_platform_is_unit_fpga() || tegra_platform_is_fpga()))
|
||||
devm_clk_put(&pdev->dev, spdif->clk_spdif_in);
|
||||
err_spdif_out_clk_put:
|
||||
if (!(tegra_platform_is_unit_fpga() || tegra_platform_is_fpga()))
|
||||
devm_clk_put(&pdev->dev, spdif->clk_spdif_out);
|
||||
err_spdif_pllp_clk_put:
|
||||
if (!(tegra_platform_is_unit_fpga() || tegra_platform_is_fpga()))
|
||||
devm_clk_put(&pdev->dev, spdif->clk_pll_p_out0);
|
||||
err_spdif_plla_clk_put:
|
||||
if (!(tegra_platform_is_unit_fpga() || tegra_platform_is_fpga()))
|
||||
devm_clk_put(&pdev->dev, spdif->clk_pll_a_out0);
|
||||
err:
|
||||
return ret;
|
||||
}
|
||||
@@ -638,19 +626,12 @@ static void tegra210_spdif_platform_shutdown(struct platform_device *pdev)
|
||||
|
||||
static int tegra210_spdif_platform_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct tegra210_spdif *spdif = dev_get_drvdata(&pdev->dev);
|
||||
|
||||
snd_soc_unregister_codec(&pdev->dev);
|
||||
|
||||
pm_runtime_disable(&pdev->dev);
|
||||
if (!pm_runtime_status_suspended(&pdev->dev))
|
||||
tegra210_spdif_runtime_suspend(&pdev->dev);
|
||||
|
||||
if (!(tegra_platform_is_unit_fpga() || tegra_platform_is_fpga())) {
|
||||
devm_clk_put(&pdev->dev, spdif->clk_spdif_out);
|
||||
devm_clk_put(&pdev->dev, spdif->clk_spdif_in);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -328,11 +328,6 @@ int tegra_xbar_remove(struct platform_device *pdev)
|
||||
|
||||
tegra_pd_remove_device(&pdev->dev);
|
||||
|
||||
devm_clk_put(&pdev->dev, xbar->clk);
|
||||
devm_clk_put(&pdev->dev, xbar->clk_parent);
|
||||
devm_clk_put(&pdev->dev, xbar->clk_ape);
|
||||
devm_clk_put(&pdev->dev, xbar->clk_apb2ape);
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(tegra_xbar_remove);
|
||||
@@ -378,21 +373,21 @@ int tegra_xbar_probe(struct platform_device *pdev,
|
||||
if (IS_ERR(xbar->clk_parent)) {
|
||||
dev_err(&pdev->dev, "Can't retrieve pll_a_out0 clock\n");
|
||||
ret = PTR_ERR(xbar->clk_parent);
|
||||
goto err_clk_put;
|
||||
goto err;
|
||||
}
|
||||
|
||||
xbar->clk_apb2ape = devm_clk_get(&pdev->dev, "apb2ape");
|
||||
if (IS_ERR(xbar->clk_apb2ape)) {
|
||||
dev_err(&pdev->dev, "Can't retrieve apb2ape clock\n");
|
||||
ret = PTR_ERR(xbar->clk_apb2ape);
|
||||
goto err_clk_put_parent;
|
||||
goto err;
|
||||
}
|
||||
|
||||
xbar->clk_ape = devm_clk_get(&pdev->dev, "xbar.ape");
|
||||
if (IS_ERR(xbar->clk_ape)) {
|
||||
dev_err(&pdev->dev, "Can't retrieve ape clock\n");
|
||||
ret = PTR_ERR(xbar->clk_ape);
|
||||
goto err_clk_put_apb2ape;
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -400,14 +395,14 @@ int tegra_xbar_probe(struct platform_device *pdev,
|
||||
if (IS_ERR(parent_clk)) {
|
||||
dev_err(&pdev->dev, "Can't get parent clock for xbar\n");
|
||||
ret = PTR_ERR(parent_clk);
|
||||
goto err_clk_put_ape;
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (!(tegra_platform_is_unit_fpga() || tegra_platform_is_fpga())) {
|
||||
ret = clk_set_parent(xbar->clk, xbar->clk_parent);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "Failed to set parent clock with pll_a_out0\n");
|
||||
goto err_clk_put_ape;
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -457,15 +452,6 @@ err_pm_disable:
|
||||
tegra_pd_remove_device(&pdev->dev);
|
||||
err_clk_set_parent:
|
||||
clk_set_parent(xbar->clk, parent_clk);
|
||||
err_clk_put_ape:
|
||||
devm_clk_put(&pdev->dev, xbar->clk_ape);
|
||||
err_clk_put_apb2ape:
|
||||
devm_clk_put(&pdev->dev, xbar->clk_apb2ape);
|
||||
err_clk_put_parent:
|
||||
if (!(tegra_platform_is_unit_fpga() || tegra_platform_is_fpga()))
|
||||
devm_clk_put(&pdev->dev, xbar->clk_parent);
|
||||
err_clk_put:
|
||||
devm_clk_put(&pdev->dev, xbar->clk);
|
||||
err:
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -41,24 +41,6 @@
|
||||
static bool is_switch_registered;
|
||||
#endif
|
||||
|
||||
struct clk *tegra_alt_asoc_utils_get_clk(struct device *dev,
|
||||
bool dev_id,
|
||||
const char *clk_name)
|
||||
{
|
||||
struct clk *clk;
|
||||
|
||||
clk = devm_clk_get(dev, clk_name);
|
||||
|
||||
return clk;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(tegra_alt_asoc_utils_get_clk);
|
||||
|
||||
void tegra_alt_asoc_utils_clk_put(struct device *dev, struct clk *clk)
|
||||
{
|
||||
devm_clk_put(dev, clk);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(tegra_alt_asoc_utils_clk_put);
|
||||
|
||||
int tegra_alt_asoc_utils_set_rate(struct tegra_asoc_audio_clock_info *data,
|
||||
int srate,
|
||||
int mclk,
|
||||
@@ -229,54 +211,40 @@ int tegra_alt_asoc_utils_init(struct tegra_asoc_audio_clock_info *data,
|
||||
/* DT boot, but unknown SoC */
|
||||
return -EINVAL;
|
||||
|
||||
/* pll_p_out1 is not used for ahub for T210,T186 */
|
||||
if (data->soc < TEGRA_ASOC_UTILS_SOC_TEGRA210) {
|
||||
data->clk_pll_p_out1 = clk_get_sys(NULL, "pll_p_out1");
|
||||
if (IS_ERR(data->clk_pll_p_out1)) {
|
||||
dev_err(data->dev, "Can't retrieve clk pll_p_out1\n");
|
||||
ret = PTR_ERR(data->clk_pll_p_out1);
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
|
||||
data->clk_m = tegra_alt_asoc_utils_get_clk(dev, false, "clk_m");
|
||||
data->clk_m = devm_clk_get(dev, "clk_m");
|
||||
if (IS_ERR(data->clk_m)) {
|
||||
dev_err(data->dev, "Can't retrieve clk clk_m\n");
|
||||
ret = PTR_ERR(data->clk_m);
|
||||
goto err;
|
||||
}
|
||||
|
||||
data->clk_pll_a = tegra_alt_asoc_utils_get_clk(dev, false, "pll_a");
|
||||
data->clk_pll_a = devm_clk_get(dev, "pll_a");
|
||||
if (IS_ERR(data->clk_pll_a)) {
|
||||
dev_err(data->dev, "Can't retrieve clk pll_a\n");
|
||||
ret = PTR_ERR(data->clk_pll_a);
|
||||
goto err_put_pll_p_out1;
|
||||
goto err;
|
||||
}
|
||||
|
||||
data->clk_pll_a_out0 = tegra_alt_asoc_utils_get_clk(dev, false,
|
||||
"pll_a_out0");
|
||||
data->clk_pll_a_out0 = devm_clk_get(dev, "pll_a_out0");
|
||||
if (IS_ERR(data->clk_pll_a_out0)) {
|
||||
dev_err(data->dev, "Can't retrieve clk pll_a_out0\n");
|
||||
ret = PTR_ERR(data->clk_pll_a_out0);
|
||||
goto err_put_pll_a;
|
||||
goto err;
|
||||
}
|
||||
|
||||
data->clk_cdev1 = tegra_alt_asoc_utils_get_clk(dev, true,
|
||||
"extern1");
|
||||
|
||||
data->clk_cdev1 = devm_clk_get(dev, "extern1");
|
||||
if (IS_ERR(data->clk_cdev1)) {
|
||||
dev_err(data->dev, "Can't retrieve clk cdev1\n");
|
||||
ret = PTR_ERR(data->clk_cdev1);
|
||||
goto err_put_pll_a_out0;
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (data->soc > TEGRA_ASOC_UTILS_SOC_TEGRA210) {
|
||||
data->clk_ahub = tegra_alt_asoc_utils_get_clk(dev, false,
|
||||
"ahub");
|
||||
data->clk_ahub = devm_clk_get(dev, "ahub");
|
||||
if (IS_ERR(data->clk_ahub)) {
|
||||
dev_err(data->dev, "Can't retrieve clk ahub\n");
|
||||
ret = PTR_ERR(data->clk_ahub);
|
||||
goto err_put_cdev1;
|
||||
goto err;
|
||||
}
|
||||
|
||||
#if defined(CONFIG_COMMON_CLK)
|
||||
@@ -292,36 +260,8 @@ int tegra_alt_asoc_utils_init(struct tegra_asoc_audio_clock_info *data,
|
||||
#endif
|
||||
}
|
||||
|
||||
if (data->soc < TEGRA_ASOC_UTILS_SOC_TEGRA210) {
|
||||
ret = tegra_alt_asoc_utils_set_rate(data, 48000,
|
||||
256 * 48000, 256 * 48000);
|
||||
if (ret)
|
||||
goto err_put_ahub;
|
||||
}
|
||||
|
||||
if (data->soc < TEGRA_ASOC_UTILS_SOC_TEGRA186) {
|
||||
ret = clk_prepare_enable(data->clk_cdev1);
|
||||
if (ret) {
|
||||
dev_err(data->dev, "Can't enable clk cdev1/extern1");
|
||||
goto err_put_ahub;
|
||||
}
|
||||
data->clk_cdev1_state = 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
err_put_ahub:
|
||||
if (data->soc > TEGRA_ASOC_UTILS_SOC_TEGRA210)
|
||||
tegra_alt_asoc_utils_clk_put(dev, data->clk_ahub);
|
||||
err_put_cdev1:
|
||||
tegra_alt_asoc_utils_clk_put(dev, data->clk_cdev1);
|
||||
err_put_pll_a_out0:
|
||||
tegra_alt_asoc_utils_clk_put(dev, data->clk_pll_a_out0);
|
||||
err_put_pll_a:
|
||||
tegra_alt_asoc_utils_clk_put(dev, data->clk_pll_a);
|
||||
err_put_pll_p_out1:
|
||||
if (data->soc < TEGRA_ASOC_UTILS_SOC_TEGRA210)
|
||||
clk_put(data->clk_pll_p_out1);
|
||||
err:
|
||||
return ret;
|
||||
}
|
||||
@@ -387,27 +327,6 @@ int tegra_alt_asoc_utils_set_extern_parent(
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(tegra_alt_asoc_utils_set_extern_parent);
|
||||
|
||||
void tegra_alt_asoc_utils_fini(struct tegra_asoc_audio_clock_info *data)
|
||||
{
|
||||
if (data->clk_cdev1_state)
|
||||
clk_disable_unprepare(data->clk_cdev1);
|
||||
|
||||
if (data->soc > TEGRA_ASOC_UTILS_SOC_TEGRA210)
|
||||
if (!IS_ERR(data->clk_ahub))
|
||||
tegra_alt_asoc_utils_clk_put(data->dev, data->clk_ahub);
|
||||
|
||||
if (!IS_ERR(data->clk_pll_a_out0))
|
||||
tegra_alt_asoc_utils_clk_put(data->dev, data->clk_pll_a_out0);
|
||||
|
||||
if (!IS_ERR(data->clk_pll_a))
|
||||
tegra_alt_asoc_utils_clk_put(data->dev, data->clk_pll_a);
|
||||
|
||||
if (data->soc < TEGRA_ASOC_UTILS_SOC_TEGRA210)
|
||||
if (!IS_ERR(data->clk_pll_p_out1))
|
||||
clk_put(data->clk_pll_p_out1);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(tegra_alt_asoc_utils_fini);
|
||||
|
||||
#ifdef CONFIG_SWITCH
|
||||
int tegra_alt_asoc_switch_register(struct switch_dev *sdev)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user