mirror of
https://github.com/NixOS/nixos-hardware
synced 2024-12-24 18:49:45 +01:00
update macbookpro14,1 to 24.01 (2024)
This commit is contained in:
parent
3fff0d97d1
commit
c3e48cbd88
2 changed files with 97 additions and 50 deletions
|
@ -1,17 +1,26 @@
|
|||
# MacBook Pro 14,1
|
||||
# MacBook Pro 14,1, NixOS 24.01 (2024)
|
||||
|
||||
## Audio
|
||||
|
||||
Audio is a lost cause. Bribe an Apple or Cirrus engineer for the datasheet. ;)
|
||||
|
||||
## Thunderbolt
|
||||
|
||||
The thunderbolt module will oops upon system resume, and subsequently refuse to work until next reboot.
|
||||
|
||||
## Suspend/Resume
|
||||
|
||||
The d3cold state needs to be disabled on the NVME controller for it to wake up.
|
||||
[ ] Still broken, use usb/hdmi instead, nixos pkg needed: https://github.com/davidjo/snd_hda_macbookpro
|
||||
|
||||
## Bluetooth
|
||||
The Bluetooth UART (/dev/ttyS0) is created and then deleted by udev in early boot.
|
||||
Hack around it by reloading the 8250_dw module, causing it to be re-created.
|
||||
[ ] Still broken, even (hacky) workaround does not work any more with latest driver updates
|
||||
|
||||
## Touchpad
|
||||
[x] Working, including 'disable while typing' usable quirk
|
||||
|
||||
## Thunderbolt
|
||||
[x] Working
|
||||
|
||||
## NVME
|
||||
[x] Working, older NVME / Controller may need workaround for resume
|
||||
|
||||
## Suspend/Resume
|
||||
[ ] Thunderbolt, WIFI, NVME may still need reboot (sometimes).
|
||||
|
||||
## Wifi
|
||||
[x] Working (2,4Ghz & 5Ghz supported), WEP3 currently broken b/c old brcm fw
|
||||
|
||||
## Resources
|
||||
- https://github.com/Dunedan/mbp-2016-linux?tab=readme-ov-file
|
||||
- https://gist.github.com/roadrunner2/1289542a748d9a104e7baec6a92f9cd7
|
||||
|
|
|
@ -1,51 +1,89 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
imports = [
|
||||
../.
|
||||
../../../common/cpu/intel/kaby-lake
|
||||
../../../common/gpu/intel
|
||||
../../../common/hidpi.nix
|
||||
../../../common/pc/laptop
|
||||
../../../common/pc/laptop/ssd
|
||||
../../../common/pc/laptop/acpi_call.nix
|
||||
];
|
||||
|
||||
##
|
||||
# Make the keyboard work in stage1
|
||||
# Make the keyboard work in stage1, enable iommu
|
||||
# https://www.kernelconfig.io/config_keyboard_applespi
|
||||
##
|
||||
boot.initrd.kernelModules = [ "applespi" "spi_pxa2xx_platform" "intel_lpss_pci" "applesmc" ];
|
||||
|
||||
boot.kernelPackages = lib.mkIf (lib.versionOlder pkgs.linux.version "6.0") pkgs.linuxPackages_latest;
|
||||
|
||||
##
|
||||
# Disable d3cold on the NVME controller so the machine can actually
|
||||
# wake up.
|
||||
# https://github.com/Dunedan/mbp-2016-linux
|
||||
##
|
||||
systemd.services.disable-nvme-d3cold = {
|
||||
description = "Disables d3cold on the NVME controller";
|
||||
before = [ "suspend.target" ];
|
||||
path = [ pkgs.bash pkgs.coreutils ];
|
||||
|
||||
serviceConfig.Type = "oneshot";
|
||||
serviceConfig.ExecStart = "${./disable-nvme-d3cold.sh}";
|
||||
serviceConfig.TimeoutSec = 0;
|
||||
|
||||
wantedBy = [ "multi-user.target" "suspend.target" ];
|
||||
boot = {
|
||||
initrd.kernelModules = ["applespi" "spi_pxa2xx_platform" "intel_lpss_pci" "applesmc" ];
|
||||
kernelParams = [ "intel_iommu=on" ];
|
||||
kernelPackages = lib.mkIf (lib.versionOlder pkgs.linux.version "6.0") pkgs.linuxPackages_latest;
|
||||
};
|
||||
|
||||
##
|
||||
# Touchpad quirks to make "disable-while-typing" actually work
|
||||
services.libinput.enable = true;
|
||||
environment.etc."libinput/local-overrides.quirks".text = ''
|
||||
[MacBook(Pro) SPI Touchpads]
|
||||
MatchName=*Apple SPI Touchpad*
|
||||
ModelAppleTouchpad=1
|
||||
AttrTouchSizeRange=200:150
|
||||
AttrPalmSizeThreshold=1100
|
||||
|
||||
[MacBook(Pro) SPI Keyboards]
|
||||
MatchName=*Apple SPI Keyboard*
|
||||
AttrKeyboardIntegration=internal
|
||||
|
||||
[MacBookPro Touchbar]
|
||||
MatchBus=usb
|
||||
MatchVendor=0x05AC
|
||||
MatchProduct=0x8600
|
||||
AttrKeyboardIntegration=internal
|
||||
'';
|
||||
|
||||
# Wifi, CPU Microcode FW updates
|
||||
networking.enableB43Firmware = lib.mkDefault true;
|
||||
hardware = {
|
||||
enableRedistributableFirmware = lib.mkDefault true;
|
||||
cpu.intel.updateMicrocode = lib.mkDefault true;
|
||||
};
|
||||
|
||||
# Bluetooth, only needed if kernel lacks support - custom kernel build
|
||||
# boot.kernelPatches = [
|
||||
# {
|
||||
# name = "bcrm-config";
|
||||
# patch = null;
|
||||
# extraConfig = ''
|
||||
# BT_HCIUART_BCM y '';
|
||||
# }
|
||||
# ];
|
||||
|
||||
## [Workaround seems not to work anymore! Any Ideas?]
|
||||
# For some reason /dev/ttyS0 is created, and then removed by udev. We need this
|
||||
# for bluetooth, and the only way to get it again is to reload 8502_dw. Luckily,
|
||||
# nothing else uses it.
|
||||
##
|
||||
# systemd.services.btattach-bcm2e7c = lib.mkIf config.hardware.bluetooth.enable {
|
||||
# before = [ "bluetooth.target" ];
|
||||
# after = [ "sys-devices-platform-serial8250-tty-ttyS1.device" ];
|
||||
# path = [ pkgs.bash pkgs.kmod pkgs.bluez ];
|
||||
# serviceConfig.Type = "simple";
|
||||
# serviceConfig.ExecStart = "${./btfix.sh}";
|
||||
# wantedBy = [ "multi-user.target" ];
|
||||
# };
|
||||
|
||||
## [Enable only if needed!]
|
||||
# Disable d3cold on older NVME controller, only if needed
|
||||
# https://github.com/Dunedan/mbp-2016-linux
|
||||
##
|
||||
systemd.services.btattach-bcm2e7c = lib.mkIf config.hardware.bluetooth.enable {
|
||||
before = [ "bluetooth.target" ];
|
||||
|
||||
# Hacky, as it's a different device, but this always comes after ttyS0
|
||||
after = [ "sys-devices-platform-serial8250-tty-ttyS1.device" ];
|
||||
path = [ pkgs.bash pkgs.kmod pkgs.bluez ];
|
||||
|
||||
serviceConfig.Type = "simple";
|
||||
serviceConfig.ExecStart = "${./btfix.sh}";
|
||||
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
};
|
||||
#systemd.services.disable-nvme-d3cold = {
|
||||
# description = "Disables d3cold on the NVME controller";
|
||||
# before = [ "suspend.target" ];
|
||||
# path = [ pkgs.bash pkgs.coreutils ];
|
||||
# serviceConfig.Type = "oneshot";
|
||||
# serviceConfig.ExecStart = "${./disable-nvme-d3cold.sh}";
|
||||
# serviceConfig.TimeoutSec = 0;
|
||||
# wantedBy = [ "multi-user.target" "suspend.target" ];
|
||||
#};
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue