Framework Laptop 16
- Confirm that USB4/Thunderbolt works with peripherals more complex than NVMe drives (e.g. GPUs, docks).
The Framework Laptop 16, released in 2024, is a highly modular and repairable 16 inch laptop. This article is incomplete, see Framework Laptop 13 for a guide on comparable hardware.
Hardware
Ryzen mainboard
Other than the CPU, both models (Ryzen 7 and 9) have the same hardware.
Device | Make/model | Status | Vendor ID / Product ID | Kernel driver(s) | Kernel version | Notes |
---|---|---|---|---|---|---|
CPU | AMD Ryzen 9 7940HS
AMD Ryzen 7 7840HS |
Works | AMD microcode | |||
Chipset | AMD Pink Sardine | Works | ||||
Video card | AMD Phoenix1 | Works | 1002:15bf | amdgpu | Use VIDEO_CARDS: amdgpu radeonsi
| |
Sound card | AMD Rembrandt Radeon High Definition Audio Controller | Works | 1002:1640 | snd_hda_intel | ||
Sound card | AMD Family 17h/19h HD Audio Controller | Works | 1022:15e3 | snd_hda_intel | ||
Audio coprocessor | AMD ACP/ACP3X/ACP6x Audio Coprocessor | Works | 1022:15e2 | snd_pci_ps | Also requires Realtek HD-audio codec | |
Wireless network card | MediaTek MT7922 | Works | 14c3:0616 | mt7921e | ||
Bluetooth | MediaTek MT7922 | Works | 0e8d:e616 | btusb | ||
Fingerprint Reader | Goodix USB2.0 MISC | Works | 27c6:609c | Requires a fingerprint reader package | ||
Webcam | Realtek Semiconductor Corp. Laptop Camera | Works | 0bda:5634 | uvcvideo | The microphone is attached to the sound card (17h/19h), not the webcam | |
Ambient light sensor | Not tested | Found at: /sys/bus/iio/devices/iio:device0/in_illuminance_raw
| ||||
Encryption | AMD Family 19h (Model 74h) CCP/PSP 3.0 Device | Not tested | 1022:15c7 | ccp | ||
Thunderbolt/USB4 | AMD Pink Sardine USB4/Thunderbolt NHI controller | Not tested | 1022:1668 1022:1669 | thunderbolt | Basic USB functionality works, including all of the expansion cards. Thunderbolt/USB4 functionality has been confirmed on external NVMe storage drives. | |
AI accelerator | AMD IPU Device | Not tested | 1022:1502 | Driver at: https://github.com/amd/xdna-driver |
Input modules
The Framework Laptop 16 has a user-configurable input deck. Unless otherwise noted, the modules listed below are OEM modules from Framework.
Device | Make/model | Status | Vendor ID / Product ID | Kernel driver(s) | Kernel version | Notes |
---|---|---|---|---|---|---|
Keyboard | Framework Laptop 16 Keyboard Module - ANSI | Works | 32ac:0012 | Generic HID? | ||
Touchpad | PixArt PIXA3854 | Works | 093A:0274 | hid_multitouch i2c_designware_platform pinctrl_amd | ||
Numpad | Framework Laptop 16 Numpad Module | Works | 32ac:0014 | Generic HID? | ||
RGB Macropad | Works | 32ac:0013 | Generic HID? | |||
LED Matrix | Works | 32ac:0020 | cdc_acm |
Configuring the QMK devices and LED matrix via web tools requires udev rules (see below).
Expansion cards
See Framework Expansion Cards. The Framework Laptop 16 features six modular expansion card slots allowing for custom port configurations.
Expansion bay
The Framework 16 has an expansion bay with a custom PCIe connector. Unless otherwise noted, the modules listed below are OEM modules from Framework.
Device | Make/model | Status | Vendor ID / Product ID | Kernel driver(s) | Kernel version | Notes |
---|---|---|---|---|---|---|
N/A | Expansion Bay Shell | Works | N/A | N/A | N/A | Just provides cooling and fills the bay. |
GPU | AMD Radeon RX 7700S | Works | 1002:7480 1002:ab30 | amdgpu snd_hda_intel |
Installation
See the Handbook for instructions on the general installation process.
Firmware
Firmware from sys-kernel/linux-firmware is needed for the GPU, wireless, and bluetooth interfaces.
Kernel
The easiest way to configure the kernel is use a distribution kernel. The next easiest way is to use genkernel. See Kernel installation in the handbook for details.
genkernel automatically enables enough to get the system booted, but additional changes are required to get all hardware working. On the upside, genkernel all
does everything - it compiles the kernel, builds an initramfs, and installs both in the boot partition, and it can be configured to update the bootloader entries.
Note: compiling certain drivers into the kernel (vs as a module) may cause problems. Some drivers such as the Wi-Fi card driver (MediaTek MT7921E) will not boot up correctly if firmware is not available. This can be resolved by configuring the driver to be a module, or by including the firmware in the initramfs.
Processor type and features --->
[*] AMD ACPI2Platform devices support
[*] Machine Check / overheating reporting
[*] AMD MCE features
Performance monitoring --->
<*> Intel/AMD rapl performance events
<*> AMD Processor Power Reporting Mechanism
<*> AMD Uncore performance events
Device Drivers --->
<*> Hardware Monitoring support --->
<*> AMD Family 10h+ temperature sensor
[*] Watchdog Timer Support --->
<*> AMD/ATI SP5100 TCO Timer/Watchdog
[*] HID bus support --->
<*> I2C HID support --->
AMD SFH HID Support --->
<*> AMD Sensor Fusion Hub
<*> EDAC (Error Detection And Correction) reporting --->
<*> Decode MCEs in human-readable form (only on AMD for now)
<*> Output ACPI APEI/GHES BIOS detected errors via EDAC
[*] IOMMU Hardware Support --->
[*] AMD IOMMU support
[*] Generic powercap sysfs driver --->
<*> Intel RAPL Support via MSR Interface
Device Drivers --->
NVME Support --->
<*> NVM Express block device
Device Drivers --->
[*] Network device support --->
[*] Wireless LAN --->
[*] MediaTek devices
<M> MediaTek MT7921E (PCIe) support
[*] Networking support --->
<M> Bluetooth subsystem support --->
[*] Bluetooth High Speed (HS) features
[*] Bluetooth Low Energy (LE) features
Bluetooth device drivers --->
<M> HCI USB driver
[*] MediaTek protocol support
Device Drivers --->
Graphics support --->
<M> AMD GPU
[*] Enable amdgpu support for SI parts
ACP (Audio CoProcessor) Configuration --->
[*] Enable AMD Audio CoProcessor IP support
[*] HSA kernel driver for AMD GPU devices
[*] Enable HMM-based shared virtual memory manager
Frame buffer Devices --->
<*> Support for frame buffer device drivers --->
<*> VGA 16-color graphics support
[*] VESA VGA graphics support
[*] EFI-based Framebuffer Support
Device Drivers --->
I2C Support --->
<*> I2C support
<*> I2C device interface
I2C Hardware Bus Support --->
<*> Intel PIIX4 and compatible (ATI/AMD/Serverworks/Broadcom/SMSC)
<*> Synopsys DesignWare Platform
[*] AMD PSP I2C semaphore support
[*] Pin controllers --->
[*] AMD GPIO pin control
[*] HID bus support --->
<*> Generic HID driver
Special HID drivers --->
<*> HID Multitouch panels
USB HID support --->
<*> USB HID transport layer
<*> I2C HID support --->
<*> HID over I2C transport layer ACPI driver
Device Drivers --->
<*> Unified support for USB4 and Thunderbolt --->
Device Drivers --->
<M> Sound card support --->
<M> Advanced Linux Sound Architecture --->
HD-Audio --->
<M> HD Audio PCI
<M> Build Realtek HD-audio codec support
<M> Build HDMI/DisplayPort HD-audio codec support
<M> ALSA for SoC audio support --->
<M> AMD Audio Coprocessor-v3.x support
<M> AMD Audio Coprocessor - Renoir support
<M> AMD Audio Coprocessor-v5.x I2S support
<M> AMD Audio Coprocessor-v6.x Yellow Carp support
<M> AMD Audio Coprocessor-v6.2 RPL support
<M> AMD Audio Coprocessor-v6.3 Pink Sardine support
[*] Sound Open Firmware Support --->
<M> SOF PCI enumeration support
<M> SOF support for AMD audio DSPs
<M> SOF support for RENOIR
<M> SOF support for VANGOGH
<M> SOF support for REMBRANDT
Device Drivers --->
<M> Multimedia support --->
[ ] Filter media drivers
Media core support --->
<M> Video4Linux core
Media drivers --->
[*] Media USB Adapters --->
<M> USB Video Class (UVC)
Device Drivers --->
[*] USB support --->
<M> USB Modem (CDC ACM) support
Kernel hacking --->
[ ] Filter access to /dev/mem
Setup
Bluetooth
Enable the bluetooth service. See Bluetooth if the service does not exist.
root #
systemctl enable --now bluetooth
Sound
Enable pipewire, pipewire-pulse, and wireplumber. These commands add your user to the pipewire group, enable services for all users (next boot), and start services for your user.
user $
sudo usermod -aG pipewire $(whoami)
user $
sudo systemctl enable --global pipewire{,-pulse}.{service,socket} wireplumber.service
user $
systemctl start --user pipewire{,-pulse}.{service,socket} wireplumber.service
Fingerprint reader
There are a number of fingerprint reader packages but fprintd
is recommended.
root #
emerge --ask sys-auth/fprintd
Fan control
A modified version of fw-fanctl on GitHub, which also includes a version of ectool that allows to control the fans, tracks the temperature better and will speed up fans faster when temperature rises fast. It also tracks changes in the config file, and reloads the config when it changes and contains a script for init.d as well as systemd.
To clone fw-fanctrl:
user $
git clone https://github.com/NAKlama/fw-fanctrl
user $
cd fw-fanctrl
To install (for OpenRC) run inside the cloned directory:
Please review the script and make sure it won't overwrite any files
root #
chmod +x install-initd.sh
root #
./install-initd.sh
To list available fan curves (configured in /etc/fw-fanctrl/config.json):
root #
fw-fanctrl -l
To change to the fan curve lazy
(as an example) run:
root #
fw-fanctrl lazy
CPU Power Control (RyzenAdj)
The current version of sys-power/RyzenAdj (v0.13.0) does not support the Ryzen 7 7840HS, but the current version from github RyzenAdj on GitHub (v0.15.0) does.
To get it working, it needs access to /dev/mem
.
Configuration
Web configuration for input modules
The QMK-based input modules (keyboard, numpad, and macropad) are configurable via https://keyboard.frame.work and the LED matrix is configurable via https://ledmatrix.frame.work once some udev rules are in place; 50-qmk.rules
(sourced from GitHub) for QMK devices and 50-framework.rules
for the LED matrix.
# Atmel DFU
### ATmega16U2
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2fef", TAG+="uaccess"
### ATmega32U2
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff0", TAG+="uaccess"
### ATmega16U4
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff3", TAG+="uaccess"
### ATmega32U4
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff4", TAG+="uaccess"
### AT90USB64
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff9", TAG+="uaccess"
### AT90USB162
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ffa", TAG+="uaccess"
### AT90USB128
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ffb", TAG+="uaccess"
# Input Club
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1c11", ATTRS{idProduct}=="b007", TAG+="uaccess"
# STM32duino
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1eaf", ATTRS{idProduct}=="0003", TAG+="uaccess"
# STM32 DFU
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", TAG+="uaccess"
# BootloadHID
SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05df", TAG+="uaccess"
# USBAspLoader
SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05dc", TAG+="uaccess"
# USBtinyISP
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1782", ATTRS{idProduct}=="0c9f", TAG+="uaccess"
# ModemManager should ignore the following devices
# Atmel SAM-BA (Massdrop)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="6124", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
# Caterina (Pro Micro)
## pid.codes shared PID
### Keyboardio Atreus 2 Bootloader
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1209", ATTRS{idProduct}=="2302", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
## Spark Fun Electronics
### Pro Micro 3V3/8MHz
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b4f", ATTRS{idProduct}=="9203", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
### Pro Micro 5V/16MHz
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b4f", ATTRS{idProduct}=="9205", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
### LilyPad 3V3/8MHz (and some Pro Micro clones)
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b4f", ATTRS{idProduct}=="9207", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
## Pololu Electronics
### A-Star 32U4
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1ffb", ATTRS{idProduct}=="0101", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
## Arduino SA
### Leonardo
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2341", ATTRS{idProduct}=="0036", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
### Micro
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2341", ATTRS{idProduct}=="0037", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
## Adafruit Industries LLC
### Feather 32U4
SUBSYSTEMS=="usb", ATTRS{idVendor}=="239a", ATTRS{idProduct}=="000c", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
### ItsyBitsy 32U4 3V3/8MHz
SUBSYSTEMS=="usb", ATTRS{idVendor}=="239a", ATTRS{idProduct}=="000d", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
### ItsyBitsy 32U4 5V/16MHz
SUBSYSTEMS=="usb", ATTRS{idVendor}=="239a", ATTRS{idProduct}=="000e", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
## dog hunter AG
### Leonardo
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2a03", ATTRS{idProduct}=="0036", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
### Micro
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2a03", ATTRS{idProduct}=="0037", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
# hid_listen
KERNEL=="hidraw*", MODE="0660", GROUP="plugdev", TAG+="uaccess", TAG+="udev-acl"
# hid bootloaders
## QMK HID
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2067", TAG+="uaccess"
## PJRC's HalfKay
SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="0478", TAG+="uaccess"
# APM32 DFU
SUBSYSTEMS=="usb", ATTRS{idVendor}=="314b", ATTRS{idProduct}=="0106", TAG+="uaccess"
# GD32V DFU
SUBSYSTEMS=="usb", ATTRS{idVendor}=="28e9", ATTRS{idProduct}=="0189", TAG+="uaccess"
# WB32 DFU
SUBSYSTEMS=="usb", ATTRS{idVendor}=="342d", ATTRS{idProduct}=="dfa0", TAG+="uaccess"
# LED Matrix, ModemManager should ignore
SUBSYSTEMS=="usb", ATTRS{idVendor}=="32ac", ATTRS{idProduct}=="0020", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
Once one or both of these files have been added, run the following:
root #
udevadm control --reload-rules
root #
udevadm trigger
See also
- Framework Expansion Cards
- Framework Laptop 13 — a highly modular and repairable 13 inch laptop