|
@@ -1264,6 +1264,30 @@ static void hci_cc_read_rssi(struct hci_dev *hdev, struct sk_buff *skb)
|
|
|
hci_dev_unlock(hdev);
|
|
|
}
|
|
|
|
|
|
+static void hci_cc_read_tx_power(struct hci_dev *hdev, struct sk_buff *skb)
|
|
|
+{
|
|
|
+ struct hci_cp_read_tx_power *sent;
|
|
|
+ struct hci_rp_read_tx_power *rp = (void *) skb->data;
|
|
|
+ struct hci_conn *conn;
|
|
|
+
|
|
|
+ BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
|
|
|
+
|
|
|
+ if (rp->status)
|
|
|
+ return;
|
|
|
+
|
|
|
+ sent = hci_sent_cmd_data(hdev, HCI_OP_READ_TX_POWER);
|
|
|
+ if (!sent)
|
|
|
+ return;
|
|
|
+
|
|
|
+ hci_dev_lock(hdev);
|
|
|
+
|
|
|
+ conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
|
|
|
+ if (conn && sent->type == 0x00)
|
|
|
+ conn->tx_power = rp->tx_power;
|
|
|
+
|
|
|
+ hci_dev_unlock(hdev);
|
|
|
+}
|
|
|
+
|
|
|
static void hci_cs_inquiry(struct hci_dev *hdev, __u8 status)
|
|
|
{
|
|
|
BT_DBG("%s status 0x%2.2x", hdev->name, status);
|
|
@@ -2660,6 +2684,10 @@ static void hci_cmd_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
|
|
|
hci_cc_read_rssi(hdev, skb);
|
|
|
break;
|
|
|
|
|
|
+ case HCI_OP_READ_TX_POWER:
|
|
|
+ hci_cc_read_tx_power(hdev, skb);
|
|
|
+ break;
|
|
|
+
|
|
|
default:
|
|
|
BT_DBG("%s opcode 0x%4.4x", hdev->name, opcode);
|
|
|
break;
|