Using the Griffin PowerMate with Linux 2.4.x

These instructions are old, and most distributions have support for the Powermate now.
See my newer page for easier methods.

The Griffin PowerMate  is a USB device that produces rotation and click signals.  These can be mapped to a variety of uses, most commonly volume control.  There is no vendor-supplied support for it in Linux, but William R. Sowerbutts has created a Linux kernel driver.  With his fine work and userspace tools from Oliver M. Bolzer it works well.

New update! Red Hat 9 has the PowerMate driver included in the base install. I have split the instructions below to reflect this.

Here is what you need to get the PowerMate working with Linux:

If you have Red Hat Linux 9
RedHat 9 comes with the PowerMate driver already supported. You only need to make a small change to your modules configuration and then install the userspace programs.

As root, edit /etc/modules.conf and add the following to the end of the file:
add above powermate evdev
This tells your system to add event driver support when the PowerMate is connected.
Now skip down to the For everybody section to set up the userspace programs!

If you are not using a distribution with a precompiled PowerMate driver
These instructions were based on a RedHat 7.2 system and assume quite a bit of familiarity with Linux.   Suggestions for improvement are welcome -- send to bitmage (at) bellsouth (dot) net.

A recent kernel with support for USB.  (2.4.18 works fine)
The PowerMate driver for Linux.  (a local copy can be found here, a version for older kernels here)
The Ruby Scripting Language.  (the userspace code is written in this)
The userspace programs.
 

Putting it all together:

Kernel support
You need to be able to compile your own kernel.  Kernel compilation is beyond the scope of this document but there are many sources on the web to help you.

Download the PowerMate driver listed above.  It is a patch file to apply to your kernel source.  My copy is powermate-linux-2.4.17.patch but it works fine with the 2.4.18 kernel.  Copy this file to your kernel source directory and apply it (patch -p1 < powermate-linux-2.4.17.patch).  It should apply without errors.

Then run menuconfig and set up your kernel options.
 
The options we need:

Under the USB Support menu - Support for your USB architecture, 'USB Human Interface Device (full HID) support' as a module, and the 'Griffin Technology PowerMate support' as a module.

Under the Input Core Support menu - "Event interface support" as a module.


Compile and install the kernel, then reboot.
 

Hotplug support
Edit /etc/hotplug/usb.handmap and add the following line to the bottom: (this must be all on one line!)

griffin            0x0003 0x077d   0x0410    0x0000       0x0000       0x00         0x00            0x00            0x00            0x00            0x00            0x00000000

This change prevents the USB mouse driver from grabbing the PowerMate and points to the script we will create next.

Create a file called griffin in /etc/hotplug/usb/ and put the following script in it:

/sbin/rmmod evdev powermate
/bin/sleep 1
/sbin/modprobe powermate
/bin/sleep 1
/sbin/modprobe evdev

Save it and make it executable
This script first unloads the modules (if they are loaded) and then loads them.  I found the re-loading cycle to be necessary to get the PowerMate recognized on both cold- and hot-plugging.

Instructions for everybody

Now chmod 666 /dev/input/event0 so that everyone can read from this device.  If you have more than one device using the event interface you may need to
chmod event1-? as well.

Now plug in your PowerMate.  After a few seconds it should light up and you should see something similar to this in your syslog:

Jun 11 15:54:09 bpenguin kernel: hub.c: USB new device connect on bus1/2, assigned device number 2
Jun 11 15:54:09 bpenguin kernel: Manufacturer: Griffin Technology, Inc.
Jun 11 15:54:09 bpenguin kernel: Product: Griffin PowerMate
Jun 11 15:54:09 bpenguin kernel: usb.c: USB device 2 (vend/prod 0x77d/0x410) is not claimed by any active driver.
Jun 11 15:54:09 bpenguin kernel:   Length              = 18
<....many more lines of USB device detail..>
Jun 11 15:54:09 bpenguin kernel: usb.c: registered new driver powermate
Jun 11 15:54:09 bpenguin kernel: input: Griffin PowerMate on input0
Jun 11 15:54:09 bpenguin kernel: usb.c: registered new driver hid
Jun 11 15:54:09 bpenguin kernel: hid-core.c: v1.8 Andreas Gal, Vojtech Pavlik <vojtech@suse.cz>
Jun 11 15:54:09 bpenguin kernel: hid-core.c: USB HID support drivers
Jun 11 15:54:09 bpenguin kernel: usb.c: deregistering driver powermate
Jun 11 15:54:09 bpenguin kernel: usb.c: registered new driver powermate
Jun 11 15:54:09 bpenguin kernel: input: Griffin PowerMate on input0

A lsmod should show the powermate and evdev modules loaded.
 

Install the Ruby Scripting Language
The userspace tools are written in Ruby.  If your system does not have Ruby installed you will need to add it.  RedHat users can install the Ruby RPM's off their install cds.
 

Install the userspace tools
The files you need from the site above are PowerMate.rb, xmms.rb, and xmmsmate.  These are a Ruby library to read from the PowerMate, a library to talk to xmms, and a program to link the two and let you control xmms with the PowerMate.
Launch xmms and then execute xmmsmate.  You should then be able to control the volume by turning the knob, skip tracks by clicking, and pause by holding the knob down.
 

Other sites with information about the PowerMate
Groom Lake Labs
Leigh Klotz's tools
Roger Pingleton case mod + PowerMate
Mixxx - a DJ tool that supports the PowerMate

Happy twiddling!
 
Special thanks to Roger Pingleton and Martin Dengler for suggestions for this page, and to Tue Haste Andersen for the info on Mixxx.