mfd:rk616:core:fix rk616_i2c_write_bits
authoryxj <yxj@rock-chips.com>
Fri, 28 Jun 2013 06:13:05 +0000 (14:13 +0800)
committeryxj <yxj@rock-chips.com>
Fri, 28 Jun 2013 06:57:10 +0000 (14:57 +0800)
drivers/mfd/rk616-core.c

index 376ecb07b990be66e22c0c0f35a7522f764da10d..fd3dfbef1dc119d47d40c85e59f975302ef8412a 100755 (executable)
@@ -103,13 +103,15 @@ static int rk616_i2c_write_bits(struct mfd_rk616 *rk616, u16 reg,u32 mask,u32 *p
        int ret;
        u32 reg_val;
        char *tx_buf = NULL;
-       mutex_lock(&rk616->reg_lock);
+       
        tx_buf = (char *)kmalloc(6, GFP_KERNEL);
        if(!tx_buf)
                return -ENOMEM;
        
+       mutex_lock(&rk616->reg_lock);
        rk616->read_dev(rk616,reg,&reg_val);
        reg_val &= ~mask;
+       *pval &= mask;
        reg_val |= *pval;
        *pval = reg_val;
        memcpy(tx_buf, &reg, 2);