A port for macOS of Synaptic's RMI code from Linux. It is for touchscreens, touchpads, and other sensors. Many PS2 trackpads and sensors support other buses like I2C or SMBus, though SMBus is advantageous for macOS due to not requiring ACPI edits.
This driver communicates over SMBus or I2C.
- Force Touch emulation for clickpads (press down clickpad and increase area finger uses)
- Up to four finger gestures (Though it can track up to 5 fingers)
- Buttons
- Trackstick
- Power Management
- SMBus Communication
- I2C Communication
VoodooRMI is not likely to work on devices which have Ivy Bridge CPUs or older. Refer to issue #33
SMBus
Windows:
- Check under Device Manager for a Synaptics SMBus device
Linux:
- If you are using intertouch (i.e. psmouse.intertouch=1) for your synaptics trackpad, then it's compatible
- Get
i2c-tools
from your package manager. Runi2cdetect -l
, and note the number for SMBus (It's usually zero). Runi2cdetect #
where # is the number you got from running the prior command. Synaptic devices are always at address 0x2c, so check at that address for anything other than--
. It will usually appear asUU
in my experiance if it's a Synaptics device.- If the trackpad does not show up, there is a chance that it will still work. There have been one or two examples of the trackpad not showing up but still being compatible.
- Likely compatible if you run
dmesg
and find a message along the lines of"Your touchpad x says it can support a different bus."
and it's a synaptics trackpad.
I2C
Windows:
- Check for
HID-compliant touch pad
in device manager- In properties, verify
location
ison I2C HID Device
inGeneral
andHardware Ids
containsSYNA
inDetails
- In properties, verify
Linux:
- Check for the presence of
i2c-SYNA
indmesg
. - Get
i2c-tools
from your package manager, and use thei2cdetect
tool to see if there are any devices at address 0x2c for any bus that isn't SMBus. If you see it under SMBus, I'd use SMBus as the trackpad seemingly operates better under SMBus!
SMBus
- VoodooSMBus
- Apple's SMBus PCI controller cannot load, as it interfers with VoodooSMBus.
- VoodooPS2
- Needed for PS2 reset of the trackpad
- Generally users should only add VoodooPS2Controller and VoodooPS2Keyboard. Trackpad/Mouse will cause VoodooRMI to not attach.
- OpenCore users can just disable Mouse/Trackpad in their config.plist.
- Clover users - go inside the VoodooPS2 kext and remove Mouse/Trackpad from the PlugIns folder.
I2C
- VoodooI2C
- Follow their Documentation to identify if you need GPIO pinning.
- Polling mode should just work
- If your device's ACPI name is not included below or marked as unknown, you may try manually add it and consider a PR/issue
Name | Main function |
---|---|
SYNA0000 |
F11 |
SYNA2393 |
unknown |
SYNA2B2C |
unknown |
SYNA2B31 |
F12 |
SYNA2B33 |
F11 |
SYNA2B34 |
unknown |
SYNA3105 |
unknown |
SYNA3602 |
unknown |
SYNA7500 |
unknown |
SYNA7501 |
unknown |
- Add the required kexts to your bootloader
- Disable VoodooPS2Mouse, VoodooPS2Trackpad, and if applicable, VoodooInput from within the PS2 kext.
- For OpenCore users, make sure to add VoodooInput, VoodooTrackpoint and RMISMBus/RMII2C to your Config.plist.
- RMISMBus/RMII2C should be after VoodooRMI
- All dependencies are found under
VoodooRMI.kext/Contents/PlugIns/
You generally only want one of the two below kexts
- RMII2C is needed if using VoodooI2C for your trackpad
- RMISMBus is needed if using VoodooSMBus for your trackpad
The values below can be edited under Info.plist within the kext itself - these can be changed without recompiling
Note that using non-integer values causes undefined behaviour which may prevent the kext from loading
Value | Default | Description |
---|---|---|
ForceTouchEmulation |
True | Allows Force Touch emulation on Clickpads |
ForceTouchMinPressure |
90 | Minimum z value to trigger Force touch when clickpad is clicked |
DisableWhileTypingTimeout |
100 | Milliseconds after typing in which to reject touchpad packets |
TrackstickMultiplier |
20 | Multiplier used on trackstick inputs (other than scrolling). This is divided by 20, so the default value of 20 will not change the output value at all |
TrackstickScrollMultiplierX |
20 | Multiplier used on the x access when middle button is held down for scrolling. This is divded by 20. |
TrackstickScrollMultiplierY |
20 | Same as the above, except applied to the Y axis |
TrackstickDeadzone |
1 | Minimum value at which trackstick reports will be accepted. This is subtracted from the input of the trackstick, so setting this extremely high will reduce trackstick resolution |
MinYDiffThumbDetection |
200 | Minimum distance between the second lowest and lowest finger in which Minimum Y logic is used to detect the thumb rather than using the z value from the trackpad. Setting this higher means that the thumb must be farther from the other fingers before the y coordinate is used to detect the thumb, rather than using finger area. Keeping this smaller is preferable as finger area logic seems to only be useful when all 4 fingers are grouped together closely, where the thumb is more likely to be pressing down more |
git submodule update --init --recursive
- Build within XCode
For loading, you may need to put RMII2C/RMISMBus's dependencies into the kextload command (including VoodooRMI)
cd path/to/unziped-VoodooRMI_Debug
sudo kextutil -vvvv -d VoodooRMI.kext -d VoodooSMBus.kext VoodooRMI.kext/Contents/PlugIns/RMISMBus.kext
Couple things to keep in mind:
- Make sure VoodooSMBus/VoodooI2C is loading and attaching
- Make sure VoodooInput/VoodooTrackpoint are loading
- IORegistryExplorer is a good way to see which Functions are loading, and what is/isn't loading