Commit graph

1,447,440 commits

Author SHA1 Message Date
9cd00a65e8 nfc: s3fwrn5: support the S3NRN4V variant
The S3NRN4V (e.g. on the Fairphone 6, SM7635) is an S3FWRN5-family NFC
controller that needs different bring-up, selected with a new
samsung,s3nrn4v compatible:

 - It ships with working firmware behind a bootloader protocol this
   driver does not implement (GET_BOOTINFO times out), so the firmware
   download step is skipped. Its RF registers are (re)loaded with the
   proprietary DUAL_OPTION command (the HW and SW register blobs merged
   into a single stream) instead of the START/SET/STOP_RFREG sequence.

 - Its reference clock speed is configured with the single-byte FW_CFG
   form, sent from the ->setup hook (after CORE_RESET, before CORE_INIT).
   The selector value (0x11) is taken from the vendor configuration for
   this part; its encoding is not documented.

 - It gates its XI clock through a CLK_REQ line: the chip drives it high
   when it needs the clock, notably to synthesise the 13.56 MHz poll
   carrier. Left always-on, the free-running clock never lets the chip's
   TX PLL lock on a fresh start and it cannot poll (it falls back to
   listen only). Service the handshake when a clk-req GPIO is described,
   gating the clock on it; without one the clock stays always-on.

The variant is carried as match data by both the OF and the I2C device
id tables so the two match paths agree, and the OF table is now
referenced unconditionally for its match data, so drop the
of_match_ptr()/__maybe_unused annotations from it.

The error policy differs between the two configuration steps on purpose:
a clock misconfiguration is fatal (a ->setup failure aborts CORE_INIT),
whereas an RF-register update failure is only warned about and bring-up
continues, since the chip falls back to the RF registers programmed in
its flash and NFC may still work.

Unlike the host-endian word read in the legacy rfreg path, the
DUAL_OPTION checksum is accumulated with get_unaligned_le32() and emitted
little-endian explicitly, so it is correct regardless of CPU endianness.

Existing S3FWRN5 / S3FWRN82 setups keep the firmware-download path and
the always-on clock, unchanged.

Assisted-by: Claude:claude-opus-4-8
Assisted-by: Claude:claude-fable-5
Signed-off-by: Jorijn van der Graaf <jorijnvdgraaf@catcrafts.net>
2026-07-05 20:37:57 +02:00
d837afcfd6 arm64: dts: qcom: milos-fairphone-fp6: add NFC
Add the Samsung S3NRN4V NFC + eSE controller on i2c1. Its XI clock is
provided by the RF_CLK2 PMIC buffer and gated through the controller's
CLK_REQ line on tlmm GPIO6.

The enable line is routed to the chip's power-down input, which is
asserted high to turn the chip off (the downstream driver treats VEN as
active-low on this design) -- hence GPIO_ACTIVE_HIGH, unlike the
exynos5433-tm2 wiring of the same driver. The pin is pulled up so the
chip stays off while the line is not driven.

Assisted-by: Claude:claude-opus-4-8
Assisted-by: Claude:claude-fable-5
Signed-off-by: Jorijn van der Graaf <jorijnvdgraaf@catcrafts.net>
2026-07-05 18:02:28 +02:00
Luca Weiss
dfe0125e73 arm64: dts: qcom: milos-fairphone-fp6: Enable Iris v7.1.2-milos
Configure the firmware-name and enable Iris so that hardware-accelerated
video decoding & encoding works.

Signed-off-by: Luca Weiss <luca.weiss@fairphone.com>
2026-06-30 15:48:41 +02:00
Luca Weiss
e6f80a5035 arm64: dts: qcom: milos-fairphone-fp6: Enable GPU
Configure the path for the zap shader firmware and enable the GPU.

Signed-off-by: Luca Weiss <luca.weiss@fairphone.com>
2026-06-30 15:48:41 +02:00
Luca Weiss
1679e06efd ------------- 2026-06-30 15:48:41 +02:00
Luca Weiss
7b3104d3b1 arm64: dts: qcom: milos: Add reset for sdhc_2
Add the missing reset (BCR) for sdhc_2.

Fixes: d9d59d105f ("arm64: dts: qcom: Add initial Milos dtsi")
Signed-off-by: Luca Weiss <luca.weiss@fairphone.com>
2026-06-30 15:48:40 +02:00
Luca Weiss
c2bc6ab69c ------------- 2026-06-30 15:48:40 +02:00
Luca Weiss
963804678f WIP arm64: dts: qcom: milos: Add sound macro and soundwire nodes
Signed-off-by: Luca Weiss <luca.weiss@fairphone.com>

