diff options
| -rw-r--r-- | sound/soc/samsung/i2s.c | 19 | 
1 files changed, 15 insertions, 4 deletions
diff --git a/sound/soc/samsung/i2s.c b/sound/soc/samsung/i2s.c index c9f87f7bae99..daf7b892c967 100644 --- a/sound/soc/samsung/i2s.c +++ b/sound/soc/samsung/i2s.c @@ -551,7 +551,9 @@ static int i2s_set_sysclk(struct snd_soc_dai *dai,  				goto err;  			} -			clk_prepare_enable(i2s->op_clk); +			ret = clk_prepare_enable(i2s->op_clk); +			if (ret) +				goto err;  			i2s->rclk_srcrate = clk_get_rate(i2s->op_clk);  			/* Over-ride the other's */ @@ -1133,10 +1135,19 @@ static int i2s_runtime_suspend(struct device *dev)  static int i2s_runtime_resume(struct device *dev)  {  	struct i2s_dai *i2s = dev_get_drvdata(dev); +	int ret; -	clk_prepare_enable(i2s->clk); -	if (i2s->op_clk) -		clk_prepare_enable(i2s->op_clk); +	ret = clk_prepare_enable(i2s->clk); +	if (ret) +		return ret; + +	if (i2s->op_clk) { +		ret = clk_prepare_enable(i2s->op_clk); +		if (ret) { +			clk_disable_unprepare(i2s->clk); +			return ret; +		} +	}  	writel(i2s->suspend_i2scon, i2s->addr + I2SCON);  	writel(i2s->suspend_i2smod, i2s->addr + I2SMOD);  | 
