ATP(4)
ATP π β¨
okay bestie, gather round, because this is the Apple touchpad driver and honestly? it's giving β¨unified chaosβ¨ but in a good way. this is a page from the Kernel Interfaces Manual (section 4, device drivers, iykyk), so buckle up π
πΈ SYNOPSIS πΈ
so like, there are two ways to get this driver into your life. pick your fighter π
option one: bake it into the kernel π«Ά β drop these lines into your kernel configuration file:
device atp
device usb
option two: load it as a module at boot time π¦ β put this line in loader.conf(5):
atp_load="YES"
both are valid, both slay, no cap.
π DESCRIPTION π
the atp driver is the one that makes the Apple Internal Trackpad work β y'know, the one found in many Apple laptops π. and here's the cute part: older (Fountain/Geyser) and newer (Wellspring) trackpad families are all supported through a unified driver. one driver to hold them all, periodt.
now, the tea β: this driver simulates a three-button mouse using multi-finger tap detection. the mapping is:
- single finger tap β generates a left-button click
- two-finger tap β maps to the middle button
- three-finger tap β gets treated as a right button click
three buttons, zero physical buttons needed. iconic behaviour, honestly π
there's also support for 2-finger horizontal scrolling, which translates to page-back/forward events. and vertical multi-finger scrolling emulates the mouse wheel. yes bestie, the wheel. we're emulating it. π‘
a double-tap followed by a drag is treated as a selection gesture β a virtual left-button click is assumed for the lifespan of the drag. so you can select text like it's nobody's business π«Ά
π§ dynamic reconfiguration π§
atp supports dynamic reconfiguration using sysctl(8), through nodes under hw.usb.atp. β so you can tweak the vibe live without rebooting. obsessed.
here's the full tunable roster, no skips:
hw.usb.atp.scale_factorβ controls pointer sensitivity. and heads up, this one is lowkey backwards: smaller values ofscale_factorresult in faster movement πhw.usb.atp.small_movementβ a simple high-pass filter is used to reduce contributions from small movements, and this tunable controls the threshold for that filterhw.usb.atp.touch_timeoutβ the maximum tolerable duration of a touch gesture, in microseconds. beyond this period, touches are considered to be slides (this conversion also happens when a finger stroke accumulates at leasthw.usb.atp.slide_min_movementmovement, in mickeys)hw.usb.atp.slide_min_movementβ the amount of movement (in mickeys) that, once a finger stroke accumulates it, also flips a touch into a slidehw.usb.atp.double_tap_thresholdβ the maximum time (in microseconds) to allow an association between a double-tap and drag gesturehw.usb.atp.tap_minimumβ if you wanna disable tap detection entirely and rely only upon physical button presses, set this one to a value of 2
β οΈ real talk: that last one is a whole vibe change. settinghw.usb.atp.tap_minimumto2means taps stop doing anything and it's buttons-only from then on. know what you're signing up for π
π HARDWARE π
the atp driver provides support for the following Product IDs β here's the whole guest list π:
- PowerBooks, iBooks (IDs:
0x020e,0x020f,0x0210,0x0214,0x0215,0x0216) - Core Duo MacBook & MacBook Pro (IDs:
0x0217,0x0218,0x0219) - Core2 Duo MacBook & MacBook Pro (IDs:
0x021a,0x021b,0x021c) - Core2 Duo MacBook3,1 (IDs:
0x0229,0x022a,0x022b) - 12 inch PowerBook and iBook (IDs:
0x030a,0x030b) - 15 inch PowerBook (IDs:
0x020e,0x020f,0x0215) - 17 inch PowerBook (ID:
0x020d) - Almost all recent Macbook-Pros and Airs (IDs:
0x0223,0x0223,0x0224,0x0224,0x0225,0x0225,0x0230,0x0230,0x0231,0x0231,0x0232,0x0232,0x0236,0x0236,0x0237,0x0237,0x0238,0x0238,0x023f,0x023f,0x0240,0x0241,0x0242,0x0243,0x0244,0x0245,0x0246,0x0247,0x0249,0x024a,0x024b,0x024c,0x024d,0x024e,0x0252,0x0252,0x0253,0x0253,0x0254,0x0254,0x0259,0x025a,0x025b,0x0262,0x0262,0x0263,0x0264,0x0290,0x0291,0x0292)
π how do i find my product-id? π
so valid of you to ask. search for 'Trackpad' in the output of lshal(1) and then look up the property usb_device.product_id. that's the whole trick, bestie π¦
π FILES π
atp creates a blocking pseudo-device file, /dev/atp0, which presents the mouse as a sysmouse or mousesystems type device β see moused(8) for an explanation of these mouse types π
π SEE ALSO π
sysmouse(4), usb(4), loader.conf(5), xorg.conf(5) (ports/x11/xorg), moused(8), sysctl(8)
go read them, they're all part of the lore πβ¨
π AUTHORS π
the atp driver was written by Rohit Grover <rgrover1@gmail.com> π«Ά
and that's the whole page bestie!! this one came from Debian, dated February 24, 2014 β so it's vintage, it's iconic, it ate π β¨ mwah, go forth and tap responsibly π
π¦ where this page comes from
- debian bookworm: freebsd-manpages 12.2-1 Β· BSD-2-Clause-FreeBSD AND BSD-4-Clause
- debian trixie: freebsd-manpages 12.2-2 Β· BSD-2-Clause-FreeBSD AND BSD-4-Clause
- ubuntu jammy: freebsd-manpages 12.2-1 Β· BSD-2-Clause-FreeBSD AND BSD-4-Clause
- ubuntu noble: freebsd-manpages 12.2-1 Β· BSD-2-Clause-FreeBSD AND BSD-4-Clause
- ubuntu questing: freebsd-manpages 12.2-2
- ubuntu resolute: freebsd-manpages 12.2-2build1 Β· BSD-2-Clause-FreeBSD AND BSD-4-Clause
- ubuntu stonking: freebsd-manpages 12.2-2build1 Β· BSD-2-Clause-FreeBSD AND BSD-4-Clause
- Copyright (c) 2014 Rohit Grover <rgrover1 at gmail dot com>
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms