[PATCH] wifi: mwifiex: Restore USB8897 chipset support

Alex Bee
2023-12-05T21:02:51Z

This patch restores USB8897 support which was removed with
Commit 60a188a2715f ("mwifiex: remove USB8897 chipset support")

There are quite some devices which use this chipset with USB interface.
The firmware still exits in linux upstream firmware repo and this simple
patch is all what is required to support it in upstream linux (again).

Signed-off-by: Alex Bee <knaerzche@gmail.com>
---
Recently I upstreamed support for Geniatec XPI-3128 SBC which actually
has one any of those boards soldered to the onboard USB Host controller.
Geniatech has some boards [0], [1], [2] (maybe more) which have this
variant soldered the same way. (optional)
I've also read that "Xbox Wireless adapter for Windows" uses this chipset
(unverified).
I've also CC'ed Ganapathi Bhat who last updated the firmware for SDIO and
PCIe variant of this chipset: It would be great if the firmware
for USB variant could get an update too, as the one which we currently
have is quite old - version 15.68.4.p103, while other have some 16.*
firmware.

[0] https://www.geniatech.com/product/xpi-3288/
[1] https://www.geniatech.com/product/xpi-imx8mm/
[2] https://www.geniatech.com/product/xpi-s905x/

drivers/net/wireless/marvell/mwifiex/Kconfig | 4 ++--
drivers/net/wireless/marvell/mwifiex/usb.c | 14 ++++++++++++++
drivers/net/wireless/marvell/mwifiex/usb.h | 3 +++
3 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/drivers/net/wireless/marvell/mwifiex/Kconfig b/drivers/net/wireless/marvell/mwifiex/Kconfig
index b182f7155d66..277b75eaf91e 100644
--- a/drivers/net/wireless/marvell/mwifiex/Kconfig
+++ b/drivers/net/wireless/marvell/mwifiex/Kconfig
@@ -35,12 +35,12 @@ config MWIFIEX_PCIE
mwifiex_pcie.

config MWIFIEX_USB
- tristate "Marvell WiFi-Ex Driver for USB8766/8797/8997"
+ tristate "Marvell WiFi-Ex Driver for USB8766/8797/8897/8997"
depends on MWIFIEX && USB
select FW_LOADER
help
This adds support for wireless adapters based on Marvell
- 8797/8997 chipset with USB interface.
+ 8797/8897/8997 chipset with USB interface.

If you choose to build it as a module, it will be called
mwifiex_usb.
diff --git a/drivers/net/wireless/marvell/mwifiex/usb.c b/drivers/net/wireless/marvell/mwifiex/usb.c
index d3ab9572e711..061be9c2ed2f 100644
--- a/drivers/net/wireless/marvell/mwifiex/usb.c
+++ b/drivers/net/wireless/marvell/mwifiex/usb.c
@@ -28,6 +28,11 @@ static const struct usb_device_id mwifiex_usb_table[] = {
{USB_DEVICE_AND_INTERFACE_INFO(USB8XXX_VID, USB8801_PID_2,
USB_CLASS_VENDOR_SPEC,
USB_SUBCLASS_VENDOR_SPEC, 0xff)},
+ /* 8897 */
+ {USB_DEVICE(USB8XXX_VID, USB8897_PID_1)},
+ {USB_DEVICE_AND_INTERFACE_INFO(USB8XXX_VID, USB8897_PID_2,
+ USB_CLASS_VENDOR_SPEC,
+ USB_SUBCLASS_VENDOR_SPEC, 0xff)},
/* 8997 */
{USB_DEVICE(USB8XXX_VID, USB8997_PID_1)},
{USB_DEVICE_AND_INTERFACE_INFO(USB8XXX_VID, USB8997_PID_2,
@@ -409,12 +414,14 @@ static int mwifiex_usb_probe(struct usb_interface *intf,
case USB8766_PID_1:
case USB8797_PID_1:
case USB8801_PID_1:
+ case USB8897_PID_1:
case USB8997_PID_1:
card->usb_boot_state = USB8XXX_FW_DNLD;
break;
case USB8766_PID_2:
case USB8797_PID_2:
case USB8801_PID_2:
+ case USB8897_PID_2:
case USB8997_PID_2:
card->usb_boot_state = USB8XXX_FW_READY;
break;
@@ -1318,6 +1325,12 @@ static int mwifiex_register_dev(struct mwifiex_adapter *adapter)
strcpy(adapter->fw_name, USB8997_DEFAULT_FW_NAME);
adapter->ext_scan = true;
break;
+ case USB8897_PID_1:
+ case USB8897_PID_2:
+ adapter->tx_buf_size = MWIFIEX_TX_DATA_BUF_SIZE_4K;
+ strcpy(adapter->fw_name, USB8897_DEFAULT_FW_NAME);
+ adapter->ext_scan = true;
+ break;
case USB8766_PID_1:
case USB8766_PID_2:
adapter->tx_buf_size = MWIFIEX_TX_DATA_BUF_SIZE_2K;
@@ -1615,4 +1628,5 @@ MODULE_LICENSE("GPL v2");
MODULE_FIRMWARE(USB8766_DEFAULT_FW_NAME);
MODULE_FIRMWARE(USB8797_DEFAULT_FW_NAME);
MODULE_FIRMWARE(USB8801_DEFAULT_FW_NAME);
+MODULE_FIRMWARE(USB8897_DEFAULT_FW_NAME);
MODULE_FIRMWARE(USB8997_DEFAULT_FW_NAME);
diff --git a/drivers/net/wireless/marvell/mwifiex/usb.h b/drivers/net/wireless/marvell/mwifiex/usb.h
index 7e920b51994c..b7dba256e9f8 100644
--- a/drivers/net/wireless/marvell/mwifiex/usb.h
+++ b/drivers/net/wireless/marvell/mwifiex/usb.h
@@ -19,6 +19,8 @@
#define USB8797_PID_2 0x2044
#define USB8801_PID_1 0x2049
#define USB8801_PID_2 0x204a
+#define USB8897_PID_1 0x2045
+#define USB8897_PID_2 0x2046
#define USB8997_PID_1 0x2052
#define USB8997_PID_2 0x204e

@@ -35,6 +37,7 @@
#define USB8766_DEFAULT_FW_NAME "mrvl/usb8766_uapsta.bin"
#define USB8797_DEFAULT_FW_NAME "mrvl/usb8797_uapsta.bin"
#define USB8801_DEFAULT_FW_NAME "mrvl/usb8801_uapsta.bin"
+#define USB8897_DEFAULT_FW_NAME "mrvl/usb8897_uapsta.bin"
#define USB8997_DEFAULT_FW_NAME "mrvl/usbusb8997_combo_v4.bin"

#define FW_DNLD_TX_BUF_SIZE 620
--
2.43.0