Skip to content

Commit 65880d3

Browse files
Bence Csókásbroonie
authored andcommitted
ASoC: sun4i-codec: Use new devm clk and reset APIs
Clean up error handling by using the new devm_ clock and reset functions. This should make it easier to add new code, as we can eliminate the "goto ladder" in probe(). Signed-off-by: Bence Csókás <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Mark Brown <[email protected]>
1 parent 41f1d2b commit 65880d3

File tree

1 file changed

+7
-35
lines changed

1 file changed

+7
-35
lines changed

sound/soc/sunxi/sun4i-codec.c

Lines changed: 7 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -2273,7 +2273,7 @@ static int sun4i_codec_probe(struct platform_device *pdev)
22732273
}
22742274

22752275
/* Get the clocks from the DT */
2276-
scodec->clk_apb = devm_clk_get(&pdev->dev, "apb");
2276+
scodec->clk_apb = devm_clk_get_enabled(&pdev->dev, "apb");
22772277
if (IS_ERR(scodec->clk_apb)) {
22782278
dev_err(&pdev->dev, "Failed to get the APB clock\n");
22792279
return PTR_ERR(scodec->clk_apb);
@@ -2286,8 +2286,7 @@ static int sun4i_codec_probe(struct platform_device *pdev)
22862286
}
22872287

22882288
if (quirks->has_reset) {
2289-
scodec->rst = devm_reset_control_get_exclusive(&pdev->dev,
2290-
NULL);
2289+
scodec->rst = devm_reset_control_get_exclusive_deasserted(&pdev->dev, NULL);
22912290
if (IS_ERR(scodec->rst)) {
22922291
dev_err(&pdev->dev, "Failed to get reset control\n");
22932292
return PTR_ERR(scodec->rst);
@@ -2323,22 +2322,6 @@ static int sun4i_codec_probe(struct platform_device *pdev)
23232322
return ret;
23242323
}
23252324

2326-
/* Enable the bus clock */
2327-
if (clk_prepare_enable(scodec->clk_apb)) {
2328-
dev_err(&pdev->dev, "Failed to enable the APB clock\n");
2329-
return -EINVAL;
2330-
}
2331-
2332-
/* Deassert the reset control */
2333-
if (scodec->rst) {
2334-
ret = reset_control_deassert(scodec->rst);
2335-
if (ret) {
2336-
dev_err(&pdev->dev,
2337-
"Failed to deassert the reset control\n");
2338-
goto err_clk_disable;
2339-
}
2340-
}
2341-
23422325
/* DMA configuration for TX FIFO */
23432326
scodec->playback_dma_data.addr = res->start + quirks->reg_dac_txdata;
23442327
scodec->playback_dma_data.maxburst = quirks->dma_max_burst;
@@ -2356,57 +2339,46 @@ static int sun4i_codec_probe(struct platform_device *pdev)
23562339
&sun4i_codec_dai, 1);
23572340
if (ret) {
23582341
dev_err(&pdev->dev, "Failed to register our codec\n");
2359-
goto err_assert_reset;
2342+
return ret;
23602343
}
23612344

23622345
ret = devm_snd_soc_register_component(&pdev->dev,
23632346
&sun4i_codec_component,
23642347
&dummy_cpu_dai, 1);
23652348
if (ret) {
23662349
dev_err(&pdev->dev, "Failed to register our DAI\n");
2367-
goto err_assert_reset;
2350+
return ret;
23682351
}
23692352

23702353
ret = devm_snd_dmaengine_pcm_register(&pdev->dev, NULL, 0);
23712354
if (ret) {
23722355
dev_err(&pdev->dev, "Failed to register against DMAEngine\n");
2373-
goto err_assert_reset;
2356+
return ret;
23742357
}
23752358

23762359
card = quirks->create_card(&pdev->dev);
23772360
if (IS_ERR(card)) {
23782361
ret = PTR_ERR(card);
23792362
dev_err(&pdev->dev, "Failed to create our card\n");
2380-
goto err_assert_reset;
2363+
return ret;
23812364
}
23822365

23832366
snd_soc_card_set_drvdata(card, scodec);
23842367

23852368
ret = snd_soc_register_card(card);
23862369
if (ret) {
23872370
dev_err_probe(&pdev->dev, ret, "Failed to register our card\n");
2388-
goto err_assert_reset;
2371+
return ret;
23892372
}
23902373

23912374
return 0;
2392-
2393-
err_assert_reset:
2394-
if (scodec->rst)
2395-
reset_control_assert(scodec->rst);
2396-
err_clk_disable:
2397-
clk_disable_unprepare(scodec->clk_apb);
2398-
return ret;
23992375
}
24002376

24012377
static void sun4i_codec_remove(struct platform_device *pdev)
24022378
{
24032379
struct snd_soc_card *card = platform_get_drvdata(pdev);
2404-
struct sun4i_codec *scodec = snd_soc_card_get_drvdata(card);
24052380

24062381
snd_soc_unregister_card(card);
2407-
if (scodec->rst)
2408-
reset_control_assert(scodec->rst);
2409-
clk_disable_unprepare(scodec->clk_apb);
24102382
}
24112383

24122384
static struct platform_driver sun4i_codec_driver = {

0 commit comments

Comments
 (0)