Ubuntu Concept ♥️ Snapdragon X Elite

(Surface Pro 11)

With a bit more vibing touchscreen & on-screen keyboard are working.

Ollama → glm5.2:cloud → hermes

Surface Pro 11 (Snapdragon X Elite) — Touchscreen Fix on Linux

Hardware: Microsoft Surface Pro 11 (OLED), Qualcomm Snapdragon X Elite (X1E80100)
Kernel: 7.2-rc5-jg-0sp11v3-qcom-x1e (custom kernel from jglathe’s linux_ms_dev_kit repo)
Touchscreen: Microsoft Surface G6 Touch (MSHW0485), connected via SPI (not I2C/HID)

==========================================================

THE PROBLEM

The touchscreen was completely dead — no input events, no device in
/proc/bus/input/devices. The root cause was a chain of failures:

  1. The Qualcomm GENI SPI controller (at address a88000.spi) failed to
    initialize with the error:

    geni_spi a88000.spi: Invalid proto 9

    The GENI Serial Engine wasn’t configured for SPI mode. The touchscreen
    is connected via SPI (Qualcomm GENI QUP), not I2C or HID like most
    touchscreens.

  2. Because the SPI bus never came up, the touchscreen device was never
    registered, so the mshw0485_touch driver had nothing to bind to.

  3. This also caused a cascade of deferred probe failures — interconnect,
    clock controller, and power domain all reported:

    sync_state() pending due to a88000.spi

==========================================================

WHAT WAS ALREADY IN PLACE (from the custom kernel)

The custom kernel already shipped with:

  • A patched spi_geni_qcom driver with a module parameter:
    sp11_windows_se_init
    This tells the GENI SPI driver to use a captured Windows cold-init
    sequence to properly configure the Serial Engine for QSPI mode.

  • An out-of-tree mshw0485_touch driver (Microsoft Surface G6 MSHW0485
    touchscreen, from the SP11 reverse-engineering project).

  • The gpi DMA module (GPI DMA descriptor mode for SPI transfers).

  • The QUP firmware at /lib/firmware/qcom/x1e80100/qupv3fw.elf.zst

But none of it worked without the module parameter being set.

==========================================================

THE FIX — 3 CHANGES

  1. Created /etc/modprobe.d/sp11-touch.conf:

    options spi_geni_qcom sp11_windows_se_init=1

    This enables the captured Windows SP11 QSPI cold SE initialization
    sequence. Without it, the GENI SE reports “Invalid proto 9” and the
    SPI bus never works. With it, the driver accepts protocol 9 as QSPI
    and applies the exact Windows cold-init sequence.

  2. Created /etc/modules-load.d/sp11-touch.conf:

    mshw0485_touch
    spi_geni_qcom

    Ensures both modules load at boot (the touchscreen driver doesn’t
    auto-load without the SPI bus being up first).

  3. Rebuilt the initramfs:

    sudo update-initramfs -u

    So the module parameter is picked up early during boot.

Then rebooted.

==========================================================

WHAT HAPPENS AT BOOT NOW (verified in kernel log)

geni_spi a88000.spi: SP11: accepting protocol 9 as QSPI controller
geni_spi a88000.spi: SP11: applied exact Windows QSPI cold SE init sequence
geni_spi a88000.spi: SP11: QSPI using GPI DMA descriptor mode
input: Microsoft Surface G6 Touch as …/a88000.spi/spi_master/spi0/spi0.0/input/input1
mshw0485-touch spi0.0: touch controller initialization scheduled profile=phase75
mshw0485-touch spi0.0: phase72: GET_FEATURE 0x70 config len=1 bytes=02
mshw0485-touch spi0.0: phase72: SET_FEATURE 0x70 derived len=2 bytes=01 02
mshw0485-touch spi0.0: phase72: OUTPUT_REPORT 0x09 len=2 bytes=8e 02
mshw0485-touch spi0.0: touch controller initialized path=hardware recoveries=1 resets=0

The touchscreen now appears as an input device with multitouch support
(ABS events, PROP=2 continuous). It is registered as /dev/input/event1
with mouse0 handler.

==========================================================

MODULES LOADED

  • spi_geni_qcom — patched GENI SPI driver (with sp11_windows_se_init=1)
  • gpi — GPI DMA engine for SPI transfers
  • mshw0485_touch — the touchscreen driver
  • reset_gpio — GPIO reset control for the touch panel

==========================================================

