diff options
Diffstat (limited to 'drivers/power')
-rw-r--r-- | drivers/power/max17042_battery.c | 18 |
1 files changed, 7 insertions, 11 deletions
diff --git a/drivers/power/max17042_battery.c b/drivers/power/max17042_battery.c index d576912b1219..04620c2cb388 100644 --- a/drivers/power/max17042_battery.c +++ b/drivers/power/max17042_battery.c @@ -47,8 +47,8 @@ /* Interrupt mask bits */ #define CONFIG_ALRT_BIT_ENBL (1 << 2) -#define STATUS_INTR_SOC_BIT (1 << 14) -#define STATUS_INTR_LOW_SOC_BIT (1 << 10) +#define STATUS_INTR_SOCMIN_BIT (1 << 10) +#define STATUS_INTR_SOCMAX_BIT (1 << 14) #define VFSOC0_LOCK 0x0000 #define VFSOC0_UNLOCK 0x0080 @@ -569,19 +569,14 @@ static void max17042_set_soc_threshold(struct max17042_chip *chip, u16 off) max17042_write_reg(chip->client, MAX17042_SALRT_Th, soc_tr); } -static irqreturn_t max17042_intr_handler(int id, void *dev) -{ - return IRQ_WAKE_THREAD; -} - static irqreturn_t max17042_thread_handler(int id, void *dev) { struct max17042_chip *chip = dev; u16 val; val = max17042_read_reg(chip->client, MAX17042_STATUS); - if ((val & STATUS_INTR_SOC_BIT) || - (val & STATUS_INTR_LOW_SOC_BIT)) { + if ((val & STATUS_INTR_SOCMIN_BIT) || + (val & STATUS_INTR_SOCMAX_BIT)) { dev_info(&chip->client->dev, "SOC threshold INTR\n"); max17042_set_soc_threshold(chip, 1); } @@ -689,9 +684,10 @@ static int __devinit max17042_probe(struct i2c_client *client, } if (client->irq) { - ret = request_threaded_irq(client->irq, max17042_intr_handler, + ret = request_threaded_irq(client->irq, NULL, max17042_thread_handler, - 0, chip->battery.name, chip); + IRQF_TRIGGER_FALLING, + chip->battery.name, chip); if (!ret) { reg = max17042_read_reg(client, MAX17042_CONFIG); reg |= CONFIG_ALRT_BIT_ENBL; |