Apply patch for setting bluetooth mac address.

Change-Id: I76568d0643927d279f22d2d2b1067885745fc529
diff --git a/drivers/bluetooth/btbcm.c b/drivers/bluetooth/btbcm.c
index 728fce3..9039b47 100644
--- a/drivers/bluetooth/btbcm.c
+++ b/drivers/bluetooth/btbcm.c
@@ -23,6 +23,8 @@
 
 #include <linux/module.h>
 #include <linux/firmware.h>
+#include <linux/kernel.h>
+#include <linux/ctype.h>
 #include <asm/unaligned.h>
 
 #include <net/bluetooth/bluetooth.h>
@@ -34,6 +36,8 @@
 
 #define BDADDR_BCM20702A0 (&(bdaddr_t) {{0x00, 0xa0, 0x02, 0x70, 0x20, 0x00}})
 
+static char *bdaddr_base;
+
 int btbcm_check_bdaddr(struct hci_dev *hdev)
 {
 	struct hci_rp_read_bd_addr *bda;
@@ -262,6 +266,62 @@
 	{ }
 };
 
+static int bachk(const char *str)
+{
+	if (!str)
+		return -1;
+
+	if (strlen(str) != 17)
+		return -1;
+
+	while (*str) {
+		if (!isxdigit(*str++))
+			return -1;
+
+		if (!isxdigit(*str++))
+			return -1;
+
+		if (*str == 0)
+			break;
+
+		if (*str++ != ':')
+			return -1;
+	}
+
+	return 0;
+}
+
+static int str2ba(const char *str, bdaddr_t *ba)
+{
+	int i;
+
+	if (bachk(str) < 0) {
+		memset(ba, 0, sizeof(*ba));
+		return -1;
+	}
+
+	for (i = 5; i >= 0; i--, str += 3)
+		ba->b[i] = simple_strtol(str, NULL, 16);
+
+	return 0;
+}
+
+static void btbcm_set_bdaddr_base(struct hci_dev *hdev)
+{
+	bdaddr_t addr;
+
+	if (!bdaddr_base)
+		return;
+
+	if (str2ba(bdaddr_base, &addr) < 0) {
+		BT_ERR("bdaddr_base is invalid");
+		return;
+	}
+
+	btbcm_set_bdaddr(hdev, &addr);
+	btbcm_reset(hdev);
+}
+
 int btbcm_setup_patchram(struct hci_dev *hdev)
 {
 	char fw_name[64];
@@ -358,6 +418,8 @@
 		hw_name ? : "BCM", (subver & 0x7000) >> 13,
 		(subver & 0x1f00) >> 8, (subver & 0x00ff), rev & 0x0fff);
 
+	btbcm_set_bdaddr_base(hdev);
+
 	btbcm_check_bdaddr(hdev);
 
 	set_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks);
@@ -385,6 +447,9 @@
 }
 EXPORT_SYMBOL_GPL(btbcm_setup_apple);
 
+module_param(bdaddr_base, charp, 0644);
+MODULE_PARM_DESC(bdaddr_base, "Bluetooth adapter base address");
+
 MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
 MODULE_DESCRIPTION("Bluetooth support for Broadcom devices ver " VERSION);
 MODULE_VERSION(VERSION);