Still too many FIXMEs
2026-06-30 15:48:40 +02:00
Luca Weiss
66ce826713 WIP arm64: dts: qcom: milos-fairphone-fp6: Sound / speaker WIP
Signed-off-by: Luca Weiss <luca.weiss@fairphone.com>
2026-06-30 15:48:39 +02:00
Luca Weiss
421e386eb0 ASoC: qcom: sc8280xp: Add support for Milos
Add compatible for sound card on Qualcomm Milos boards.

Signed-off-by: Luca Weiss <luca.weiss@fairphone.com>
2026-06-30 15:48:39 +02:00
Luca Weiss
c40b3e4b94 ASoC: dt-bindings: qcom,sm8250: Add Milos sound card
Add bindings for Milos sound card, which looks fully compatible with
existing SM8450.

Signed-off-by: Luca Weiss <luca.weiss@fairphone.com>
2026-06-30 15:48:39 +02:00
Luca Weiss
26cc26f78a ------------- 2026-06-30 15:48:38 +02:00
Luca Weiss
b573968a94 fp6_defconfig: add defconfig 2026-06-30 15:48:38 +02:00
Luca Weiss
2356e72625 ------------- 2026-06-30 15:48:38 +02:00
Luca Weiss
39c588bb5b arm64: dts: qcom: milos-fairphone-fp6: Add downstream touchscreen
Add a node for the SPI-connected touchscreen, and its pinctrl.

WIP: Downstream touchscreen driver and bindings

Signed-off-by: Luca Weiss <luca.weiss@fairphone.com>
2026-06-30 15:48:38 +02:00
Luca Weiss
022127938a Input: eswin_touch - Remove 10s probe delay 2026-06-30 15:48:37 +02:00
Luca Weiss
5f6c2aed42 Input: eswin_touch - Fix ABS_X min/max being 0
Only call input_mt_init_slots after setting up some properties which are
then copied to other properties.
2026-06-30 15:48:37 +02:00
Luca Weiss
f0509b42db Input: eswin_touch - Fix up downstream driver 2026-06-30 15:48:37 +02:00
Luca Weiss
60ca103344 Input: eswin_touch - Import from downstream 2026-06-30 15:48:36 +02:00
Luca Weiss
aec10556b7 ------------- 2026-06-30 15:48:36 +02:00
Luca Weiss
5cf18f1558 Revert "drm/panel: novatek-nt37705: Configure for 10-bit"
10-bit DSC command mode is currently broken (2026-04-21). Keep it for
later given the panel works great also in 8-bit mode.

This reverts commit ea6afb55c1.
2026-06-30 15:48:36 +02:00
Luca Weiss
93364750fe drm/panel: novatek-nt37705: Configure for 10-bit
Update the init sequence and configuration to initialize the panel for
10-bit DSC cmd-mode.

Signed-off-by: Luca Weiss <luca.weiss@fairphone.com>
2026-06-30 15:48:36 +02:00
Luca Weiss
ae385cadc2 ------------- 2026-06-30 15:48:35 +02:00
Luca Weiss
80f9ea5bc9 FROMLIST v1 arm64: dts: qcom: milos-fairphone-fp6: Enable display
Configure the MDSS nodes for the phone and add the panel node.

Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Signed-off-by: Luca Weiss <luca.weiss@fairphone.com>
2026-06-30 15:48:35 +02:00
Luca Weiss
c651dc2911 FROMLIST v1 arm64: defconfig: Enable Novatek NT37705 panel
Enable the NT37705 panel driver which is used on Fairphone (Gen. 6).

Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Signed-off-by: Luca Weiss <luca.weiss@fairphone.com>
2026-06-30 15:48:35 +02:00
Luca Weiss
66e571e789 FROMLIST v1 drm/panel: Add driver for Novatek NT37705 panel
Add support for the 2484x1116 AMOLED panel from BOE (BJ631JHM-T71-D900)
bundled with a NT37705 driver IC, as found on the Fairphone (Gen. 6)
smartphone.

The panel can also be configured in 10-bit (RGB101010) mode, however
currently it's configured in 8-bit (RGB888) since there's some issues in
the Qualcomm DPU driver when driving this panel in 10-bit.

Signed-off-by: Luca Weiss <luca.weiss@fairphone.com>
2026-06-30 15:48:34 +02:00
Luca Weiss
3fc0ea7436 FROMLIST v1 dt-bindings: display: panel: Add Novatek NT37705
Novatek NT37705 is a display driver IC used to drive AMOLED DSI panels.

Describe it and the panel in the Fairphone (Gen. 6) (BJ631JHM-T71-D900
from BOE) using it.

Link: https://lore.kernel.org/r/81a3c207-4d8f-490f-8e2a-6f3f4c2acd35@kernel.org/
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
Signed-off-by: Luca Weiss <luca.weiss@fairphone.com>
2026-06-30 15:48:34 +02:00
Luca Weiss
bd10029b8d ------------- 2026-06-30 15:48:34 +02:00
Alexander Koskovich
acc082c0a3 FROMLIST RFC v6 arm64: dts: qcom: milos: Add Adreno 810 GPU and GMU nodes
Add GPU and GMU devicetree nodes for the Adreno 810 GPU found on
Qualcomm SM7635 (Milos) based devices.

The qcom,kaanapali-gxclkctl.h header can be reused here because
Milos uses the same driver and the GX_CLKCTL_GX_GDSC definition
is identical.

Signed-off-by: Alexander Koskovich <akoskovich@pm.me>
2026-06-30 15:48:34 +02:00
Luca Weiss
6629a0d934 ------------- 2026-06-30 15:48:33 +02:00
Taniya Das
fa645b9c77 FROMLIST v2 clk: qcom: gxclkctl: Remove GX/GMxC rail votes to align with IFPC
The GX GDSC control is handled through a dedicated clock controller,
and the enable/disable sequencing depends on correct rail voting.
The driver votes for the GX/GMxC rails and CX GDSC before toggling
the GX GDSC. Currently, during GMU runtime PM resume, rails remain
enabled due to upstream votes propagated via RPM-enabled devlinks
and explicit pm_runtime votes on GX GDSC.

This is not an expected behaviour of IFPC(Inter Frame Power Collapse)
requirements of GPU as GMU firmware is expected to control these rails,
except during the GPU/GMU recovery via the OS and that is where the GX
GDSC should be voting for the rails (GX/GMxC and CX GDSC) before
toggling the GX GDSC.

Thus, disable runtime PM after successfully registering the clock
controller.

Signed-off-by: Taniya Das <taniya.das@oss.qualcomm.com>
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
2026-06-30 15:48:33 +02:00
Taniya Das
e94350ea7b FROMLIST v2 clk: qcom: common: ensure runtime PM suspend completes on probe
When the clock controller is probed with 'use_rpm' enabled, the
runtime PM reference is currently released using pm_runtime_put(),
which may return before the runtime suspend has completed. When the
clock controller device is registered through this function, calling
pm_runtime_disable() immediately after pm_runtime_put() prevents
the runtime suspend from completing, leaving the clock controller
active and the HW rails in the ON state.

Use pm_runtime_put_sync() instead to ensure the runtime PM “putV
completes synchronously during probe. This does not have any functional
impact, but it guarantees that the device is fully runtime-suspended
before returning.

Signed-off-by: Taniya Das <taniya.das@oss.qualcomm.com>
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
2026-06-30 15:48:33 +02:00
Taniya Das
d9272ba106 FROMLIST v2 clk: qcom: gxclkctl: Use custom disable callback for gx_gdsc
The GX GDSC represents a special GPU power domain that must not be
disabled during normal runtime PM flows. As per the GMU architecture,
GX GDSC should only be force-disabled during GMU/GPU recovery, where the
OS explicitly resets the GX power domain.

However, when managed by the generic GDSC runtime PM path, GX GDSC may be
disabled during GMU runtime suspend, resulting in warnings such as:

  gx_clkctl_gx_gdsc status stuck at 'on'

and failures in gdsc_toggle_logic() during rpm suspend.

Use the newly added custom disable callback for gx_gdsc to ensure the
GDSC is toggled only in recovery scenarios, while preventing unintended
disable attempts during normal GMU runtime PM operations.

Reported-by: Pengyu Luo <mitltlatltl@gmail.com>
Closes: https://lore.kernel.org/all/CAH2e8h4Vp9fJYAUUbOmoHSKB25wakPBvmpwa62BTRqgRQbMWuw@mail.gmail.com/
Reported-by: Alexander Koskovich <akoskovich@pm.me>
Closes: https://lore.kernel.org/all/gwVAH2mJerU4dBInw8pKmOs5aQK55Q7W6q_UQAlLFCsEgX6eyvSgXAWbNNMqAX4WmPlYCKUSMhfkr5Jry4Ps5EqnxYZqEEDd3Whwv7ZXGlc=@pm.me/
Fixes: 5af11acae6 ("clk: qcom: Add a driver for SM8750 GPU clocks")
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Taniya Das <taniya.das@oss.qualcomm.com>
2026-06-30 15:48:32 +02:00
Jagadeesh Kona
ff597b7ce4 FROMLIST v2 clk: qcom: gdsc: Add custom disable callback for GX GDSC
The GX GDSC is a special power domain that should only be disabled
by OS during GMU recovery. In all other scenarios, the GMU firmware
is responsible for handling its disable sequence, and OS must not
interfere.

During the resume_noirq() phase of system resume, the GenPD framework
enables all power domains and later disables them in the complete()
phase if there are no active votes from OS. This behavior can
incorrectly disable the GX GDSC while the GMU firmware is still using
it.

