]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - drivers/bluetooth/btmrvl_main.c
Merge remote-tracking branch 'omap/for-next'
[karo-tx-linux.git] / drivers / bluetooth / btmrvl_main.c
index de05deb444ce260a13be75af8b96eb8c8922794a..6af917331962409dded11034273af84e98905313 100644 (file)
@@ -184,7 +184,7 @@ static int btmrvl_send_sync_cmd(struct btmrvl_private *priv, u16 opcode,
        }
 
        skb = bt_skb_alloc(HCI_COMMAND_HDR_SIZE + len, GFP_ATOMIC);
-       if (skb == NULL) {
+       if (!skb) {
                BT_ERR("No free skb");
                return -ENOMEM;
        }
@@ -377,20 +377,6 @@ static int btmrvl_tx_pkt(struct btmrvl_private *priv, struct sk_buff *skb)
                return -EINVAL;
        }
 
-       if (skb_headroom(skb) < BTM_HEADER_LEN) {
-               struct sk_buff *tmp = skb;
-
-               skb = skb_realloc_headroom(skb, BTM_HEADER_LEN);
-               if (!skb) {
-                       BT_ERR("Tx Error: realloc_headroom failed %d",
-                               BTM_HEADER_LEN);
-                       skb = tmp;
-                       return -EINVAL;
-               }
-
-               kfree_skb(tmp);
-       }
-
        skb_push(skb, BTM_HEADER_LEN);
 
        /* header type: byte[3]
@@ -450,13 +436,6 @@ static int btmrvl_send_frame(struct hci_dev *hdev, struct sk_buff *skb)
 
        BT_DBG("type=%d, len=%d", skb->pkt_type, skb->len);
 
-       if (!test_bit(HCI_RUNNING, &hdev->flags)) {
-               BT_ERR("Failed testing HCI_RUNING, flags=%lx", hdev->flags);
-               print_hex_dump_bytes("data: ", DUMP_PREFIX_OFFSET,
-                                                       skb->data, skb->len);
-               return -EBUSY;
-       }
-
        switch (bt_cb(skb)->pkt_type) {
        case HCI_COMMAND_PKT:
                hdev->stat.cmd_tx++;
@@ -491,9 +470,6 @@ static int btmrvl_close(struct hci_dev *hdev)
 {
        struct btmrvl_private *priv = hci_get_drvdata(hdev);
 
-       if (!test_and_clear_bit(HCI_RUNNING, &hdev->flags))
-               return 0;
-
        skb_queue_purge(&priv->adapter->tx_queue);
 
        return 0;
@@ -501,8 +477,6 @@ static int btmrvl_close(struct hci_dev *hdev)
 
 static int btmrvl_open(struct hci_dev *hdev)
 {
-       set_bit(HCI_RUNNING, &hdev->flags);
-
        return 0;
 }
 
@@ -542,14 +516,17 @@ static int btmrvl_check_device_tree(struct btmrvl_private *priv)
                ret = of_property_read_u8_array(dt_node, "btmrvl,cal-data",
                                                cal_data + BT_CAL_HDR_LEN,
                                                BT_CAL_DATA_SIZE);
-               if (ret)
+               if (ret) {
+                       of_node_put(dt_node);
                        return ret;
+               }
 
                BT_DBG("Use cal data from device tree");
                ret = btmrvl_download_cal_data(priv, cal_data,
                                               BT_CAL_DATA_SIZE);
                if (ret) {
                        BT_ERR("Fail to download calibrate data");
+                       of_node_put(dt_node);
                        return ret;
                }
        }