summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--net/bluetooth/l2cap_core.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
index 2c6eabf294b3..06453f5ad1c0 100644
--- a/net/bluetooth/l2cap_core.c
+++ b/net/bluetooth/l2cap_core.c
@@ -1259,8 +1259,23 @@ static void l2cap_chan_ready(struct l2cap_chan *chan)
* case of receiving data before the L2CAP info req/rsp
* procedure is complete.
*/
+#ifndef TIZEN_BT
if (chan->state == BT_CONNECTED)
return;
+#else
+ if (chan->state == BT_CONNECTED) {
+ if (chan->psm == L2CAP_PSM_IPSP) {
+ struct l2cap_conn *conn = chan->conn;
+
+ if (conn->hcon->out)
+ return;
+ else if (conn->hcon->type != LE_LINK)
+ return;
+ } else {
+ return;
+ }
+ }
+#endif
/* This clears all conf flags, including CONF_NOT_COMPLETE */
chan->conf_state = 0;
@@ -6859,8 +6874,23 @@ static void l2cap_data_channel(struct l2cap_conn *conn, u16 cid,
* procdure is done simply assume that the channel is supported
* and mark it as ready.
*/
+#ifndef TIZEN_BT
if (chan->chan_type == L2CAP_CHAN_FIXED)
l2cap_chan_ready(chan);
+#else
+ if (chan->chan_type == L2CAP_CHAN_FIXED) {
+ if (chan->psm == L2CAP_PSM_IPSP) {
+ struct l2cap_conn *conn = chan->conn;
+
+ if (conn->hcon->out)
+ l2cap_chan_ready(chan);
+ else if (conn->hcon->type != LE_LINK)
+ l2cap_chan_ready(chan);
+ } else {
+ l2cap_chan_ready(chan);
+ }
+ }
+#endif
if (chan->state != BT_CONNECTED)
goto drop;