On Wed, Jan 28, 2015 at 11:09:21AM +0200, Jani Nikula wrote:
On Tue, 27 Jan 2015, Simon Farnsworth simon.farnsworth@onelan.co.uk wrote:
DisplayPort to DVI-D Dual Link adapters designed by Bizlink have bugs in their I2C over AUX implementation. They work fine with Windows, but fail with Linux.
It turns out that they cannot keep an I2C transaction open unless the previous read was 16 bytes; shorter reads can only be followed by a zero byte transfer ending the I2C transaction.
Copy Windows's behaviour, and read 16 bytes at a time. If we get a short reply, assume that there's a hardware bottleneck, and shrink our read size to match. For this purpose, use the algorithm in the DisplayPort 1.2 spec, in the hopes that it'll be closest to what Windows does, as no sink I've found actually gives short replies.
Also provide a module parameter for testing smaller transfer sizes, in case there are sinks out there that cannot work with Windows.
Signed-off-by: Simon Farnsworth simon.farnsworth@onelan.co.uk
v3 changes, after feedback from Ville and more testing of Windows:
Change the short reply algorithm to match Ville's description of the DisplayPort 1.2 spec wording.
Add a module parameter to set the default transfer size for experiments. Requested over IRC by Ville.
IMO module parameters are ABI we shouldn't add just because we might need them. Also see my reply in the other thread http://mid.gmane.org/877fw7s2lh.fsf@intel.com
Imo just marking it as _unsafe is good enough to make it clear that it's for debugging only. -Daniel