Skip to content

Commit

Permalink
Bluetooth: Don't send New Settings event during setup power down
Browse files Browse the repository at this point in the history
When the controller gets brought up for initial setup, it will be brought
back down after a timeout. In that case, don't send a New Settings event.

Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
  • Loading branch information
Marcel Holtmann authored and Johan Hedberg committed Feb 21, 2012
1 parent f0d4b78 commit 8ee5654
Showing 1 changed file with 11 additions and 9 deletions.
20 changes: 11 additions & 9 deletions net/bluetooth/hci_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -739,9 +739,6 @@ static int hci_dev_do_close(struct hci_dev *hdev)
hdev->discov_timeout = 0;
}

if (test_and_clear_bit(HCI_AUTO_OFF, &hdev->dev_flags))
cancel_delayed_work(&hdev->power_off);

if (test_and_clear_bit(HCI_SERVICE_CACHE, &hdev->dev_flags))
cancel_delayed_work(&hdev->service_cache);

Expand Down Expand Up @@ -787,9 +784,11 @@ static int hci_dev_do_close(struct hci_dev *hdev)
* and no tasks are scheduled. */
hdev->close(hdev);

hci_dev_lock(hdev);
mgmt_powered(hdev, 0);
hci_dev_unlock(hdev);
if (!test_and_clear_bit(HCI_AUTO_OFF, &hdev->dev_flags)) {
hci_dev_lock(hdev);
mgmt_powered(hdev, 0);
hci_dev_unlock(hdev);
}

/* Clear flags */
hdev->flags = 0;
Expand All @@ -808,7 +807,12 @@ int hci_dev_close(__u16 dev)
hdev = hci_dev_get(dev);
if (!hdev)
return -ENODEV;

if (test_and_clear_bit(HCI_AUTO_OFF, &hdev->dev_flags))
cancel_delayed_work(&hdev->power_off);

err = hci_dev_do_close(hdev);

hci_dev_put(hdev);
return err;
}
Expand Down Expand Up @@ -1102,9 +1106,7 @@ static void hci_power_off(struct work_struct *work)

BT_DBG("%s", hdev->name);

clear_bit(HCI_AUTO_OFF, &hdev->dev_flags);

hci_dev_close(hdev->id);
hci_dev_do_close(hdev);
}

static void hci_discov_off(struct work_struct *work)
Expand Down

0 comments on commit 8ee5654

Please sign in to comment.