Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Linux on MacBook Pro Late 2016 and Mid 2017 (with Touchbar)

Introduction

This is about documenting getting Linux running on the late 2016 and mid 2017 MPB's; the focus is mostly on the MacBookPro13,3 and MacBookPro14,3 (15inch models), but I try to make it relevant and provide information for MacBookPro13,1, MacBookPro13,2, MacBookPro14,1, and MacBookPro14,2 (13inch models) too. I'm currently using Fedora 27, but most the things should be valid for other recent distros even if the details differ. The kernel version is 4.14.x (after latest update).

The state of linux on the MBP (with particular focus on MacBookPro13,2) is also being tracked on https://github.com/Dunedan/mbp-2016-linux . And for Ubuntu users there are a couple tutorials (here and here) focused on that distro and the MacBook.

Note: For those who have followed these instructions ealier, and in particular for those who have had problems with the custom DSDT, modifying the DSDT is not necessary anymore - see the updated instructions below and make sure to update your clone of the roadrunner2/macbook12-spi-driver repo to get the latest drivers.

Summary Of Current State

What works

  • Booting (i.e Grub etc)
  • Recognizes disk on all models (older kernels may need patch for some models, though)
  • Keyboard, touchpad, and basic touchbar functionality
  • HiDPI detection
  • Accelerated video
  • Screen brightness control
  • Keyboard backlight
  • USB
  • Sensors (install lm_sensors package)
  • Camera
  • Bluetooth (older kernels need patches)
  • WiFi on MBP13,1 and MBP14,1
  • Thunderbolt
  • DisplayPort

What doesn't work

  • WiFi on ,2 and ,3 models (though some folks have had success with some of the workarounds)
  • Suspend/Resume (works partially on 13,3 models)
  • Audio (two cards show up, and intel driver is loaded, but no sound)

Details

Partitioning

