cnss2: Add support for WLAN WCN7850 device

Add corresponding driver support for WCN7850 device.

Change-Id: Ib02d93e9801bb628958dff4aeb105b90e5459e39
Signed-off-by: Yue Ma <yuem@codeaurora.org>
This commit is contained in:
Yue Ma 2020-09-25 12:13:20 -07:00 • committed by Gerrit - the friendly Code Review server
commit c8b5d4db39
3 changed files with 50 additions and 9 deletions

View file

@ -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);

View file

@ -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);

View file

@ -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);