]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
rsi: add new device model for 9116
authorSiva Rebbagondla <siva8118@gmail.com>
Wed, 3 Apr 2019 04:13:02 +0000 (09:43 +0530)
committerKalle Valo <kvalo@codeaurora.org>
Thu, 25 Apr 2019 16:44:23 +0000 (19:44 +0300)
9116 device id entry is added in both SDIO and USB interfaces.
New enumberation value taken for the device model. Based on the
device model detected run time, few device specific operations
needs to be performed.

adding rsi_dev_model to get device type in run time, as we can use
same driver for 9113 and 9116 except few firmware load changes.

Signed-off-by: Siva Rebbagondla <siva8118@gmail.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/rsi/rsi_91x_sdio.c
drivers/net/wireless/rsi/rsi_91x_usb.c
drivers/net/wireless/rsi/rsi_main.h
drivers/net/wireless/rsi/rsi_sdio.h
drivers/net/wireless/rsi/rsi_usb.h

index 3430d7a0899e6c510c0e75e7379fe0882c205f2f..2f4bc25d93caa0b878bc1dcbab4b58ba9b9ef61c 100644 (file)
@@ -949,7 +949,7 @@ static int rsi_probe(struct sdio_func *pfunction,
 {
        struct rsi_hw *adapter;
        struct rsi_91x_sdiodev *sdev;
-       int status;
+       int status = -EINVAL;
 
        rsi_dbg(INIT_ZONE, "%s: Init function called\n", __func__);
 
@@ -968,6 +968,20 @@ static int rsi_probe(struct sdio_func *pfunction,
                status = -EIO;
                goto fail_free_adapter;
        }
+
+       if (pfunction->device == RSI_SDIO_PID_9113) {
+               rsi_dbg(ERR_ZONE, "%s: 9113 module detected\n", __func__);
+               adapter->device_model = RSI_DEV_9113;
+       } else  if (pfunction->device == RSI_SDIO_PID_9116) {
+               rsi_dbg(ERR_ZONE, "%s: 9116 module detected\n", __func__);
+               adapter->device_model = RSI_DEV_9116;
+       } else {
+               rsi_dbg(ERR_ZONE,
+                       "%s: Unsupported RSI device id 0x%x\n", __func__,
+                       pfunction->device);
+               goto fail_free_adapter;
+       }
+
        sdev = (struct rsi_91x_sdiodev *)adapter->rsi_dev;
        rsi_init_event(&sdev->rx_thread.event);
        status = rsi_create_kthread(adapter->priv, &sdev->rx_thread,
@@ -1415,7 +1429,8 @@ static const struct dev_pm_ops rsi_pm_ops = {
 #endif
 
 static const struct sdio_device_id rsi_dev_table[] =  {
-       { SDIO_DEVICE(RSI_SDIO_VID_9113, RSI_SDIO_PID_9113) },
+       { SDIO_DEVICE(RSI_SDIO_VENDOR_ID, RSI_SDIO_PID_9113) },
+       { SDIO_DEVICE(RSI_SDIO_VENDOR_ID, RSI_SDIO_PID_9116) },
        { /* Blank */},
 };
 
index ac0ef5ea6ffb981f16a52c50f77dd53156ec972b..7d9b85925150443895c260ee7abf12457a40d468 100644 (file)
@@ -763,6 +763,18 @@ static int rsi_probe(struct usb_interface *pfunction,
 
        rsi_dbg(ERR_ZONE, "%s: Initialized os intf ops\n", __func__);
 
+       if (id && id->idProduct == RSI_USB_PID_9113) {
+               rsi_dbg(INIT_ZONE, "%s: 9113 module detected\n", __func__);
+               adapter->device_model = RSI_DEV_9113;
+       } else if (id && id->idProduct == RSI_USB_PID_9116) {
+               rsi_dbg(INIT_ZONE, "%s: 9116 module detected\n", __func__);
+               adapter->device_model = RSI_DEV_9116;
+       } else {
+               rsi_dbg(ERR_ZONE, "%s: Unsupported RSI device id 0x%x\n",
+                       __func__, id->idProduct);
+               goto err1;
+       }
+
        dev = (struct rsi_91x_usbdev *)adapter->rsi_dev;
 
        status = rsi_usb_reg_read(dev->usbdev, FW_STATUS_REG, &fw_status, 2);
@@ -845,7 +857,8 @@ static int rsi_resume(struct usb_interface *intf)
 #endif
 
 static const struct usb_device_id rsi_dev_table[] = {
-       { USB_DEVICE(RSI_USB_VID_9113, RSI_USB_PID_9113) },
+       { USB_DEVICE(RSI_USB_VENDOR_ID, RSI_USB_PID_9113) },
+       { USB_DEVICE(RSI_USB_VENDOR_ID, RSI_USB_PID_9116) },
        { /* Blank */},
 };
 
index 35d13f35e9b002261f5dd00502b742cd539a579b..077cc97dbe6f2dff21813382c80cecd363ac1ed5 100644 (file)
@@ -111,9 +111,13 @@ extern __printf(2, 3) void rsi_dbg(u32 zone, const char *fmt, ...);
 #define RSI_WOW_ENABLED                        BIT(0)
 #define RSI_WOW_NO_CONNECTION          BIT(1)
 
-#define RSI_DEV_9113           1
 #define RSI_MAX_RX_PKTS                64
 
+enum rsi_dev_model {
+       RSI_DEV_9113 = 0,
+       RSI_DEV_9116
+};
+
 struct version_info {
        u16 major;
        u16 minor;
@@ -329,7 +333,7 @@ struct eeprom_read {
 
 struct rsi_hw {
        struct rsi_common *priv;
-       u8 device_model;
+       enum rsi_dev_model device_model;
        struct ieee80211_hw *hw;
        struct ieee80211_vif *vifs[RSI_MAX_VIFS];
        struct ieee80211_tx_queue_params edca_params[NUM_EDCA_QUEUES];
index 66dcd2ec90515b96ac04c2d7fb9c5f7e4044333a..838e929f723529ea54551d58b7c9070bb4b3da8a 100644 (file)
@@ -28,8 +28,9 @@
 #include <linux/mmc/sdio_ids.h>
 #include "rsi_main.h"
 
-#define RSI_SDIO_VID_9113    0x041B
+#define RSI_SDIO_VENDOR_ID   0x041B
 #define RSI_SDIO_PID_9113    0x9330
+#define RSI_SDIO_PID_9116    0x9116
 
 enum sdio_interrupt_type {
        BUFFER_FULL         = 0x0,
index 5b2eddd1a2ee5f7cc372ad1a16a027d3923b8d5b..8702f434b5699978549144b03203dacf5e016790 100644 (file)
@@ -22,8 +22,9 @@
 #include "rsi_main.h"
 #include "rsi_common.h"
 
-#define RSI_USB_VID_9113       0x1618
+#define RSI_USB_VENDOR_ID      0x1618
 #define RSI_USB_PID_9113       0x9113
+#define RSI_USB_PID_9116       0x9116
 
 #define USB_INTERNAL_REG_1           0x25000
 #define RSI_USB_READY_MAGIC_NUM      0xab