diff options
author | John W. Linville <linville@tuxdriver.com> | 2012-09-22 12:19:22 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2012-09-22 12:19:22 -0400 |
commit | 1199992df2417dc9a1db1b19930ea4d0a697a61e (patch) | |
tree | 4d0c187a1fe17e3f3745011c6fd2fa6c588e24d9 /net | |
parent | abef3bd71029b80ec1bdd6c6244b5b0b99f56633 (diff) | |
parent | a7be50b7e30f9d77cb059a7ffdb781bb0fb92eba (diff) |
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless into for-davem
Diffstat (limited to 'net')
-rw-r--r-- | net/bluetooth/hci_core.c | 2 | ||||
-rw-r--r-- | net/bluetooth/l2cap_core.c | 2 | ||||
-rw-r--r-- | net/bluetooth/mgmt.c | 16 | ||||
-rw-r--r-- | net/wireless/reg.c | 12 |
4 files changed, 28 insertions, 4 deletions
diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c index d4de5db18d5a..0b997c8f9655 100644 --- a/net/bluetooth/hci_core.c +++ b/net/bluetooth/hci_core.c | |||
@@ -734,6 +734,8 @@ static int hci_dev_do_close(struct hci_dev *hdev) | |||
734 | 734 | ||
735 | cancel_work_sync(&hdev->le_scan); | 735 | cancel_work_sync(&hdev->le_scan); |
736 | 736 | ||
737 | cancel_delayed_work(&hdev->power_off); | ||
738 | |||
737 | hci_req_cancel(hdev, ENODEV); | 739 | hci_req_cancel(hdev, ENODEV); |
738 | hci_req_lock(hdev); | 740 | hci_req_lock(hdev); |
739 | 741 | ||
diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c index 4ea1710a4783..38c00f142203 100644 --- a/net/bluetooth/l2cap_core.c +++ b/net/bluetooth/l2cap_core.c | |||
@@ -1008,7 +1008,7 @@ static void l2cap_send_disconn_req(struct l2cap_conn *conn, struct l2cap_chan *c | |||
1008 | if (!conn) | 1008 | if (!conn) |
1009 | return; | 1009 | return; |
1010 | 1010 | ||
1011 | if (chan->mode == L2CAP_MODE_ERTM) { | 1011 | if (chan->mode == L2CAP_MODE_ERTM && chan->state == BT_CONNECTED) { |
1012 | __clear_retrans_timer(chan); | 1012 | __clear_retrans_timer(chan); |
1013 | __clear_monitor_timer(chan); | 1013 | __clear_monitor_timer(chan); |
1014 | __clear_ack_timer(chan); | 1014 | __clear_ack_timer(chan); |
diff --git a/net/bluetooth/mgmt.c b/net/bluetooth/mgmt.c index ad6613d17ca6..eba022de3c20 100644 --- a/net/bluetooth/mgmt.c +++ b/net/bluetooth/mgmt.c | |||
@@ -2875,6 +2875,22 @@ int mgmt_powered(struct hci_dev *hdev, u8 powered) | |||
2875 | if (scan) | 2875 | if (scan) |
2876 | hci_send_cmd(hdev, HCI_OP_WRITE_SCAN_ENABLE, 1, &scan); | 2876 | hci_send_cmd(hdev, HCI_OP_WRITE_SCAN_ENABLE, 1, &scan); |
2877 | 2877 | ||
2878 | if (test_bit(HCI_SSP_ENABLED, &hdev->dev_flags)) { | ||
2879 | u8 ssp = 1; | ||
2880 | |||
2881 | hci_send_cmd(hdev, HCI_OP_WRITE_SSP_MODE, 1, &ssp); | ||
2882 | } | ||
2883 | |||
2884 | if (test_bit(HCI_LE_ENABLED, &hdev->dev_flags)) { | ||
2885 | struct hci_cp_write_le_host_supported cp; | ||
2886 | |||
2887 | cp.le = 1; | ||
2888 | cp.simul = !!(hdev->features[6] & LMP_SIMUL_LE_BR); | ||
2889 | |||
2890 | hci_send_cmd(hdev, HCI_OP_WRITE_LE_HOST_SUPPORTED, | ||
2891 | sizeof(cp), &cp); | ||
2892 | } | ||
2893 | |||
2878 | update_class(hdev); | 2894 | update_class(hdev); |
2879 | update_name(hdev, hdev->dev_name); | 2895 | update_name(hdev, hdev->dev_name); |
2880 | update_eir(hdev); | 2896 | update_eir(hdev); |
diff --git a/net/wireless/reg.c b/net/wireless/reg.c index 2ded3c7fad06..72d170ca3406 100644 --- a/net/wireless/reg.c +++ b/net/wireless/reg.c | |||
@@ -350,6 +350,9 @@ static void reg_regdb_search(struct work_struct *work) | |||
350 | struct reg_regdb_search_request *request; | 350 | struct reg_regdb_search_request *request; |
351 | const struct ieee80211_regdomain *curdom, *regdom; | 351 | const struct ieee80211_regdomain *curdom, *regdom; |
352 | int i, r; | 352 | int i, r; |
353 | bool set_reg = false; | ||
354 | |||
355 | mutex_lock(&cfg80211_mutex); | ||
353 | 356 | ||
354 | mutex_lock(®_regdb_search_mutex); | 357 | mutex_lock(®_regdb_search_mutex); |
355 | while (!list_empty(®_regdb_search_list)) { | 358 | while (!list_empty(®_regdb_search_list)) { |
@@ -365,9 +368,7 @@ static void reg_regdb_search(struct work_struct *work) | |||
365 | r = reg_copy_regd(®dom, curdom); | 368 | r = reg_copy_regd(®dom, curdom); |
366 | if (r) | 369 | if (r) |
367 | break; | 370 | break; |
368 | mutex_lock(&cfg80211_mutex); | 371 | set_reg = true; |
369 | set_regdom(regdom); | ||
370 | mutex_unlock(&cfg80211_mutex); | ||
371 | break; | 372 | break; |
372 | } | 373 | } |
373 | } | 374 | } |
@@ -375,6 +376,11 @@ static void reg_regdb_search(struct work_struct *work) | |||
375 | kfree(request); | 376 | kfree(request); |
376 | } | 377 | } |
377 | mutex_unlock(®_regdb_search_mutex); | 378 | mutex_unlock(®_regdb_search_mutex); |
379 | |||
380 | if (set_reg) | ||
381 | set_regdom(regdom); | ||
382 | |||
383 | mutex_unlock(&cfg80211_mutex); | ||
378 | } | 384 | } |
379 | 385 | ||
380 | static DECLARE_WORK(reg_regdb_work, reg_regdb_search); | 386 | static DECLARE_WORK(reg_regdb_work, reg_regdb_search); |