Index: firmware/target/arm/tcc780x/cowond2/power-cowond2.c
===================================================================
--- firmware/target/arm/tcc780x/cowond2/power-cowond2.c	(revision 29795)
+++ firmware/target/arm/tcc780x/cowond2/power-cowond2.c	(working copy)
@@ -51,6 +51,10 @@
         pmu = PCF50635;
 
         pcf50635_init();
+        
+        /* Clear pending interrupts from pcf50635 */
+        unsigned char data[5]; /* 0 = INT1, 1 = INT2, 2 = INT3, ... 4 = INT5 */
+        pcf50635_read_multiple(PCF5063X_REG_INT1, data, 5);
     }
     else
     {
@@ -64,11 +68,11 @@
         /* Clear pending interrupts */
         unsigned char data[3]; /* 0 = INT1, 1 = INT2, 2 = INT3 */
         pcf50606_read_multiple(0x02, data, 3);
+    }
 
 #ifndef BOOTLOADER
         IEN |= EXT3_IRQ_MASK;   /* Unmask EXT3 */
 #endif
-    }
 }
 
 void power_off(void)
@@ -85,6 +89,8 @@
 #ifndef BOOTLOADER
 void EXT3(void)
 {
+    if (get_pmu_type() == PCF50606)
+    {
     unsigned char data[3]; /* 0 = INT1, 1 = INT2, 2 = INT3 */
 
     /* Clear pending interrupts from pcf50606 */
@@ -104,6 +110,21 @@
         /* Touchscreen event, do something about it */
         touchscreen_handle_device_irq();
     }
+    }
+    else
+    {
+        unsigned char data[5]; /* 0 = INT1, 1 = INT2, 2 = INT3, ... 4 = INT5 */
+
+        /* Clear pending interrupts from pcf50635 */
+        pcf50635_read_multiple(PCF5063X_REG_INT1, data, 5);
+
+        if (data[2] & PCF5063X_INT3_ONKEY1S)
+        {
+           
+            if (!charger_inserted())
+                sys_poweroff();
+        }
+    }
 }
 #endif
 
@@ -126,7 +147,16 @@
     }
     else
     {
-        /* TODO: use adapter/usb connection state from PCF50635 driver */
+        /* pcf50635 power input status can be obtained from MBCS1 register */
+	
+	int mbcs1 = pcf50635_read(PCF5063X_REG_MBCS1); 
+        /* Check AC adapter presence*/
+        if (mbcs1 & PCF5063X_MBCS1_ADAPTPRES)
+            return POWER_INPUT_MAIN_CHARGER;
+        
+        /* Check USB presence */
+        if (mbcs1 & PCF5063X_MBCS1_USBPRES)
+            return POWER_INPUT_USB_CHARGER;
     }
     
     return POWER_INPUT_NONE;
Index: firmware/drivers/pcf50635.c
===================================================================
--- firmware/drivers/pcf50635.c	(revision 29795)
+++ firmware/drivers/pcf50635.c	(working copy)
@@ -102,9 +102,9 @@
         PCF5063X_REG_GPIO3CFG, 0x0,
         
         /* IRQ masks (OF values in brackets) */
-        PCF5063X_REG_INT1M,    0xff, /* (0x8a enable alarm, usbins, adpins) */
+        PCF5063X_REG_INT1M,    0xfa, /* (0x8a enable alarm, usbins, adpins) */
         PCF5063X_REG_INT2M,    0xff, /* (0xff all masked) */
-        PCF5063X_REG_INT3M,    0xff, /* (0x7f enable onkey1s) */
+        PCF5063X_REG_INT3M,    0x7f, /* (0x7f enable onkey1s) */
         PCF5063X_REG_INT4M,    0xff, /* (0xfd enable lowbat) */
         PCF5063X_REG_INT5M,    0xff, /* (0xff all masked) */
         
