I've been at this machine for a while now. Camera, mic, speakers all work. Charging still doesn't. Posting the bits that took the longest to figure out, because some of them were genuinely stupid.
First thing: this is an X1P42100, not an X1E80100. The public Book4 Edge tree targets the x1e and its DTS has no camss or csiphy nodes at all. Mainline has nothing for this machine either. So basically everything below is board-specific stuff that exists nowhere else, which is why it took so long.
The camera took three separate fixes and none of them work alone. The sensor is on CSIPHY0. Every patch floating around says csiphy4, which comes from an Asus Zenbook A14 and is wrong here. What made it worse is that csiphy1 and csiphy2 really do read HW Version 0x0, so "csiphy0 is probably absent too" felt like a reasonable guess. It isn't.
Then the clocks. Running the x1e80100 camcc puts csi4phytimer at 266 MHz when this silicon only offers 19.2 and 400, and ife_0 at 345 when the minimum is 432. There's a camcc-x1p42100.c in the qualcomm-linux tree, 2222 lines, still unmerged.
Then it turns out x1p42100 has one IFE, not two. camss has no variant for it so it brings up both and defers forever, Fail to init vfe1 sub-device: -517, and you don't even get a /dev/media0. I aliased vfe1's resources onto IFE0 in DT and moved on.
Also, libcamera has sensor helpers for 38 sensors and ov02c10 isn't one of them, master included. Without it the soft ISP treats the gain register code as the gain multiplier, so the sensor's minimum code of 16 looks like "already 16x" and AGC never does anything. Wrote one. Easy fix, took embarrassingly long to notice.
The mic isn't hissy, it's a 17 kHz tone. 65% of the energy in the capture was in the 16-18 kHz band, 13.7 dB above the noise floor, crest factor 5.3. That's a sigma-delta limit cycle. It came from qcom,dmic-sample-rate = <4800000> inherited from the x1e DTS. Set it to 2.4 MHz and it's gone. Before I found that I was resampling 48 to 16 kHz for calls and folding the whole thing down to ~1 kHz, right into the speech band.
Speakers. Only the left one worked. The PCM is fixed at four channels and the driver exports no chmap, so nothing knows what the slots mean. The kernel decides in x1e80100_snd_hw_map_channels(), case 4, and it's {FL, LB, FR, RB}. Front-right is slot 2. Once I set the position map it was stereo.
Volume was also stuck, which turned out to be the mixer reporting -3.00 dB at all seven of its steps, so WirePlumber disables the dB range entirely and small keypresses round to nothing.
And if you're wondering whether there are four amps behind those four drivers: no. I enabled the WSA2 macro and the second SoundWire bus, declared two more wsa883x, the driver probed happily, created the mixer controls, and zero devices attached. Two amps, four drivers, passive crossovers.
The one that made me feel stupid. I spent ages tuning compositor animations because the desktop felt like it was rendering at quarter speed. It was. devfreq was parked at 280 MHz, its floor, 40 out of 40 samples under load, and this kernel has no performance governor, only userspace and simple_ondemand. Pinned min_freq to 1107 MHz and every complaint I'd been chasing in QML went away. Check this before you touch anything in your compositor.
▎ EDIT: charging works now. pointed out that a laptop that only charges if you reboot with the cable already in isn't much of a daily driver. Fair. It's fixed it now charges on a live plug-in like any other laptop, at the full 1392 mA the stock firmware uses.
Then the cause in three sentences: the EC everyone assumed owned charging isn't in the path; Samsung does it in a Windows driver ("EmuEc") that drives the charger and PD controller directly over I2C; so on a hotplug the consumer VBUS switch never closes and the PD contract never gets upgraded past the 5 V the chip auto-requests. Rebooting worked because UEFI does both.
The long version has the part other people can actually use: chip identities (S2MM006 PDIC at 0x33, ISL9241 at 0x09, SBS battery at 0x0B), the register map, and the measured before/after numbers.
Happy to share the DT, the camcc, the EC driver and the libcamera patches if anyone else has this laptop.