l2cap_chan_set_defaults(chan);
 
-       bacpy(&chan->src, &hdev->bdaddr);
-       if (cid == L2CAP_CID_SMP)
-               chan->src_type = BDADDR_LE_PUBLIC;
-       else
+       if (cid == L2CAP_CID_SMP) {
+               /* If usage of static address is forced or if the devices
+                * does not have a public address, then listen on the static
+                * address.
+                *
+                * In case BR/EDR has been disabled on a dual-mode controller
+                * and a static address has been configued, then listen on
+                * the static address instead.
+                */
+               if (test_bit(HCI_FORCE_STATIC_ADDR, &hdev->dbg_flags) ||
+                   !bacmp(&hdev->bdaddr, BDADDR_ANY) ||
+                   (!test_bit(HCI_BREDR_ENABLED, &hdev->dev_flags) &&
+                    bacmp(&hdev->static_addr, BDADDR_ANY))) {
+                       bacpy(&chan->src, &hdev->static_addr);
+                       chan->src_type = BDADDR_LE_RANDOM;
+               } else {
+                       bacpy(&chan->src, &hdev->bdaddr);
+                       chan->src_type = BDADDR_LE_PUBLIC;
+               }
+       } else {
+               bacpy(&chan->src, &hdev->bdaddr);
                chan->src_type = BDADDR_BREDR;
+       }
+
        chan->state = BT_LISTEN;
        chan->mode = L2CAP_MODE_BASIC;
        chan->imtu = L2CAP_DEFAULT_MTU;