Loading drivers/power/qpnp-bms.c +14 −3 Original line number Diff line number Diff line /* Copyright (c) 2011-2014, The Linux Foundation. All rights reserved. /* Copyright (c) 2011-2015, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -131,7 +131,9 @@ struct fcc_sample { struct bms_irq { int irq; unsigned long disabled; unsigned long wake_enabled; bool ready; bool is_wake; }; struct bms_wakeup_source { Loading Loading @@ -399,6 +401,9 @@ static void enable_bms_irq(struct bms_irq *irq) if (irq->ready && __test_and_clear_bit(0, &irq->disabled)) { enable_irq(irq->irq); pr_debug("enabled irq %d\n", irq->irq); if ((irq->is_wake) && !__test_and_set_bit(0, &irq->wake_enabled)) enable_irq_wake(irq->irq); } } Loading @@ -407,6 +412,9 @@ static void disable_bms_irq(struct bms_irq *irq) if (irq->ready && !__test_and_set_bit(0, &irq->disabled)) { disable_irq(irq->irq); pr_debug("disabled irq %d\n", irq->irq); if ((irq->is_wake) && __test_and_clear_bit(0, &irq->wake_enabled)) disable_irq_wake(irq->irq); } } Loading @@ -415,6 +423,9 @@ static void disable_bms_irq_nosync(struct bms_irq *irq) if (irq->ready && !__test_and_set_bit(0, &irq->disabled)) { disable_irq_nosync(irq->irq); pr_debug("disabled irq %d\n", irq->irq); if ((irq->is_wake) && __test_and_clear_bit(0, &irq->wake_enabled)) disable_irq_wake(irq->irq); } } Loading Loading @@ -3959,11 +3970,11 @@ static int bms_request_irqs(struct qpnp_bms_chip *chip) int rc; SPMI_REQUEST_IRQ(chip, rc, sw_cc_thr); chip->sw_cc_thr_irq.is_wake = true; disable_bms_irq(&chip->sw_cc_thr_irq); enable_irq_wake(chip->sw_cc_thr_irq.irq); SPMI_REQUEST_IRQ(chip, rc, ocv_thr); chip->ocv_thr_irq.is_wake = true; disable_bms_irq(&chip->ocv_thr_irq); enable_irq_wake(chip->ocv_thr_irq.irq); return 0; } Loading Loading
drivers/power/qpnp-bms.c +14 −3 Original line number Diff line number Diff line /* Copyright (c) 2011-2014, The Linux Foundation. All rights reserved. /* Copyright (c) 2011-2015, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -131,7 +131,9 @@ struct fcc_sample { struct bms_irq { int irq; unsigned long disabled; unsigned long wake_enabled; bool ready; bool is_wake; }; struct bms_wakeup_source { Loading Loading @@ -399,6 +401,9 @@ static void enable_bms_irq(struct bms_irq *irq) if (irq->ready && __test_and_clear_bit(0, &irq->disabled)) { enable_irq(irq->irq); pr_debug("enabled irq %d\n", irq->irq); if ((irq->is_wake) && !__test_and_set_bit(0, &irq->wake_enabled)) enable_irq_wake(irq->irq); } } Loading @@ -407,6 +412,9 @@ static void disable_bms_irq(struct bms_irq *irq) if (irq->ready && !__test_and_set_bit(0, &irq->disabled)) { disable_irq(irq->irq); pr_debug("disabled irq %d\n", irq->irq); if ((irq->is_wake) && __test_and_clear_bit(0, &irq->wake_enabled)) disable_irq_wake(irq->irq); } } Loading @@ -415,6 +423,9 @@ static void disable_bms_irq_nosync(struct bms_irq *irq) if (irq->ready && !__test_and_set_bit(0, &irq->disabled)) { disable_irq_nosync(irq->irq); pr_debug("disabled irq %d\n", irq->irq); if ((irq->is_wake) && __test_and_clear_bit(0, &irq->wake_enabled)) disable_irq_wake(irq->irq); } } Loading Loading @@ -3959,11 +3970,11 @@ static int bms_request_irqs(struct qpnp_bms_chip *chip) int rc; SPMI_REQUEST_IRQ(chip, rc, sw_cc_thr); chip->sw_cc_thr_irq.is_wake = true; disable_bms_irq(&chip->sw_cc_thr_irq); enable_irq_wake(chip->sw_cc_thr_irq.irq); SPMI_REQUEST_IRQ(chip, rc, ocv_thr); chip->ocv_thr_irq.is_wake = true; disable_bms_irq(&chip->ocv_thr_irq); enable_irq_wake(chip->ocv_thr_irq.irq); return 0; } Loading