|
|
@@ -1,102 +1,52 @@
|
|
|
-From: Sebastian Gottschall <[email protected]>
|
|
|
-
|
|
|
-Adds LED and GPIO Control support for 988x, 9887, 9888, 99x0, 9984 based
|
|
|
-chipsets with on chipset connected led's using WMI Firmware API. The LED
|
|
|
-device will get available named as "ath10k-phyX" at sysfs and can be controlled
|
|
|
-with various triggers. adds also debugfs interface for gpio control.
|
|
|
-
|
|
|
-This patch is specific for OpenWRt base, as is use old backported package
|
|
|
-with old wireless source. Support for QCA9984 is removed.
|
|
|
-Reworked to use ath10k-ct custom source
|
|
|
+From 8e1debd82466a3fe711784ab37e6b54e56011267 Mon Sep 17 00:00:00 2001
|
|
|
+From: Sebastian Gottschall <[email protected]>
|
|
|
+Date: Mon, 13 May 2024 17:22:25 +0300
|
|
|
+Subject: [PATCH] wifi: ath10k: add LED and GPIO controlling support for
|
|
|
+ various chipsets
|
|
|
|
|
|
+Adds LED and GPIO Control support for 988x, 9887, 9888, 99x0, 9984
|
|
|
+based chipsets with on chipset connected led's using WMI Firmware API.
|
|
|
+The LED device will get available named as "ath10k-phyX" at sysfs and
|
|
|
+can be controlled with various triggers.
|
|
|
+Adds also debugfs interface for gpio control.
|
|
|
|
|
|
Signed-off-by: Sebastian Gottschall <[email protected]>
|
|
|
Reviewed-by: Steve deRosier <[email protected]>
|
|
|
[kvalo: major reorg and cleanup]
|
|
|
Signed-off-by: Kalle Valo <[email protected]>
|
|
|
-Signed-off-by: Ansuel Smith <[email protected]>
|
|
|
+[ansuel: rebase and small cleanup]
|
|
|
+Signed-off-by: Christian Marangi <[email protected]>
|
|
|
+Tested-by: Stefan Lippers-Hollmann <[email protected]>
|
|
|
+Signed-off-by: Kalle Valo <[email protected]>
|
|
|
+Link: https://msgid.link/[email protected]
|
|
|
---
|
|
|
-
|
|
|
-v13:
|
|
|
-
|
|
|
-* only compile tested!
|
|
|
-
|
|
|
-* fix all checkpatch warnings
|
|
|
-
|
|
|
-* fix commit log
|
|
|
-
|
|
|
-* sizeof(struct ath10k_gpiocontrol) -> sizeof(*gpio)
|
|
|
-
|
|
|
-* unsigned -> unsigned int
|
|
|
-
|
|
|
-* remove GPIOLIB code, that should be added in a separate patch
|
|
|
-
|
|
|
-* rename gpio.c to leds.c
|
|
|
-
|
|
|
-* add leds.h
|
|
|
-
|
|
|
-* rename some functions:
|
|
|
-
|
|
|
- ath10k_attach_led() -> ath10k_leds_register()
|
|
|
- ath10k_unregister_led() -> ath10k_leds_unregister()
|
|
|
- ath10k_reset_led_pin() -> ath10k_leds_start()
|
|
|
-
|
|
|
-* call ath10k_leds_unregister() before ath10k_thermal_unregister() to preserve ordering
|
|
|
-
|
|
|
-* call ath10k_leds_start() only from ath10k_core_start() and not from mac.c
|
|
|
-
|
|
|
-* rename struct ath10k_gpiocontrol as anonymous function under struct
|
|
|
- ath10k::leds, no need for memory allocation
|
|
|
-
|
|
|
-* merge ath10k_add_led() to ath10k_attach_led(), which is it's only caller
|
|
|
-
|
|
|
-* remove #if IS_ENABLED() checks from most of places, memory savings from those were not worth it
|
|
|
-
|
|
|
-* Kconfig help text improvement and move it lower in the menu, also don't enable it by default
|
|
|
-
|
|
|
-* switch to set_brightness_blocking() so that the callback can sleep,
|
|
|
- then no need to use ath10k_wmi_cmd_send_nowait() and can take mutex
|
|
|
- to access ar->state
|
|
|
-
|
|
|
-* don't touch ath10k_wmi_pdev_get_temperature()
|
|
|
-
|
|
|
-* as QCA6174/QCA9377 are not (yet) supported don't add the command to WMI-TLV interface
|
|
|
-
|
|
|
-* remove debugfs interface, that should be added in another patch
|
|
|
-
|
|
|
-* cleanup includes
|
|
|
-
|
|
|
- ath10k-6.4/Kconfig | 10 +++
|
|
|
- ath10k-6.4/Makefile | 1 +
|
|
|
- ath10k-6.4/core.c | 22 +++++++
|
|
|
- ath10k-6.4/core.h | 9 ++-
|
|
|
- ath10k-6.4/hw.h | 1 +
|
|
|
- ath10k-6.4/leds.c | 103 ++++++++++++++++++++++++++++++
|
|
|
- ath10k-6.4/leds.h | 45 +++++++++++++
|
|
|
- ath10k-6.4/mac.c | 1 +
|
|
|
- ath10k-6.4/wmi-ops.h | 32 ++++++++++
|
|
|
- ath10k-6.4/wmi-tlv.c | 2 +
|
|
|
- ath10k-6.4/wmi.c | 54 ++++++++++++++++
|
|
|
- ath10k-6.4/wmi.h | 35 ++++++++++
|
|
|
- 12 files changed, 314 insertions(+), 1 deletion(-)
|
|
|
+ ath10k-6.4/Kconfig | 6 ++
|
|
|
+ ath10k-6.4/Makefile | 1 +
|
|
|
+ ath10k-6.4/core.c | 32 ++++++++
|
|
|
+ ath10k-6.4/core.h | 8 ++
|
|
|
+ ath10k-6.4/hw.h | 1 +
|
|
|
+ ath10k-6.4/leds.c | 90 +++++++++++++++++++++++
|
|
|
+ ath10k-6.4/leds.h | 34 +++++++++
|
|
|
+ ath10k-6.4/mac.c | 1 +
|
|
|
+ ath10k-6.4/wmi-ops.h | 32 ++++++++
|
|
|
+ ath10k-6.4/wmi-tlv.c | 2 +
|
|
|
+ ath10k-6.4/wmi.c | 54 ++++++++++++++
|
|
|
+ ath10k-6.4/wmi.h | 35 +++++++++
|
|
|
+ 12 files changed, 296 insertions(+)
|
|
|
create mode 100644 ath10k-6.4/leds.c
|
|
|
create mode 100644 ath10k-6.4/leds.h
|
|
|
|
|
|
--- a/ath10k-6.4/Kconfig
|
|
|
+++ b/ath10k-6.4/Kconfig
|
|
|
-@@ -67,6 +67,16 @@ config ATH10K_DEBUGFS
|
|
|
+@@ -67,6 +67,12 @@ config ATH10K_DEBUGFS
|
|
|
|
|
|
If unsure, say Y to make it easier to debug problems.
|
|
|
|
|
|
+config ATH10K_LEDS
|
|
|
-+ bool "Atheros ath10k LED support"
|
|
|
++ bool
|
|
|
+ depends on ATH10K
|
|
|
-+ select MAC80211_LEDS
|
|
|
-+ select LEDS_CLASS
|
|
|
-+ select NEW_LEDS
|
|
|
++ depends on LEDS_CLASS=y || LEDS_CLASS=MAC80211
|
|
|
+ default y
|
|
|
-+ ---help---
|
|
|
-+ This option is necessary, if you want LED support for chipset connected led pins. If unsure, say N.
|
|
|
+
|
|
|
config ATH10K_SPECTRAL
|
|
|
bool "Atheros ath10k spectral scan support"
|
|
|
@@ -121,47 +71,135 @@ v13:
|
|
|
|
|
|
/* Disable ath10k-ct DBGLOG output by default */
|
|
|
unsigned int ath10k_debug_mask = ATH10K_DBG_NO_DBGLOG;
|
|
|
-@@ -78,6 +79,7 @@ static const struct ath10k_hw_params ath
|
|
|
- .dev_id = QCA988X_2_0_DEVICE_ID,
|
|
|
- .bus = ATH10K_BUS_PCI,
|
|
|
+@@ -80,6 +81,7 @@ static const struct ath10k_hw_params ath
|
|
|
.name = "qca988x hw2.0",
|
|
|
+ .patch_load_addr = QCA988X_HW_2_0_PATCH_LOAD_ADDR,
|
|
|
+ .uart_pin = 7,
|
|
|
+ .led_pin = 1,
|
|
|
+ .cc_wraparound_type = ATH10K_HW_CC_WRAP_SHIFTED_ALL,
|
|
|
+ .otp_exe_param = 0,
|
|
|
+ .channel_counters_freq_hz = 88000,
|
|
|
+@@ -120,6 +122,7 @@ static const struct ath10k_hw_params ath
|
|
|
+ .name = "qca988x hw2.0 ubiquiti",
|
|
|
.patch_load_addr = QCA988X_HW_2_0_PATCH_LOAD_ADDR,
|
|
|
.uart_pin = 7,
|
|
|
++ .led_pin = 0,
|
|
|
.cc_wraparound_type = ATH10K_HW_CC_WRAP_SHIFTED_ALL,
|
|
|
-@@ -159,6 +161,7 @@ static const struct ath10k_hw_params ath
|
|
|
- .dev_id = QCA9887_1_0_DEVICE_ID,
|
|
|
- .bus = ATH10K_BUS_PCI,
|
|
|
+ .otp_exe_param = 0,
|
|
|
+ .channel_counters_freq_hz = 88000,
|
|
|
+@@ -161,6 +164,7 @@ static const struct ath10k_hw_params ath
|
|
|
.name = "qca9887 hw1.0",
|
|
|
-+ .led_pin = 1,
|
|
|
.patch_load_addr = QCA9887_HW_1_0_PATCH_LOAD_ADDR,
|
|
|
.uart_pin = 7,
|
|
|
++ .led_pin = 1,
|
|
|
.cc_wraparound_type = ATH10K_HW_CC_WRAP_SHIFTED_ALL,
|
|
|
-@@ -400,6 +403,7 @@ static const struct ath10k_hw_params ath
|
|
|
- .dev_id = QCA99X0_2_0_DEVICE_ID,
|
|
|
- .bus = ATH10K_BUS_PCI,
|
|
|
+ .otp_exe_param = 0,
|
|
|
+ .channel_counters_freq_hz = 88000,
|
|
|
+@@ -202,6 +206,7 @@ static const struct ath10k_hw_params ath
|
|
|
+ .name = "qca6174 hw3.2 sdio",
|
|
|
+ .patch_load_addr = QCA6174_HW_3_0_PATCH_LOAD_ADDR,
|
|
|
+ .uart_pin = 19,
|
|
|
++ .led_pin = 0,
|
|
|
+ .otp_exe_param = 0,
|
|
|
+ .channel_counters_freq_hz = 88000,
|
|
|
+ .max_probe_resp_desc_thres = 0,
|
|
|
+@@ -238,6 +243,7 @@ static const struct ath10k_hw_params ath
|
|
|
+ .name = "qca6164 hw2.1",
|
|
|
+ .patch_load_addr = QCA6174_HW_2_1_PATCH_LOAD_ADDR,
|
|
|
+ .uart_pin = 6,
|
|
|
++ .led_pin = 0,
|
|
|
+ .otp_exe_param = 0,
|
|
|
+ .channel_counters_freq_hz = 88000,
|
|
|
+ .max_probe_resp_desc_thres = 0,
|
|
|
+@@ -278,6 +284,7 @@ static const struct ath10k_hw_params ath
|
|
|
+ .name = "qca6174 hw2.1",
|
|
|
+ .patch_load_addr = QCA6174_HW_2_1_PATCH_LOAD_ADDR,
|
|
|
+ .uart_pin = 6,
|
|
|
++ .led_pin = 0,
|
|
|
+ .otp_exe_param = 0,
|
|
|
+ .channel_counters_freq_hz = 88000,
|
|
|
+ .max_probe_resp_desc_thres = 0,
|
|
|
+@@ -318,6 +325,7 @@ static const struct ath10k_hw_params ath
|
|
|
+ .name = "qca6174 hw3.0",
|
|
|
+ .patch_load_addr = QCA6174_HW_3_0_PATCH_LOAD_ADDR,
|
|
|
+ .uart_pin = 6,
|
|
|
++ .led_pin = 0,
|
|
|
+ .otp_exe_param = 0,
|
|
|
+ .channel_counters_freq_hz = 88000,
|
|
|
+ .max_probe_resp_desc_thres = 0,
|
|
|
+@@ -358,6 +366,7 @@ static const struct ath10k_hw_params ath
|
|
|
+ .name = "qca6174 hw3.2",
|
|
|
+ .patch_load_addr = QCA6174_HW_3_0_PATCH_LOAD_ADDR,
|
|
|
+ .uart_pin = 6,
|
|
|
++ .led_pin = 0,
|
|
|
+ .otp_exe_param = 0,
|
|
|
+ .channel_counters_freq_hz = 88000,
|
|
|
+ .max_probe_resp_desc_thres = 0,
|
|
|
+@@ -402,6 +411,7 @@ static const struct ath10k_hw_params ath
|
|
|
.name = "qca99x0 hw2.0",
|
|
|
-+ .led_pin = 17,
|
|
|
.patch_load_addr = QCA99X0_HW_2_0_PATCH_LOAD_ADDR,
|
|
|
.uart_pin = 7,
|
|
|
++ .led_pin = 17,
|
|
|
.otp_exe_param = 0x00000700,
|
|
|
-@@ -446,6 +450,7 @@ static const struct ath10k_hw_params ath
|
|
|
- .dev_id = QCA9984_1_0_DEVICE_ID,
|
|
|
- .bus = ATH10K_BUS_PCI,
|
|
|
+ .continuous_frag_desc = true,
|
|
|
+ .cck_rate_map_rev2 = true,
|
|
|
+@@ -448,6 +458,7 @@ static const struct ath10k_hw_params ath
|
|
|
.name = "qca9984/qca9994 hw1.0",
|
|
|
-+ .led_pin = 17,
|
|
|
.patch_load_addr = QCA9984_HW_1_0_PATCH_LOAD_ADDR,
|
|
|
.uart_pin = 7,
|
|
|
++ .led_pin = 17,
|
|
|
.cc_wraparound_type = ATH10K_HW_CC_WRAP_SHIFTED_EACH,
|
|
|
-@@ -499,6 +504,7 @@ static const struct ath10k_hw_params ath
|
|
|
- .dev_id = QCA9888_2_0_DEVICE_ID,
|
|
|
- .bus = ATH10K_BUS_PCI,
|
|
|
+ .otp_exe_param = 0x00000700,
|
|
|
+ .continuous_frag_desc = true,
|
|
|
+@@ -501,6 +512,7 @@ static const struct ath10k_hw_params ath
|
|
|
.name = "qca9888 hw2.0",
|
|
|
-+ .led_pin = 17,
|
|
|
.patch_load_addr = QCA9888_HW_2_0_PATCH_LOAD_ADDR,
|
|
|
.uart_pin = 7,
|
|
|
++ .led_pin = 17,
|
|
|
+ .cc_wraparound_type = ATH10K_HW_CC_WRAP_SHIFTED_EACH,
|
|
|
+ .otp_exe_param = 0x00000700,
|
|
|
+ .continuous_frag_desc = true,
|
|
|
+@@ -551,6 +563,7 @@ static const struct ath10k_hw_params ath
|
|
|
+ .name = "qca9377 hw1.0",
|
|
|
+ .patch_load_addr = QCA9377_HW_1_0_PATCH_LOAD_ADDR,
|
|
|
+ .uart_pin = 6,
|
|
|
++ .led_pin = 0,
|
|
|
+ .otp_exe_param = 0,
|
|
|
+ .channel_counters_freq_hz = 88000,
|
|
|
+ .max_probe_resp_desc_thres = 0,
|
|
|
+@@ -591,6 +604,7 @@ static const struct ath10k_hw_params ath
|
|
|
+ .name = "qca9377 hw1.1",
|
|
|
+ .patch_load_addr = QCA9377_HW_1_0_PATCH_LOAD_ADDR,
|
|
|
+ .uart_pin = 6,
|
|
|
++ .led_pin = 0,
|
|
|
+ .otp_exe_param = 0,
|
|
|
+ .channel_counters_freq_hz = 88000,
|
|
|
+ .max_probe_resp_desc_thres = 0,
|
|
|
+@@ -633,6 +647,7 @@ static const struct ath10k_hw_params ath
|
|
|
+ .name = "qca9377 hw1.1 sdio",
|
|
|
+ .patch_load_addr = QCA9377_HW_1_0_PATCH_LOAD_ADDR,
|
|
|
+ .uart_pin = 19,
|
|
|
++ .led_pin = 0,
|
|
|
+ .otp_exe_param = 0,
|
|
|
+ .channel_counters_freq_hz = 88000,
|
|
|
+ .max_probe_resp_desc_thres = 0,
|
|
|
+@@ -666,6 +681,7 @@ static const struct ath10k_hw_params ath
|
|
|
+ .name = "qca4019 hw1.0",
|
|
|
+ .patch_load_addr = QCA4019_HW_1_0_PATCH_LOAD_ADDR,
|
|
|
+ .uart_pin = 7,
|
|
|
++ .led_pin = 0,
|
|
|
.cc_wraparound_type = ATH10K_HW_CC_WRAP_SHIFTED_EACH,
|
|
|
-@@ -4080,6 +4086,10 @@ int ath10k_core_start(struct ath10k *ar,
|
|
|
+ .otp_exe_param = 0x0010000,
|
|
|
+ .continuous_frag_desc = true,
|
|
|
+@@ -711,6 +727,7 @@ static const struct ath10k_hw_params ath
|
|
|
+ .dev_id = 0,
|
|
|
+ .bus = ATH10K_BUS_SNOC,
|
|
|
+ .name = "wcn3990 hw1.0",
|
|
|
++ .led_pin = 0,
|
|
|
+ .continuous_frag_desc = true,
|
|
|
+ .tx_chain_mask = 0x7,
|
|
|
+ .rx_chain_mask = 0x7,
|
|
|
+@@ -4080,6 +4097,10 @@ int ath10k_core_start(struct ath10k *ar,
|
|
|
ath10k_wmi_check_apply_board_power_ctl_table(ar);
|
|
|
}
|
|
|
|
|
|
@@ -172,7 +210,7 @@ v13:
|
|
|
return 0;
|
|
|
|
|
|
err_hif_stop:
|
|
|
-@@ -4341,9 +4351,18 @@ static void ath10k_core_register_work(st
|
|
|
+@@ -4341,9 +4362,18 @@ static void ath10k_core_register_work(st
|
|
|
goto err_spectral_destroy;
|
|
|
}
|
|
|
|
|
|
@@ -191,7 +229,7 @@ v13:
|
|
|
err_spectral_destroy:
|
|
|
ath10k_spectral_destroy(ar);
|
|
|
err_debug_destroy:
|
|
|
-@@ -4403,6 +4422,8 @@ void ath10k_core_unregister(struct ath10
|
|
|
+@@ -4403,6 +4433,8 @@ void ath10k_core_unregister(struct ath10
|
|
|
if (!test_bit(ATH10K_FLAG_CORE_REGISTERED, &ar->dev_flags))
|
|
|
return;
|
|
|
|
|
|
@@ -236,24 +274,13 @@ v13:
|
|
|
/* Type of hw cycle counter wraparound logic, for more info
|
|
|
--- /dev/null
|
|
|
+++ b/ath10k-6.4/leds.c
|
|
|
-@@ -0,0 +1,103 @@
|
|
|
+@@ -0,0 +1,90 @@
|
|
|
++// SPDX-License-Identifier: ISC
|
|
|
+/*
|
|
|
+ * Copyright (c) 2005-2011 Atheros Communications Inc.
|
|
|
+ * Copyright (c) 2011-2017 Qualcomm Atheros, Inc.
|
|
|
+ * Copyright (c) 2018 Sebastian Gottschall <[email protected]>
|
|
|
-+ * Copyright (c) 2018, The Linux Foundation. All rights reserved.
|
|
|
-+ *
|
|
|
-+ * Permission to use, copy, modify, and/or distribute this software for any
|
|
|
-+ * purpose with or without fee is hereby granted, provided that the above
|
|
|
-+ * copyright notice and this permission notice appear in all copies.
|
|
|
-+ *
|
|
|
-+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
|
-+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
|
-+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
|
-+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
|
-+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
|
-+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
|
-+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
|
++ * Copyright (c) 2018 The Linux Foundation. All rights reserved.
|
|
|
+ */
|
|
|
+
|
|
|
+#include <linux/leds.h>
|
|
|
@@ -320,8 +347,6 @@ v13:
|
|
|
+
|
|
|
+ ar->leds.cdev.name = ar->leds.label;
|
|
|
+ ar->leds.cdev.brightness_set_blocking = ath10k_leds_set_brightness_blocking;
|
|
|
-+
|
|
|
-+ /* FIXME: this assignment doesn't make sense as it's NULL, remove it? */
|
|
|
+ ar->leds.cdev.default_trigger = ar->leds.wifi_led.default_trigger;
|
|
|
+
|
|
|
+ ret = led_classdev_register(wiphy_dev(ar->hw->wiphy), &ar->leds.cdev);
|
|
|
@@ -342,22 +367,15 @@ v13:
|
|
|
+
|
|
|
--- /dev/null
|
|
|
+++ b/ath10k-6.4/leds.h
|
|
|
-@@ -0,0 +1,41 @@
|
|
|
+@@ -0,0 +1,34 @@
|
|
|
++/* SPDX-License-Identifier: ISC */
|
|
|
+/*
|
|
|
-+ * Copyright (c) 2018, The Linux Foundation. All rights reserved.
|
|
|
-+ *
|
|
|
-+ * Permission to use, copy, modify, and/or distribute this software for any
|
|
|
-+ * purpose with or without fee is hereby granted, provided that the above
|
|
|
-+ * copyright notice and this permission notice appear in all copies.
|
|
|
-+ *
|
|
|
-+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
|
-+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
|
-+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
|
-+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
|
-+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
|
-+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
|
-+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
|
++ * Copyright (c) 2005-2011 Atheros Communications Inc.
|
|
|
++ * Copyright (c) 2011-2017 Qualcomm Atheros, Inc.
|
|
|
++ * Copyright (c) 2018 Sebastian Gottschall <[email protected]>
|
|
|
++ * Copyright (c) 2018 The Linux Foundation. All rights reserved.
|
|
|
+ */
|
|
|
++
|
|
|
+#ifndef _LEDS_H_
|
|
|
+#define _LEDS_H_
|
|
|
+
|