diff --git a/drivers/net/wireless/cnss2/bus.h b/drivers/net/wireless/cnss2/bus.h index 2be106881ad2..0673615d9fba 100644 --- a/drivers/net/wireless/cnss2/bus.h +++ b/drivers/net/wireless/cnss2/bus.h @@ -17,6 +17,8 @@ #define QCA6390_DEVICE_ID 0x1101 #define QCA6490_VENDOR_ID 0x17CB #define QCA6490_DEVICE_ID 0x1103 +#define WCN7850_VENDOR_ID 0x17CB +#define WCN7850_DEVICE_ID 0x1107 enum cnss_dev_bus_type cnss_get_dev_bus_type(struct device *dev); enum cnss_dev_bus_type cnss_get_bus_type(unsigned long device_id); diff --git a/drivers/net/wireless/cnss2/main.c b/drivers/net/wireless/cnss2/main.c index ceb98ece043c..2047db996483 100644 --- a/drivers/net/wireless/cnss2/main.c +++ b/drivers/net/wireless/cnss2/main.c @@ -2187,6 +2187,7 @@ int cnss_register_ramdump(struct cnss_plat_data *plat_priv) case QCA6290_DEVICE_ID: case QCA6390_DEVICE_ID: case QCA6490_DEVICE_ID: + case WCN7850_DEVICE_ID: ret = cnss_register_ramdump_v2(plat_priv); break; default: @@ -2206,6 +2207,7 @@ void cnss_unregister_ramdump(struct cnss_plat_data *plat_priv) case QCA6290_DEVICE_ID: case QCA6390_DEVICE_ID: case QCA6490_DEVICE_ID: + case WCN7850_DEVICE_ID: cnss_unregister_ramdump_v2(plat_priv); break; default: @@ -2720,6 +2722,7 @@ static const struct platform_device_id cnss_platform_id_table[] = { { .name = "qca6290", .driver_data = QCA6290_DEVICE_ID, }, { .name = "qca6390", .driver_data = QCA6390_DEVICE_ID, }, { .name = "qca6490", .driver_data = QCA6490_DEVICE_ID, }, + { .name = "wcn7850", .driver_data = WCN7850_DEVICE_ID, }, { }, }; @@ -2736,6 +2739,9 @@ static const struct of_device_id cnss_of_match_table[] = { { .compatible = "qcom,cnss-qca6490", .data = (void *)&cnss_platform_id_table[3]}, + { + .compatible = "qcom,cnss-wcn7850", + .data = (void *)&cnss_platform_id_table[4]}, { }, }; MODULE_DEVICE_TABLE(of, cnss_of_match_table); diff --git a/drivers/net/wireless/cnss2/pci.c b/drivers/net/wireless/cnss2/pci.c index a21e58310304..21857625294c 100644 --- a/drivers/net/wireless/cnss2/pci.c +++ b/drivers/net/wireless/cnss2/pci.c @@ -39,6 +39,7 @@ #define QCA6390_PATH_PREFIX "qca6390/" #define QCA6490_PATH_PREFIX "qca6490/" +#define WCN7850_PATH_PREFIX "wcn7850/" #define DEFAULT_M3_FILE_NAME "m3.bin" #define DEFAULT_FW_FILE_NAME "amss.bin" #define FW_V2_FILE_NAME "amss20.bin" @@ -859,6 +860,7 @@ int cnss_pci_recover_link_down(struct cnss_pci_data *pci_priv) switch (pci_priv->device_id) { case QCA6390_DEVICE_ID: case QCA6490_DEVICE_ID: + case WCN7850_DEVICE_ID: break; default: return -EOPNOTSUPP; @@ -2298,6 +2300,7 @@ int cnss_pci_dev_powerup(struct cnss_pci_data *pci_priv) case QCA6290_DEVICE_ID: case QCA6390_DEVICE_ID: case QCA6490_DEVICE_ID: + case WCN7850_DEVICE_ID: ret = cnss_qca6290_powerup(pci_priv); break; default: @@ -2325,6 +2328,7 @@ int cnss_pci_dev_shutdown(struct cnss_pci_data *pci_priv) case QCA6290_DEVICE_ID: case QCA6390_DEVICE_ID: case QCA6490_DEVICE_ID: + case WCN7850_DEVICE_ID: ret = cnss_qca6290_shutdown(pci_priv); break; default: @@ -2352,6 +2356,7 @@ int cnss_pci_dev_crash_shutdown(struct cnss_pci_data *pci_priv) case QCA6290_DEVICE_ID: case QCA6390_DEVICE_ID: case QCA6490_DEVICE_ID: + case WCN7850_DEVICE_ID: cnss_qca6290_crash_shutdown(pci_priv); break; default: @@ -2379,6 +2384,7 @@ int cnss_pci_dev_ramdump(struct cnss_pci_data *pci_priv) case QCA6290_DEVICE_ID: case QCA6390_DEVICE_ID: case QCA6490_DEVICE_ID: + case WCN7850_DEVICE_ID: ret = cnss_qca6290_ramdump(pci_priv); break; default: @@ -3277,9 +3283,14 @@ int cnss_pci_force_wake_request_sync(struct device *dev, int timeout_us) if (!pci_priv) return -ENODEV; - if (pci_priv->device_id != QCA6390_DEVICE_ID && - pci_priv->device_id != QCA6490_DEVICE_ID) + switch (pci_priv->device_id) { + case QCA6390_DEVICE_ID: + case QCA6490_DEVICE_ID: + case WCN7850_DEVICE_ID: + break; + default: return 0; + } mhi_ctrl = pci_priv->mhi_ctrl; if (!mhi_ctrl) @@ -3313,9 +3324,14 @@ int cnss_pci_force_wake_request(struct device *dev) if (!pci_priv) return -ENODEV; - if (pci_priv->device_id != QCA6390_DEVICE_ID && - pci_priv->device_id != QCA6490_DEVICE_ID) + switch (pci_priv->device_id) { + case QCA6390_DEVICE_ID: + case QCA6490_DEVICE_ID: + case WCN7850_DEVICE_ID: + break; + default: return 0; + } mhi_ctrl = pci_priv->mhi_ctrl; if (!mhi_ctrl) @@ -3343,9 +3359,14 @@ int cnss_pci_is_device_awake(struct device *dev) if (!pci_priv) return -ENODEV; - if (pci_priv->device_id != QCA6390_DEVICE_ID && - pci_priv->device_id != QCA6490_DEVICE_ID) - return true; + switch (pci_priv->device_id) { + case QCA6390_DEVICE_ID: + case QCA6490_DEVICE_ID: + case WCN7850_DEVICE_ID: + break; + default: + return 0; + } mhi_ctrl = pci_priv->mhi_ctrl; if (!mhi_ctrl) @@ -3365,9 +3386,14 @@ int cnss_pci_force_wake_release(struct device *dev) if (!pci_priv) return -ENODEV; - if (pci_priv->device_id != QCA6390_DEVICE_ID && - pci_priv->device_id != QCA6490_DEVICE_ID) + switch (pci_priv->device_id) { + case QCA6390_DEVICE_ID: + case QCA6490_DEVICE_ID: + case WCN7850_DEVICE_ID: + break; + default: return 0; + } mhi_ctrl = pci_priv->mhi_ctrl; if (!mhi_ctrl) @@ -4579,6 +4605,10 @@ void cnss_pci_add_fw_prefix_name(struct cnss_pci_data *pci_priv, scnprintf(prefix_name, MAX_FIRMWARE_NAME_LEN, QCA6490_PATH_PREFIX "%s", name); break; + case WCN7850_DEVICE_ID: + scnprintf(prefix_name, MAX_FIRMWARE_NAME_LEN, + WCN7850_PATH_PREFIX "%s", name); + break; default: scnprintf(prefix_name, MAX_FIRMWARE_NAME_LEN, "%s", name); break; @@ -5041,6 +5071,7 @@ static int cnss_pci_probe(struct pci_dev *pci_dev, case QCA6290_DEVICE_ID: case QCA6390_DEVICE_ID: case QCA6490_DEVICE_ID: + case WCN7850_DEVICE_ID: cnss_pci_set_wlaon_pwr_ctrl(pci_priv, false, false, false); timer_setup(&pci_priv->dev_rddm_timer, cnss_dev_rddm_timeout_hdlr, 0); @@ -5101,6 +5132,7 @@ static void cnss_pci_remove(struct pci_dev *pci_dev) case QCA6290_DEVICE_ID: case QCA6390_DEVICE_ID: case QCA6490_DEVICE_ID: + case WCN7850_DEVICE_ID: complete_all(&pci_priv->wake_event); del_timer(&pci_priv->dev_rddm_timer); break; @@ -5128,6 +5160,7 @@ static const struct pci_device_id cnss_pci_id_table[] = { { QCA6290_VENDOR_ID, QCA6290_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID }, { QCA6390_VENDOR_ID, QCA6390_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID }, { QCA6490_VENDOR_ID, QCA6490_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID }, + { WCN7850_VENDOR_ID, WCN7850_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID }, { 0 } }; MODULE_DEVICE_TABLE(pci, cnss_pci_id_table);