Merge git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth
Conflicts: net/bluetooth/hci_core.c
This commit is contained in:
@@ -1196,7 +1196,11 @@ int hci_dev_open(__u16 dev)
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (hdev->rfkill && rfkill_blocked(hdev->rfkill)) {
|
||||
/* Check for rfkill but allow the HCI setup stage to proceed
|
||||
* (which in itself doesn't cause any RF activity).
|
||||
*/
|
||||
if (test_bit(HCI_RFKILLED, &hdev->dev_flags) &&
|
||||
!test_bit(HCI_SETUP, &hdev->dev_flags)) {
|
||||
ret = -ERFKILL;
|
||||
goto done;
|
||||
}
|
||||
@@ -1645,10 +1649,13 @@ static int hci_rfkill_set_block(void *data, bool blocked)
|
||||
if (test_bit(HCI_USER_CHANNEL, &hdev->dev_flags))
|
||||
return -EBUSY;
|
||||
|
||||
if (!blocked)
|
||||
return 0;
|
||||
|
||||
hci_dev_do_close(hdev);
|
||||
if (blocked) {
|
||||
set_bit(HCI_RFKILLED, &hdev->dev_flags);
|
||||
if (!test_bit(HCI_SETUP, &hdev->dev_flags))
|
||||
hci_dev_do_close(hdev);
|
||||
} else {
|
||||
clear_bit(HCI_RFKILLED, &hdev->dev_flags);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -1670,9 +1677,13 @@ static void hci_power_on(struct work_struct *work)
|
||||
return;
|
||||
}
|
||||
|
||||
if (test_bit(HCI_AUTO_OFF, &hdev->dev_flags))
|
||||
if (test_bit(HCI_RFKILLED, &hdev->dev_flags)) {
|
||||
clear_bit(HCI_AUTO_OFF, &hdev->dev_flags);
|
||||
hci_dev_do_close(hdev);
|
||||
} else if (test_bit(HCI_AUTO_OFF, &hdev->dev_flags)) {
|
||||
queue_delayed_work(hdev->req_workqueue, &hdev->power_off,
|
||||
HCI_AUTO_OFF_TIMEOUT);
|
||||
}
|
||||
|
||||
if (test_and_clear_bit(HCI_SETUP, &hdev->dev_flags))
|
||||
mgmt_index_added(hdev);
|
||||
@@ -2288,6 +2299,9 @@ int hci_register_dev(struct hci_dev *hdev)
|
||||
}
|
||||
}
|
||||
|
||||
if (hdev->rfkill && rfkill_blocked(hdev->rfkill))
|
||||
set_bit(HCI_RFKILLED, &hdev->dev_flags);
|
||||
|
||||
set_bit(HCI_SETUP, &hdev->dev_flags);
|
||||
|
||||
if (hdev->dev_type != HCI_AMP)
|
||||
|
||||
Reference in New Issue
Block a user