-
-
Notifications
You must be signed in to change notification settings - Fork 220
Surface 3
Cameras (both front and rear) are not working. This issue is being tracked here: https://github.com/linux-surface/linux-surface/issues/209
This driver is supported upstream, but known to be broken on some kernel config setup:
The workaround is already available on this repo (surface3-spi.patch ).
See also: https://github.com/linux-surface/linux-surface/issues/76
For the internal sound card to work, PulseAudio v11.99.1 or later is required (and to do so, upgrading your distribution to the latest stable version may be the best option).
See also: https://github.com/linux-surface/linux-surface/issues/60
On newer kernels (after 5.6 or so) you may need the sof-firmware package to make the correct audio device appear. Try installing it if the rt5645 device is missing.
The SOF driver may cause an issue where the audio output is replaced by a single tone, see this bug report. It can possibly be resolved by changing back to the older HDA driver using the kernel option 'snd_intel_dspcfg.dsp_driver=2' (see the Fedora wiki).
It's supported by linux-surface kernel (surface3-power.patch). But it seems that the relatively recent UEFI fiwmware is required
See also: https://github.com/linux-surface/linux-surface/issues/60
The driver is now upstream on v5.7 (https://github.com/torvalds/linux/blob/master/drivers/platform/x86/surface3_power.c)
Works fine, but modem won't even show up unless you have a simcard inserted, and you need to reboot your system once you insert the sim card, this is a limitation from the Intel modem used by MSFT - @samzanemesis
If your Surface 3 contains OEMB strings in DMI table as following, it means that DMI table of your Surface 3 is broken:
$ grep . /sys/devices/virtual/dmi/id/* 2>/dev/null | grep OEM | grep -v -e modalias -e uevent
/sys/devices/virtual/dmi/id/board_name:OEMB
/sys/devices/virtual/dmi/id/board_vendor:OEMB
/sys/devices/virtual/dmi/id/chassis_vendor:OEMB
/sys/devices/virtual/dmi/id/product_name:OEMB
/sys/devices/virtual/dmi/id/sys_vendor:OEMB
In such a case, sound and surface3-wmi drivers will not work with the upstream kernel. The workaround is available on the linux-surface kernel (surface3-oemb.patch).
See also: https://github.com/linux-surface/kernel/pull/29
Updating firmware with DMI-broken Surface 3
On Windows, firmware updates are usually done via Windows Update. However, DMI-broken Surface 3 will be recognized as "OEMB", not "Surface 3". Therefore, it can't be updated in the usual way.
Get firmware update MSI installer from Microsoft:
At this point, you can't pass the product name check (it shows something like "your device is not Surface 3"). Edit the MSI installer. Using InstEd here.
- InstEd->Tables->Property->InstallPrerequisites
# original string:
-OSVersion=Win10;ProductName=Surface 3;SystemSKU=;OSBuild=18362;SystemModels=;SystemSKUs=Surface_3_ROW;PreventBitLockerNoSecureBoot=0
# Replace `Surface 3` with `OEMB` and set `SystemSKUs` to empty.
# So, it will look like this:
+OSVersion=Win10;ProductName=OEMB;SystemSKU=;OSBuild=18362;SystemModels=;SystemSKUs=;PreventBitLockerNoSecureBoot=0
(Display backlight adjustment): BYT/CHT: pwm vs i915 driver initialization order when i915 is builtin
click to expand
When i915
driver is built-in, display backlight adjustment is broken (always maximum brightness). To avoid this issue, if you build kernels yourself with config other than the one from distros supported by linux-surface (Arch/Debian/Fedora), check if i915
is enabled as module (CONFIG_DRM_I915=m
) until this issue is fixed.
For reference, on 5.6.13-arch1-1-surface
where adjustment works, the related kernel config that is pointed out [1] is like this:
CONFIG_PWM=y
CONFIG_PWM_CRC=y
CONFIG_I2C_DESIGNWARE_PLATFORM=y
CONFIG_I2C_DESIGNWARE_PCI=m
CONFIG_INTEL_SOC_PMIC=y
CONFIG_DRM_I915=m
(CONFIG_I2C_DESIGNWARE_PCI
is m
but still works)
click to expand
S0ix states on suspend (s2idle) works since v4.20 (and after v4.19.36 regarding v4.19 series).
For example, after suspend:
$ cat /sys/devices/system/cpu/cpuidle/low_power_idle_cpu_residency_us
30
$ sudo cat /sys/kernel/debug/pmc_atom/sleep_state
S0IR Residency:32us
S0I1 Residency:11456us
S0I2 Residency:96us
S0I3 Residency:7991840us
S0 Residency:135887456us
Related commits:
- torvalds/linux@49ad712afa88c5 ("platform/x86: Add Intel AtomISP2 dummy / power-management driver")
- and backported on
v4.19.36
as gregkh/linux@cb09e99b9ad3eb
(There is the other enhancement for some Cherry Trail devices on v4.20:)
-
torvalds/linux@1688c8717118f3 ("pwm: lpss: Add ACPI HID for second PWM controller on Cherry Trail devices")
But turned out that this commit is not needed for Surface 3. For details, take a look at this comment.
References:
click to expand
The internal display shows up on xrandr
, but not on GNOME settings Display
section. What is worse, Chromium OS can't use it on kernels below v4.19.13
.
This issue was fixed exactly after v4.19.13
. Now it appears on GNOME settings Display
section. Chromium OS can now use it correctly. I am not sure what commit fixed this issue; if you know, edit here!
(dnf5):
sudo dnf config-manager
addrepo --from-repofile=https://pkg.surfacelinux.com/fedora/linux-surface.repo
- Home
- Installation and Setup
-
Supported Devices and Features
- Surface Book 1
- Surface Book 2
- Surface Book 3
- Surface Laptop Studio
- Surface Laptop Studio 2
- Surface Laptop 1
- Surface Laptop 2
- Surface Laptop 3
- Surface Laptop 4
- Surface Laptop 5
- Surface Laptop 6
- Surface Laptop Go 1
- Surface Laptop Go 2
- Surface Laptop Go 3
- Surface Laptop SE
- Surface Go 1
- Surface Go 2
- Surface Go 3
- Surface Go 4
- Surface 3
- Surface Pro 1
- Surface Pro 2
- Surface Pro 3
- Surface Pro 4
- Surface Pro 5
- Surface Pro 6
- Surface Pro 7
- Surface Pro 7+
- Surface Pro 8
- Surface Pro 9 (Intel)
- Surface Pro 10
- Surface Studio 1
- Surface Studio 2
- Surface Studio 2+
- Surface Dock
- Device Independent Information
- Known Issues / FAQ
- Links and Associated Projects
- Testers and Contributing