summaryrefslogtreecommitdiff
path: root/net
diff options
context:
space:
mode:
authorBeomho Seo <beomho.seo@samsung.com>2015-07-08 19:37:06 +0900
committerSeung-Woo Kim <sw0312.kim@samsung.com>2016-12-14 13:46:35 +0900
commit1cbadefba55789a5f6580ced85a99d77ca07a2ea (patch)
treebc208f7d764408aaad5911cfedcc899ba0a7b516 /net
parent31d820949c9145d7323f79fc8f0b1842b9b5f823 (diff)
LOCAL / net: rfkill: rfkill-bcm: Add hci registered flag
This patch add hci registered flag for handling abnormal interrupt signal. Signed-off-by: Beomho Seo <beomho.seo@samsung.com>
Diffstat (limited to 'net')
-rw-r--r--net/rfkill/rfkill-bcm.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/net/rfkill/rfkill-bcm.c b/net/rfkill/rfkill-bcm.c
index c1419782cb06..1f53dcca98d8 100644
--- a/net/rfkill/rfkill-bcm.c
+++ b/net/rfkill/rfkill-bcm.c
@@ -46,6 +46,7 @@ struct rfkill_bcm_data {
struct clk *clk;
bool clk_enabled;
+ bool hci_registered;
int irq;
struct device *dev;
struct bt_lpm_timer timer;
@@ -101,9 +102,11 @@ static int rfkill_bcm_hci_event(struct notifier_block *this,
switch (event) {
case HCI_DEV_REG:
dev_dbg(rfkill->dev, "HCI device is registered\n");
+ rfkill->hci_registered = true;
break;
case HCI_DEV_UNREG:
dev_dbg(rfkill->dev, "HCI device is unregistered\n");
+ rfkill->hci_registered = false;
break;
case HCI_DEV_WRITE:
dev_dbg(rfkill->dev, "HCI Tx is on going\n");
@@ -184,9 +187,11 @@ static irqreturn_t rfkill_bcm_irq_handler(int irq, void *data)
unsigned int type;
host_wake = gpiod_get_value(rfkill->host_wake_gpio);
+
if (host_wake) {
/* host is waked until Rx is finished */
- pm_stay_awake(rfkill->dev);
+ if (rfkill->hci_registered)
+ pm_stay_awake(rfkill->dev);
dev_dbg(rfkill->dev, "HCI Rx is started\n");
} else {
struct hrtimer *htimer = &rfkill->timer.htimer;