break;
        }
 
-       if (chan->psm && bdaddr_type_is_le(chan->src_type))
+       /* Use L2CAP_MODE_LE_FLOWCTL (CoC) in case of LE address and
+        * L2CAP_MODE_EXT_FLOWCTL (ECRED) has not been set.
+        */
+       if (chan->psm && bdaddr_type_is_le(chan->src_type) &&
+           chan->mode != L2CAP_MODE_EXT_FLOWCTL)
                chan->mode = L2CAP_MODE_LE_FLOWCTL;
 
        chan->state = BT_BOUND;
                        return -EINVAL;
        }
 
-       if (chan->psm && bdaddr_type_is_le(chan->src_type) && !chan->mode)
+       /* Use L2CAP_MODE_LE_FLOWCTL (CoC) in case of LE address and
+        * L2CAP_MODE_EXT_FLOWCTL (ECRED) has not been set.
+        */
+       if (chan->psm && bdaddr_type_is_le(chan->src_type) &&
+           chan->mode != L2CAP_MODE_EXT_FLOWCTL)
                chan->mode = L2CAP_MODE_LE_FLOWCTL;
 
        l2cap_sock_init_pid(sk);