Subject: Support reading BT address from OTP file

Some customers want to put wifi or BT address in OTP file for manufactory 
process.
This patch will support this feature.

ps: this patch is based on kernel-2.6.37.6-151.5 and
ar6003_skip_unnecessary_scan.patch due to the change is in the same 
ar6000_drv.c.

Signed-off-by: Samuel Chang <samu...@qca.qualcomm.com>


diff -ruN 
kernel-2.6.37.6-151.5_skip_unnecessasy_scan_patch_P1/drivers/staging/ar6003/os/linux/ar6000_drv.c
 
kernel-2.6.37.6-151.5_bdaddress_otp_patch_P2/drivers/staging/ar6003/os/linux/ar6000_drv.c
--- 
kernel-2.6.37.6-151.5_skip_unnecessasy_scan_patch_P1/drivers/staging/ar6003/os/linux/ar6000_drv.c
   2011-07-18 16:16:07.816871251 +0800
+++ 
kernel-2.6.37.6-151.5_bdaddress_otp_patch_P2/drivers/staging/ar6003/os/linux/ar6000_drv.c
   2011-07-22 12:55:41.505195148 +0800
@@ -1384,6 +1384,33 @@
 #endif /* INIT_MODE_DRV_ENABLED */
 
 A_STATUS
+ar6000_update_bdaddr(AR_SOFTC_T *ar)
+{
+
+        if (setupbtdev != 0) {
+            A_UINT32 address;
+
+           if (BMIReadMemory(ar->arHifDevice,
+               HOST_INTEREST_ITEM_ADDRESS(ar->arTargetType, hi_board_data), 
(A_UCHAR *)&address, 4) != A_OK)
+           {
+               AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("BMIReadMemory for hi_board_data 
failed\n"));
+               return A_ERROR;
+           }
+
+           if (BMIReadMemory(ar->arHifDevice, address + BDATA_BDADDR_OFFSET, 
(A_UCHAR *)ar->bdaddr, 6) != A_OK)
+           {
+               AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("BMIReadMemory for BD address 
failed\n"));
+               return A_ERROR;
+           }
+          AR_DEBUG_PRINTF(ATH_DEBUG_INFO,("BDADDR 
0x%x:0x%x:0x%x:0x%x:0x%x:0x%x\n", ar->bdaddr[0],
+                                                               ar->bdaddr[1], 
ar->bdaddr[2], ar->bdaddr[3],
+                                                               ar->bdaddr[4], 
ar->bdaddr[5]));
+        }
+
+return A_OK;
+}
+
+A_STATUS
 ar6000_sysfs_bmi_get_config(AR_SOFTC_T *ar, A_UINT32 mode)
 {
     AR_DEBUG_PRINTF(ATH_DEBUG_INFO,("BMI: Requesting device specific 
configuration\n"));
@@ -2896,6 +2923,10 @@
 
     ar = arPriv->arSoftc;
 
+    if (wlaninitmode == WLAN_INIT_MODE_USR || wlaninitmode == 
WLAN_INIT_MODE_DRV) {
+
+        ar6000_update_bdaddr(ar);
+    }
     if (enablerssicompensation) {
        ar6000_copy_cust_data_from_target(ar->arHifDevice, ar->arTargetType);
        read_rssi_compensation_param(ar);
diff -ruN 
kernel-2.6.37.6-151.5_skip_unnecessasy_scan_patch_P1/drivers/staging/ar6003/os/linux/hci_bridge.c
 
kernel-2.6.37.6-151.5_bdaddress_otp_patch_P2/drivers/staging/ar6003/os/linux/hci_bridge.c
--- 
kernel-2.6.37.6-151.5_skip_unnecessasy_scan_patch_P1/drivers/staging/ar6003/os/linux/hci_bridge.c
   2011-07-03 12:29:58.000000000 +0800
+++ 
kernel-2.6.37.6-151.5_bdaddress_otp_patch_P2/drivers/staging/ar6003/os/linux/hci_bridge.c
   2011-07-22 11:41:28.051111664 +0800
@@ -225,7 +225,6 @@
 {
     AR6K_HCI_BRIDGE_INFO *pHcidevInfo = (AR6K_HCI_BRIDGE_INFO *)pContext;
     A_STATUS              status;
-    AR_SOFTC_DEV_T *arDev = pHcidevInfo->ar->arDev[0];
 
     
     pHcidevInfo->pHCIDev = HCIHandle;
@@ -295,7 +294,7 @@
         }
         
             /* configure the AR3K device */  
-               memcpy(ar3kconfig.bdaddr,arDev->bdaddr,6);       
+               memcpy(ar3kconfig.bdaddr,pHcidevInfo->ar->bdaddr,6);       
         status = AR3KConfigure(&ar3kconfig);
         if (A_FAILED(status)) {
             extern unsigned int setuphci;
diff -ruN 
kernel-2.6.37.6-151.5_skip_unnecessasy_scan_patch_P1/drivers/staging/ar6003/os/linux/include/ar6000_drv.h
 
kernel-2.6.37.6-151.5_bdaddress_otp_patch_P2/drivers/staging/ar6003/os/linux/include/ar6000_drv.h
--- 
kernel-2.6.37.6-151.5_skip_unnecessasy_scan_patch_P1/drivers/staging/ar6003/os/linux/include/ar6000_drv.h
   2011-07-15 23:59:29.000000000 +0800
+++ 
kernel-2.6.37.6-151.5_bdaddress_otp_patch_P2/drivers/staging/ar6003/os/linux/include/ar6000_drv.h
   2011-07-22 11:43:11.851626382 +0800
@@ -620,6 +620,8 @@
     A_UINT8                 gNumSta;
     /* AP-STA Concurrency */
     struct ar6_softc_dev    *arDev[NUM_DEV];
+    /* Bluetooth Address to be read from OTP */
+    A_UINT8                 bdaddr[6];
 } AR_SOFTC_T;
 
 typedef struct ar6_softc_ap {
@@ -718,7 +720,6 @@
     WMI_GET_WAC_INFO        wacInfo;
 #define AR_MCAST_FILTER_MAC_ADDR_SIZE  6
     A_UINT8                 
mcast_filters[MAC_MAX_FILTERS_PER_LIST][AR_MCAST_FILTER_MAC_ADDR_SIZE];
-    A_UINT8                 bdaddr[ATH_MAC_LEN];
 #ifdef ADAPTIVE_POWER_THROUGHPUT_CONTROL
     APTC_TRAFFIC_RECORD     aptcTR;
 #endif
_______________________________________________
MeeGo-kernel mailing list
MeeGo-kernel@lists.meego.com
http://lists.meego.com/listinfo/meego-kernel

Reply via email to