pm2301: Clean-up PM2301 interrupt management

Fix the way interrupts are handled within the PM2301 charging driver.

Signed-off-by: Rajkumar Kasirajan <rajkumar.kasirajan@stericsson.com>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
Reviewed-by: Olivier CLERGEAUD <olivier.clergeaud@stericsson.com>
Reviewed-by: Marcus COOPER <marcus.xm.cooper@stericsson.com>
Reviewed-by: Michel JAOUEN <michel.jaouen@stericsson.com>
Tested-by: Michel JAOUEN <michel.jaouen@stericsson.com>
diff --git a/drivers/power/pm2301_charger.h b/drivers/power/pm2301_charger.h
index bef38a3..4190147 100644
--- a/drivers/power/pm2301_charger.h
+++ b/drivers/power/pm2301_charger.h
@@ -34,6 +34,8 @@
 #define WD_TIMER			0x30 /* 4min */
 #define WD_KICK_INTERVAL		(60 * HZ)
 
+#define PM2XXX_NUM_INT_REG		0x6
+
 /* Constant voltage/current */
 #define PM2XXX_CONST_CURR		0x0
 #define PM2XXX_CONST_VOLT		0x1
@@ -237,12 +239,32 @@
 #define PM2XXX_VPWR2_OVV_10		0x2
 #define PM2XXX_VPWR2_OVV_NONE		0x3
 
+/* Input charger drop VPWR2 */
+#define PM2XXX_VPWR2_HW_OPT_EN		(0x1<<4)
+#define PM2XXX_VPWR2_HW_OPT_DIS		(0x0<<4)
+
+#define PM2XXX_VPWR2_VALID_EN		(0x1<<3)
+#define PM2XXX_VPWR2_VALID_DIS		(0x0<<3)
+
+#define PM2XXX_VPWR2_DROP_EN		(0x1<<2)
+#define PM2XXX_VPWR2_DROP_DIS		(0x0<<2)
+
 /* Input charger voltage VPWR1 */
 #define PM2XXX_VPWR1_OVV_6_0		0x0
 #define PM2XXX_VPWR1_OVV_6_3		0x1
 #define PM2XXX_VPWR1_OVV_10		0x2
 #define PM2XXX_VPWR1_OVV_NONE		0x3
 
+/* Input charger drop VPWR1 */
+#define PM2XXX_VPWR1_HW_OPT_EN		(0x1<<4)
+#define PM2XXX_VPWR1_HW_OPT_DIS		(0x0<<4)
+
+#define PM2XXX_VPWR1_VALID_EN		(0x1<<3)
+#define PM2XXX_VPWR1_VALID_DIS		(0x0<<3)
+
+#define PM2XXX_VPWR1_DROP_EN		(0x1<<2)
+#define PM2XXX_VPWR1_DROP_DIS		(0x0<<2)
+
 /* Battery low level comparator control register */
 #define PM2XXX_VBAT_LOW_MONITORING_DIS	0x0
 #define PM2XXX_VBAT_LOW_MONITORING_ENA	0x1
@@ -446,6 +468,11 @@
 	bool chgwdexp;
 };
 
+struct pm2xxx_interrupts {
+	u8 reg[PM2XXX_NUM_INT_REG];
+	int (*handler[PM2XXX_NUM_INT_REG])(void *, int);
+};
+
 struct pm2xxx_config {
 	struct i2c_client *pm2xxx_i2c;
 	struct i2c_device_id *pm2xxx_id;
@@ -467,7 +494,7 @@
 	int old_vbat;
 	int failure_case;
 	int failure_input_ovv;
-	u8 pm2_int[6];
+	struct pm2xxx_interrupts *pm2_int;
 	struct ab8500_gpadc *gpadc;
 	struct regulator *regu;
 	struct pm2xxx_bm_data *bat;