To prevent this, implement a custom disable callback for GX GDSC that
relies on GenPD’s synced_poweroff flag. The GMU driver sets this flag
only during recovery, allowing OS to explicitly disable GX GDSC in
hardware in that case. In all other situations, the disable callback
will avoid touching GX GDSC hardware.

Signed-off-by: Jagadeesh Kona <jagadeesh.kona@oss.qualcomm.com>
Signed-off-by: Taniya Das <taniya.das@oss.qualcomm.com>
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
2026-06-30 15:48:32 +02:00
Luca Weiss
66386712d7 ------------- 2026-06-30 15:48:32 +02:00
Luca Weiss
070cf521f6 FROMLIST v3 arm64: dts: qcom: milos: Add GX clock controller
Add a node for the GX clock controller, which provides a power domain to
consumers.

Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Reviewed-by: Jagadeesh Kona <jagadeesh.kona@oss.qualcomm.com>
Signed-off-by: Luca Weiss <luca.weiss@fairphone.com>
2026-06-30 15:48:31 +02:00
Luca Weiss
e346b56bab ------------- 2026-06-30 15:48:31 +02:00
Luca Weiss
028075b690 FROMLIST v2 arm64: dts: qcom: milos: Add display (MDSS)
Add device nodes for display: MDSS, DPU, DSI and DSI PHY.

DisplayPort is not added for now.

Signed-off-by: Luca Weiss <luca.weiss@fairphone.com>
2026-06-30 15:48:31 +02:00
Luca Weiss
ffe79165ed FROMLIST v2 soc: qcom: ubwc: Add config for Milos
Describe the Universal Bandwidth Compression (UBWC) configuration
for the Milos SoC.

Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Signed-off-by: Luca Weiss <luca.weiss@fairphone.com>
2026-06-30 15:48:31 +02:00
Luca Weiss
12caa22971 ------------- 2026-06-30 15:48:30 +02:00
Luca Weiss
c2a069addc FROMLIST v2 arm64: dts: qcom: milos-fairphone-fp6: Enable IPA
Configure and enable the node for IPA which enables mobile data on this
device.

Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Luca Weiss <luca.weiss@fairphone.com>
2026-06-30 15:48:30 +02:00
Luca Weiss
6d94441a93 FROMLIST v2 arm64: dts: qcom: milos: Add IPA node
Add the description of the IPA block in the Milos SoC.

Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Signed-off-by: Luca Weiss <luca.weiss@fairphone.com>
2026-06-30 15:48:30 +02:00
Luca Weiss
434c2d0511 ------------- 2026-06-30 15:48:29 +02:00
Luca Weiss
348bad1406 FROMLIST v3 arm64: dts: qcom: milos: Add IMEM node
Add a node for the IMEM found on Milos, which contains pil-reloc-info
and the modem tables for IPA, among others.

Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Signed-off-by: Luca Weiss <luca.weiss@fairphone.com>
2026-06-30 15:48:29 +02:00
Luca Weiss
faa1559e1d ------------- 2026-06-30 15:48:29 +02:00
Alexander Koskovich
596a440de9 FROMLIST v2 arm64: dts: qcom: milos: Add Iris VPU v2.0
Add devicetree nodes for the Iris codec (VPU 2.0) found on the Milos
platform.

Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
Signed-off-by: Alexander Koskovich <akoskovich@pm.me>
2026-06-30 15:48:29 +02:00
Alexander Koskovich
bae687b536 FROMLIST v2 media: iris: Add support for Milos (VPU v2.0)
Add support for the Milos Iris codec. This only supports the variant
found on the SM7635-AB that has half of it's pipes disabled via efuse.

Signed-off-by: Alexander Koskovich <akoskovich@pm.me>
2026-06-30 15:48:28 +02:00
Alexander Koskovich
d1fe94b1ee FROMLIST v2 dt-bindings: media: qcom,milos-iris: Add Milos video codec
Add binding for Qualcomm Milos Iris video codec.

Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
Signed-off-by: Alexander Koskovich <akoskovich@pm.me>
2026-06-30 15:48:28 +02:00
Luca Weiss
6a954a3dcb ------------- 2026-06-30 15:48:28 +02:00
Luca Weiss
cd8362c95d FROMLIST v2 arm64: dts: qcom: milos-fairphone-fp6: Enable WiFi
Configure and enable the WiFi node, and add the required pinctrl to
provide the sleep clock from the PMK8550 (PMK7635) to WCN6755.

Thanks to Alexander Koskovich for helping with the bringup, adding
the missing pinctrl to make the WPSS stop crashing.

Link: https://lore.kernel.org/linux-arm-msm/DBF7OWAWQ94M.FSCP4DPF8ZJY@fairphone.com/
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Signed-off-by: Luca Weiss <luca.weiss@fairphone.com>
2026-06-30 15:48:27 +02:00