summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSudha Bheemanna <b.sudha@samsung.com>2016-09-07 15:22:08 +0530
committerAmit Purwar <amit.purwar@samsung.com>2019-06-28 09:43:31 +0530
commit23d3ec64494e1253885a652085d8120d4bc5f79a (patch)
tree1c93ff30da9329c0d4351b9e309bd76ea567673e
parent90a711ccd1c201ce83171c7761d05568c79ed104 (diff)
downloadlinux-rpi3-23d3ec64494e1253885a652085d8120d4bc5f79a.tar.gz
linux-rpi3-23d3ec64494e1253885a652085d8120d4bc5f79a.tar.bz2
linux-rpi3-23d3ec64494e1253885a652085d8120d4bc5f79a.zip
Bluetooth: Get Advertising TX power
This patch adds MGMT command to read the advertising TX power. Change-Id: Ide9e5d332f034928d2eae2cbd68a025a0d42be1b Signed-off-by: Sudha Bheemanna <b.sudha@samsung.com> Signed-off-by: Amit Purwar <amit.purwar@samsung.com>
-rw-r--r--include/net/bluetooth/mgmt_tizen.h6
-rw-r--r--net/bluetooth/mgmt.c32
2 files changed, 38 insertions, 0 deletions
diff --git a/include/net/bluetooth/mgmt_tizen.h b/include/net/bluetooth/mgmt_tizen.h
index 4eaa867bb126..982c00d35c9b 100644
--- a/include/net/bluetooth/mgmt_tizen.h
+++ b/include/net/bluetooth/mgmt_tizen.h
@@ -161,6 +161,12 @@ struct mgmt_cp_set_voice_setting {
} __packed;
#define MGMT_SET_VOICE_SETTING_SIZE 9
+#define MGMT_OP_GET_ADV_TX_POWER (TIZEN_OP_CODE_BASE + 0x11)
+#define MGMT_GET_ADV_TX_POWER_SIZE 0
+struct mgmt_rp_get_adv_tx_power {
+ __s8 adv_tx_power;
+} __packed;
+
/* EVENTS */
/* For device name update changes */
diff --git a/net/bluetooth/mgmt.c b/net/bluetooth/mgmt.c
index 794fb46e2a26..dd3e7dfafb9a 100644
--- a/net/bluetooth/mgmt.c
+++ b/net/bluetooth/mgmt.c
@@ -6800,6 +6800,37 @@ unlock:
return err;
}
+static int get_adv_tx_power(struct sock *sk, struct hci_dev *hdev,
+ void *data, u16 len)
+{
+ struct mgmt_rp_get_adv_tx_power *rp;
+ size_t rp_len;
+ int err;
+
+ BT_DBG("%s", hdev->name);
+
+ hci_dev_lock(hdev);
+
+ rp_len = sizeof(*rp);
+ rp = kmalloc(rp_len, GFP_KERNEL);
+ if (!rp) {
+ err = -ENOMEM;
+ goto unlock;
+ }
+
+ rp->adv_tx_power = hdev->adv_tx_power;
+
+ err = mgmt_cmd_complete(sk, hdev->id, MGMT_OP_GET_ADV_TX_POWER, 0, rp,
+ rp_len);
+
+ kfree(rp);
+
+unlock:
+ hci_dev_unlock(hdev);
+
+ return err;
+}
+
void mgmt_hardware_error(struct hci_dev *hdev, u8 err_code)
{
struct mgmt_ev_hardware_error ev;
@@ -8800,6 +8831,7 @@ static const struct hci_mgmt_handler tizen_mgmt_handlers[] = {
{ set_manufacturer_data, MGMT_SET_MANUFACTURER_DATA_SIZE },
{ le_set_scan_params, MGMT_LE_SET_SCAN_PARAMS_SIZE },
{ set_voice_setting, MGMT_SET_VOICE_SETTING_SIZE },
+ { get_adv_tx_power, MGMT_GET_ADV_TX_POWER_SIZE },
};
#endif