Hi Dan Thank you for your feedback > > if (IS_ERR(clk)) { > > dev_err(dev, "create null clk error\n"); > > - return NULL; > > + return PTR_ERR(clk); > > Yes, I think this part is correct. If an error happens, then it should > be reported to the user so they can fix it. Good ! > > @@ -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; > > But this is not correct. > > If a function like devm_clk_get() returns NULL, then it's not an error, > it's something where the user deliberately chose to disable the feature. > It shouldn't trigger an error message and the rest of the driver should > be written to accomodate it. > > > > > adg->clk[i] = clk; > > So we should assign the NULL pointer here and add NULL checks to make > sure that it doesn't lead to a NULL dereference. Ah, in this driver, if it got error or NULL clk, it try to call rsnd_adg_null_clk_get() and use null_clk instead of NULL. In other words, all adg->clk[i] should not NULL. If one of them was NULL, it is error for this driver. If so, my suggested code was OK, I hope. Thank you for your help !! Best regards --- Kuninori Morimoto