Tuesday, March 17, 2009

xc5000 tuner improvements

A few months ago, I put together a series of patches for cleanups and improvements to the xc5000 driver:

http://linuxtv.org/hg/~mkrufky/xc5000/

These changes never went into the codebase, since there were issues with the XREG_BUSY polling. Thanks to Pinnacle, I gained access to the Xceive reference driver code and newer 1.3 firmware, which properly supported the XREG_BUSY register. This means that tuning time goes from 3200ms down to about 300ms (a 10x improvement).

There was one problem: the power management register stopped working in the newer firmware. This means I had to choose between the 1.1 firmware which was much older but had proper power management, or the 1.3 firmware that had fast tuning but no power management.

With the HVR-950q analog work pretty much wrapped up, I finally sat down and dug deeper into the problem, confirmed it definitively, and emailed Xceive support a full explanation including how I reproduced the issue.

They actually got back to me within a couple of hours! It turns up they got rid of the register and the supported way to put the device to sleep is just to strobe the reset pin. I implemented it in about five minutes, and now with the 1.3 firmware I have both fast tuning *and* power management. Yay.

All I need now is to straighten out the redistribution rights on the 1.3 firmware and this stuff will go into the mainline.

Most people don't worry about a three second tuning time when doing digital, however being unable to "channel-surf" with analog is something that gets annoying really fast.