aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYogesh Ashok Powar <yogeshp@marvell.com>2014-01-09 22:36:55 -0500
committerJohn W. Linville <linville@tuxdriver.com>2014-01-13 14:46:59 -0500
commit68458dede7e0055198318dcb0318df3b4f419507 (patch)
treecba7b952120b6f9c61fdc5264e47f96b8a1b824a
parentf87f960b2fb802f26ee3b00c19320e57a9c583ff (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/Kconfig4
-rw-r--r--drivers/net/wireless/mwifiex/usb.c54
-rw-r--r--drivers/net/wireless/mwifiex/usb.h12
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
33config MWIFIEX_USB 33config 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
25static const char usbdriver_name[] = "usb8797"; 25static const char usbdriver_name[] = "usb8xxx";
26 26
27static struct mwifiex_if_ops usb_ops; 27static struct mwifiex_if_ops usb_ops;
28static struct semaphore add_remove_card_sem; 28static struct semaphore add_remove_card_sem;
29static struct usb_card_rec *usb_card; 29static struct usb_card_rec *usb_card;
30 30
31static struct usb_device_id mwifiex_usb_table[] = { 31static 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.");
1039MODULE_DESCRIPTION("Marvell WiFi-Ex USB Driver version" USB_VERSION); 1066MODULE_DESCRIPTION("Marvell WiFi-Ex USB Driver version" USB_VERSION);
1040MODULE_VERSION(USB_VERSION); 1067MODULE_VERSION(USB_VERSION);
1041MODULE_LICENSE("GPL v2"); 1068MODULE_LICENSE("GPL v2");
1042MODULE_FIRMWARE("mrvl/usb8797_uapsta.bin"); 1069MODULE_FIRMWARE(USB8797_DEFAULT_FW_NAME);
1070MODULE_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