rk30:phone:Solve the power button interrupt failure
author张晴 <zhangqing@rock-chips.com>
Sat, 11 Aug 2012 02:05:07 +0000 (10:05 +0800)
committer张晴 <zhangqing@rock-chips.com>
Sat, 11 Aug 2012 02:05:07 +0000 (10:05 +0800)
arch/arm/mach-rk30/board-rk30-phone-twl60xx.c
drivers/mfd/twl6030-irq.c

index aa12cf7d701534eb205ba3f993439ed9bb52e314..e4b54ef1577a9fe60847621bd129949dffee5894 100755 (executable)
@@ -743,14 +743,16 @@ static struct twl4030_power_data tps80032_scripts_data __initdata = {
 void twl60xx_pmu_early_suspend(struct regulator_dev *rdev)
 {
        printk("%s\n", __func__);
-       
-       twl_reg_write(REG_INT_MSK_STS_A,TWL_MODULE_PIH, 0x00); //open vlow interrupt
+       int ret;
+       ret = twl_reg_read(REG_INT_MSK_STS_A,TWL_MODULE_PIH);
+       twl_reg_write(REG_INT_MSK_STS_A,TWL_MODULE_PIH, ret & (~(1 << 2))); //open vlow interrupt
 }
 void twl60xx_pmu_early_resume(struct regulator_dev *rdev)
 {
        printk("%s\n", __func__);
-
-       twl_reg_write(REG_INT_MSK_STS_A,TWL_MODULE_PIH, 0x04); //close vlow interrupt
+       int ret;
+       ret = twl_reg_read(REG_INT_MSK_STS_A,TWL_MODULE_PIH);
+       twl_reg_write(REG_INT_MSK_STS_A,TWL_MODULE_PIH, ret |(1 << 2)); //close vlow interrupt
 }
 #else
 void twl60xx_pmu_early_suspend(struct regulator_dev *rdev)
index 4d306b6273d0f6aebe88ce9607d26913a739f143..36688ed208b116e65f6b23cd23f1d064ed9e84f5 100755 (executable)
@@ -496,6 +496,7 @@ int twl6030_init_irq(int irq_num, unsigned irq_base, unsigned irq_end,
        int     i;
        int ret;
        u8 mask[4];
+       u8 reg;
 
        static struct irq_chip  twl6030_irq_chip;
 
@@ -556,8 +557,9 @@ int twl6030_init_irq(int irq_num, unsigned irq_base, unsigned irq_end,
        status = twl6030_vlow_init(twl6030_irq_base + TWL_VLOW_INTR_OFFSET);
        if (status < 0)
                goto fail_vlow;
-
-       twl_i2c_write_u8(TWL_MODULE_PIH, 0x04,REG_INT_MSK_STS_A);   //close vlow interrupt
+       
+       twl_i2c_write_u8(TWL_MODULE_PIH, &reg,REG_INT_MSK_STS_A);
+       twl_i2c_write_u8(TWL_MODULE_PIH, reg | (1 << 2),REG_INT_MSK_STS_A);   //close vlow interrupt
 
        return status;