On Sat, Feb 15, 2020 at 5:36 AM Vasily Khoruzhick anarsoul@gmail.com wrote:
On Thu, Feb 13, 2020 at 6:54 AM Enric Balletbo i Serra enric.balletbo@collabora.com wrote:
From: Nicolas Boichat drinkcat@chromium.org
ANX7688 is a HDMI to DP converter (as well as USB-C port controller), that has an internal microcontroller.
The only reason a Linux kernel driver is necessary is to reject resolutions that require more bandwidth than what is available on the DP side. DP bandwidth and lane count are reported by the bridge via 2 registers on I2C.
It is true only for your particular platform where usb-c part is managed by firmware. Pinephone has the same anx7688 but linux will need a driver that manages usb-c in addition to DP.
I'd suggest making it MFD driver from the beginning, or at least make proper bindings so we don't have to rework it and introduce binding incompatibilities in future.
If that helps for the binding, ANX7688 is indeed a MFD (TCPC, HDMI to DP converter, USB-C mux between USB 3.0 lanes and the DP output of the embedded converter), with 2 I2C addresses: - 0x2c is the TCPC/mux, used by the Embedded Controller [1] on Chrome OS, and the code in this patch (my understanding is that lane count/BW registers in the kernel driver below may only be available to FW on Chromebooks). - 0x28: - Used to update the embedded FW in the anx7688 (on Chrome OS we do this in depthcharge [2]). This is a EEPROM-based FW (so even without implementing this, it'll usually "just work"). - Used to workaround some TCPC issues (see [1] again).
[1] EC driver: https://chromium.googlesource.com/chromiumos/platform/ec/+/refs/heads/master... [2] depthcharge driver to update ANX7688 FW: https://chromium.googlesource.com/chromiumos/platform/depthcharge/+/master/s...