Re: [PATCH v1] bluetooth: Fix the bluetooth icon status after running hciconfig hci0 up
From: Ajye Huang <hidden>
Date: 2022-09-30 22:30:57
Also in:
linux-bluetooth, lkml
On Sat, Oct 1, 2022 at 3:57 AM Luiz Augusto von Dentz [off-list ref] wrote:
quoted hunk ↗ jump to hunk
Hi Ajye, On Fri, Sep 30, 2022 at 7:07 AM Ajye Huang [off-list ref] wrote:quoted
When "hciconfig hci0 up" command is used to bluetooth ON, but the bluetooth UI icon in settings still not be turned ON. Refer to commit 2ff13894cfb8 ("Bluetooth: Perform HCI update for power on synchronously") Add back mgmt_power_on(hdev, ret) into function hci_dev_do_open(struct hci_dev *hdev) in hci_core.c Signed-off-by: Ajye Huang <redacted> --- net/bluetooth/hci_core.c | 1 + 1 file changed, 1 insertion(+)diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c index 0540555b3704..5061845c8fc2 100644 --- a/net/bluetooth/hci_core.c +++ b/net/bluetooth/hci_core.c@@ -481,6 +481,7 @@ static int hci_dev_do_open(struct hci_dev *hdev) hci_req_sync_lock(hdev); ret = hci_dev_open_sync(hdev); + mgmt_power_on(hdev, ret); hci_req_sync_unlock(hdev); return ret; --2.25.1I believe the culprit is actually the following change: git show cf75ad8b41d2a:@@ -1489,8 +1488,7 @@ static int hci_dev_do_open(struct hci_dev *hdev) !hci_dev_test_flag(hdev, HCI_USER_CHANNEL) && hci_dev_test_flag(hdev, HCI_MGMT) && hdev->dev_type == HCI_PRIMARY) { - ret = __hci_req_hci_power_on(hdev); - mgmt_power_on(hdev, ret); + ret = hci_powered_update_sync(hdev);So we should probably restore mgmt_power_on above. -- Luiz Augusto von Dentz
Hi Luiz Now, this code you mentioned in hci_dev_open_sync() was moved from hci_core.c to hci_sync.c The below modification is workable. Do you agree? If so, I will send you the v2 version. Thanks index 15c75ef4c271..76c3107c9f91 100644
--- a/net/bluetooth/hci_sync.c
+++ b/net/bluetooth/hci_sync.c@@ -4676,6 +4676,7 @@ int hci_dev_open_sync(struct hci_dev *hdev) hci_dev_test_flag(hdev, HCI_MGMT) && hdev->dev_type == HCI_PRIMARY) { ret = hci_powered_update_sync(hdev); + mgmt_power_on(hdev, ret); } } else { /* Init failed, cleanup */