Repository navigation
Apple Driver Input
Abdelkader Boudih edited this page Aug 24, 2026
·
3 revisions
Upstream status: yes, across all generations. This is a FreeBSD success story: every input attachment Apple used between 2006 and 2020 has an upstream driver.
flowchart TD
A[Mac generation] --> B{"How is the<br/>topcase attached?"}
B -->|"2006 to 2012"| USB1["Plain USB HID keyboard<br/>+ atp(4) trackpad"]
B -->|"2013 to 2015"| USB2["USB Wellspring<br/>wsp(4) trackpad<br/>(or hid: bcm5974)"]
B -->|"2015 to 2017<br/>(MacBook8,1, 12,x, 13,x, 14,x)"| SPI["HID over SPI<br/>atopcase(4) + intelspi"]
B -->|"2018 to 2020 (T2)"| T2["USB on apple_bce VHCI<br/>then normal usbhid"]
style USB1 fill:#1a7a3a,color:#fff
style USB2 fill:#1a7a3a,color:#fff
style SPI fill:#1a7a3a,color:#fff
style T2 fill:#8a6d1a,color:#fff
| Driver | Covers | Notes |
|---|---|---|
| atp(4) | pre-2013 USB trackpads (Fountain/Geyser) | upstream since forever |
| wsp(4) | 2013 to 2015 USB Wellspring trackpads | multitouch gestures |
| bcm5974 (hid) | same hardware via the hid(4) stack | modern path with hidmap |
| atopcase(4) | HID over SPI topcases | landed 2023-08 (64fbda90da1b), includes keyboard backlight via backlight(9) |
| apple_bce_vhci | T2 keyboards/trackpads as virtual USB | landed 2026-06, per-model validation pending |
| hkbd / hms / hmt | generic HID stack on top of any of the above | enable hw.usb.usbhid.enable=1 for the hid path |
atopcase(4) sits on intelspi (the Intel LPSS SPI controller) and uses ACPI
GPE interrupts. The Apple firmware only wires those up for hosts that
answer _OSI("Darwin"), so set hw.acpi.install_interface="Darwin" in
loader.conf or the topcase stays silent; the driver source and man page
BUGS section document this against MacBookPro12,1 and 14,1. Apple Silicon
SPI glue for the same protocol is in development out-of-tree, not yet in
FreeBSD.
- External Apple USB keyboards work everywhere, including the aluminum models with the media-key fn layer.
- On SPI models, if the internal keyboard is dead at the loader, boot with an external keyboard and check that intelspi attached; the topcase is invisible without it.
- T2 models: input arrives only after apple_bce loads. Keep a USB keyboard around for the installer until VHCI attach is validated per model.
Back to Apple Hardware.