Commit graph

1,447,454 commits

Author SHA1 Message Date
62bfbe9a02 TEST: q6apm-lpass-dais: start graph at prepare (q6afe-style) so BE clocks run before DAPM power-up archive/audio-fmtneg-test-2026-07-05 2026-07-05 04:50:39 +02:00
4b413eda9b Revert "TEST: aw88261: restore async start (revert of caea99ac809d) — q6apm starts BE clocks at trigger, after DAPM PRE_PMU"
This reverts commit 157350ab1f.
2026-07-05 04:49:51 +02:00
157350ab1f TEST: aw88261: restore async start (revert of caea99ac809d) — q6apm starts BE clocks at trigger, after DAPM PRE_PMU 2026-07-05 03:43:32 +02:00
095d06f54b TEST: sc8280xp: drop Senary S32 BE fixup (v2 candidate; S16 end-to-end with fmt-negotiating aw88261) 2026-07-05 03:24:46 +02:00
064ee60d7f TEST: aw88261: file-level backport of mainline @ audio-mainline-aw88261 (Val's fmt-negotiation series + our SYSST fix) 2026-07-05 03:23:44 +02:00
2aef34e14a Merge branches 'audio' and 'mic' into combined archive/combined-pre-cleanup-2026-07-05 2026-07-05 02:52:40 +02:00
5c9c899ba9 arm64: dts: qcom: milos-fairphone-fp6: enable SoundWire buses with WCD9378 slaves
Enable the RX (swr1) and TX (swr2) SoundWire controllers and describe
the two WCD9378 codec slave devices, as enumerated on hardware:
unique-id 4 on the RX bus, unique-id 3 on the TX bus, SoundWire id
sdw20217011000 (mfg 0x0217, part 0x0110). A firmware description is
required for the sdw core to bind a driver since dynamically enumerated
devices are visible but not bindable.

WIP: the codec node set is minimal (no port mappings, no codec parent
node yet); grows with the wcd9378 driver.

Assisted-by: Claude:claude-fable-5
Signed-off-by: Jorijn van der Graaf <jorijnvdgraaf@catcrafts.net>
2026-07-05 02:52:32 +02:00
2fd346efe3 ASoC: codecs: wcd9378: add SoundWire skeleton driver (WIP)
Bring-up skeleton for the Qualcomm WCD9378 codec (SoundWire dev id
0x0217:0x0110, one slave per RX/TX bus). Probes both slaves, maps the
SDCA control space (32-bit paged addresses) through regmap-sdw with
prop.paging_support set, and dumps the device identity registers on
ATTACHED as a transport self-test:

  DEV_MANU_ID_0/1 = 0x17/0x02 (Qualcomm 0x0217)
  DEV_PART_ID_0/1 = 0x10/0x01 (WCD9378 0x0110)
  ANA_TX_CH1 0x20, ANA_MICB1 0x10 (downstream reset defaults)

The analog core is WCD937x register-compatible; full codec function
(TX/ADC path first) to be built on top of this. Not for upstream in
this form.

Assisted-by: Claude:claude-fable-5
Signed-off-by: Jorijn van der Graaf <jorijnvdgraaf@catcrafts.net>
2026-07-05 02:52:32 +02:00
8ed47c2b0a soundwire: qcom: add SCP address paging support
The Qualcomm SoundWire controller driver ignored the paging fields of
struct sdw_msg, so any register access above the 16-bit address space
(e.g. the SDCA control space used by the WCD9378 codec) silently read
the low 15 bits only. The core already splits the address into
addr_page1/addr_page2 and sets msg->page; write the two SCP_AddrPage
registers through the command FIFO before the transfer, as the vendor
swr-mstr-ctrl driver does.

Verified on Fairphone 6 (SM7635): WCD9378 SDCA registers (0x40000000+)
read back their documented reset defaults; without this every paged
read returned zeros.

Assisted-by: Claude:claude-fable-5
Signed-off-by: Jorijn van der Graaf <jorijnvdgraaf@catcrafts.net>
2026-07-05 02:52:32 +02:00
4a0d53f108 arm64: dts: qcom: milos-fairphone-fp6: enable Senary MI2S dai-link archive/audio-pre-cleanup-2026-07-05
Uncomment the Senary MI2S speaker dai-link. The sc8280xp machine driver
gained Senary MI2S support and the aw88261 power-up check is fixed (both
carried on this branch), so the link is functional: both AW88261 amps
load their ACF firmware and play.

This restores the enablement that was lost when the audio carries were
rebased from the v7.0.8 stack onto v7.1.2-milos: only the two driver
patches were carried over, leaving the sound card with zero dai-links
(the card registers but stays empty - no PCMs, no controls).

Assisted-by: Claude:claude-fable-5
Signed-off-by: Jorijn van der Graaf <jorijnvdgraaf@catcrafts.net>
2026-07-05 02:51:59 +02:00
e41d12b07a ASoC: codecs: aw88261: only check PLL and clock state at power-up
The SYSST check performed during device start requires SWS (amplifier
switching, bit 8) and BSTS (boost finished, bit 9) on top of PLL lock
and clock stability. Those bits cannot be asserted at this point in the
sequence: the check runs after amppd release but before the
hmute/ULS-hmute release, and the amplifier neither switches nor
finishes ramping its boost converter while it is still muted. With the
Fairphone (Gen. 6) firmware profile, aw88261_dev_start() therefore
always fails with

  check sysst fail, reg_val=0x0011, check:0x311

and playback aborts, even though the amplifier is fine and PLL lock
and stable clocks are present.

Check only PLL lock and clock stability, for which a definition
already exists; this still re-validates the clocks after amppd release
(aw88261_dev_check_syspll() checked them before it). This matches the
vendor aw882xx driver, which only validates PLL lock and clock
stability at this stage, and the in-tree aw88399 driver, which skips
the SWS check whenever the amplifier may legitimately not be switching
(AW88399_BIT_SYSST_NOSWS_CHECK).

Fixes: 028a2ae256 ("ASoC: codecs: Add aw88261 amplifier driver")
Assisted-by: Claude:claude-fable-5
Signed-off-by: Jorijn van der Graaf <jorijnvdgraaf@catcrafts.net>
2026-07-04 23:16:10 +02:00
8e5b19c078 ASoC: qcom: sc8280xp: support Senary MI2S
Extend the clock-provider DAI fmt setup to Senary MI2S; without it
q6i2s_set_fmt() is never called, ws_src remains external and the DSP
does not drive the I2S clocks.

Force 32-bit slots on this interface in the BE fixup. The only Senary
MI2S user so far is the Fairphone (Gen. 6), whose AW88261 speaker
amplifiers derive their boost converter clock from BCLK and are
configured by their firmware profile for 48 kHz x 32 bit x 2
(3.072 MHz BCLK), matching the downstream configuration of this
backend (bit_width 32). Should a board with different requirements on
this interface appear, the fixup can be keyed on the card compatible
instead.

Note the snd_mask_none() before snd_mask_set_format(): the latter only
ORs the format bit into the mask, and with the default S16 left in
place DPCM refinement still resolves to S16.

Assisted-by: Claude:claude-fable-5
Signed-off-by: Jorijn van der Graaf <jorijnvdgraaf@catcrafts.net>
2026-07-04 23:16:10 +02:00
f0d2565aa9 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-i2c 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 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-04 23:15:23 +02:00
86dc1798f5 ASoC: codecs: aw88261: only check PLL and clock state at power-up
The SYSST check performed during device start requires SWS (amplifier
switching, bit 8) and BSTS (boost finished, bit 9) on top of PLL lock
and clock stability. Those bits cannot be asserted at this point in the
sequence: the check runs after amppd release but before the
hmute/ULS-hmute release, and the amplifier neither switches nor
finishes ramping its boost converter while it is still muted. With the
Fairphone (Gen. 6) firmware profile, aw88261_dev_start() therefore
always fails with

  check sysst fail, reg_val=0x0011, check:0x311

and playback aborts, even though the amplifier is fine and PLL lock
and stable clocks are present.

Check only PLL lock and clock stability, for which a definition
already exists; this still re-validates the clocks after amppd release
(aw88261_dev_check_syspll() checked them before it). This matches the
vendor aw882xx driver, which only validates PLL lock and clock
stability at this stage, and the in-tree aw88399 driver, which skips
the SWS check whenever the amplifier may legitimately not be switching
(AW88399_BIT_SYSST_NOSWS_CHECK).

Fixes: 028a2ae256 ("ASoC: codecs: Add aw88261 amplifier driver")
Assisted-by: Claude:claude-fable-5
Signed-off-by: Jorijn van der Graaf <jorijnvdgraaf@catcrafts.net>
2026-07-04 22:55:52 +02:00
8afb0d14a3 ASoC: qcom: sc8280xp: support Senary MI2S
Extend the clock-provider DAI fmt setup to Senary MI2S; without it
q6i2s_set_fmt() is never called, ws_src remains external and the DSP
does not drive the I2S clocks.

Force 32-bit slots on this interface in the BE fixup. The only Senary
MI2S user so far is the Fairphone (Gen. 6), whose AW88261 speaker
amplifiers derive their boost converter clock from BCLK and are
configured by their firmware profile for 48 kHz x 32 bit x 2
(3.072 MHz BCLK), matching the downstream configuration of this
backend (bit_width 32). Should a board with different requirements on
this interface appear, the fixup can be keyed on the card compatible
instead.

Note the snd_mask_none() before snd_mask_set_format(): the latter only
ORs the format bit into the mask, and with the default S16 left in
place DPCM refinement still resolves to S16.

Assisted-by: Claude:claude-fable-5
Signed-off-by: Jorijn van der Graaf <jorijnvdgraaf@catcrafts.net>
2026-07-04 22:55:52 +02:00
83ded1517d 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-04 21:33:20 +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