patch bcdDevice value for magpie to make easy firmware detection.
authorOleksij Rempel <linux@rempel-privat.de>
Tue, 13 Aug 2013 10:23:28 +0000 (12:23 +0200)
committerOleksij Rempel <linux@rempel-privat.de>
Tue, 13 Aug 2013 10:23:28 +0000 (12:23 +0200)
Signed-off-by: Oleksij Rempel <linux@rempel-privat.de>
target_firmware/magpie_fw_dev/target/rompatch/usb_api_patch.c

index 298c41d511c5da54d32eacac4075100ef0f7bdcd..6df9cd777a2e099072f6d359d56859e7624462aa 100755 (executable)
@@ -750,6 +750,8 @@ extern BOOLEAN bGet_descriptor(void);
 uint16_t ConfigDescriptorPatch[30];
 
 uint16_t UsbDeviceDescriptorPatch[9];
+#define BCD_DEVICE_OFFSET              6
+#define BCD_DEVICE_FW_SIGNATURE                0xffff
 #define VENDOR_ID_OFFSET               4
 #define PRODUCT_ID_OFFSET              5
 
@@ -785,17 +787,25 @@ uint16_t UsbDeviceDescriptorPatch[9];
  
 BOOLEAN bGet_descriptor_patch(void)
 {
-       /* Patch for custom id from flash */
-       if (bEepromExist == FALSE && mDEV_REQ_VALUE_HIGH() == 1)
+       if (mDEV_REQ_VALUE_HIGH() == 1)
        {
                uint8_t *p = (uint8_t *)u8UsbDeviceDescriptor;
                uint32_t u32Tmp=0;
                /* Copy Usb Device Descriptor */
                ath_hal_memcpy(UsbDeviceDescriptorPatch, p, sizeof(UsbDeviceDescriptorPatch));
 
-               A_SFLASH_READ_4B(u32Tmp, FLASH_SIZE - EE_DATA_RESERVED_LEN + FLASH_USB_VENDOR_ID_OFFSET*2);
-               UsbDeviceDescriptorPatch[VENDOR_ID_OFFSET] = mSWAP_BYTE(mLOW_WORD0(u32Tmp));
-               UsbDeviceDescriptorPatch[PRODUCT_ID_OFFSET] = mSWAP_BYTE(mHIGH_WORD0(u32Tmp));             
+               UsbDeviceDescriptorPatch[BCD_DEVICE_OFFSET] =
+                       BCD_DEVICE_FW_SIGNATURE;
+
+               /* Patch for custom id from flash */
+               if (bEepromExist == FALSE) {
+                       A_SFLASH_READ_4B(u32Tmp, FLASH_SIZE -
+                               EE_DATA_RESERVED_LEN + FLASH_USB_VENDOR_ID_OFFSET*2);
+                       UsbDeviceDescriptorPatch[VENDOR_ID_OFFSET] =
+                               mSWAP_BYTE(mLOW_WORD0(u32Tmp));
+                       UsbDeviceDescriptorPatch[PRODUCT_ID_OFFSET] =
+                               mSWAP_BYTE(mHIGH_WORD0(u32Tmp));
+               }
       
                pu8DescriptorEX = UsbDeviceDescriptorPatch;
                u16TxRxCounter = mTABLE_LEN(u8UsbDeviceDescriptor[0]);