Re: [PATCH] wifi: ath12k: skip hardware rfkill setup on Microsoft Surface Pro 11

From: Jeff Johnson

Date: Mon Oct 05 2026 - 10:42:12 EST


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@xxxxxxxxxx>
> Assisted-by: LLM
> Signed-off-by: François Roux <franzelfranzel@xxxxxxxxx>
> ---
> 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@xxxxxxxxx/
> https://lore.kernel.org/all/20251220-surface-sp11-for-next-v5-2-16065bef8ef3@xxxxxxxxx/
>
> 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