sound/soc/tegra/tegra186_asrc.c | 11 +++-- sound/soc/tegra/tegra186_dspk.c | 21 ++++---- sound/soc/tegra/tegra210_admaif.c | 22 +++++---- sound/soc/tegra/tegra210_adx.c | 17 ++++--- sound/soc/tegra/tegra210_ahub.c | 25 +++++----- sound/soc/tegra/tegra210_amx.c | 13 +++-- sound/soc/tegra/tegra210_dmic.c | 18 +++---- sound/soc/tegra/tegra210_i2s.c | 22 +++++---- sound/soc/tegra/tegra210_mbdrc.c | 10 ++-- sound/soc/tegra/tegra210_mixer.c | 13 +++-- sound/soc/tegra/tegra210_mvc.c | 11 +++-- sound/soc/tegra/tegra210_ope.c | 15 +++--- sound/soc/tegra/tegra210_peq.c | 10 ++-- sound/soc/tegra/tegra210_sfc.c | 11 +++-- sound/soc/tegra/tegra_asoc_machine.c | 61 +++++++++++++----------- sound/soc/tegra/tegra_audio_graph_card.c | 21 ++++---- 16 files changed, 169 insertions(+), 132 deletions(-)
Add dev_err_probe() and dev_err() logging across probe and runtime
error paths in Tegra audio drivers to improve debuggability.
Use dev_err_probe() only where -EPROBE_DEFER can be returned.
Signed-off-by: Sheetal <sheetal@nvidia.com>
---
sound/soc/tegra/tegra186_asrc.c | 11 +++--
sound/soc/tegra/tegra186_dspk.c | 21 ++++----
sound/soc/tegra/tegra210_admaif.c | 22 +++++----
sound/soc/tegra/tegra210_adx.c | 17 ++++---
sound/soc/tegra/tegra210_ahub.c | 25 +++++-----
sound/soc/tegra/tegra210_amx.c | 13 +++--
sound/soc/tegra/tegra210_dmic.c | 18 +++----
sound/soc/tegra/tegra210_i2s.c | 22 +++++----
sound/soc/tegra/tegra210_mbdrc.c | 10 ++--
sound/soc/tegra/tegra210_mixer.c | 13 +++--
sound/soc/tegra/tegra210_mvc.c | 11 +++--
sound/soc/tegra/tegra210_ope.c | 15 +++---
sound/soc/tegra/tegra210_peq.c | 10 ++--
sound/soc/tegra/tegra210_sfc.c | 11 +++--
sound/soc/tegra/tegra_asoc_machine.c | 61 +++++++++++++-----------
sound/soc/tegra/tegra_audio_graph_card.c | 21 ++++----
16 files changed, 169 insertions(+), 132 deletions(-)
diff --git a/sound/soc/tegra/tegra186_asrc.c b/sound/soc/tegra/tegra186_asrc.c
index d2a5ec7c54cc..98e911e2ed74 100644
--- a/sound/soc/tegra/tegra186_asrc.c
+++ b/sound/soc/tegra/tegra186_asrc.c
@@ -984,8 +984,10 @@ static int tegra186_asrc_platform_probe(struct platform_device *pdev)
dev_set_drvdata(dev, asrc);
regs = devm_platform_ioremap_resource(pdev, 0);
- if (IS_ERR(regs))
+ if (IS_ERR(regs)) {
+ dev_err(dev, "failed to map registers\n");
return PTR_ERR(regs);
+ }
asrc->regmap = devm_regmap_init_mmio(dev, regs,
&tegra186_asrc_regmap_config);
@@ -1016,10 +1018,9 @@ static int tegra186_asrc_platform_probe(struct platform_device *pdev)
err = devm_snd_soc_register_component(dev, &tegra186_asrc_cmpnt,
tegra186_asrc_dais,
ARRAY_SIZE(tegra186_asrc_dais));
- if (err) {
- dev_err(dev, "can't register ASRC component, err: %d\n", err);
- return err;
- }
+ if (err)
+ return dev_err_probe(dev, err,
+ "can't register ASRC component\n");
pm_runtime_enable(dev);
diff --git a/sound/soc/tegra/tegra186_dspk.c b/sound/soc/tegra/tegra186_dspk.c
index 8816e4967331..1aa94c98294a 100644
--- a/sound/soc/tegra/tegra186_dspk.c
+++ b/sound/soc/tegra/tegra186_dspk.c
@@ -496,14 +496,15 @@ static int tegra186_dspk_platform_probe(struct platform_device *pdev)
dev_set_drvdata(dev, dspk);
dspk->clk_dspk = devm_clk_get(dev, "dspk");
- if (IS_ERR(dspk->clk_dspk)) {
- dev_err(dev, "can't retrieve DSPK clock\n");
- return PTR_ERR(dspk->clk_dspk);
- }
+ if (IS_ERR(dspk->clk_dspk))
+ return dev_err_probe(dev, PTR_ERR(dspk->clk_dspk),
+ "can't retrieve DSPK clock\n");
regs = devm_platform_ioremap_resource(pdev, 0);
- if (IS_ERR(regs))
+ if (IS_ERR(regs)) {
+ dev_err(dev, "failed to map registers\n");
return PTR_ERR(regs);
+ }
dspk->regmap = devm_regmap_init_mmio(dev, regs, &tegra186_dspk_regmap);
if (IS_ERR(dspk->regmap)) {
@@ -516,11 +517,9 @@ static int tegra186_dspk_platform_probe(struct platform_device *pdev)
err = devm_snd_soc_register_component(dev, &tegra186_dspk_cmpnt,
tegra186_dspk_dais,
ARRAY_SIZE(tegra186_dspk_dais));
- if (err) {
- dev_err(dev, "can't register DSPK component, err: %d\n",
- err);
- return err;
- }
+ if (err)
+ return dev_err_probe(dev, err,
+ "can't register DSPK component\n");
pm_runtime_enable(dev);
diff --git a/sound/soc/tegra/tegra210_admaif.c b/sound/soc/tegra/tegra210_admaif.c
index 0976779d29f2..5d690a2f8509 100644
--- a/sound/soc/tegra/tegra210_admaif.c
+++ b/sound/soc/tegra/tegra210_admaif.c
@@ -408,6 +408,7 @@ static int tegra_admaif_start(struct snd_soc_dai *dai, int direction)
reg = CH_RX_REG(TEGRA_ADMAIF_RX_ENABLE, dai->id);
break;
default:
+ dev_err(dai->dev, "invalid stream direction: %d\n", direction);
return -EINVAL;
}
@@ -441,6 +442,7 @@ static int tegra_admaif_stop(struct snd_soc_dai *dai, int direction)
reset_reg = CH_RX_REG(TEGRA_ADMAIF_RX_SOFT_RESET, dai->id);
break;
default:
+ dev_err(dai->dev, "invalid stream direction: %d\n", direction);
return -EINVAL;
}
@@ -489,6 +491,7 @@ static int tegra_admaif_trigger(struct snd_pcm_substream *substream, int cmd,
case SNDRV_PCM_TRIGGER_SUSPEND:
return tegra_admaif_stop(dai, substream->stream);
default:
+ dev_err(dai->dev, "invalid trigger command: %d\n", cmd);
return -EINVAL;
}
}
@@ -953,8 +956,10 @@ static int tegra_admaif_probe(struct platform_device *pdev)
}
regs = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
- if (IS_ERR(regs))
+ if (IS_ERR(regs)) {
+ dev_err(&pdev->dev, "failed to map registers\n");
return PTR_ERR(regs);
+ }
admaif->regmap = devm_regmap_init_mmio(&pdev->dev, regs,
admaif->soc_data->regmap_conf);
@@ -966,10 +971,9 @@ static int tegra_admaif_probe(struct platform_device *pdev)
regcache_cache_only(admaif->regmap, true);
err = tegra_isomgr_adma_register(&pdev->dev);
- if (err) {
- dev_err(&pdev->dev, "Failed to add interconnect path\n");
- return err;
- }
+ if (err)
+ return dev_err_probe(&pdev->dev, err,
+ "failed to add interconnect path\n");
regmap_update_bits(admaif->regmap, admaif->soc_data->global_base +
TEGRA_ADMAIF_GLOBAL_ENABLE, 1, 1);
@@ -1009,11 +1013,9 @@ static int tegra_admaif_probe(struct platform_device *pdev)
admaif->soc_data->cmpnt,
admaif->soc_data->dais,
admaif->soc_data->num_ch);
- if (err) {
- dev_err(&pdev->dev,
- "can't register ADMAIF component, err: %d\n", err);
- return err;
- }
+ if (err)
+ return dev_err_probe(&pdev->dev, err,
+ "can't register ADMAIF component\n");
pm_runtime_enable(&pdev->dev);
diff --git a/sound/soc/tegra/tegra210_adx.c b/sound/soc/tegra/tegra210_adx.c
index 95875c75ddf8..d7d075fd54b2 100644
--- a/sound/soc/tegra/tegra210_adx.c
+++ b/sound/soc/tegra/tegra210_adx.c
@@ -134,8 +134,11 @@ static int tegra210_adx_set_audio_cif(struct snd_soc_dai *dai,
memset(&cif_conf, 0, sizeof(struct tegra_cif_conf));
- if (channels < 1 || channels > adx->soc_data->max_ch)
+ if (channels < 1 || channels > adx->soc_data->max_ch) {
+ dev_err(dai->dev, "invalid channels: %u (max %u)\n",
+ channels, adx->soc_data->max_ch);
return -EINVAL;
+ }
switch (format) {
case SNDRV_PCM_FORMAT_S8:
@@ -149,6 +152,7 @@ static int tegra210_adx_set_audio_cif(struct snd_soc_dai *dai,
audio_bits = TEGRA_ACIF_BITS_32;
break;
default:
+ dev_err(dai->dev, "unsupported format: %d\n", format);
return -EINVAL;
}
@@ -688,8 +692,10 @@ static int tegra210_adx_platform_probe(struct platform_device *pdev)
dev_set_drvdata(dev, adx);
regs = devm_platform_ioremap_resource(pdev, 0);
- if (IS_ERR(regs))
+ if (IS_ERR(regs)) {
+ dev_err(dev, "failed to map registers\n");
return PTR_ERR(regs);
+ }
adx->regmap = devm_regmap_init_mmio(dev, regs,
soc_data->regmap_conf);
@@ -717,10 +723,9 @@ static int tegra210_adx_platform_probe(struct platform_device *pdev)
err = devm_snd_soc_register_component(dev, &tegra210_adx_cmpnt,
tegra210_adx_dais,
ARRAY_SIZE(tegra210_adx_dais));
- if (err) {
- dev_err(dev, "can't register ADX component, err: %d\n", err);
- return err;
- }
+ if (err)
+ return dev_err_probe(dev, err,
+ "can't register ADX component\n");
pm_runtime_enable(dev);
diff --git a/sound/soc/tegra/tegra210_ahub.c b/sound/soc/tegra/tegra210_ahub.c
index 43a45f785d5b..4626dd0a4d55 100644
--- a/sound/soc/tegra/tegra210_ahub.c
+++ b/sound/soc/tegra/tegra210_ahub.c
@@ -64,8 +64,11 @@ static int tegra_ahub_put_value_enum(struct snd_kcontrol *kctl,
unsigned int i, bit_pos, reg_idx = 0, reg_val = 0;
int change = 0;
- if (item[0] >= e->items)
+ if (item[0] >= e->items) {
+ dev_err(cmpnt->dev, "invalid MUX item: %u >= %u\n",
+ item[0], e->items);
return -EINVAL;
+ }
if (value) {
/* Get the register index and value to set */
@@ -2265,14 +2268,15 @@ static int tegra_ahub_probe(struct platform_device *pdev)
platform_set_drvdata(pdev, ahub);
ahub->clk = devm_clk_get(&pdev->dev, "ahub");
- if (IS_ERR(ahub->clk)) {
- dev_err(&pdev->dev, "can't retrieve AHUB clock\n");
- return PTR_ERR(ahub->clk);
- }
+ if (IS_ERR(ahub->clk))
+ return dev_err_probe(&pdev->dev, PTR_ERR(ahub->clk),
+ "can't retrieve AHUB clock\n");
regs = devm_platform_ioremap_resource(pdev, 0);
- if (IS_ERR(regs))
+ if (IS_ERR(regs)) {
+ dev_err(&pdev->dev, "failed to map registers\n");
return PTR_ERR(regs);
+ }
ahub->regmap = devm_regmap_init_mmio(&pdev->dev, regs,
ahub->soc_data->regmap_config);
@@ -2287,16 +2291,15 @@ static int tegra_ahub_probe(struct platform_device *pdev)
ahub->soc_data->cmpnt_drv,
ahub->soc_data->dai_drv,
ahub->soc_data->num_dais);
- if (err) {
- dev_err(&pdev->dev, "can't register AHUB component, err: %d\n",
- err);
- return err;
- }
+ if (err)
+ return dev_err_probe(&pdev->dev, err,
+ "can't register AHUB component\n");
pm_runtime_enable(&pdev->dev);
err = of_platform_populate(pdev->dev.of_node, NULL, NULL, &pdev->dev);
if (err) {
+ dev_err(&pdev->dev, "failed to populate child nodes: %d\n", err);
pm_runtime_disable(&pdev->dev);
return err;
}
diff --git a/sound/soc/tegra/tegra210_amx.c b/sound/soc/tegra/tegra210_amx.c
index bfda82505298..1b7fb84a0f34 100644
--- a/sound/soc/tegra/tegra210_amx.c
+++ b/sound/soc/tegra/tegra210_amx.c
@@ -163,6 +163,8 @@ static int tegra210_amx_set_audio_cif(struct snd_soc_dai *dai,
audio_bits = TEGRA_ACIF_BITS_32;
break;
default:
+ dev_err(dai->dev, "unsupported format: %d\n",
+ params_format(params));
return -EINVAL;
}
@@ -738,8 +740,10 @@ static int tegra210_amx_platform_probe(struct platform_device *pdev)
dev_set_drvdata(dev, amx);
regs = devm_platform_ioremap_resource(pdev, 0);
- if (IS_ERR(regs))
+ if (IS_ERR(regs)) {
+ dev_err(dev, "failed to map registers\n");
return PTR_ERR(regs);
+ }
amx->regmap = devm_regmap_init_mmio(dev, regs,
amx->soc_data->regmap_conf);
@@ -767,10 +771,9 @@ static int tegra210_amx_platform_probe(struct platform_device *pdev)
err = devm_snd_soc_register_component(dev, &tegra210_amx_cmpnt,
tegra210_amx_dais,
ARRAY_SIZE(tegra210_amx_dais));
- if (err) {
- dev_err(dev, "can't register AMX component, err: %d\n", err);
- return err;
- }
+ if (err)
+ return dev_err_probe(dev, err,
+ "can't register AMX component\n");
pm_runtime_enable(dev);
diff --git a/sound/soc/tegra/tegra210_dmic.c b/sound/soc/tegra/tegra210_dmic.c
index 93def7ac4fde..5a4bd5cef30a 100644
--- a/sound/soc/tegra/tegra210_dmic.c
+++ b/sound/soc/tegra/tegra210_dmic.c
@@ -507,14 +507,15 @@ static int tegra210_dmic_probe(struct platform_device *pdev)
dev_set_drvdata(dev, dmic);
dmic->clk_dmic = devm_clk_get(dev, "dmic");
- if (IS_ERR(dmic->clk_dmic)) {
- dev_err(dev, "can't retrieve DMIC clock\n");
- return PTR_ERR(dmic->clk_dmic);
- }
+ if (IS_ERR(dmic->clk_dmic))
+ return dev_err_probe(dev, PTR_ERR(dmic->clk_dmic),
+ "can't retrieve DMIC clock\n");
regs = devm_platform_ioremap_resource(pdev, 0);
- if (IS_ERR(regs))
+ if (IS_ERR(regs)) {
+ dev_err(dev, "failed to map registers\n");
return PTR_ERR(regs);
+ }
dmic->regmap = devm_regmap_init_mmio(dev, regs,
&tegra210_dmic_regmap_config);
@@ -528,10 +529,9 @@ static int tegra210_dmic_probe(struct platform_device *pdev)
err = devm_snd_soc_register_component(dev, &tegra210_dmic_compnt,
tegra210_dmic_dais,
ARRAY_SIZE(tegra210_dmic_dais));
- if (err) {
- dev_err(dev, "can't register DMIC component, err: %d\n", err);
- return err;
- }
+ if (err)
+ return dev_err_probe(dev, err,
+ "can't register DMIC component\n");
pm_runtime_enable(dev);
diff --git a/sound/soc/tegra/tegra210_i2s.c b/sound/soc/tegra/tegra210_i2s.c
index d8e02f0a3025..7bf76c9b640f 100644
--- a/sound/soc/tegra/tegra210_i2s.c
+++ b/sound/soc/tegra/tegra210_i2s.c
@@ -161,6 +161,7 @@ static int tegra210_i2s_init(struct snd_soc_dapm_widget *w,
stream = SNDRV_PCM_STREAM_CAPTURE;
status_reg = TEGRA210_I2S_TX_STATUS + i2s->soc_data->tx_offset;
} else {
+ dev_err(dev, "invalid I2S direction register 0x%x\n", w->reg);
return -EINVAL;
}
@@ -235,6 +236,7 @@ static int tegra210_i2s_set_fmt(struct snd_soc_dai *dai,
val = I2S_CTRL_MASTER_EN;
break;
default:
+ dev_err(dai->dev, "invalid clock provider format 0x%x\n", fmt);
return -EINVAL;
}
@@ -270,6 +272,7 @@ static int tegra210_i2s_set_fmt(struct snd_soc_dai *dai,
tegra210_i2s_set_data_offset(i2s, 0);
break;
default:
+ dev_err(dai->dev, "invalid I2S frame format 0x%x\n", fmt);
return -EINVAL;
}
@@ -290,6 +293,7 @@ static int tegra210_i2s_set_fmt(struct snd_soc_dai *dai,
val ^= I2S_CTRL_LRCK_POL_MASK;
break;
default:
+ dev_err(dai->dev, "invalid I2S clock inversion 0x%x\n", fmt);
return -EINVAL;
}
@@ -1070,10 +1074,9 @@ static int tegra210_i2s_probe(struct platform_device *pdev)
dev_set_drvdata(dev, i2s);
i2s->clk_i2s = devm_clk_get(dev, "i2s");
- if (IS_ERR(i2s->clk_i2s)) {
- dev_err(dev, "can't retrieve I2S bit clock\n");
- return PTR_ERR(i2s->clk_i2s);
- }
+ if (IS_ERR(i2s->clk_i2s))
+ return dev_err_probe(dev, PTR_ERR(i2s->clk_i2s),
+ "can't retrieve I2S bit clock\n");
/*
* Not an error, as this clock is needed only when some other I/O
@@ -1085,8 +1088,10 @@ static int tegra210_i2s_probe(struct platform_device *pdev)
dev_dbg(dev, "can't retrieve I2S sync input clock\n");
regs = devm_platform_ioremap_resource(pdev, 0);
- if (IS_ERR(regs))
+ if (IS_ERR(regs)) {
+ dev_err(dev, "failed to map registers\n");
return PTR_ERR(regs);
+ }
i2s->regmap = devm_regmap_init_mmio(dev, regs,
i2s->soc_data->regmap_conf);
@@ -1108,10 +1113,9 @@ static int tegra210_i2s_probe(struct platform_device *pdev)
err = devm_snd_soc_register_component(dev, i2s->soc_data->i2s_cmpnt,
tegra210_i2s_dais,
ARRAY_SIZE(tegra210_i2s_dais));
- if (err) {
- dev_err(dev, "can't register I2S component, err: %d\n", err);
- return err;
- }
+ if (err)
+ return dev_err_probe(dev, err,
+ "can't register I2S component\n");
pm_runtime_enable(dev);
diff --git a/sound/soc/tegra/tegra210_mbdrc.c b/sound/soc/tegra/tegra210_mbdrc.c
index 6a268dbb7197..558b7a21b0be 100644
--- a/sound/soc/tegra/tegra210_mbdrc.c
+++ b/sound/soc/tegra/tegra210_mbdrc.c
@@ -987,8 +987,10 @@ int tegra210_mbdrc_regmap_init(struct platform_device *pdev)
int err;
child = of_get_child_by_name(dev->of_node, "dynamic-range-compressor");
- if (!child)
+ if (!child) {
+ dev_err(dev, "missing 'dynamic-range-compressor' DT child node\n");
return -ENODEV;
+ }
err = of_address_to_resource(child, 0, &mem);
of_node_put(child);
@@ -999,13 +1001,15 @@ int tegra210_mbdrc_regmap_init(struct platform_device *pdev)
mem.flags = IORESOURCE_MEM;
regs = devm_ioremap_resource(dev, &mem);
- if (IS_ERR(regs))
+ if (IS_ERR(regs)) {
+ dev_err(dev, "failed to map MBDRC registers\n");
return PTR_ERR(regs);
+ }
ope->mbdrc_regmap = devm_regmap_init_mmio(dev, regs,
&tegra210_mbdrc_regmap_cfg);
if (IS_ERR(ope->mbdrc_regmap)) {
- dev_err(dev, "regmap init failed\n");
+ dev_err(dev, "MBDRC regmap init failed\n");
return PTR_ERR(ope->mbdrc_regmap);
}
diff --git a/sound/soc/tegra/tegra210_mixer.c b/sound/soc/tegra/tegra210_mixer.c
index 6d3a2b76fd61..d9318aaaf32e 100644
--- a/sound/soc/tegra/tegra210_mixer.c
+++ b/sound/soc/tegra/tegra210_mixer.c
@@ -253,6 +253,8 @@ static int tegra210_mixer_set_audio_cif(struct tegra210_mixer *mixer,
audio_bits = TEGRA_ACIF_BITS_32;
break;
default:
+ dev_err(regmap_get_device(mixer->regmap),
+ "unsupported format for MIXER CIF\n");
return -EINVAL;
}
@@ -636,8 +638,10 @@ static int tegra210_mixer_platform_probe(struct platform_device *pdev)
mixer->gain_value[i] = gain_params.gain_value;
regs = devm_platform_ioremap_resource(pdev, 0);
- if (IS_ERR(regs))
+ if (IS_ERR(regs)) {
+ dev_err(dev, "failed to map registers\n");
return PTR_ERR(regs);
+ }
mixer->regmap = devm_regmap_init_mmio(dev, regs,
&tegra210_mixer_regmap_config);
@@ -651,10 +655,9 @@ static int tegra210_mixer_platform_probe(struct platform_device *pdev)
err = devm_snd_soc_register_component(dev, &tegra210_mixer_cmpnt,
tegra210_mixer_dais,
ARRAY_SIZE(tegra210_mixer_dais));
- if (err) {
- dev_err(dev, "can't register MIXER component, err: %d\n", err);
- return err;
- }
+ if (err)
+ return dev_err_probe(dev, err,
+ "can't register MIXER component\n");
pm_runtime_enable(dev);
diff --git a/sound/soc/tegra/tegra210_mvc.c b/sound/soc/tegra/tegra210_mvc.c
index 6cdc5e1f5507..11bd0ea22797 100644
--- a/sound/soc/tegra/tegra210_mvc.c
+++ b/sound/soc/tegra/tegra210_mvc.c
@@ -726,8 +726,10 @@ static int tegra210_mvc_platform_probe(struct platform_device *pdev)
mvc->ctrl_value = TEGRA210_MVC_CTRL_DEFAULT;
regs = devm_platform_ioremap_resource(pdev, 0);
- if (IS_ERR(regs))
+ if (IS_ERR(regs)) {
+ dev_err(dev, "failed to map registers\n");
return PTR_ERR(regs);
+ }
mvc->regmap = devm_regmap_init_mmio(dev, regs,
&tegra210_mvc_regmap_config);
@@ -741,10 +743,9 @@ static int tegra210_mvc_platform_probe(struct platform_device *pdev)
err = devm_snd_soc_register_component(dev, &tegra210_mvc_cmpnt,
tegra210_mvc_dais,
ARRAY_SIZE(tegra210_mvc_dais));
- if (err) {
- dev_err(dev, "can't register MVC component, err: %d\n", err);
- return err;
- }
+ if (err)
+ return dev_err_probe(dev, err,
+ "can't register MVC component\n");
pm_runtime_enable(dev);
diff --git a/sound/soc/tegra/tegra210_ope.c b/sound/soc/tegra/tegra210_ope.c
index a440888dcdbd..e311de41a078 100644
--- a/sound/soc/tegra/tegra210_ope.c
+++ b/sound/soc/tegra/tegra210_ope.c
@@ -313,8 +313,10 @@ static int tegra210_ope_probe(struct platform_device *pdev)
return -ENOMEM;
regs = devm_platform_ioremap_resource(pdev, 0);
- if (IS_ERR(regs))
+ if (IS_ERR(regs)) {
+ dev_err(dev, "failed to map registers\n");
return PTR_ERR(regs);
+ }
ope->regmap = devm_regmap_init_mmio(dev, regs,
&tegra210_ope_regmap_config);
@@ -329,23 +331,22 @@ static int tegra210_ope_probe(struct platform_device *pdev)
err = tegra210_peq_regmap_init(pdev);
if (err < 0) {
- dev_err(dev, "PEQ init failed\n");
+ dev_err(dev, "PEQ init failed: %d\n", err);
return err;
}
err = tegra210_mbdrc_regmap_init(pdev);
if (err < 0) {
- dev_err(dev, "MBDRC init failed\n");
+ dev_err(dev, "MBDRC init failed: %d\n", err);
return err;
}
err = devm_snd_soc_register_component(dev, &tegra210_ope_cmpnt,
tegra210_ope_dais,
ARRAY_SIZE(tegra210_ope_dais));
- if (err) {
- dev_err(dev, "can't register OPE component, err: %d\n", err);
- return err;
- }
+ if (err)
+ return dev_err_probe(dev, err,
+ "can't register OPE component\n");
pm_runtime_enable(dev);
diff --git a/sound/soc/tegra/tegra210_peq.c b/sound/soc/tegra/tegra210_peq.c
index 2f72e9d541dc..4b692c2055bc 100644
--- a/sound/soc/tegra/tegra210_peq.c
+++ b/sound/soc/tegra/tegra210_peq.c
@@ -407,8 +407,10 @@ int tegra210_peq_regmap_init(struct platform_device *pdev)
int err;
child = of_get_child_by_name(dev->of_node, "equalizer");
- if (!child)
+ if (!child) {
+ dev_err(dev, "missing 'equalizer' DT child node\n");
return -ENODEV;
+ }
err = of_address_to_resource(child, 0, &mem);
of_node_put(child);
@@ -419,12 +421,14 @@ int tegra210_peq_regmap_init(struct platform_device *pdev)
mem.flags = IORESOURCE_MEM;
regs = devm_ioremap_resource(dev, &mem);
- if (IS_ERR(regs))
+ if (IS_ERR(regs)) {
+ dev_err(dev, "failed to map PEQ registers\n");
return PTR_ERR(regs);
+ }
ope->peq_regmap = devm_regmap_init_mmio(dev, regs,
&tegra210_peq_regmap_config);
if (IS_ERR(ope->peq_regmap)) {
- dev_err(dev, "regmap init failed\n");
+ dev_err(dev, "PEQ regmap init failed\n");
return PTR_ERR(ope->peq_regmap);
}
diff --git a/sound/soc/tegra/tegra210_sfc.c b/sound/soc/tegra/tegra210_sfc.c
index b298bf0421b1..0f342fae058f 100644
--- a/sound/soc/tegra/tegra210_sfc.c
+++ b/sound/soc/tegra/tegra210_sfc.c
@@ -3593,8 +3593,10 @@ static int tegra210_sfc_platform_probe(struct platform_device *pdev)
dev_set_drvdata(dev, sfc);
regs = devm_platform_ioremap_resource(pdev, 0);
- if (IS_ERR(regs))
+ if (IS_ERR(regs)) {
+ dev_err(dev, "failed to map registers\n");
return PTR_ERR(regs);
+ }
sfc->regmap = devm_regmap_init_mmio(dev, regs,
&tegra210_sfc_regmap_config);
@@ -3608,10 +3610,9 @@ static int tegra210_sfc_platform_probe(struct platform_device *pdev)
err = devm_snd_soc_register_component(dev, &tegra210_sfc_cmpnt,
tegra210_sfc_dais,
ARRAY_SIZE(tegra210_sfc_dais));
- if (err) {
- dev_err(dev, "can't register SFC component, err: %d\n", err);
- return err;
- }
+ if (err)
+ return dev_err_probe(dev, err,
+ "can't register SFC component\n");
pm_runtime_enable(&pdev->dev);
diff --git a/sound/soc/tegra/tegra_asoc_machine.c b/sound/soc/tegra/tegra_asoc_machine.c
index 10834f9c3422..d7245a10bba1 100644
--- a/sound/soc/tegra/tegra_asoc_machine.c
+++ b/sound/soc/tegra/tegra_asoc_machine.c
@@ -431,8 +431,10 @@ static int tegra_machine_register_codec(struct device *dev, const char *name)
return 0;
pdev = platform_device_register_simple(name, -1, NULL, 0);
- if (IS_ERR(pdev))
+ if (IS_ERR(pdev)) {
+ dev_err(dev, "failed to register codec %s\n", name);
return PTR_ERR(pdev);
+ }
err = devm_add_action_or_reset(dev, tegra_machine_unregister_codec,
pdev);
@@ -468,32 +470,38 @@ int tegra_asoc_machine_probe(struct platform_device *pdev)
gpiod = devm_gpiod_get_optional(dev, "nvidia,hp-mute", GPIOD_OUT_HIGH);
machine->gpiod_hp_mute = gpiod;
if (IS_ERR(gpiod))
- return PTR_ERR(gpiod);
+ return dev_err_probe(dev, PTR_ERR(gpiod),
+ "failed to get hp-mute GPIO\n");
gpiod = devm_gpiod_get_optional(dev, "nvidia,hp-det", GPIOD_IN);
machine->gpiod_hp_det = gpiod;
if (IS_ERR(gpiod))
- return PTR_ERR(gpiod);
+ return dev_err_probe(dev, PTR_ERR(gpiod),
+ "failed to get hp-det GPIO\n");
gpiod = devm_gpiod_get_optional(dev, "nvidia,mic-det", GPIOD_IN);
machine->gpiod_mic_det = gpiod;
if (IS_ERR(gpiod))
- return PTR_ERR(gpiod);
+ return dev_err_probe(dev, PTR_ERR(gpiod),
+ "failed to get mic-det GPIO\n");
gpiod = devm_gpiod_get_optional(dev, "nvidia,spkr-en", GPIOD_OUT_LOW);
machine->gpiod_spkr_en = gpiod;
if (IS_ERR(gpiod))
- return PTR_ERR(gpiod);
+ return dev_err_probe(dev, PTR_ERR(gpiod),
+ "failed to get spkr-en GPIO\n");
gpiod = devm_gpiod_get_optional(dev, "nvidia,int-mic-en", GPIOD_OUT_LOW);
machine->gpiod_int_mic_en = gpiod;
if (IS_ERR(gpiod))
- return PTR_ERR(gpiod);
+ return dev_err_probe(dev, PTR_ERR(gpiod),
+ "failed to get int-mic-en GPIO\n");
gpiod = devm_gpiod_get_optional(dev, "nvidia,ext-mic-en", GPIOD_OUT_LOW);
machine->gpiod_ext_mic_en = gpiod;
if (IS_ERR(gpiod))
- return PTR_ERR(gpiod);
+ return dev_err_probe(dev, PTR_ERR(gpiod),
+ "failed to get ext-mic-en GPIO\n");
err = snd_soc_of_parse_card_name(card, "nvidia,model");
if (err)
@@ -549,22 +557,19 @@ int tegra_asoc_machine_probe(struct platform_device *pdev)
card->driver_name = "tegra";
machine->clk_pll_a = devm_clk_get(dev, "pll_a");
- if (IS_ERR(machine->clk_pll_a)) {
- dev_err(dev, "Can't retrieve clk pll_a\n");
- return PTR_ERR(machine->clk_pll_a);
- }
+ if (IS_ERR(machine->clk_pll_a))
+ return dev_err_probe(dev, PTR_ERR(machine->clk_pll_a),
+ "can't retrieve clk pll_a\n");
machine->clk_pll_a_out0 = devm_clk_get(dev, "pll_a_out0");
- if (IS_ERR(machine->clk_pll_a_out0)) {
- dev_err(dev, "Can't retrieve clk pll_a_out0\n");
- return PTR_ERR(machine->clk_pll_a_out0);
- }
+ if (IS_ERR(machine->clk_pll_a_out0))
+ return dev_err_probe(dev, PTR_ERR(machine->clk_pll_a_out0),
+ "can't retrieve clk pll_a_out0\n");
machine->clk_cdev1 = devm_clk_get(dev, "mclk");
- if (IS_ERR(machine->clk_cdev1)) {
- dev_err(dev, "Can't retrieve clk cdev1\n");
- return PTR_ERR(machine->clk_cdev1);
- }
+ if (IS_ERR(machine->clk_cdev1))
+ return dev_err_probe(dev, PTR_ERR(machine->clk_cdev1),
+ "can't retrieve clk cdev1\n");
/*
* If clock parents are not set in DT, configure here to use clk_out_1
@@ -578,26 +583,24 @@ int tegra_asoc_machine_probe(struct platform_device *pdev)
dev_warn(dev, "Please update DT to use assigned-clock-parents\n");
clk_extern1 = devm_clk_get(dev, "extern1");
- if (IS_ERR(clk_extern1)) {
- dev_err(dev, "Can't retrieve clk extern1\n");
- return PTR_ERR(clk_extern1);
- }
+ if (IS_ERR(clk_extern1))
+ return dev_err_probe(dev, PTR_ERR(clk_extern1),
+ "can't retrieve clk extern1\n");
err = clk_set_parent(clk_extern1, machine->clk_pll_a_out0);
if (err < 0) {
- dev_err(dev, "Set parent failed for clk extern1\n");
+ dev_err(dev, "Set parent failed for clk extern1: %d\n", err);
return err;
}
clk_out_1 = devm_clk_get(dev, "pmc_clk_out_1");
- if (IS_ERR(clk_out_1)) {
- dev_err(dev, "Can't retrieve pmc_clk_out_1\n");
- return PTR_ERR(clk_out_1);
- }
+ if (IS_ERR(clk_out_1))
+ return dev_err_probe(dev, PTR_ERR(clk_out_1),
+ "can't retrieve pmc_clk_out_1\n");
err = clk_set_parent(clk_out_1, clk_extern1);
if (err < 0) {
- dev_err(dev, "Set parent failed for pmc_clk_out_1\n");
+ dev_err(dev, "Set parent failed for pmc_clk_out_1: %d\n", err);
return err;
}
diff --git a/sound/soc/tegra/tegra_audio_graph_card.c b/sound/soc/tegra/tegra_audio_graph_card.c
index ea10e6e8a9fe..b93a61db9ed0 100644
--- a/sound/soc/tegra/tegra_audio_graph_card.c
+++ b/sound/soc/tegra/tegra_audio_graph_card.c
@@ -174,20 +174,23 @@ static int tegra_audio_graph_card_probe(struct snd_soc_card *card)
{
struct simple_util_priv *simple = snd_soc_card_get_drvdata(card);
struct tegra_audio_priv *priv = simple_to_tegra_priv(simple);
+ int ret;
priv->clk_plla = devm_clk_get(card->dev, "pll_a");
- if (IS_ERR(priv->clk_plla)) {
- dev_err(card->dev, "Can't retrieve clk pll_a\n");
- return PTR_ERR(priv->clk_plla);
- }
+ if (IS_ERR(priv->clk_plla))
+ return dev_err_probe(card->dev, PTR_ERR(priv->clk_plla),
+ "can't retrieve clk pll_a\n");
priv->clk_plla_out0 = devm_clk_get(card->dev, "plla_out0");
- if (IS_ERR(priv->clk_plla_out0)) {
- dev_err(card->dev, "Can't retrieve clk plla_out0\n");
- return PTR_ERR(priv->clk_plla_out0);
- }
+ if (IS_ERR(priv->clk_plla_out0))
+ return dev_err_probe(card->dev, PTR_ERR(priv->clk_plla_out0),
+ "can't retrieve clk plla_out0\n");
+
+ ret = graph_util_card_probe(card);
+ if (ret < 0)
+ return dev_err_probe(card->dev, ret, "graph_util_card_probe failed\n");
- return graph_util_card_probe(card);
+ return ret;
}
static int tegra_audio_graph_probe(struct platform_device *pdev)
--
2.17.1
On Wed, Mar 18, 2026 at 09:46:31AM +0000, Sheetal wrote:
> Add dev_err_probe() and dev_err() logging across probe and runtime
> error paths in Tegra audio drivers to improve debuggability.
> Use dev_err_probe() only where -EPROBE_DEFER can be returned.
It's probably better to just use it as a defensive measure in case the
APIs change for the ones that are in the probe path. It's easier than
figuring out if the API that's being called could defer.
> regs = devm_platform_ioremap_resource(pdev, 0);
> - if (IS_ERR(regs))
> + if (IS_ERR(regs)) {
> + dev_err(dev, "failed to map registers\n");
> return PTR_ERR(regs);
> + }
If you're going to log the error message it's helpful to include the
error code, though IIRC in this case errors are already logged by the
API so there's no need to log anything at all.
© 2016 - 2026 Red Hat, Inc.