1a7202704SKiran Venkatappa // SPDX-License-Identifier: BSD-3-Clause-Clear 2a7202704SKiran Venkatappa /* 3a7202704SKiran Venkatappa * Copyright (c) 2018-2019 The Linux Foundation. All rights reserved. 4a7202704SKiran Venkatappa * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. 5a7202704SKiran Venkatappa */ 6a7202704SKiran Venkatappa 7a7202704SKiran Venkatappa #include <linux/of_device.h> 8a7202704SKiran Venkatappa #include <linux/platform_device.h> 9a7202704SKiran Venkatappa #include <linux/soc/qcom/mdt_loader.h> 10a7202704SKiran Venkatappa #include "../ahb.h" 11a7202704SKiran Venkatappa #include "ahb.h" 12a7202704SKiran Venkatappa #include "../debug.h" 13a7202704SKiran Venkatappa #include "../hif.h" 14a7202704SKiran Venkatappa #include "hw.h" 15*614c23e2SRipan Deuri #include "dp.h" 16*614c23e2SRipan Deuri #include "core.h" 17a7202704SKiran Venkatappa 18a7202704SKiran Venkatappa static const struct of_device_id ath12k_wifi7_ahb_of_match[] = { 19a7202704SKiran Venkatappa { .compatible = "qcom,ipq5332-wifi", 20a7202704SKiran Venkatappa .data = (void *)ATH12K_HW_IPQ5332_HW10, 21a7202704SKiran Venkatappa }, 22a7202704SKiran Venkatappa { } 23a7202704SKiran Venkatappa }; 24a7202704SKiran Venkatappa 25a7202704SKiran Venkatappa MODULE_DEVICE_TABLE(of, ath12k_wifi7_ahb_of_match); 26a7202704SKiran Venkatappa 27a7202704SKiran Venkatappa static int ath12k_wifi7_ahb_probe(struct platform_device *pdev) 28a7202704SKiran Venkatappa { 29a7202704SKiran Venkatappa struct ath12k_ahb *ab_ahb; 30a7202704SKiran Venkatappa enum ath12k_hw_rev hw_rev; 31a7202704SKiran Venkatappa struct ath12k_base *ab; 32a7202704SKiran Venkatappa int ret; 33a7202704SKiran Venkatappa 34a7202704SKiran Venkatappa ab = platform_get_drvdata(pdev); 35a7202704SKiran Venkatappa ab_ahb = ath12k_ab_to_ahb(ab); 36a7202704SKiran Venkatappa 37a7202704SKiran Venkatappa hw_rev = (enum ath12k_hw_rev)(kernel_ulong_t)of_device_get_match_data(&pdev->dev); 38a7202704SKiran Venkatappa switch (hw_rev) { 39a7202704SKiran Venkatappa case ATH12K_HW_IPQ5332_HW10: 40a7202704SKiran Venkatappa ab_ahb->userpd_id = ATH12K_IPQ5332_USERPD_ID; 41a7202704SKiran Venkatappa break; 42a7202704SKiran Venkatappa default: 43a7202704SKiran Venkatappa return -EOPNOTSUPP; 44a7202704SKiran Venkatappa } 45a7202704SKiran Venkatappa 46a7202704SKiran Venkatappa ab->target_mem_mode = ATH12K_QMI_MEMORY_MODE_DEFAULT; 47a7202704SKiran Venkatappa ab->hw_rev = hw_rev; 48a7202704SKiran Venkatappa 49a7202704SKiran Venkatappa ret = ath12k_wifi7_hw_init(ab); 50a7202704SKiran Venkatappa if (ret) { 51a7202704SKiran Venkatappa ath12k_err(ab, "WiFi-7 hw_init for AHB failed: %d\n", ret); 52a7202704SKiran Venkatappa return ret; 53a7202704SKiran Venkatappa } 54a7202704SKiran Venkatappa 55a7202704SKiran Venkatappa return 0; 56a7202704SKiran Venkatappa } 57a7202704SKiran Venkatappa 58a7202704SKiran Venkatappa static struct ath12k_ahb_driver ath12k_wifi7_ahb_driver = { 59a7202704SKiran Venkatappa .name = "ath12k_wifi7_ahb", 60a7202704SKiran Venkatappa .id_table = ath12k_wifi7_ahb_of_match, 61a7202704SKiran Venkatappa .ops.probe = ath12k_wifi7_ahb_probe, 62*614c23e2SRipan Deuri .ops.arch_init = ath12k_wifi7_arch_init, 63*614c23e2SRipan Deuri .ops.arch_deinit = ath12k_wifi7_arch_deinit, 64a7202704SKiran Venkatappa }; 65a7202704SKiran Venkatappa 66a7202704SKiran Venkatappa int ath12k_wifi7_ahb_init(void) 67a7202704SKiran Venkatappa { 68a7202704SKiran Venkatappa return ath12k_ahb_register_driver(ATH12K_DEVICE_FAMILY_WIFI7, 69a7202704SKiran Venkatappa &ath12k_wifi7_ahb_driver); 70a7202704SKiran Venkatappa } 71a7202704SKiran Venkatappa 72a7202704SKiran Venkatappa void ath12k_wifi7_ahb_exit(void) 73a7202704SKiran Venkatappa { 74a7202704SKiran Venkatappa ath12k_ahb_unregister_driver(ATH12K_DEVICE_FAMILY_WIFI7); 75a7202704SKiran Venkatappa } 76