ADDITIONAL DRIVER PARAMETERS (for tuning, not needed for basic function)

  • behavior_v2 — Phase 76 low-latency Windows-derived contact behavior
  • reset_recovery_v2 — Phase 77 gated software recovery after panel reset
  • windows_init_parity — Windows cold initialization parity mode
  • host_fault_recovery — cold re-enumeration after IRQ transport/protocol fault
  • mode_config_fix — already enabled by default (Phase 72 SET 0x70 sequence)

==========================================================

CREDITS

The custom kernel and touchscreen driver come from jglathe’s
linux_ms_dev_kit project and the SP11 reverse-engineering project.
The key insight is that the GENI SPI controller needs the Windows
cold-init sequence to work on the Surface Pro 11 — the stock Qualcomm
driver doesn’t know how to configure the SE for this device’s QSPI
setup.

2 Likes

I’m sorta useless re cdsp. Only reading it in the forums, not trying anything with it. Others put a lot of energy into it, IMO it is another level of inaccessible vs. adsp.

Thanks for letting me know. I’ve updated the releases (and removed the old broken releases): see here Release Surface Pro 11 qcom-x1e 7.2-rc5-jg-0sp11v3 r1 — MSHW0485 touchscreen · ooaklee/linux-surface-pro-11-oe · GitHub

1 Like

wich kernel tho right now works most with the ASUS Vivobook S15 on the X1P42100. is there a link to one where atleast the internal display and build in audio works?

My kernels since 7.1.3 do. You can use the new and improved :tm: extended Resolute ISO from August 4 if you want to do a complete install. In the KERNEL_PKG partition there is 7.1.5-jg-0 for install. There’s also a Wiki for these images (and the repo contains the source trees, too). It needs some update on the newest findings, I hope I will get them out soon. I don’t have the Vivobooks, but Installed a few times on other targets:

Ideapad 5 2in1: works well
Ideapad Slim5x OLED: works well
Thinkpad T14s 64GB OLED: works well
Snapdragon Dev Kit X1E001DE: nightmare-ish. But installing via a working laptop on the target SSD works well, again.

Overall the installer has evolved quite a bit, too. Nice job.

2 Likes

hi there,
thank you for all of your working on the enablement to get ubuntu running on the snapdragon based socs.
could some kind soul tell me what the current status is for the following model?
Acer Aspire 14 AI A14-11M
i’m blind so may find it trick to test anything,
thank you for the hard work that again has been done in this space.
here’s a bug that someone reported re this model.

thank you,
Majid Hussain

Surface Pro 11

Ollama → glm-5.2:cloud → Hermes

Installed today from a fresh install with a couple of issues found. Here’s an LLM generated install report:

**=========================================================================

KERNEL UPDATE SUMMARY REPORT
Surface Pro 11 OLED (Denali) – kernel 7.2-rc5-jg-0sp11v3-qcom-x1e (r1)
Date: 2026-08-08**

OVERVIEW
Installed the experimental standalone qcom-x1e kernel (release r1,
commit acdc959) with MSHW0485 G6 touchscreen support on Ubuntu 26.04
LTS (GNOME Wayland, ARM64).

WHAT WAS INSTALLED

  • 4 Debian packages (image, modules, flavour headers, common headers)
    for ABI 7.2-rc5-jg-0sp11v3-qcom-x1e
  • 3 touchscreen modules (gpi.ko, spi-geni-qcom.ko, mshw0485_touch.ko)
    built from geocausa Phase 91 source (commit 6bbcf7a)
  • Kernel enables MSHW0485 G6 touchscreen over SE2 QSPI
  • Retains validated 2.4 MHz Denali DMIC clock (audio)

PROBLEMS ENCOUNTERED: 1

  • Stock/duplicate modules in initramfs (dracut subsystem sweep
    included both stock .ko.zst and updates/ override .ko copies)
  • Fixed by removing redundant stock copies and rebuilding initramfs
  • All 13 verification checks passed after fix

PRE-INSTALL SAFETY MEASURES

  • 2 fallback kernels available (7.0.0-32, 7.0.0-22)
  • Timeshift snapshot created (2026-08-08_14-39-34), 12 total on
    /dev/sda1 (2TB ext4, RSYNC mode), 1.7 TB free

POST-INSTALL STATE

  • Default boot: 7.2-rc5-jg-0sp11v3-qcom-x1e
  • Fallbacks in GRUB Advanced: 7.0.0-32, 7.0.0-22
  • DTB injected: /boot/sp11-denali.dtb (Denali OLED, 214 KB)
  • Windows Boot Manager entry preserved
  • Config files: modprobe softdep, modules-load auto-load,
    dracut force_drivers, initramfs-tools hook, release marker

