diff options
Diffstat (limited to 'arch/arm/plat-samsung/clock.c')
| -rw-r--r-- | arch/arm/plat-samsung/clock.c | 18 | 
1 files changed, 10 insertions, 8 deletions
diff --git a/arch/arm/plat-samsung/clock.c b/arch/arm/plat-samsung/clock.c index 65c5eca475e..012bbd0b8d8 100644 --- a/arch/arm/plat-samsung/clock.c +++ b/arch/arm/plat-samsung/clock.c @@ -119,7 +119,7 @@ void clk_disable(struct clk *clk)  unsigned long clk_get_rate(struct clk *clk)  { -	if (IS_ERR(clk)) +	if (IS_ERR_OR_NULL(clk))  		return 0;  	if (clk->rate != 0) @@ -136,7 +136,7 @@ unsigned long clk_get_rate(struct clk *clk)  long clk_round_rate(struct clk *clk, unsigned long rate)  { -	if (!IS_ERR(clk) && clk->ops && clk->ops->round_rate) +	if (!IS_ERR_OR_NULL(clk) && clk->ops && clk->ops->round_rate)  		return (clk->ops->round_rate)(clk, rate);  	return rate; @@ -144,9 +144,10 @@ long clk_round_rate(struct clk *clk, unsigned long rate)  int clk_set_rate(struct clk *clk, unsigned long rate)  { +	unsigned long flags;  	int ret; -	if (IS_ERR(clk)) +	if (IS_ERR_OR_NULL(clk))  		return -EINVAL;  	/* We do not default just do a clk->rate = rate as @@ -159,9 +160,9 @@ int clk_set_rate(struct clk *clk, unsigned long rate)  	if (clk->ops == NULL || clk->ops->set_rate == NULL)  		return -EINVAL; -	spin_lock(&clocks_lock); +	spin_lock_irqsave(&clocks_lock, flags);  	ret = (clk->ops->set_rate)(clk, rate); -	spin_unlock(&clocks_lock); +	spin_unlock_irqrestore(&clocks_lock, flags);  	return ret;  } @@ -173,17 +174,18 @@ struct clk *clk_get_parent(struct clk *clk)  int clk_set_parent(struct clk *clk, struct clk *parent)  { +	unsigned long flags;  	int ret = 0; -	if (IS_ERR(clk)) +	if (IS_ERR_OR_NULL(clk) || IS_ERR_OR_NULL(parent))  		return -EINVAL; -	spin_lock(&clocks_lock); +	spin_lock_irqsave(&clocks_lock, flags);  	if (clk->ops && clk->ops->set_parent)  		ret = (clk->ops->set_parent)(clk, parent); -	spin_unlock(&clocks_lock); +	spin_unlock_irqrestore(&clocks_lock, flags);  	return ret;  }  |