diff options
author | Yogesh Ashok Powar <yogeshp@marvell.com> | 2014-01-09 22:36:55 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2014-01-13 14:46:59 -0500 |
commit | 68458dede7e0055198318dcb0318df3b4f419507 (patch) | |
tree | cba7b952120b6f9c61fdc5264e47f96b8a1b824a | |
parent | f87f960b2fb802f26ee3b00c19320e57a9c583ff (diff) |
mwifiex: add USB8897 support
Adding new device IDs and assigning generic function/variable
names instead of using device-id specific names.
Signed-off-by: Yogesh Ashok Powar <yogeshp@marvell.com>
Signed-off-by: Nishant Sarmukadam <nishants@marvell.com>
Signed-off-by: Bing Zhao <bzhao@marvell.com>
Signed-off-by: Frank Huang <frankh@marvell.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r-- | drivers/net/wireless/mwifiex/Kconfig | 4 | ||||
-rw-r--r-- | drivers/net/wireless/mwifiex/usb.c | 54 | ||||
-rw-r--r-- | drivers/net/wireless/mwifiex/usb.h | 12 |
3 files changed, 51 insertions, 19 deletions
diff --git a/drivers/net/wireless/mwifiex/Kconfig b/drivers/net/wireless/mwifiex/Kconfig index f7ff4725506a..ecdf34505b54 100644 --- a/drivers/net/wireless/mwifiex/Kconfig +++ b/drivers/net/wireless/mwifiex/Kconfig | |||
@@ -31,12 +31,12 @@ config MWIFIEX_PCIE | |||
31 | mwifiex_pcie. | 31 | mwifiex_pcie. |
32 | 32 | ||
33 | config MWIFIEX_USB | 33 | config MWIFIEX_USB |
34 | tristate "Marvell WiFi-Ex Driver for USB8797" | 34 | tristate "Marvell WiFi-Ex Driver for USB8797/8897" |
35 | depends on MWIFIEX && USB | 35 | depends on MWIFIEX && USB |
36 | select FW_LOADER | 36 | select FW_LOADER |
37 | ---help--- | 37 | ---help--- |
38 | This adds support for wireless adapters based on Marvell | 38 | This adds support for wireless adapters based on Marvell |
39 | Avastar 88W8797 chipset with USB interface. | 39 | 8797/8897 chipset with USB interface. |
40 | 40 | ||
41 | If you choose to build it as a module, it will be called | 41 | If you choose to build it as a module, it will be called |
42 | mwifiex_usb. | 42 | mwifiex_usb. |
diff --git a/drivers/net/wireless/mwifiex/usb.c b/drivers/net/wireless/mwifiex/usb.c index a9240a2083f2..e8ebbd4bc3cd 100644 --- a/drivers/net/wireless/mwifiex/usb.c +++ b/drivers/net/wireless/mwifiex/usb.c | |||
@@ -22,15 +22,21 @@ | |||
22 | 22 | ||
23 | #define USB_VERSION "1.0" | 23 | #define USB_VERSION "1.0" |
24 | 24 | ||
25 | static const char usbdriver_name[] = "usb8797"; | 25 | static const char usbdriver_name[] = "usb8xxx"; |
26 | 26 | ||
27 | static struct mwifiex_if_ops usb_ops; | 27 | static struct mwifiex_if_ops usb_ops; |
28 | static struct semaphore add_remove_card_sem; | 28 | static struct semaphore add_remove_card_sem; |
29 | static struct usb_card_rec *usb_card; | 29 | static struct usb_card_rec *usb_card; |
30 | 30 | ||
31 | static struct usb_device_id mwifiex_usb_table[] = { | 31 | static struct usb_device_id mwifiex_usb_table[] = { |
32 | {USB_DEVICE(USB8797_VID, USB8797_PID_1)}, | 32 | /* 8797 */ |
33 | {USB_DEVICE_AND_INTERFACE_INFO(USB8797_VID, USB8797_PID_2, | 33 | {USB_DEVICE(USB8XXX_VID, USB8797_PID_1)}, |
34 | {USB_DEVICE_AND_INTERFACE_INFO(USB8XXX_VID, USB8797_PID_2, | ||
35 | USB_CLASS_VENDOR_SPEC, | ||
36 | USB_SUBCLASS_VENDOR_SPEC, 0xff)}, | ||
37 | /* 8897 */ | ||
38 | {USB_DEVICE(USB8XXX_VID, USB8897_PID_1)}, | ||
39 | {USB_DEVICE_AND_INTERFACE_INFO(USB8XXX_VID, USB8897_PID_2, | ||
34 | USB_CLASS_VENDOR_SPEC, | 40 | USB_CLASS_VENDOR_SPEC, |
35 | USB_SUBCLASS_VENDOR_SPEC, 0xff)}, | 41 | USB_SUBCLASS_VENDOR_SPEC, 0xff)}, |
36 | { } /* Terminating entry */ | 42 | { } /* Terminating entry */ |
@@ -343,10 +349,20 @@ static int mwifiex_usb_probe(struct usb_interface *intf, | |||
343 | id_vendor, id_product, bcd_device); | 349 | id_vendor, id_product, bcd_device); |
344 | 350 | ||
345 | /* PID_1 is used for firmware downloading only */ | 351 | /* PID_1 is used for firmware downloading only */ |
346 | if (id_product == USB8797_PID_1) | 352 | switch (id_product) { |
347 | card->usb_boot_state = USB8797_FW_DNLD; | 353 | case USB8797_PID_1: |
348 | else | 354 | case USB8897_PID_1: |
349 | card->usb_boot_state = USB8797_FW_READY; | 355 | card->usb_boot_state = USB8XXX_FW_DNLD; |
356 | break; | ||
357 | case USB8797_PID_2: | ||
358 | case USB8897_PID_2: | ||
359 | card->usb_boot_state = USB8XXX_FW_READY; | ||
360 | break; | ||
361 | default: | ||
362 | pr_warning("unknown id_product %#x\n", id_product); | ||
363 | card->usb_boot_state = USB8XXX_FW_DNLD; | ||
364 | break; | ||
365 | } | ||
350 | 366 | ||
351 | card->udev = udev; | 367 | card->udev = udev; |
352 | card->intf = intf; | 368 | card->intf = intf; |
@@ -755,9 +771,20 @@ static int mwifiex_register_dev(struct mwifiex_adapter *adapter) | |||
755 | 771 | ||
756 | card->adapter = adapter; | 772 | card->adapter = adapter; |
757 | adapter->dev = &card->udev->dev; | 773 | adapter->dev = &card->udev->dev; |
758 | strcpy(adapter->fw_name, USB8797_DEFAULT_FW_NAME); | ||
759 | usb_card = card; | 774 | usb_card = card; |
760 | 775 | ||
776 | switch (le16_to_cpu(card->udev->descriptor.idProduct)) { | ||
777 | case USB8897_PID_1: | ||
778 | case USB8897_PID_2: | ||
779 | strcpy(adapter->fw_name, USB8897_DEFAULT_FW_NAME); | ||
780 | break; | ||
781 | case USB8797_PID_1: | ||
782 | case USB8797_PID_2: | ||
783 | default: | ||
784 | strcpy(adapter->fw_name, USB8797_DEFAULT_FW_NAME); | ||
785 | break; | ||
786 | } | ||
787 | |||
761 | return 0; | 788 | return 0; |
762 | } | 789 | } |
763 | 790 | ||
@@ -773,7 +800,7 @@ static int mwifiex_prog_fw_w_helper(struct mwifiex_adapter *adapter, | |||
773 | { | 800 | { |
774 | int ret = 0; | 801 | int ret = 0; |
775 | u8 *firmware = fw->fw_buf, *recv_buff; | 802 | u8 *firmware = fw->fw_buf, *recv_buff; |
776 | u32 retries = USB8797_FW_MAX_RETRY, dlen; | 803 | u32 retries = USB8XXX_FW_MAX_RETRY, dlen; |
777 | u32 fw_seqnum = 0, tlen = 0, dnld_cmd = 0; | 804 | u32 fw_seqnum = 0, tlen = 0, dnld_cmd = 0; |
778 | struct fw_data *fwdata; | 805 | struct fw_data *fwdata; |
779 | struct fw_sync_header sync_fw; | 806 | struct fw_sync_header sync_fw; |
@@ -875,7 +902,7 @@ static int mwifiex_prog_fw_w_helper(struct mwifiex_adapter *adapter, | |||
875 | continue; | 902 | continue; |
876 | } | 903 | } |
877 | 904 | ||
878 | retries = USB8797_FW_MAX_RETRY; | 905 | retries = USB8XXX_FW_MAX_RETRY; |
879 | break; | 906 | break; |
880 | } | 907 | } |
881 | fw_seqnum++; | 908 | fw_seqnum++; |
@@ -899,13 +926,13 @@ static int mwifiex_usb_dnld_fw(struct mwifiex_adapter *adapter, | |||
899 | int ret; | 926 | int ret; |
900 | struct usb_card_rec *card = (struct usb_card_rec *)adapter->card; | 927 | struct usb_card_rec *card = (struct usb_card_rec *)adapter->card; |
901 | 928 | ||
902 | if (card->usb_boot_state == USB8797_FW_DNLD) { | 929 | if (card->usb_boot_state == USB8XXX_FW_DNLD) { |
903 | ret = mwifiex_prog_fw_w_helper(adapter, fw); | 930 | ret = mwifiex_prog_fw_w_helper(adapter, fw); |
904 | if (ret) | 931 | if (ret) |
905 | return -1; | 932 | return -1; |
906 | 933 | ||
907 | /* Boot state changes after successful firmware download */ | 934 | /* Boot state changes after successful firmware download */ |
908 | if (card->usb_boot_state == USB8797_FW_DNLD) | 935 | if (card->usb_boot_state == USB8XXX_FW_DNLD) |
909 | return -1; | 936 | return -1; |
910 | } | 937 | } |
911 | 938 | ||
@@ -1039,4 +1066,5 @@ MODULE_AUTHOR("Marvell International Ltd."); | |||
1039 | MODULE_DESCRIPTION("Marvell WiFi-Ex USB Driver version" USB_VERSION); | 1066 | MODULE_DESCRIPTION("Marvell WiFi-Ex USB Driver version" USB_VERSION); |
1040 | MODULE_VERSION(USB_VERSION); | 1067 | MODULE_VERSION(USB_VERSION); |
1041 | MODULE_LICENSE("GPL v2"); | 1068 | MODULE_LICENSE("GPL v2"); |
1042 | MODULE_FIRMWARE("mrvl/usb8797_uapsta.bin"); | 1069 | MODULE_FIRMWARE(USB8797_DEFAULT_FW_NAME); |
1070 | MODULE_FIRMWARE(USB8897_DEFAULT_FW_NAME); | ||
diff --git a/drivers/net/wireless/mwifiex/usb.h b/drivers/net/wireless/mwifiex/usb.h index 98c4316cd1a9..15b73d12e998 100644 --- a/drivers/net/wireless/mwifiex/usb.h +++ b/drivers/net/wireless/mwifiex/usb.h | |||
@@ -22,19 +22,23 @@ | |||
22 | 22 | ||
23 | #include <linux/usb.h> | 23 | #include <linux/usb.h> |
24 | 24 | ||
25 | #define USB8797_VID 0x1286 | 25 | #define USB8XXX_VID 0x1286 |
26 | |||
26 | #define USB8797_PID_1 0x2043 | 27 | #define USB8797_PID_1 0x2043 |
27 | #define USB8797_PID_2 0x2044 | 28 | #define USB8797_PID_2 0x2044 |
29 | #define USB8897_PID_1 0x2045 | ||
30 | #define USB8897_PID_2 0x2046 | ||
28 | 31 | ||
29 | #define USB8797_FW_DNLD 1 | 32 | #define USB8XXX_FW_DNLD 1 |
30 | #define USB8797_FW_READY 2 | 33 | #define USB8XXX_FW_READY 2 |
31 | #define USB8797_FW_MAX_RETRY 3 | 34 | #define USB8XXX_FW_MAX_RETRY 3 |
32 | 35 | ||
33 | #define MWIFIEX_TX_DATA_URB 6 | 36 | #define MWIFIEX_TX_DATA_URB 6 |
34 | #define MWIFIEX_RX_DATA_URB 6 | 37 | #define MWIFIEX_RX_DATA_URB 6 |
35 | #define MWIFIEX_USB_TIMEOUT 100 | 38 | #define MWIFIEX_USB_TIMEOUT 100 |
36 | 39 | ||
37 | #define USB8797_DEFAULT_FW_NAME "mrvl/usb8797_uapsta.bin" | 40 | #define USB8797_DEFAULT_FW_NAME "mrvl/usb8797_uapsta.bin" |
41 | #define USB8897_DEFAULT_FW_NAME "mrvl/usb8897_uapsta.bin" | ||
38 | 42 | ||
39 | #define FW_DNLD_TX_BUF_SIZE 620 | 43 | #define FW_DNLD_TX_BUF_SIZE 620 |
40 | #define FW_DNLD_RX_BUF_SIZE 2048 | 44 | #define FW_DNLD_RX_BUF_SIZE 2048 |