Hi Dan
Thank you for your research.
sound/soc/sh/rcar/adg.c 423 static int rsnd_adg_get_clkin(struct rsnd_priv *priv) 424 { 425 struct rsnd_adg *adg = priv->adg; 426 struct device *dev = rsnd_priv_to_dev(priv); 427 struct clk *clk; 428 int i; 429 430 for (i = 0; i < CLKMAX; i++) { 431 clk = devm_clk_get(dev, clk_name[i]);
If devm_clk_get() returns NULL that's not an error.
432 433 if (IS_ERR(clk)) 434 clk = rsnd_adg_null_clk_get(priv);
But I think if rsnd_adg_null_clk_get() returns an error then it is an error.
435 if (IS_ERR(clk))
This is impossible.
436 goto err;
So I think it should be:
if (IS_ERR(clk)) { clk = rsnd_adg_null_clk_get(priv); if (!clk) goto err; }
Hmm indeed. Thank you for your report, I didn't notice about it. How about this ?
---------- diff --git a/sound/soc/sh/rcar/adg.c b/sound/soc/sh/rcar/adg.c index 0ebee1ed06a9..2b05a1568ee8 100644 --- a/sound/soc/sh/rcar/adg.c +++ b/sound/soc/sh/rcar/adg.c @@ -393,7 +393,7 @@ static struct clk *rsnd_adg_create_null_clk(struct rsnd_priv *priv, clk = clk_register_fixed_rate(dev, name, parent, 0, 0); if (IS_ERR(clk)) { dev_err(dev, "create null clk error\n"); - return NULL; + return PTR_ERR(clk); }
return clk; @@ -430,9 +430,9 @@ static int rsnd_adg_get_clkin(struct rsnd_priv *priv) for (i = 0; i < CLKMAX; i++) { clk = devm_clk_get(dev, clk_name[i]);
- if (IS_ERR(clk)) + if (IS_ERR_OR_NULL(clk)) clk = rsnd_adg_null_clk_get(priv); - if (IS_ERR(clk)) + if (IS_ERR_OR_NULL(clk)) goto err;
adg->clk[i] = clk;
Thank you for your help !!
Best regards --- Kuninori Morimoto