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 of scale_factor result 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 filter
  • hw.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 least hw.usb.atp.slide_min_movement movement, 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 slide
  • hw.usb.atp.double_tap_threshold β€” the maximum time (in microseconds) to allow an association between a double-tap and drag gesture
  • hw.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. setting hw.usb.atp.tap_minimum to 2 means 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