BT: add an selection of reading bd_addr from ID block or WIFI MAC+1
author陈智 <cz@rock-chips.com>
Wed, 30 Mar 2011 08:40:59 +0000 (16:40 +0800)
committer陈智 <cz@rock-chips.com>
Wed, 30 Mar 2011 08:40:59 +0000 (16:40 +0800)
drivers/bluetooth/Kconfig
drivers/bluetooth/vflash.c

index 92234c562e9f5fe1a19835a670b63aa521ddd91f..c328aa12a71ed661eb7306a204b72a32dd930365 100755 (executable)
@@ -206,6 +206,16 @@ config BT_HCIBCM4325
          Say Y here to compile support for HCI BCM4325 devices into the
          kernel or say M to compile it as module (bcm4325).
 
+if BT_HCIBCM432x
+choice
+        prompt "BD_ADDR read from"
+config IDBLOCK
+        bool "NAND ID block"
+config WIFI_MAC
+        bool "WIFI MAC+1"
+endchoice
+endif
+
 
 endmenu
 
index 5987d9212a52ff73415378d1afee75fc9fc0f334..746c2f0b4940738363eaebe1fa46106752eafd93 100755 (executable)
@@ -31,6 +31,7 @@ static struct miscdevice vflash_miscdev;
 #define READ_BDADDR_FROM_FLASH  0x01\r
 \r
 extern char GetSNSectorInfo(char * pbuf);\r
+extern unsigned char wlan_mac_addr[6];\r
 \r
 static int vflash_ioctl(struct inode *inode, struct file *file,\r
                                        unsigned int cmd, unsigned long arg)\r
@@ -47,6 +48,35 @@ static int vflash_ioctl(struct inode *inode, struct file *file,
     {\r
         case READ_BDADDR_FROM_FLASH:\r
         {   \r
+#if CONFIG_WIFI_MAC\r
+            unsigned char bd_addr[6] = {0};\r
+            int i;\r
+\r
+            printk("vflash: wlan_mac_addr:%X:%X:%X:%x:%X:%x\n", wlan_mac_addr[0],\r
+                                                wlan_mac_addr[1],\r
+                                                wlan_mac_addr[2],\r
+                                                wlan_mac_addr[3],\r
+                                                wlan_mac_addr[4],\r
+                                                wlan_mac_addr[5] );\r
+            for (i=1; i<6; i++) {\r
+                bd_addr[i] = wlan_mac_addr[5-i];\r
+            }\r
+\r
+            bd_addr[0] = wlan_mac_addr[5]+1;\r
+\r
+            printk("vflash: bd_addr:%X:%X:%X:%x:%X:%x\n", bd_addr[5],\r
+                                                bd_addr[4],\r
+                                                bd_addr[3],\r
+                                                bd_addr[2],\r
+                                                bd_addr[1],\r
+                                                bd_addr[0] );\r
+\r
+\r
+            if(copy_to_user(argp, bd_addr, 6)) {\r
+                printk("ERROR: copy_to_user---%s\n", __FUNCTION__);\r
+                return -EFAULT;\r
+            }\r
+#else\r
             char *tempBuf = (char *)kmalloc(512, GFP_KERNEL);\r
            char bd_addr[6] = {0};\r
             int i;\r
@@ -68,6 +98,7 @@ static int vflash_ioctl(struct inode *inode, struct file *file,
             }\r
             \r
             kfree(tempBuf);\r
+#endif\r
         }\r
         break;\r
         default:\r