If you want to keep your MacOS installation (generally a good idea if you can afford the disk space, because that's the only way to get/install firmware updates), then first boot into MacOS and resize the partition there, creating a new partition for the Linux installation. If you also want to have a Windows partition, see this comment below.

Warning: If you're not going to keep MacOS, either back up the EFI System Partition (and restore its contents to the new ESP after installation) or leave it intact (i.e. don't do a full disk install, but just use the space after the ESP). This partition (it's the first one) contains drivers/firmware/etc needed by Apple's EFI loader during boot, in particular to initialize the Touchbar.

Initial Installation

Since the internal keyboard and touchpad won't work until you have built and loaded the drivers, you'll need to plug in an external USB keyboard to do the initial setup and installation.

Booting

If you're booting a 4.11 or later kernel, no special params or patches are needed.

If you're booting a kernel < 4.11 and have a MacBookPro13,1, MacBookPro13,2, MacBookPro14,1 or MacBookPro14,2 (13inch models), which have the Apple NVMe controller, you'll need the kernel-nvme-controller.patch from this gist in order for the disk to be correctly recognized (MacBookPro13,3 uses a Samsung NVMe controller which is automatically detected correctly). Alternatively, instead of patching you can also do the following (for distros using something other than dracut to create the initrd you'll need to adjust the 2nd and 3rd lines appropriately):

echo 'install nvme /sbin/modprobe --ignore-install nvme $CMDLINE_OPTS; echo 106b 2003 > /sys/bus/pci/drivers/nvme/new_id' | sudo tee /etc/modprobe.d/nvme.conf
echo 'force_drivers+="nvme"' | sudo tee /etc/dracut.conf.d/disk.conf
sudo dracut --force --kver <kernel-version>

If you're booting a kernel < 4.10 then you'll need the following kernel param to boot properly: intremap=nosid. E.g.

sudo sed -i 's/\(GRUB_CMDLINE_LINUX=.*\)"/\1 intremap=nosid"/' /etc/default/grub
sudo grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg

Lastly, if you are booting a live CD or similar with a kernel < 4.9 then you will also need to add the nomodeset kernel parameter to your kernel line; you will then not have proper HiDPI detection or accelerated graphics.

Keyboard/Touchpad/Touchbar

For this we need the drivers from https://github.com/roadrunner2/macbook12-spi-driver.git (a clone of https://github.com/cb22/macbook12-spi-driver which includes a preliminary touchbar driver and keyboard fixes). The following commands set this up.

First some extra packages:

sudo dnf install git kernel-devel dkms

Next we need to prepare for the modules to be included in the ramdisk (so they are loaded early during boot):

cat <<EOF | sudo tee /etc/dracut.conf.d/keyboard.conf
# load all drivers needed for the keyboard+touchpad
add_drivers+="applespi intel_lpss_pci spi_pxa2xx_platform apple-ib-tb"
EOF

On distros using mkinitramfs instead of dracut you'll want to do the following instead:

cat <<EOF | sudo tee -a /etc/initramfs-tools/modules
# drivers for keyboard+touchpad
applespi
apple-ib-tb
intel_lpss_pci
spi_pxa2xx_platform
EOF

Now get and build the drivers:

git clone https://github.com/roadrunner2/macbook12-spi-driver.git
pushd macbook12-spi-driver
git checkout touchbar-driver-hid-driver
sudo ln -s `pwd` /usr/src/applespi-0.1
sudo dkms install applespi/0.1
popd

Next we need to set the proper dpi for the touchpad and adjust the sensitivity (download the 61-evdev-local.hwdb, 61-libinput-local.hwdb, and local-overrides.quirks from this gist - the 61-evdev-local.hwdb is only needed for udev < 242, the 61-libinput-local.hwdb is needed for libinput versions < 1.12, the local-overrides.quirks for libinput versions >= 1.12):

# if 'udevadm --version' less than 242:
sudo cp ...the-downloaded-61-evdev-local.hwdb... /etc/udev/hwdb.d/61-evdev-local.hwdb
# if 'libinput --version' less than 1.12:
sudo cp ...the-downloaded-61-libinput-local.hwdb... /etc/udev/hwdb.d/61-libinput-local.hwdb
# if 'libinput --version' 1.12 or later:
sudo cp ...the-downloaded-local-overrides.quirks... /etc/libinput/local-overrides.quirks
sudo systemd-hwdb update

You can test the drivers by loading them and their dependencies:

sudo modprobe intel_lpss_pci spi_pxa2xx_platform applespi apple-ib-tb

Finally, reboot to make sure it all works correctly:

sudo reboot

Screen Brightness Control

Screen brightness control works out of the box on MacBookPro13,1 and MacBookPro13,2 (all kernels), and MacBookPro13,3 with recent kernels, but requires a kernel patch on MacBookPro13,3 with older kernels (see also Dunedan/mbp-2016-linux#2). Specifically, if you have any of these kernels you need to patch: < 4.14, 4.14 - 4.14.21, 4.15 - v4.15.5 (i.e. the issue was fixed in 4.14.21, 4.15.5, and 4.16). The following will create and install the patched apple-gmux:

mkdir apple-gmux
pushd apple-gmux

curl -o apple-gmux.patch 'https://bugzilla.kernel.org/attachment.cgi?id=192601'
curl -o apple-gmux.c 'https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/plain/drivers/platform/x86/apple-gmux.c?id=refs/tags/v4.9.11'

patch < apple-gmux.patch

echo -e '
obj-m += apple-gmux.o

all:
\tmake -C /lib/modules/`uname -r`/build M=`pwd` modules
' > Makefile
make

mod=$(ls /lib/modules/`uname -r`/kernel/drivers/platform/x86/apple-gmux.ko*)
sudo mv $mod{,.orig}
sudo cp apple-gmux.ko /lib/modules/`uname -r`/kernel/drivers/platform/x86/
sudo depmod

popd

sudo reboot

Other

The touchpad defaults to using the bottom-left corner for right-clicks - to get 2-finger right click, install the Gnome tweak tool and change it in there.

WiFi

WiFi works fine on MBP13,1 and MBP14,1. But the other models use a different chipset, and while on those the brcmfmac driver is automatically loaded, there are a number of issues with it, making it for all practical purposes unusable:

  • it only does 2.4GHz - no 5GHz channels are visible
  • it has an extremely low sensitivity - you must be within a few feet of the base station, and even at 5 feet distance it shows a weak signal.
  • it stops working after 10 or 15 or so minutes; turning WiFi off, waiting a several minutes, and then turning it back on generally gets it working again. Maybe a thermal issue?

Bug report: https://bugzilla.kernel.org/show_bug.cgi?id=193121

In the mean time some folks have that one or both of the following hacks make the WiFi work well enough them (personally, while they do improve the situation, I have not found them to be sufficient enough for actual work, i.e. I still see many packet drops and connection failures - YMMV):

  • reduce the transmit power: sudo iwconfig wlp3s0 txpower 10
  • edit the firmware blob (/lib/firmware/brcm/brcmfmac43602-pcie.bin) and modify the regrev and ccode values (see the above bugreport for details)

Display

The amdgpu driver works well and is automatically loaded on MacBookPro13,3. On the 13 inch models the use of the intel Xorg driver may need to be forced (see first comment below).

Using the iGPU (*,3 models only)

The *,3 models have both an iGPU (intel) as well as a dGPU (amd). By default the dGPU is used. While this works well, it does use a lot more power than the iGPU. The following will set things up so the machine uses the iGPU upon boot (but see the caveats below):

mkdir gpu-switch
cd gpu-switch

# Enable the iGPU at boot
curl -O -L https://github.com/0xbb/apple_set_os.efi/releases/download/v1/apple_set_os.efi

sudo mkdir /boot/efi/EFI/custom
sudo cp apple_set_os.efi /boot/efi/EFI/custom

config_dir=$(dirname $(sudo find /boot -name grub.cfg))
cat <<"EOF" | sudo tee "$config_dir"/custom.cfg > /dev/null
insmod chain
search --no-floppy --set=cuspart --file /EFI/custom/apple_set_os.efi
chainloader (${cuspart})/EFI/custom/apple_set_os.efi
boot
EOF

# Switch the default gpu on boot to iGPU
curl -O -L https://raw.githubusercontent.com/0xbb/gpu-switch/master/gpu-switch
chmod +x gpu-switch

./gpu-switch -i

# Service to disable the dGPU
cat <<EOF | sudo tee /etc/systemd/system/disable-dgpu.service > /dev/null
[Unit]
Description=Disable the dGPU

[Service]
Type=oneshot
ExecStart=/bin/sh -c 'echo OFF > /sys/kernel/debug/vgaswitcheroo/switch'
ExecStop=/bin/sh -c 'echo ON > /sys/kernel/debug/vgaswitcheroo/switch'
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
EOF

sudo chmod 644 /etc/systemd/system/disable-dgpu.service

cd -

Once you then disable the dGPU this will save save you about 5W - 6W, or ⅓ of the power. However, there are several caveats to aware of:

  • The dGPU needs to be manually disabled after each boot and first login with sudo systemctl start disable-dgpu - trying to have it run automatically at boot via systemctl enable disable-gpu leads to hangs.
  • In order to use an external display (via Thunderbolt/DisplayPort) the dGPU needs to be enabled again (the iGPU is not wired up for that): sudo systemctl disable disable-dgpu
  • The amd driver does not handle disabling and re-enabling the of the dGPU very well. In particular system shutdown may hang or just take several minutes, and you may see various errors in the kernel logs when disabling and re-enabling.
  • If you boot into MacOS, then when booting back into Linux you'll need to change the default gpu back to the iGPU again: boot, run gpu-switch/gpu-switch -i, and reboot.

Camera

MacBookPro13,3/14,3: works out of the box on kernels 4.13 and later; on earlier kernels you need the following:

echo "options uvcvideo quirks=0x100" > /etc/modprobe.d/uvcvideo.conf

For MacBookPro[13,14],[12] you need the bcwc_pcie driver (mainline branch) - see also Dunedan/mbp-2016-linux#15.

Bluetooth

As of kernel 4.16 bluetooth works out of the box; older kernels need patches - see Dunedan/mbp-2016-linux#29 (comment) and following discussion for details. But in short you'll need to:

  • Ensure your kernel is configured with CONFIG_BT_HCIUART_BCM=y
  • apply the patches from hci_bcm-4.13, hci_bcm-4.14, or hci_bcm-4.15, depending on whether you have a 4.13 or earlier, 4.14, or 4.15 kernel.
  • build and reboot
  • on 4.14 and earlier apply the service patch from the above comment and start the service as described there (not necessary on 4.15 and later).

Note that as of 4.16 there are still issues on MacBookPro13,1 and MacBookPro14,1 - see the above bug for details on what additional patches are needed.

# MacBook8,1 (2015), MacBook9,1 (2016), MacBook10,1 (2017)
evdev:name:Apple SPI Touchpad:dmi:*:svnAppleInc.:pnMacBook8,1:*
evdev:name:Apple SPI Touchpad:dmi:*:svnAppleInc.:pnMacBook9,1:*
evdev:name:Apple SPI Touchpad:dmi:*:svnAppleInc.:pnMacBook10,1:*
EVDEV_ABS_00=::95
EVDEV_ABS_01=::90
EVDEV_ABS_35=::95
EVDEV_ABS_36=::90
# MacBookPro13,* (Late 2016), MacBookPro14,* (Mid 2017)
evdev:name:Apple SPI Touchpad:dmi:*:svnAppleInc.:pnMacBookPro13,1:*
evdev:name:Apple SPI Touchpad:dmi:*:svnAppleInc.:pnMacBookPro13,2:*
evdev:name:Apple SPI Touchpad:dmi:*:svnAppleInc.:pnMacBookPro14,1:*
evdev:name:Apple SPI Touchpad:dmi:*:svnAppleInc.:pnMacBookPro14,2:*
EVDEV_ABS_00=::96
EVDEV_ABS_01=::94
EVDEV_ABS_35=::96
EVDEV_ABS_36=::94
evdev:name:Apple SPI Touchpad:dmi:*:svnAppleInc.:pnMacBookPro13,3:*
evdev:name:Apple SPI Touchpad:dmi:*:svnAppleInc.:pnMacBookPro14,3:*
EVDEV_ABS_00=::96
EVDEV_ABS_01=::95
EVDEV_ABS_35=::96
EVDEV_ABS_36=::95
libinput:name:*Apple SPI Touchpad*:dmi:*
LIBINPUT_MODEL_APPLE_TOUCHPAD=1
LIBINPUT_ATTR_TOUCH_SIZE_RANGE=200:150
LIBINPUT_ATTR_PALM_SIZE_THRESHOLD=1200
libinput:name:*Apple SPI Keyboard*:dmi:*
LIBINPUT_ATTR_KEYBOARD_INTEGRATION=internal
--- a/drivers/nvme/host/pci.c 2017-01-22 21:49:03.710949755 -0800
+++ b/drivers/nvme/host/pci.c 2017-01-22 21:49:23.490761505 -0800
@@ -2121,6 +2121,7 @@
.driver_data = NVME_QUIRK_DELAY_BEFORE_CHK_RDY, },
{ PCI_DEVICE_CLASS(PCI_CLASS_STORAGE_EXPRESS, 0xffffff) },
{ PCI_DEVICE(PCI_VENDOR_ID_APPLE, 0x2001) },
+ { PCI_DEVICE(PCI_VENDOR_ID_APPLE, 0x2003) },
{ 0, }
};
MODULE_DEVICE_TABLE(pci, nvme_id_table);
[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
@fannullone
Copy link

fannullone commented Aug 14, 2020

Slightly off topic....
I read the Apple announced the development of home grown CPU for their laptop.
Does it mean that we will no longer be able to run linux on new laptops?

@LinuxTom
Copy link

LinuxTom commented Aug 21, 2020

@fannullone
As long as apple doesn't lock the boot loader it should be possible to run gnu linux on them. There are already arm based Linux laptops on the market so in theory it will be possible to run linux on an arm based mac.

@LinuxTom
Copy link

LinuxTom commented Aug 21, 2020

Has any one else had trouble with their touchpad becoming non responsive after a couple weeks of uptime? It still shows up when running libinput list-devices and a usb mouse works just fine? A system restart fixes the issue but is quite an inconvenience.

I am running the 5.4 kernel for reference.

@vxcamiloxv
Copy link

vxcamiloxv commented Aug 21, 2020

@LinuxTom mine say that is 2018

@eth-man
Copy link

eth-man commented Sep 10, 2020

macbook pro 13,2 👍, Arch , kernel 5.8.7, systemd-boot, luks encryption
i was surprised all working very well including the sound device https://github.com/davidjo/snd_hda_macbookpro thanks @vxcamiloxv
has anyone else got this error during boot time ?

[ +0.000546] ACPI: Dynamic OEM Table Load:
[ +0.000013] ACPI Error: AE_ALREADY_EXISTS, SSDT 0xFFFFA1DE2C161000 Table is already loaded (20200528/tbdata-520)
[ +0.000007] fbcon: Taking over console
[ +0.000005] ACPI Error: Aborting method _PR.CPU0.GCAP due to previous error (AE_ALREADY_EXISTS) (20200528/psparse-529)
[ +0.000008] ACPI Error: Aborting method _PR.CPU0._OSC due to previous error (AE_ALREADY_EXISTS) (20200528/psparse-529)
[ +0.000004] ACPI: Marking method _OSC as Serialized because of AE_ALREADY_EXIST

@dvilelaf
Copy link

dvilelaf commented Sep 17, 2020

I can confirm that audio is working using davidjo driver in a Macbook Pro 13,1 with elementary OS 5.1 (Ubuntu 18.04 based) on kernel 5.3.8.

@LinuxTom
Copy link

LinuxTom commented Oct 23, 2020

Hi all,

I am back with an update. A couple of months ago I switched to the 5.8 kernel and the kernel: apple-ibridge APP7777:00: tb: Touchbar deactivated issue persisted. I recently ran updates on my system a couple days ago and I just took it down for a restart today. To my surprise, when I went to login, I noticed my touch bar was working as expected. My only guess is that what ever was changed in the kernel update stopped deactivating the Touchbar?

Kernel before update: 5.8.0-2
Kernel current working: 5.8.11-1

So Manjaro users I would say that if you install the roadrunner/macbook12-spi-driver using dkms and mkinitcpio as long as you are running the up to date 5.8 kernel you can expect a working Touchbar on a 14,3 mbp(15in 2017 model) now.

@notjames
Copy link

notjames commented Oct 23, 2020

Out of curiosity, do we have an updated version of documentation from boot to run for getting Linux to run properly on latest macbook pro machines? I'm probably going to be getting a new macbook soon and I really really really don't want to run osx on it.

@marc-git
Copy link

marc-git commented Nov 13, 2020

Hi @roadrunner2 a couple of questions:
with the new kernels including applespi how does one:

  • enable the touchbar
  • set the keyboard to non-iso so that switched keys (< and ^ on german keyboard) work
  • disable the touchpad while typing (quirks doesn't seem to work)

@fannullone
Copy link

fannullone commented Nov 18, 2020

I have just upgrade my FC33 mac to kernel 5.9.8-200.fc33.x86_64 and the touchbar is not longer working.
This was taken with the last working kernel 5.8.x:

[root@mbp ~]# cat dmesg.5.8 
[    1.874857] applespi: loading out-of-tree module taints kernel.
[    1.874884] applespi: module verification failed: signature and/or required key missing - tainting kernel
[    1.965305] applespi spi-APP000D:00: modeswitch done.
[   13.996990] apple_gmux: Found gmux version 4.0.29 [indexed]
[   14.089872] apple-ibridge-hid 0003:05AC:8600.0002: hiddev96,hidraw1: USB HID v1.01 Device [Apple Inc. iBridge] on usb-0000:00:14.0-3/input3
[   14.170233] usbcore: registered new device driver apple-mfi-fastcharge
[   14.234326] apple-ibridge-hid 0003:05AC:8600.0003: input,hidraw0: USB HID v1.01 Keyboard [Apple Inc. iBridge] on usb-0000:00:14.0-3/input2
[   14.235729] apple-ibridge-hid 0003:05AC:8600.0004: hiddev96,hidraw1: USB HID v1.01 Device [Apple Inc. iBridge] on usb-0000:00:14.0-3/input3
[   14.433256] apple-ibridge-hid 0003:05AC:8600.0003: input,hidraw0: USB HID v1.01 Keyboard [Apple Inc. iBridge] on usb-0000:00:14.0-3/input2
[   14.435478] apple-ibridge-hid 0003:05AC:8600.0004: hiddev96,hidraw1: USB HID v1.01 Device [Apple Inc. iBridge] on usb-0000:00:14.0-3/input3
[   14.557286] apple-ibridge-hid 0003:05AC:8600.0003: input,hidraw0: USB HID v1.01 Keyboard [Apple Inc. iBridge] on usb-0000:00:14.0-3/input2
[   14.558244] apple-ibridge-hid 0003:05AC:8600.0004: hiddev96,hidraw1: USB HID v1.01 Device [Apple Inc. iBridge] on usb-0000:00:14.0-3/input3
[   14.671064] apple-ibridge APP7777:00: tb: Touchbar deactivated
[   14.736512] apple-ibridge-hid 0003:05AC:8600.0005: input,hidraw0: USB HID v1.01 Keyboard [Apple Inc. iBridge] on usb-0000:00:14.0-3/input2
[   14.739601] apple-ibridge-hid 0003:05AC:8600.0006: hiddev96,hidraw1: USB HID v1.01 Device [Apple Inc. iBridge] on usb-0000:00:14.0-3/input3
[   14.807100] applesmc: key=902 fan=2 temp=46 index=45 acc=0 lux=0 kbd=0
[   14.807502] applesmc applesmc.768: hwmon_device_register() is deprecated. Please convert the driver to use hwmon_device_register_with_info().
[root@mbp ~]# 

While this is taken with not working kernel 5.9.8-200.fc33.x86_64:
[root@mbp ~]# dmesg | grep apple
[ 2.056531] applespi spi-APP000D:00: modeswitch done.
[ 13.775689] apple_gmux: Found gmux version 4.0.29 [indexed]
[ 13.988559] usbcore: registered new device driver apple-mfi-fastcharge
[ 14.597813] applesmc: key=902 fan=2 temp=46 index=45 acc=0 lux=0 kbd=0
[ 14.598027] applesmc applesmc.768: hwmon_device_register() is deprecated. Please convert the driver to use hwmon_device_register_with_info().

[root@mbp ~]# lsmod | grep -i apple
applesmc 24576 0
apple_mfi_fastcharge 20480 0
apple_gmux 20480 0
apple_bl 20480 1 apple_gmux
applespi 40960 0
video 53248 2 apple_gmux,i915

Any idea how to fix it?
Which is the right module to handle the touchbar

@fannullone
Copy link

fannullone commented Nov 21, 2020

following-up from my previous post, it looks like new 5.9.* are not building the apple-ib-tb module.
Does anybody know why? and how to fix it?

[root@mbp modules]# find . -name "apple*"
./5.9.8-200.fc33.x86_64/kernel/net/appletalk
./5.9.8-200.fc33.x86_64/kernel/drivers/usb/misc/appledisplay.ko.xz
./5.9.8-200.fc33.x86_64/kernel/drivers/usb/misc/apple-mfi-fastcharge.ko.xz
./5.9.8-200.fc33.x86_64/kernel/drivers/hwmon/applesmc.ko.xz
./5.9.8-200.fc33.x86_64/kernel/drivers/input/keyboard/applespi.ko.xz
./5.9.8-200.fc33.x86_64/kernel/drivers/input/mouse/appletouch.ko.xz
./5.9.8-200.fc33.x86_64/kernel/drivers/video/backlight/apple_bl.ko.xz
./5.9.8-200.fc33.x86_64/kernel/drivers/net/appletalk
./5.9.8-200.fc33.x86_64/kernel/drivers/platform/x86/apple-gmux.ko.xz
./5.9.8-200.fc33.x86_64/extra/net/appletalk
./5.9.8-200.fc33.x86_64/extra/net/appletalk/appletalk.ko.xz
./5.9.8-200.fc33.x86_64/extra/drivers/net/appletalk
./5.8.18-300.fc33.x86_64/kernel/net/appletalk
./5.8.18-300.fc33.x86_64/kernel/drivers/usb/misc/appledisplay.ko.xz
./5.8.18-300.fc33.x86_64/kernel/drivers/usb/misc/apple-mfi-fastcharge.ko.xz
./5.8.18-300.fc33.x86_64/kernel/drivers/hwmon/applesmc.ko.xz
./5.8.18-300.fc33.x86_64/kernel/drivers/input/keyboard/applespi.ko.xz
./5.8.18-300.fc33.x86_64/kernel/drivers/input/mouse/appletouch.ko.xz
./5.8.18-300.fc33.x86_64/kernel/drivers/video/backlight/apple_bl.ko.xz
./5.8.18-300.fc33.x86_64/kernel/drivers/net/appletalk
./5.8.18-300.fc33.x86_64/kernel/drivers/platform/x86/apple-gmux.ko.xz
./5.8.18-300.fc33.x86_64/extra/macbook12-spi-driver/apple-ibridge.ko
./5.8.18-300.fc33.x86_64/extra/macbook12-spi-driver/applespi.ko
./5.8.18-300.fc33.x86_64/extra/macbook12-spi-driver/apple-ib-als.ko
./5.8.18-300.fc33.x86_64/extra/macbook12-spi-driver/apple-ib-tb.ko

./5.8.18-300.fc33.x86_64/extra/net/appletalk
./5.8.18-300.fc33.x86_64/extra/net/appletalk/appletalk.ko.xz
./5.8.18-300.fc33.x86_64/extra/drivers/net/appletalk

@fannullone
Copy link

fannullone commented Nov 21, 2020

following-up from my previous post, it looks like new 5.9.* are not building the apple-ib-tb module.
Does anybody know why? and how to fix it?

[root@mbp modules]# find . -name "apple*"
./5.9.8-200.fc33.x86_64/kernel/net/appletalk
./5.9.8-200.fc33.x86_64/kernel/drivers/usb/misc/appledisplay.ko.xz
./5.9.8-200.fc33.x86_64/kernel/drivers/usb/misc/apple-mfi-fastcharge.ko.xz
./5.9.8-200.fc33.x86_64/kernel/drivers/hwmon/applesmc.ko.xz
./5.9.8-200.fc33.x86_64/kernel/drivers/input/keyboard/applespi.ko.xz
./5.9.8-200.fc33.x86_64/kernel/drivers/input/mouse/appletouch.ko.xz
./5.9.8-200.fc33.x86_64/kernel/drivers/video/backlight/apple_bl.ko.xz
./5.9.8-200.fc33.x86_64/kernel/drivers/net/appletalk
./5.9.8-200.fc33.x86_64/kernel/drivers/platform/x86/apple-gmux.ko.xz
./5.9.8-200.fc33.x86_64/extra/net/appletalk
./5.9.8-200.fc33.x86_64/extra/net/appletalk/appletalk.ko.xz
./5.9.8-200.fc33.x86_64/extra/drivers/net/appletalk
./5.8.18-300.fc33.x86_64/kernel/net/appletalk
./5.8.18-300.fc33.x86_64/kernel/drivers/usb/misc/appledisplay.ko.xz
./5.8.18-300.fc33.x86_64/kernel/drivers/usb/misc/apple-mfi-fastcharge.ko.xz
./5.8.18-300.fc33.x86_64/kernel/drivers/hwmon/applesmc.ko.xz
./5.8.18-300.fc33.x86_64/kernel/drivers/input/keyboard/applespi.ko.xz
./5.8.18-300.fc33.x86_64/kernel/drivers/input/mouse/appletouch.ko.xz
./5.8.18-300.fc33.x86_64/kernel/drivers/video/backlight/apple_bl.ko.xz
./5.8.18-300.fc33.x86_64/kernel/drivers/net/appletalk
./5.8.18-300.fc33.x86_64/kernel/drivers/platform/x86/apple-gmux.ko.xz
./5.8.18-300.fc33.x86_64/extra/macbook12-spi-driver/apple-ibridge.ko
./5.8.18-300.fc33.x86_64/extra/macbook12-spi-driver/applespi.ko
./5.8.18-300.fc33.x86_64/extra/macbook12-spi-driver/apple-ib-als.ko
./5.8.18-300.fc33.x86_64/extra/macbook12-spi-driver/apple-ib-tb.ko

./5.8.18-300.fc33.x86_64/extra/net/appletalk
./5.8.18-300.fc33.x86_64/extra/net/appletalk/appletalk.ko.xz
./5.8.18-300.fc33.x86_64/extra/drivers/net/appletalk

@fannullone
Copy link

fannullone commented Dec 22, 2020

Can the following be reason?

[mbp ~]$ cat /var/lib/dkms/applespi/0.1/build/make.log
DKMS make.log for applespi-0.1 for kernel 5.9.15-200.fc33.x86_64 (x86_64)
Tue Dec 22 08:26:14 AM CET 2020
make -C /lib/modules/5.9.15-200.fc33.x86_64/build M=/var/lib/dkms/applespi/0.1/build modules
make[1]: Entering directory '/usr/src/kernels/5.9.15-200.fc33.x86_64'
CC [M] /var/lib/dkms/applespi/0.1/build/applespi.o
CC [M] /var/lib/dkms/applespi/0.1/build/apple-ibridge.o
CC [M] /var/lib/dkms/applespi/0.1/build/apple-ib-tb.o
CC [M] /var/lib/dkms/applespi/0.1/build/apple-ib-als.o
/var/lib/dkms/applespi/0.1/build/apple-ib-als.c: In function ‘appleals_config_iio’:
/var/lib/dkms/applespi/0.1/build/apple-ib-als.c:463:29: warning: passing argument 1 of ‘iio_device_alloc’ makes pointer from integer without a cast [-Wint-conversion]
463 | iio_dev = iio_device_alloc(sizeof(als_dev));
| ^~~~~~~~~~~~~~~
| |
| long unsigned int
In file included from ./include/linux/iio/buffer.h:10,
from /var/lib/dkms/applespi/0.1/build/apple-ib-als.c:32:
./include/linux/iio/iio.h:684:49: note: expected ‘struct device *’ but argument is of type ‘long unsigned int’
684 | struct iio_dev *iio_device_alloc(struct device *parent, int sizeof_priv);
| ~~~~~~~~~~~~~~~^~~~~~
/var/lib/dkms/applespi/0.1/build/apple-ib-als.c:463:12: error: too few arguments to function ‘iio_device_alloc’
463 | iio_dev = iio_device_alloc(sizeof(als_dev));
| ^~~~~~~~~~~~~~~~
In file included from ./include/linux/iio/buffer.h:10,
from /var/lib/dkms/applespi/0.1/build/apple-ib-als.c:32:
./include/linux/iio/iio.h:684:17: note: declared here
684 | struct iio_dev *iio_device_alloc(struct device *parent, int sizeof_priv);
| ^~~~~~~~~~~~~~~~
make[2]: *** [scripts/Makefile.build:283: /var/lib/dkms/applespi/0.1/build/apple-ib-als.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [Makefile:1787: /var/lib/dkms/applespi/0.1/build] Error 2
make[1]: Leaving directory '/usr/src/kernels/5.9.15-200.fc33.x86_64'
make: *** [Makefile:16: all] Error 2

@andyholst
Copy link

andyholst commented Dec 30, 2020

Has anyone tried out the Linux Kernel version 5.10.3 yet? I have problem booting on MBP 13,3 model.

@fannullone
Copy link

fannullone commented Jan 2, 2021

Answering to my own post, I could get the touchbar to work again:
roadrunner2/macbook12-spi-driver#42 (comment)

@fannullone
Copy link

fannullone commented Jan 14, 2021

@andyholst
Just upgrade my mbp13,3 to kernel 5.10.6-200 Fedora core 33
So far so good :-)
The workaround listed in my previous post still needed.

@andyholst
Copy link

andyholst commented May 13, 2021

@fannullone
Running Linux Kernel version 5.11.16 and it's working for me with the patch applied from https://github.com/PatrickVerner/macbook12-spi-driver

@davidemaiorca
Copy link

davidemaiorca commented Jul 6, 2021

Hi everybody,
I am on a Macbook 13,2, Ubuntu 20.04, kernel 5.8.0-59 (I tried also other kernels > 5, but the result is the same). So far I managed to make everything work properly (including audio), but the touchbar does not work. I followed all the indications to install the applespi and ibridge drivers. By checking dmesg there seems to be no problem whatsoever but the touchbar is just dead. Applespi also appears when giving lsmod. I also used a pre-modded Ubuntu image (https://nixaid.com/linux-on-macbookpro/) but no luck either.
Any thoughts?
Thank you!

@kezoponk
Copy link

kezoponk commented Aug 13, 2021

FOR YOU PARTICIPATING IN THE DEVELOPMENT OF ALL THESE DRIVERS:
Tried dualboot linux(debian based) on my macbook pro 2017 about 2 years ago and at that time it was horrible to setup and some thinks still didn't work... But a week ago I decided I can't stand macos anymore, don't care to explain why but several reasons... So I decided to use linux as my main system. So I downloaded kali - installed - and woah, this project've come so far and thank all you developers for the amount of work to make it work this good! Seriously, linux on mac works as good as macos now, so you can get the beautiful craftmanship, incredible battery, and retina display WITHOUT MACOS :)))
If you participated - seriously - can't thank you enough

@jamesy0ung
Copy link

jamesy0ung commented Nov 11, 2021

Bluetooth is broken in Fedora 35, MacBookPro 14,3. Touch bar does not work, downloaded packages including correct kernel headers but won't compile.

@sql-sith
Copy link

sql-sith commented Nov 28, 2021

Kudos to @andyholst for mentioning this! I spent a lot of time wondering why I couldn't get roadrunner's patches to work anymore and then I saw that comment and was so very relieved. Thanks!

Running Linux Kernel version 5.11.16 and it's working for me with the patch applied from https://github.com/PatrickVerner/macbook12-spi-driver

@Lucianod28
Copy link

Lucianod28 commented Nov 30, 2021

Has anyone tried using this with dwm? I followed installation instructions but none of the keys work and I'm wondering if its a dwm issue.

@noispirit
Copy link

noispirit commented Apr 3, 2022

Hey so, I was messing with bluetooth, trying to figure the choppy A2DP issue and I found out that our system tries to load a firmware from path /usr/lib/firmware/bcrm/BCM.hcd

I downloaded the bootcamp drivers from Boot Camp Assistant and unzipped the bluetooth driver, finding out several .hcd firmwares available inside, which I started to try placing them in bcrm folder, managing to get a pretty stable A2DP using "BCM4356A2_001.003.015.0041.0089.hcd" as firmware renamed "BCM.hcd". Still have some choppy audio for less than a second every 3 or 4 minutes or while trying to scan other devices while using A2DP, but so far I feel comfortable using my headphones for the first time in years!

Oh, btw, this is a MBP 14,3 with Fedora 35 using last stock kernel.

@stefand
Copy link

stefand commented Apr 3, 2022

Hmm, I have to see if this improves my bluetooth mouse if I use it at the same time as WiFi.

@noispirit
Copy link

noispirit commented Apr 3, 2022

Theres another BCM4356A2 firmware ending in 84.hcd that might work too, but I haven't tested it.

@Cliffback
Copy link

Cliffback commented May 20, 2022

I installed the touchbar drivers using the method listed above, using PatrickVerners updated version (https://github.com/PatrickVerner/macbook12-spi-driver.git), because the one used doesnt work with newer kernels. The installation works fine, but, the TouchBar only appears for two seconds upon boot, but dissappears before reaching the login screen. Any idea to how I can get it to stay there permanently?

@bor-lin
Copy link

bor-lin commented May 21, 2022

I hope that Touch Bar will be well implemented in mainline kernel 5.18:
https://www.phoronix.com/scan.php?page=news_item&px=Apple-Keyboards-Linux-5.18

I see in the 5.18 sources:

input/keyboard/Kconfig: or any MacBookPro13,* or MacBookPro14,*.
.

For the time being I'am using kernel 5.7.x

@Cliffback
Copy link

Cliffback commented May 21, 2022

Let’s hope it gets an official fix in 5.18!

However I actually just got it to work on 5.17, the issue was with usbmuxd so you have to unbind and bind those drivers after boot.

echo '1-3' | sudo tee /sys/bus/usb/drivers/usb/unbind
echo '1-3' | sudo tee /sys/bus/usb/drivers/usb/bind

To do it automatically each boot I did what’s described in this comment: roadrunner2/macbook12-spi-driver#42 (comment)

@terentev
Copy link

terentev commented May 23, 2022

Ubuntu 20.04 Macbook 12 touchpad is too sensitive
Create file /etc/libinput/local-overrides.quirks

[MacBook(Pro) SPI Touchpads]
MatchName=Apple SPI Touchpad
ModelAppleTouchpad=1
AttrKeyboardIntegration=internal
AttrTouchSizeRange=200:150
AttrPalmSizeThreshold=1200
[MacBook(Pro) SPI Keyboards]
MatchName=Apple SPI Keyboard
AttrKeyboardIntegration=internal

@Cliffback
Copy link

Cliffback commented May 23, 2022

Started working on repackaging the ISO for Pop!_OS 22.04 for my MacBook Pro 15" Late 2016 (13,3), to avoid doing all these steps manually, and also get internet during installation. If anyone want to have a look, I uploaded the first release yesterday:
https://github.com/Cliffback/POP_OS_22.04-mbp-2016

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment