Skip to content

Apple Driver Input

Abdelkader Boudih edited this page Aug 24, 2026 · 3 revisions

Keyboard and Trackpad

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
Loading

Drivers

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

SPI topcase specifics

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.

Practical notes for the wiki

  • 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.

Clone this wiki locally