Less polling, more battery

As written in previous post I got the driver for Omnikey 4040 cardreader to work eventually. I also noticed two other things later.

First, you’re not supposed to remove the reader while operating system is running. It completely freezes kernel, it doesn’t panic but nothing responds either. Not even the magic REISUB sequence.

Second, it polls really often. Powertop reports about 80-90 wakeups for [kernel core] cm4040_do_poll (cm4040_do_poll). That’s more than you want for something that doesn’t have to be super-responsive and that you don’t use most of the time. Apparently having the source code of the driver it’s easy to fix. Now, if you’re familiar with drivers then what I’m going to suggest is probably not a proper but rather a hack fix but it has the advantage of working ;). So in the driver code there’s a line which reads:

#define POLL_PERIOD msecs_to_jiffies(10)

I simply edited it to read:

#define POLL_PERIOD msecs_to_jiffies(250)

Any bigger value like 500 made the reader less responsive than I considered reasonable. With that value Powertop now reports 4 wakeups which is indeed roughly 25 times less and only about 1.3% of wakeups with few other apps running.

Edit: some picky applications time out with 250. I needed to change it to 100 so that smartcard login with rdesktop would work.