HP Spectre x360 15-df1010na

From ArchWiki
Hardware PCI/USB ID Working?
Touchpad Yes
Keyboard Yes
GPU 10de:1f91 Yes
Webcam 0408:5255 Yes
Bluetooth Yes
SD-card reader 10ec:525a Untested
Audio 8086:a348 Yes
GPU Audio 10de:10fa Yes
Wireless 8086:2723 Yes
Fingerprint reader No
TPM Yes
Thunderbolt 8086:15ea Yes

Installation

Secure Boot must be disabled in the BIOS. The BIOS can be accessed by holding down Esc while booting, then pressing F10 when the options screen is shown. F9 can be used to select the boot device.

Firmware

fwupd supports this device.

Biometrics

Fingerprint Scanner

Tested using Fprint, fprintd-enroll reports that the device cannot be found.

Windows Hello

Facial recognition works using Howdy.

Audio

If audio does not work initially, create the file /etc/modprobe.d/alsa-base.conf with the following line.

options snd-hda-intel

The audio mute button works by default but with no led indicator to show its state. Suggested fixes including adding model=hp-gpio-led after snd-hda-intel but this does not appear to work for this model.

Power management

For general battery improvements, thermald and auto-cpufreqAUR seem to help, although battery life is still poor.

Unfortunately HP do not support s3 sleep (see Power management/Suspend and hibernate) for this laptop, which leads to extreme battery drain when left in 'suspend' mode (s2idle).

This can be fixed by modifying the DSDT, but resuming from suspend with deep sleep is unreliable, rendering this method pointless. An alternative solution to saving power would be using hibernation and then focusing on improving the boot time to bring wakeup from hibernation closer to wakeup from suspend times.

ACPI override to support S3 sleep

Tango-inaccurate.pngThe factual accuracy of this article or section is disputed.Tango-inaccurate.png

Reason: Resuming from suspend with this method is unreliable and will usually leave you needing to reboot. The methods outlined in Power management/Suspend and hibernate#Troubleshooting do not seem to solve this. If you find a solution please update this page. (Discuss in Talk:HP Spectre x360 15-df1010na)

Initially the only supported sleep on this model will be s2idle:

$ cat /sys/power/mem_sleep
[s2idle]
Tip: acpica contains both iasl and acpidump.

Extract and disassemble the DSDT tables:

# mkdir /tmp/acpi_patch && cd /tmp/acpi_patch
# acpidump -b # extract current DSDT tables
# iasl -d dsdt.dat # disassemble to dsdt.dsl

You now need to modify the file dsdt.dsl using a text editor. Find the section which begins with DefinitionBlock ("", "DSDT", 2, "HPQOEM", "863E ", and increment the final number (remember to increment it as hex).

For example:

DefinitionBlock ("", "DSDT", 2, "HPQOEM", "863E    ", 0x01072009)

Should be changed to

DefinitionBlock ("", "DSDT", 2, "HPQOEM", "863E    ", 0x0107200a)

Then the definition for S3 System State needs to be added between the sections for // _S0_: S0 System State and // _S4_: S4 System State. This should end up as follows:

   Name (_S0, Package (0x04)  // _S0_: S0 System State
   {
       Zero, 
       Zero, 
       Zero, 
       Zero
   })
   Name (_S3, Package(0x04) //  _S3_: S3 System State
   {
       0x03,
       0x03,
       Zero,
       Zero
   })
   Name (_S4, Package (0x04)  // _S4_: S4 System State
   {
       0x06, 
       Zero, 
       Zero, 
       Zero
   })

You then need to recompile the DSDT tables and create a cpio override archive:

# iasl -tc dsdt.dsl # recompile
# mkdir -p kernel/firmware/acpi
# cp dsdt.aml kernel/firmware/acpi
# find kernel | cpio -H newc --create > /boot/acpi_override

Then add the cpio override to the boot options. For example, with systemd-boot you can add initrd /acpi_override above the line with initrd /initramfs-linux.img in your entry config (e.g. /boot/loader/entries/arch.conf). For more info see DSDT#Using modified code.

After a reboot you should see that deep sleep has been enabled:

$ cat /sys/power/mem_sleep
[s2idle] deep

However, although deep sleep is available, it is not always used.

If the journal for the current boot includes kernel: PM: suspend entry (s2idle) then you also need to add mem_sleep_default=deep to your kernel parameters. When it is working you should see PM: suspend entry (deep) in the journal.