mirror of
https://github.com/torvalds/linux.git
synced 2026-09-24 06:24:02 +02:00
ASoC: rockchip: Simplify probe error handling
bui duc phuc <phucduc.bui@gmail.com> says: This series simplifies probe error handling across Rockchip ASoC drivers. It replaces open-coded error handling with dev_err_probe() where appropriate, removes redundant probe error messages, returns the original error code directly, and fixes handling of -EPROBE_DEFER returned by platform_get_irq_optional() in the Rockchip SAI driver and devm_pinctrl_get() in the Rockchip I2S driver. Compile tested only. Link: https://patch.msgid.link/20260806052136.21034-1-phucduc.bui@gmail.com
This commit is contained in:
commit
87331e2aa4
|
|
@ -185,10 +185,8 @@ static int snd_rk_mc_probe(struct platform_device *pdev)
|
|||
gpiod_set_consumer_name(machine->gpio_hp_en, "hp_en");
|
||||
|
||||
ret = snd_soc_of_parse_card_name(card, "rockchip,model");
|
||||
if (ret) {
|
||||
dev_err(card->dev, "SoC parse card name failed %d\n", ret);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
rk_dailink.codecs[0].of_node = of_parse_phandle(np,
|
||||
"rockchip,audio-codec",
|
||||
|
|
@ -207,10 +205,9 @@ static int snd_rk_mc_probe(struct platform_device *pdev)
|
|||
}
|
||||
|
||||
ret = snd_soc_get_dai_name(&args, &rk_dailink.codecs[0].dai_name);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "Unable to get codec_dai_name\n");
|
||||
return ret;
|
||||
}
|
||||
if (ret)
|
||||
return dev_err_probe(&pdev->dev, ret,
|
||||
"Unable to get codec_dai_name\n");
|
||||
|
||||
rk_dailink.cpus->of_node = of_parse_phandle(np, "rockchip,i2s-controller",
|
||||
0);
|
||||
|
|
@ -223,11 +220,8 @@ static int snd_rk_mc_probe(struct platform_device *pdev)
|
|||
rk_dailink.platforms->of_node = rk_dailink.cpus->of_node;
|
||||
|
||||
ret = snd_soc_of_parse_audio_routing(card, "rockchip,routing");
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev,
|
||||
"Unable to parse 'rockchip,routing' property\n");
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
snd_soc_card_set_drvdata(card, machine);
|
||||
|
||||
|
|
|
|||
|
|
@ -767,16 +767,14 @@ static int rockchip_i2s_probe(struct platform_device *pdev)
|
|||
|
||||
/* try to prepare related clocks */
|
||||
i2s->hclk = devm_clk_get_enabled(&pdev->dev, "i2s_hclk");
|
||||
if (IS_ERR(i2s->hclk)) {
|
||||
dev_err(&pdev->dev, "Can't retrieve i2s bus clock\n");
|
||||
return PTR_ERR(i2s->hclk);
|
||||
}
|
||||
if (IS_ERR(i2s->hclk))
|
||||
return dev_err_probe(&pdev->dev, PTR_ERR(i2s->hclk),
|
||||
"Can't retrieve i2s bus clock\n");
|
||||
|
||||
i2s->mclk = devm_clk_get(&pdev->dev, "i2s_clk");
|
||||
if (IS_ERR(i2s->mclk)) {
|
||||
dev_err(&pdev->dev, "Can't retrieve i2s master clock\n");
|
||||
return PTR_ERR(i2s->mclk);
|
||||
}
|
||||
if (IS_ERR(i2s->mclk))
|
||||
return dev_err_probe(&pdev->dev, PTR_ERR(i2s->mclk),
|
||||
"Can't retrieve i2s master clock\n");
|
||||
|
||||
regs = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
|
||||
if (IS_ERR(regs))
|
||||
|
|
@ -792,7 +790,11 @@ static int rockchip_i2s_probe(struct platform_device *pdev)
|
|||
|
||||
i2s->bclk_ratio = 64;
|
||||
i2s->pinctrl = devm_pinctrl_get(&pdev->dev);
|
||||
if (!IS_ERR(i2s->pinctrl)) {
|
||||
if (IS_ERR(i2s->pinctrl)) {
|
||||
if (PTR_ERR(i2s->pinctrl) == -EPROBE_DEFER)
|
||||
return -EPROBE_DEFER;
|
||||
dev_dbg(&pdev->dev, "failed to find i2s pinctrl\n");
|
||||
} else {
|
||||
i2s->bclk_on = pinctrl_lookup_state(i2s->pinctrl, "bclk_on");
|
||||
if (!IS_ERR_OR_NULL(i2s->bclk_on)) {
|
||||
i2s->bclk_off = pinctrl_lookup_state(i2s->pinctrl, "bclk_off");
|
||||
|
|
@ -801,8 +803,6 @@ static int rockchip_i2s_probe(struct platform_device *pdev)
|
|||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
dev_dbg(&pdev->dev, "failed to find i2s pinctrl\n");
|
||||
}
|
||||
|
||||
i2s_pinctrl_select_bclk_off(i2s);
|
||||
|
|
@ -831,16 +831,12 @@ static int rockchip_i2s_probe(struct platform_device *pdev)
|
|||
&rockchip_i2s_component,
|
||||
dai, 1);
|
||||
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "Could not register DAI\n");
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = devm_snd_dmaengine_pcm_register(&pdev->dev, NULL, 0);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "Could not register PCM\n");
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1263,16 +1263,14 @@ static int rockchip_i2s_tdm_probe(struct platform_device *pdev)
|
|||
i2s_tdm->tx_reset = devm_reset_control_get_optional_exclusive(&pdev->dev,
|
||||
"tx-m");
|
||||
if (IS_ERR(i2s_tdm->tx_reset)) {
|
||||
ret = PTR_ERR(i2s_tdm->tx_reset);
|
||||
return dev_err_probe(i2s_tdm->dev, ret,
|
||||
return dev_err_probe(i2s_tdm->dev, PTR_ERR(i2s_tdm->tx_reset),
|
||||
"Error in tx-m reset control\n");
|
||||
}
|
||||
|
||||
i2s_tdm->rx_reset = devm_reset_control_get_optional_exclusive(&pdev->dev,
|
||||
"rx-m");
|
||||
if (IS_ERR(i2s_tdm->rx_reset)) {
|
||||
ret = PTR_ERR(i2s_tdm->rx_reset);
|
||||
return dev_err_probe(i2s_tdm->dev, ret,
|
||||
return dev_err_probe(i2s_tdm->dev, PTR_ERR(i2s_tdm->rx_reset),
|
||||
"Error in rx-m reset control\n");
|
||||
}
|
||||
|
||||
|
|
@ -1363,17 +1361,12 @@ static int rockchip_i2s_tdm_probe(struct platform_device *pdev)
|
|||
ret = devm_snd_soc_register_component(&pdev->dev,
|
||||
&rockchip_i2s_tdm_component,
|
||||
i2s_tdm->dai, 1);
|
||||
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "Could not register DAI\n");
|
||||
if (ret)
|
||||
goto err_suspend;
|
||||
}
|
||||
|
||||
ret = devm_snd_dmaengine_pcm_register(&pdev->dev, NULL, 0);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "Could not register PCM\n");
|
||||
if (ret)
|
||||
goto err_suspend;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
|
|
|
|||
|
|
@ -428,11 +428,8 @@ static int snd_rk_mc_probe(struct platform_device *pdev)
|
|||
|
||||
/* Parse card name. */
|
||||
ret = snd_soc_of_parse_card_name(card, "rockchip,model");
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev,
|
||||
"Soc parse card name failed %d\n", ret);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* register the soc card */
|
||||
ret = devm_snd_soc_register_card(&pdev->dev, card);
|
||||
|
|
|
|||
|
|
@ -630,10 +630,8 @@ static int rockchip_pdm_probe(struct platform_device *pdev)
|
|||
&rockchip_pdm_component,
|
||||
&rockchip_pdm_dai, 1);
|
||||
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "could not register dai: %d\n", ret);
|
||||
if (ret)
|
||||
goto err_suspend;
|
||||
}
|
||||
|
||||
rockchip_pdm_rxctrl(pdm, 0);
|
||||
|
||||
|
|
@ -642,10 +640,8 @@ static int rockchip_pdm_probe(struct platform_device *pdev)
|
|||
goto err_suspend;
|
||||
|
||||
ret = devm_snd_dmaengine_pcm_register(&pdev->dev, NULL, 0);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "could not register pcm: %d\n", ret);
|
||||
if (ret)
|
||||
goto err_suspend;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
|
|
|
|||
|
|
@ -191,11 +191,8 @@ static int snd_rk_mc_probe(struct platform_device *pdev)
|
|||
rk_dailink.platforms->of_node = rk_dailink.cpus->of_node;
|
||||
|
||||
ret = snd_soc_of_parse_card_name(card, "rockchip,model");
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev,
|
||||
"Soc parse card name failed %d\n", ret);
|
||||
if (ret)
|
||||
goto put_cpu_of_node;
|
||||
}
|
||||
|
||||
ret = devm_snd_soc_register_card(&pdev->dev, card);
|
||||
if (ret) {
|
||||
|
|
|
|||
|
|
@ -1428,12 +1428,13 @@ static int rockchip_sai_probe(struct platform_device *pdev)
|
|||
"Failed to initialize regmap\n");
|
||||
|
||||
irq = platform_get_irq_optional(pdev, 0);
|
||||
if (irq == -EPROBE_DEFER)
|
||||
return irq;
|
||||
if (irq > 0) {
|
||||
ret = devm_request_irq(&pdev->dev, irq, rockchip_sai_isr,
|
||||
IRQF_SHARED, node->name, sai);
|
||||
if (ret)
|
||||
return dev_err_probe(&pdev->dev, ret,
|
||||
"Failed to request irq %d\n", irq);
|
||||
return ret;
|
||||
} else {
|
||||
dev_dbg(&pdev->dev, "Asked for an IRQ but got %d\n", irq);
|
||||
}
|
||||
|
|
@ -1456,7 +1457,7 @@ static int rockchip_sai_probe(struct platform_device *pdev)
|
|||
|
||||
ret = rockchip_sai_parse_paths(sai, node);
|
||||
if (ret)
|
||||
return dev_err_probe(&pdev->dev, ret, "Failed to parse paths\n");
|
||||
return ret;
|
||||
|
||||
/*
|
||||
* From here on, all register accesses need to be wrapped in
|
||||
|
|
@ -1471,18 +1472,14 @@ static int rockchip_sai_probe(struct platform_device *pdev)
|
|||
return dev_err_probe(&pdev->dev, ret, "Failed to resume device\n");
|
||||
|
||||
ret = devm_snd_dmaengine_pcm_register(&pdev->dev, NULL, 0);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "Failed to register PCM: %d\n", ret);
|
||||
if (ret)
|
||||
goto err_runtime_suspend;
|
||||
}
|
||||
|
||||
ret = devm_snd_soc_register_component(&pdev->dev,
|
||||
&rockchip_sai_component,
|
||||
dai, 1);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "Failed to register component: %d\n", ret);
|
||||
if (ret)
|
||||
goto err_runtime_suspend;
|
||||
}
|
||||
|
||||
pm_runtime_use_autosuspend(&pdev->dev);
|
||||
pm_runtime_put(&pdev->dev);
|
||||
|
|
|
|||
|
|
@ -396,13 +396,13 @@ static int rk_spdif_probe(struct platform_device *pdev)
|
|||
|
||||
ret = devm_snd_dmaengine_pcm_register(&pdev->dev, NULL, 0);
|
||||
if (ret)
|
||||
return dev_err_probe(&pdev->dev, ret, "Could not register PCM\n");
|
||||
return ret;
|
||||
|
||||
ret = devm_snd_soc_register_component(&pdev->dev,
|
||||
&rk_spdif_component,
|
||||
&rk_spdif_dai, 1);
|
||||
if (ret)
|
||||
return dev_err_probe(&pdev->dev, ret, "Could not register DAI\n");
|
||||
return ret;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user