summaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-davinci/cdce949.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-davinci/cdce949.c')
-rw-r--r--arch/arm/mach-davinci/cdce949.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/arch/arm/mach-davinci/cdce949.c b/arch/arm/mach-davinci/cdce949.c
index 6af3289e0527..aec375690543 100644
--- a/arch/arm/mach-davinci/cdce949.c
+++ b/arch/arm/mach-davinci/cdce949.c
@@ -23,6 +23,7 @@
#include "clock.h"
static struct i2c_client *cdce_i2c_client;
+static DEFINE_MUTEX(cdce_mutex);
/* CDCE register descriptor */
struct cdce_reg {
@@ -231,16 +232,19 @@ int cdce_set_rate(struct clk *clk, unsigned long rate)
if (!regs)
return -EINVAL;
+ mutex_lock(&cdce_mutex);
for (i = 0; regs[i].addr; i++) {
ret = i2c_smbus_write_byte_data(cdce_i2c_client,
regs[i].addr | 0x80, regs[i].val);
if (ret)
- return ret;
+ break;
}
+ mutex_unlock(&cdce_mutex);
- clk->rate = rate;
+ if (!ret)
+ clk->rate = rate;
- return 0;
+ return ret;
}
static int cdce_probe(struct i2c_client *client,