**=========================================================================

1 problem fixed**

1 Like

Hello, I have a Lenovo Ideapad Slim 3x-15q8x10-WCN7850 laptop. I installed your ISO, but it only boots by editing the GRUB directory and changing the path to /boot/arquivo.dtb. So far so good, but the problem is that many things are missing, such as sound, Wi-Fi, touchpad, and the Fn key; they don’t work. I even installed the latest kernel from your Google Drive. Do you have any idea what the problem might be?

1 Like

Interestingly I was having screen problems (image corruption artifacts and half screens after resume from suspend) before but after installing the update they are all resolved.

2 Likes

Hello, @glathe I have been trying to get my ASUS S15 working correctly since 25.04, upgraded to 26.04. Just clean installed the above extended resolute iso from Aug 4. This has worked but the kernel went backward from (7.0.32.32 qcomx1e) to 7.0.29. I have tried updating kernel several times now, but upon startup faced with a black screen and have to revert. I must be missing something but I cant update to your fixes (well documented) for this ASUS S15 Qcomx1e. Please help. Thanks Noel

1 Like

I don’t expect any improvements in Ubuntu 26.04 LTS, beside the kernel. However, with Ubuntu 26.04.02 you will get the new kernel from Ubuntu 26.10

For me, as someone who wants to use it productively and without any hobby repos I will try again with Ubuntu 28.04. Sadly I have to use Windows until now.

Yeah because there’s patches in it for that :slight_smile:

1 Like

Hi @renanmontano, that’s sort of a multi-dimensional issue I’m afraid. There is a wiki for the post-install stuff, I need to update with latest findings (like, the importance and handling of flash-kernel). Anyway, it should point the way on the whys.
Now to the specifics of your Slim3x model. Model number would help. Starts wit 83, mine is 83N30004GE There are a few different, it being WCN7850 may sound like its more like mine. Touchpad is EC-controlled and gated onto a shared interrupt with the keyboard, which is a nightmare on Linux. There are variants that work well with a virtual gpio mux, and some (like mine) that don’t. I have built a special polling-capable i2c-hid driver that makes it useable, but that’s not in my tree, even. The real solution will be to build an EC driver to get the touchpad/keyboard sharing under control. Hasn’t happened yet.
What is available:

  • dtb from @asteroid which has everything enabled (LCD backlight, sound, ath11k Wifi)
  • virtual mux driver to share the kb/touchpad
  • my dtb which has only keyboard enabled, no sound, no LCD backlight, but ath12k WiFi
  • and the polling driver variant to enable kb and touchpad.

I need to do continue work on this, the slim5x sort of interrupted.

Nome do dispositivo: RENAN-LAPTOP
Número do produto: 83TW0000BO
Número de série: PE0FBYKB
Versão do bios: RVCN23T1WW
Processador: Snapdragon(R) X - X126100 - Qualcomm(R) Oryon™ CPU
Armazenamento: 368.3 GB
Ram instalada: 16 GB (15.6 GB utilizável)
Id do dispositivo: *****
Id do produto: *****

mine is this. If you need me to extract something from my model, I can help with that.

Nice. 83TW should be well supported, but is… WCN6855 (ath11k) where you need some additional board file.
The model is the same as another user has, he has it activated quite far. I forwarded this chat and asked if he could help, lets see.

Okay, I’ll wait. Thank you very much for your help.

Hello, for the WCN6855 (ath11k), you can add this board file, and Wi-Fi should work properly.

Move the board-2.bin to /lib/firmware/ath11k/WCN6855/hw2.0/board-2.bin and then restart the machine

Thanks, it worked. Now only 80% of the other things are still not working.

Hi, just wanted to check if there’s been any progress on the display brightness control for the Dell Latitude 7455/5455. Is there anything I can do to help?

1 Like

Glad to hear, and thanks for the feedback. I’ve implemented a fix to address this, and I’ve documented it in ADR-0053 and updated ADR-0050 accordingly

Manual repair:

REL=7.2-rc5-jg-0sp11v3-qcom-x1e
sudo rm -f /lib/modules/$REL/kernel/drivers/dma/qcom/gpi.ko*
sudo rm -f /lib/modules/$REL/kernel/drivers/spi/spi-geni-qcom.ko*
sudo depmod -a $REL
sudo update-initramfs -u -k $REL

The installer script on the main branch now repairs this automatically.