In response to ongoing issues with the IR support for dib0700 and firmware 1.20, I spent most of yesterday refactoring the code.
When firmware 1.20 was introduced, the dib0700 switched from a polling model using a USB control message, to the messages being delivered on a USB bulk pipe. The code I originally added would do a blocking read on the pipe with a 50ms timeout. Because the dvb-usb-remote code makes use of the global workqueue, this resulted in the global workqueue being blocked 50% of the time. Also, the synchronous urb_bulk_msg() call would burn excess CPU time (reflected as an abnormal increase in the system’s load average when devices were connected).
These changes convert to using an asynchronous callback, which eliminates the expensive polling.
My hope is that as a side-effect, this also plays a little nicer with less-then-perfect USB host controllers, reducing the chance of issues with the Nova-T 500 (which people report as intermittent mt2060 i2c errors after several hours of operation when IR is enabled).