* Re:
[not found] <20211126221034.21331-1-lukasz.bartosik@semihalf.com--annotate>
@ 2021-11-29 21:59 ` sean.wang
2021-11-29 22:01 ` Re:[PATCH v1] Bluetooth: btmtksdio: enable msft opcode sean.wang
1 sibling, 0 replies; 7+ messages in thread
From: sean.wang @ 2021-11-29 21:59 UTC (permalink / raw)
To: lb
Cc: marcel, johan.hedberg, luiz.dentz, upstream, linux-bluetooth,
linux-mediatek, linux-kernel, Sean Wang
From: Sean Wang <sean.wang@mediatek.com>
>Enable msft opcode for btmtksdio driver.
>
>Signed-off-by: Łukasz Bartosik <lb@semihalf.com>
>---
> drivers/bluetooth/btmtksdio.c | 1 +
> 1 file changed, 1 insertion(+)
>
>diff --git a/drivers/bluetooth/btmtksdio.c b/drivers/bluetooth/btmtksdio.c index d9cf0c492e29..2a7a615663b9 100644
>--- a/drivers/bluetooth/btmtksdio.c
>+++ b/drivers/bluetooth/btmtksdio.c
>@@ -887,6 +887,7 @@ static int btmtksdio_setup(struct hci_dev *hdev)
> if (enable_autosuspend)
> pm_runtime_allow(bdev->dev);
>
>+ hci_set_msft_opcode(hdev, 0xFD30);
Hi Łukasz,
msft feature is supposed only supported on mt7921. Could you help rework the patch to enalbe msft opocde only for mt7921?
Sean
> bt_dev_info(hdev, "Device setup in %llu usecs", duration);
>
> return 0;
>
^ permalink raw reply [flat|nested] 7+ messages in thread* Re:[PATCH v1] Bluetooth: btmtksdio: enable msft opcode
[not found] <20211126221034.21331-1-lukasz.bartosik@semihalf.com--annotate>
2021-11-29 21:59 ` sean.wang
@ 2021-11-29 22:01 ` sean.wang
2021-11-30 13:01 ` [PATCH " Łukasz Bartosik
1 sibling, 1 reply; 7+ messages in thread
From: sean.wang @ 2021-11-29 22:01 UTC (permalink / raw)
To: lb
Cc: marcel, johan.hedberg, luiz.dentz, upstream, linux-bluetooth,
linux-mediatek, linux-kernel, Sean Wang
From: Sean Wang <sean.wang@mediatek.com>
>Enable msft opcode for btmtksdio driver.
>
>Signed-off-by: Łukasz Bartosik <lb@semihalf.com>
>---
> drivers/bluetooth/btmtksdio.c | 1 +
> 1 file changed, 1 insertion(+)
>
>diff --git a/drivers/bluetooth/btmtksdio.c b/drivers/bluetooth/btmtksdio.c index d9cf0c492e29..2a7a615663b9 100644
>--- a/drivers/bluetooth/btmtksdio.c
>+++ b/drivers/bluetooth/btmtksdio.c
>@@ -887,6 +887,7 @@ static int btmtksdio_setup(struct hci_dev *hdev)
> if (enable_autosuspend)
> pm_runtime_allow(bdev->dev);
>
>+ hci_set_msft_opcode(hdev, 0xFD30);
Hi Łukasz,
msft feature is supposed only supported on mt7921. Could you help rework the patch to enalbe msft opocde only for mt7921?
Sean
> bt_dev_info(hdev, "Device setup in %llu usecs", duration);
>
> return 0;
>
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH v1] Bluetooth: btmtksdio: enable msft opcode
2021-11-29 22:01 ` Re:[PATCH v1] Bluetooth: btmtksdio: enable msft opcode sean.wang
@ 2021-11-30 13:01 ` Łukasz Bartosik
0 siblings, 0 replies; 7+ messages in thread
From: Łukasz Bartosik @ 2021-11-30 13:01 UTC (permalink / raw)
To: Sean Wang
Cc: Marcel Holtmann, Johan Hedberg, Luiz Augusto von Dentz, upstream,
linux-bluetooth, linux-mediatek, linux-kernel
pon., 29 lis 2021 o 22:01 <sean.wang@mediatek.com> napisał(a):
>
> From: Sean Wang <sean.wang@mediatek.com>
>
> >Enable msft opcode for btmtksdio driver.
> >
> >Signed-off-by: Łukasz Bartosik <lb@semihalf.com>
> >---
> > drivers/bluetooth/btmtksdio.c | 1 +
> > 1 file changed, 1 insertion(+)
> >
> >diff --git a/drivers/bluetooth/btmtksdio.c b/drivers/bluetooth/btmtksdio.c index d9cf0c492e29..2a7a615663b9 100644
> >--- a/drivers/bluetooth/btmtksdio.c
> >+++ b/drivers/bluetooth/btmtksdio.c
> >@@ -887,6 +887,7 @@ static int btmtksdio_setup(struct hci_dev *hdev)
> > if (enable_autosuspend)
> > pm_runtime_allow(bdev->dev);
> >
> >+ hci_set_msft_opcode(hdev, 0xFD30);
>
> Hi Łukasz,
>
> msft feature is supposed only supported on mt7921. Could you help rework the patch to enalbe msft opocde only for mt7921?
>
> Sean
>
Hi Sean,
Thanks for the input. I will update the patch so that msft opcode is
enabled only for mt7921.
Regards,
Lukasz
> > bt_dev_info(hdev, "Device setup in %llu usecs", duration);
> >
> > return 0;
> >
^ permalink raw reply [flat|nested] 7+ messages in thread
* (no subject)
@ 2025-08-29 2:01 xinpeng.wang
2025-08-29 2:42 ` bluez.test.bot
0 siblings, 1 reply; 7+ messages in thread
From: xinpeng.wang @ 2025-08-29 2:01 UTC (permalink / raw)
To: linux-bluetooth; +Cc: xinpeng . wang
From d364976e93e23f5defbbf711dcda4787bdad3beb Mon Sep 17 00:00:00 2001
From: xinpeng wang <wangxinpeng@uniontech.com>
Date: Thu, 28 Aug 2025 21:31:31 +0800
Subject: [PATCH] device: Recreate paired device from storage if previous
restoration failed
When a USB Bluetooth adapter is resumed from S4 suspend, the kernel may trigger
an "index remove" followed by an "index add". BlueZ responds by removing all
devices and attempting to recreate them from stored configuration (storage).
However, if a connected A2DP device disconnects just before suspend, BlueZ may
have started a disconnect timer (via set_disconnect_timer) but not yet freed
the session. During this period:
- The session pointer is set to NULL and becomes inaccessible.
- The session still holds a reference to the device, preventing it from being freed.
- As a result, the "index add" event fails to recreate the device from storage (due to
D-Bus path conflict or incomplete cleanup).
- Later, when the timer expires, a new device is created from discovery data, bypassing
storage and causing it to appear as unpaired.
This leads to loss of pairing information and confuses desktop applications that
rely on paired/unpaired state.
This patch improves the device creation logic during discovery: when creating a
device from scan data, it checks whether the remote address corresponds to a
known paired device in storage. If so, and if no valid device instance exists,
it forces recreation from storage to restore the correct paired state.
This ensures that devices are properly restored after suspend/resume cycles,
even in race conditions involving delayed session cleanup.
Signed-off-by: xinpeng.wang <wangxinpeng@uniontech.com>
---
src/adapter.c | 111 ++++++++++++++++++++++++++++++++++++++++++++------
1 file changed, 99 insertions(+), 12 deletions(-)
diff --git a/src/adapter.c b/src/adapter.c
index 549a6c0b8..c2ac19f32 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -342,6 +342,8 @@ struct btd_adapter {
struct queue *exp_pending;
struct queue *exps;
+
+ GSList *pending_restore_device_addrs;
};
static char *adapter_power_state_str(uint32_t power_state)
@@ -1400,17 +1402,7 @@ static void adapter_add_device(struct btd_adapter *adapter,
static struct btd_device *adapter_create_device(struct btd_adapter *adapter,
const bdaddr_t *bdaddr,
- uint8_t bdaddr_type)
-{
- struct btd_device *device;
-
- device = device_create(adapter, bdaddr, bdaddr_type);
- if (!device)
- return NULL;
-
- adapter_add_device(adapter, device);
- return device;
-}
+ uint8_t bdaddr_type);
static void service_auth_cancel(struct service_auth *auth)
{
@@ -4969,6 +4961,95 @@ done:
mgmt_tlv_list_free(list);
}
+static struct btd_device *adapter_create_device(struct btd_adapter *adapter,
+ const bdaddr_t *bdaddr,
+ uint8_t bdaddr_type)
+{
+ struct btd_device *device;
+ char addr[18];
+ GSList *l;
+ GKeyFile *key_file = NULL;
+
+ ba2str(bdaddr, addr);
+
+ l = g_slist_find_custom(adapter->pending_restore_device_addrs, addr,
+ (GCompareFunc)strcasecmp);
+ if (l != NULL) {
+ char filename[PATH_MAX];
+ GError *gerr = NULL;
+
+ create_filename(filename, PATH_MAX, "/%s/%s/info",
+ btd_adapter_get_storage_dir(adapter),
+ addr);
+
+ key_file = g_key_file_new();
+ if (!g_key_file_load_from_file(key_file, filename, 0, &gerr)) {
+ error("Unable to load key file from %s: (%s)", filename,
+ gerr->message);
+ g_clear_error(&gerr);
+ adapter->pending_restore_device_addrs =
+ g_slist_delete_link(adapter->pending_restore_device_addrs, l);
+ g_free(l->data);
+ key_file = NULL;
+ }
+ }
+
+ if (key_file != NULL) {
+ struct link_key_info *key_info;
+ struct smp_ltk_info *ltk_info;
+ struct smp_ltk_info *peripheral_ltk_info;
+ struct irk_info *irk_info;
+
+ DBG("Found device %s but restoring from storage", addr);
+ device = device_create_from_storage(adapter, addr, key_file);
+ if (!device) {
+ g_key_file_free(key_file);
+ return NULL;
+ }
+ adapter->pending_restore_device_addrs =
+ g_slist_delete_link(adapter->pending_restore_device_addrs, l);
+ g_free(l->data);
+
+ if (bdaddr_type == BDADDR_BREDR)
+ device_set_bredr_support(device);
+ else
+ device_set_le_support(device, bdaddr_type);
+
+ key_info = get_key_info(key_file, addr, bdaddr_type);
+ ltk_info = get_ltk_info(key_file, addr, bdaddr_type);
+ peripheral_ltk_info = get_peripheral_ltk_info(key_file,
+ addr, bdaddr_type);
+ irk_info = get_irk_info(key_file, addr, bdaddr_type);
+ if (key_info) {
+ device_set_paired(device, BDADDR_BREDR);
+ device_set_bonded(device, BDADDR_BREDR);
+ }
+ if (ltk_info || peripheral_ltk_info) {
+ struct smp_ltk_info *info = ltk_info ? ltk_info : peripheral_ltk_info;
+ device_set_paired(device, ltk_info->bdaddr_type);
+ device_set_bonded(device, ltk_info->bdaddr_type);
+
+ device_set_ltk(device, info->val, info->central,
+ info->enc_size);
+ }
+ if (irk_info)
+ device_set_rpa(device, true);
+
+ btd_device_set_temporary(device, false);
+ g_free(key_info);
+ g_free(ltk_info);
+ g_free(peripheral_ltk_info);
+ g_free(irk_info);
+ } else {
+ device = device_create(adapter, bdaddr, bdaddr_type);
+ if (!device)
+ return NULL;
+ }
+
+ adapter_add_device(adapter, device);
+ return device;
+}
+
static void load_devices(struct btd_adapter *adapter)
{
char dirname[PATH_MAX];
@@ -5087,8 +5168,11 @@ static void load_devices(struct btd_adapter *adapter)
device = device_create_from_storage(adapter, entry->d_name,
key_file);
- if (!device)
+ if (!device) {
+ char *addr_copy = g_strdup(entry->d_name);
+ adapter->pending_restore_device_addrs = g_slist_append(adapter->pending_restore_device_addrs,addr_copy);
goto free;
+ }
if (irk_info)
device_set_rpa(device, true);
@@ -7085,6 +7169,9 @@ static void adapter_remove(struct btd_adapter *adapter)
adapter->msd_callbacks = NULL;
queue_remove_all(adapter->exp_pending, NULL, NULL, cancel_exp_pending);
+
+ g_slist_free_full(adapter->pending_restore_device_addrs,g_free);
+ adapter->pending_restore_device_addrs = NULL;
}
const char *adapter_get_path(struct btd_adapter *adapter)
--
2.20.1
^ permalink raw reply related [flat|nested] 7+ messages in thread* (no subject)
@ 2014-02-10 14:35 Viswanatham, RaviTeja
2014-02-10 18:35 ` Marcel Holtmann
0 siblings, 1 reply; 7+ messages in thread
From: Viswanatham, RaviTeja @ 2014-02-10 14:35 UTC (permalink / raw)
To: bluez mailin list (linux-bluetooth@vger.kernel.org)
Hello,
I am working on Ubuntu 12.04 with a Bluetooth 3.0 +HS + wifi combo USB dongle.
I want to reach a data transfer speed of up to 24 Mbit/s.
My Questions:
Does Bluez support high speed data transfer rates up to 24 Mbit/s (Bluetooth 3.0+HS) ?
If it does, is there any user configuration involved to achieve that? What other requirements need to be met?
Does, Bluetooth enables AMP function to communicate 802.11n channel to support high speed or it has to be configure with any other drivers?
I am new to Linux a detail explanation would be really appreciated. Thank you in advance for your support.
Best Regards,
Ravi Teja
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re:
2014-02-10 14:35 Viswanatham, RaviTeja
@ 2014-02-10 18:35 ` Marcel Holtmann
2014-02-11 7:13 ` Re: Andrei Emeltchenko
0 siblings, 1 reply; 7+ messages in thread
From: Marcel Holtmann @ 2014-02-10 18:35 UTC (permalink / raw)
To: Viswanatham, RaviTeja; +Cc: bluez mailin list (linux-bluetooth@vger.kernel.org)
Hi Ravi,
> I am working on Ubuntu 12.04 with a Bluetooth 3.0 +HS + wifi combo USB dongle.
>
> I want to reach a data transfer speed of up to 24 Mbit/s.
>
> My Questions:
> Does Bluez support high speed data transfer rates up to 24 Mbit/s (Bluetooth 3.0+HS) ?
>
> If it does, is there any user configuration involved to achieve that? What other requirements need to be met?
> Does, Bluetooth enables AMP function to communicate 802.11n channel to support high speed or it has to be configure with any other drivers?
>
> I am new to Linux a detail explanation would be really appreciated. Thank you in advance for your support.
we do support Bluetooth HS operation. However your WiFi device needs to be exposed as AMP Controller. Most WiFi hardware needs a special driver to expose itself as AMP Controller. There is no generic driver for mac80211 subsystem in the kernel.
Regards
Marcel
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re:
2014-02-10 18:35 ` Marcel Holtmann
@ 2014-02-11 7:13 ` Andrei Emeltchenko
0 siblings, 0 replies; 7+ messages in thread
From: Andrei Emeltchenko @ 2014-02-11 7:13 UTC (permalink / raw)
To: Marcel Holtmann
Cc: Viswanatham, RaviTeja,
bluez mailin list (linux-bluetooth@vger.kernel.org)
Hi All,
On Mon, Feb 10, 2014 at 10:35:24AM -0800, Marcel Holtmann wrote:
> Hi Ravi,
>
> > I am working on Ubuntu 12.04 with a Bluetooth 3.0 +HS + wifi combo USB
> > dongle.
> >
> > I want to reach a data transfer speed of up to 24 Mbit/s.
> >
> > My Questions: Does Bluez support high speed data transfer rates up to
> > 24 Mbit/s (Bluetooth 3.0+HS) ?
> >
> > If it does, is there any user configuration involved to achieve that?
> > What other requirements need to be met? Does, Bluetooth enables AMP
> > function to communicate 802.11n channel to support high speed or it
> > has to be configure with any other drivers?
> >
> > I am new to Linux a detail explanation would be really appreciated.
> > Thank you in advance for your support.
>
> we do support Bluetooth HS operation. However your WiFi device needs to
> be exposed as AMP Controller. Most WiFi hardware needs a special driver
> to expose itself as AMP Controller. There is no generic driver for
> mac80211 subsystem in the kernel.
Some devices have AMP Controller implemented in firmware.
I was using Marvell SD8787, probably newer Marvell devices also works.
You may check drivers/bluetooth/btmrvl_main.c to see how HCI dev_type
HCI_AMP is assigned.
Best regards
Andrei Emeltchenko
^ permalink raw reply [flat|nested] 7+ messages in thread
* (no subject)
@ 2012-02-23 15:39 Pierre Frenkiel
2012-02-23 16:34 ` Brad Midgley
0 siblings, 1 reply; 7+ messages in thread
From: Pierre Frenkiel @ 2012-02-23 15:39 UTC (permalink / raw)
To: linux-bluetooth
following the tutorial at
http://bluetooth-alsa.sourceforge.net/build.html
I was able to use my bluetooth head with some programs like gxine,
kaffeine, mplayer, but I had a problem trying to install plugz
./configure fails with the message:
configure: error: Package requirements \
(dbus-1 >= 0.36, dbus-glib-1 >= 0.36) were not met
The installed package is libdbus-glib-1-2, and I suppose that the
problem is just in naming, but I don't kown how to overcome it.
--
Pierre Frenkiel
^ permalink raw reply [flat|nested] 7+ messages in thread* Re:
2012-02-23 15:39 Pierre Frenkiel
@ 2012-02-23 16:34 ` Brad Midgley
0 siblings, 0 replies; 7+ messages in thread
From: Brad Midgley @ 2012-02-23 16:34 UTC (permalink / raw)
To: Pierre Frenkiel; +Cc: linux-bluetooth
Jack,
The safari "reader" feature happens inside the web browser and is not
part of the site you are looking at. So it would work on generic web
pages through an extension to the browser or something that people
load somehow. The newspaper wouldn't coordinate it.
Brad
On Thu, Feb 23, 2012 at 8:39 AM, Pierre Frenkiel
<pierre.frenkiel@gmail.com> wrote:
> following the tutorial at
> http://bluetooth-alsa.sourceforge.net/build.html
>
> I was able to use my bluetooth head with some programs like gxine,
> kaffeine, mplayer, but I had a problem trying to install plugz
> ./configure fails with the message:
> configure: error: Package requirements \
> (dbus-1 >= 0.36, dbus-glib-1 >= 0.36) were not met
> The installed package is libdbus-glib-1-2, and I suppose that the problem is
> just in naming, but I don't kown how to overcome it.
>
> --
> Pierre Frenkiel
> --
> To unsubscribe from this list: send the line "unsubscribe linux-bluetooth"
> in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
--
Brad Midgley
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2025-08-29 2:42 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20211126221034.21331-1-lukasz.bartosik@semihalf.com--annotate>
2021-11-29 21:59 ` sean.wang
2021-11-29 22:01 ` Re:[PATCH v1] Bluetooth: btmtksdio: enable msft opcode sean.wang
2021-11-30 13:01 ` [PATCH " Łukasz Bartosik
2025-08-29 2:01 xinpeng.wang
2025-08-29 2:42 ` bluez.test.bot
-- strict thread matches above, loose matches on Subject: below --
2014-02-10 14:35 Viswanatham, RaviTeja
2014-02-10 18:35 ` Marcel Holtmann
2014-02-11 7:13 ` Re: Andrei Emeltchenko
2012-02-23 15:39 Pierre Frenkiel
2012-02-23 16:34 ` Brad Midgley
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).