diff mbox

ASoC: kirkwood: fix loss of external clock at probe time

Message ID 20130919114957.1fede091@armhf
State New
Headers show

Commit Message

Jean-Francois Moine Sept. 19, 2013, 9:49 a.m. UTC
At probe time, when the clock driver is not yet initialized, the
external clock of the kirkwood sound device will not be usable.

This patch fixes this problem defering the device probe.

Signed-off-by: Jean-Francois Moine <moinejf@free.fr>
---
 sound/soc/kirkwood/kirkwood-i2s.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

Comments

Mark Brown Sept. 19, 2013, 11:06 a.m. UTC | #1
On Thu, Sep 19, 2013 at 11:49:57AM +0200, Jean-Francois Moine wrote:

>  	priv->extclk = devm_clk_get(&pdev->dev, "extclk");
> -	if (!IS_ERR(priv->extclk)) {
> +	if (IS_ERR(priv->extclk)) {
> +		if (np && of_property_match_string(np, "clock-names", "extclk") >= 0)
> +			return -EPROBE_DEFER;
> +	} else {

This one really does seem like something the clock API ought to be
doing, either as standard or with a separate helper - essentially every
driver ought to be doing this for robustness.  Doing it on general
failures is more tricky but in the specific case where we know the clock
should be present but we don't have the driver loaded yet.
diff mbox

Patch

diff --git a/sound/soc/kirkwood/kirkwood-i2s.c b/sound/soc/kirkwood/kirkwood-i2s.c
index 0f3d73d..14f32d9 100644
--- a/sound/soc/kirkwood/kirkwood-i2s.c
+++ b/sound/soc/kirkwood/kirkwood-i2s.c
@@ -496,7 +496,10 @@  static int kirkwood_i2s_dev_probe(struct platform_device *pdev)
 		return err;
 
 	priv->extclk = devm_clk_get(&pdev->dev, "extclk");
-	if (!IS_ERR(priv->extclk)) {
+	if (IS_ERR(priv->extclk)) {
+		if (np && of_property_match_string(np, "clock-names", "extclk") >= 0)
+			return -EPROBE_DEFER;
+	} else {
 		if (priv->extclk == priv->clk) {
 			devm_clk_put(&pdev->dev, priv->extclk);
 			priv->extclk = ERR_PTR(-EINVAL);