* [PATCH] wifi: ath12k: skip hardware rfkill setup on Microsoft Surface Pro 11
@ 2026-10-04 16:51 François Roux
2026-10-05 14:37 ` Jeff Johnson
0 siblings, 1 reply; 3+ messages in thread
From: François Roux @ 2026-10-04 16:51 UTC (permalink / raw)
To: Jeff Johnson
Cc: Manivannan Sadhasivam, Krzysztof Kozlowski, Konrad Dybcio,
Bjorn Andersson, Jérôme de Bretagne, Dale Whinham,
ath12k, linux-wireless, linux-arm-msm, linux-kernel
On the Microsoft Surface Pro 11 (X1E80100, "microsoft,denali"), the
WCN7850 hardware rfkill input reads as "radio off" and the OS has no
way to control it. ath12k enables hardware rfkill handling, so Wi-Fi
stays hard-blocked:
iwd: Error bringing interface 4 up: Operation not possible due to RF-kill
ACPI platforms can opt out through ath12k_acpi_get_disable_rfkill(),
but DT platforms cannot. A DT property was proposed for this and
rejected, because it describes what the OS should do rather than the
hardware. The suggested alternative was to handle this machine in the
driver, keyed on the board compatible and the device ID, until a
connector binding can describe a broken rfkill line. Do that.
Tested on a Surface Pro 11 with next-20260929, booted with the
unmodified mainline DTB: the interface is no longer blocked and
connects.
Link: https://lore.kernel.org/all/2ixwny6hzumlqmok5cjwutvtk7nzmx4t3dhxc44ao4l2u755pj@n6m7jyxf2o62/
Suggested-by: Manivannan Sadhasivam <mani@kernel.org>
Assisted-by: LLM
Signed-off-by: François Roux <franzelfranzel@gmail.com>
---
This replaces my RFC series "Allow DT boards to disable WCN7850 hardware
rfkill", which duplicated the disable-rfkill DT property already proposed
and rejected in the Surface Pro 11 series:
https://lore.kernel.org/all/20261003091509.4822-1-franzelfranzel@gmail.com/
https://lore.kernel.org/all/20251220-surface-sp11-for-next-v5-2-16065bef8ef3@gmail.com/
The code is Manivannan's suggestion from that thread. Jérôme reported
there that the Surface Laptop 7 (microsoft,romulus13/15) has the same
problem. I left it out because I cannot test it.
drivers/net/wireless/ath/ath12k/core.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/drivers/net/wireless/ath/ath12k/core.c b/drivers/net/wireless/ath/ath12k/core.c
index 0c72948f3..dc41a2a7d 100644
--- a/drivers/net/wireless/ath/ath12k/core.c
+++ b/drivers/net/wireless/ath/ath12k/core.c
@@ -83,6 +83,16 @@ static int ath12k_core_rfkill_config(struct ath12k_base *ab)
if (ath12k_acpi_get_disable_rfkill(ab))
return 0;
+ /*
+ * TODO: On the Microsoft Surface Pro 11, the OS cannot control the
+ * WCN7850 hardware rfkill input, which reads as "radio off". Keep
+ * hardware rfkill disabled there. Ideally this would come from the
+ * connector node of the board DT, but that binding does not exist
+ * yet, so handle it in the driver for now.
+ */
+ if (of_machine_is_compatible("microsoft,denali") && ab->id.device == 0x1107)
+ return 0;
+
for (i = 0; i < ab->num_radios; i++) {
ar = ab->pdevs[i].ar;
base-commit: 6474fa070f2b8013b4b87350b775b8c3be6e8aac
prerequisite-patch-id: aafe3fac38f4020441979665509928f8cc832095
--
2.56.0
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [PATCH] wifi: ath12k: skip hardware rfkill setup on Microsoft Surface Pro 11
2026-10-04 16:51 [PATCH] wifi: ath12k: skip hardware rfkill setup on Microsoft Surface Pro 11 François Roux
@ 2026-10-05 14:37 ` Jeff Johnson
2026-10-05 16:50 ` Dale Whinham
0 siblings, 1 reply; 3+ messages in thread
From: Jeff Johnson @ 2026-10-05 14:37 UTC (permalink / raw)
To: François Roux, Jeff Johnson
Cc: Manivannan Sadhasivam, Krzysztof Kozlowski, Konrad Dybcio,
Bjorn Andersson, Jérôme de Bretagne, Dale Whinham,
ath12k, linux-wireless, linux-arm-msm, linux-kernel
On 10/4/2026 9:51 AM, François Roux wrote:
> On the Microsoft Surface Pro 11 (X1E80100, "microsoft,denali"), the
> WCN7850 hardware rfkill input reads as "radio off" and the OS has no
> way to control it. ath12k enables hardware rfkill handling, so Wi-Fi
> stays hard-blocked:
>
> iwd: Error bringing interface 4 up: Operation not possible due to RF-kill
>
> ACPI platforms can opt out through ath12k_acpi_get_disable_rfkill(),
> but DT platforms cannot. A DT property was proposed for this and
> rejected, because it describes what the OS should do rather than the
> hardware. The suggested alternative was to handle this machine in the
> driver, keyed on the board compatible and the device ID, until a
> connector binding can describe a broken rfkill line. Do that.
>
> Tested on a Surface Pro 11 with next-20260929, booted with the
> unmodified mainline DTB: the interface is no longer blocked and
> connects.
>
> Link: https://lore.kernel.org/all/2ixwny6hzumlqmok5cjwutvtk7nzmx4t3dhxc44ao4l2u755pj@n6m7jyxf2o62/
> Suggested-by: Manivannan Sadhasivam <mani@kernel.org>
> Assisted-by: LLM
> Signed-off-by: François Roux <franzelfranzel@gmail.com>
> ---
> This replaces my RFC series "Allow DT boards to disable WCN7850 hardware
> rfkill", which duplicated the disable-rfkill DT property already proposed
> and rejected in the Surface Pro 11 series:
>
> https://lore.kernel.org/all/20261003091509.4822-1-franzelfranzel@gmail.com/
> https://lore.kernel.org/all/20251220-surface-sp11-for-next-v5-2-16065bef8ef3@gmail.com/
>
> The code is Manivannan's suggestion from that thread. Jérôme reported
> there that the Surface Laptop 7 (microsoft,romulus13/15) has the same
> problem. I left it out because I cannot test it.
>
> drivers/net/wireless/ath/ath12k/core.c | 10 ++++++++++
> 1 file changed, 10 insertions(+)
>
> diff --git a/drivers/net/wireless/ath/ath12k/core.c b/drivers/net/wireless/ath/ath12k/core.c
> index 0c72948f3..dc41a2a7d 100644
> --- a/drivers/net/wireless/ath/ath12k/core.c
> +++ b/drivers/net/wireless/ath/ath12k/core.c
> @@ -83,6 +83,16 @@ static int ath12k_core_rfkill_config(struct ath12k_base *ab)
> if (ath12k_acpi_get_disable_rfkill(ab))
> return 0;
>
> + /*
> + * TODO: On the Microsoft Surface Pro 11, the OS cannot control the
> + * WCN7850 hardware rfkill input, which reads as "radio off". Keep
> + * hardware rfkill disabled there. Ideally this would come from the
> + * connector node of the board DT, but that binding does not exist
> + * yet, so handle it in the driver for now.
> + */
> + if (of_machine_is_compatible("microsoft,denali") && ab->id.device == 0x1107)
> + return 0;
> +
my preference would to to break this out into a separate table-driven function
so that if other devices have this issue they would just need to add to the table.
reference ath11k_core_get_usecase_firmware() as a table-driven solution for a
different device-specific problem (selects different firmware for specific
compatibles).
> for (i = 0; i < ab->num_radios; i++) {
> ar = ab->pdevs[i].ar;
>
>
> base-commit: 6474fa070f2b8013b4b87350b775b8c3be6e8aac
> prerequisite-patch-id: aafe3fac38f4020441979665509928f8cc832095
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [PATCH] wifi: ath12k: skip hardware rfkill setup on Microsoft Surface Pro 11
2026-10-05 14:37 ` Jeff Johnson
@ 2026-10-05 16:50 ` Dale Whinham
0 siblings, 0 replies; 3+ messages in thread
From: Dale Whinham @ 2026-10-05 16:50 UTC (permalink / raw)
To: Jeff Johnson
Cc: François Roux, Jeff Johnson, Manivannan Sadhasivam,
Krzysztof Kozlowski, Konrad Dybcio, Bjorn Andersson,
Jérôme de Bretagne, ath12k, linux-wireless,
linux-arm-msm, linux-kernel
On Mon, 5 Oct 2026 at 14:37, Jeff Johnson <jeff.johnson@oss.qualcomm.com> wrote:
> my preference would to to break this out into a separate table-driven function
> so that if other devices have this issue they would just need to add to the table.
Indeed, as far as I know Microsoft Surface Laptop 7 (aka. Romulus) is
also affected by this issue.
Best regards,
Dale
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-10-05 16:50 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-10-04 16:51 [PATCH] wifi: ath12k: skip hardware rfkill setup on Microsoft Surface Pro 11 François Roux
2026-10-05 14:37 ` Jeff Johnson
2026-10-05 16:50 ` Dale Whinham
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®