-
Notifications
You must be signed in to change notification settings - Fork 5.2k
Change vc4 DSI to being a bridge - rpi-5.16.y #4894
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
DSI sink devices typically want the DSI host powered up and configured before they are powered up. pre_enable is the place this would normally happen, but they are called in reverse order from panel/connector towards the encoder, which is the "wrong" order. Add a new flag DRM_BRIDGE_OP_UPSTREAM_FIRST that any bridge can set to swap the order of pre_enable (and post_disable) so that any upstream bridges are called first to create the desired state. eg: - Panel - Bridge 1 - Bridge 2 DRM_BRIDGE_OP_UPSTREAM_FIRST - Bridge 3 - Encoder Would result in pre_enable's being called as Panel, Bridge 1, Bridge 3, Bridge 2. Signed-off-by: Dave Stevenson <[email protected]>
The MIPI_DSI_MODE_* flags have fairly terse descriptions and no reference to the DSI specification as to their exact meaning. Usage has therefore been rather fluid. Extend the descriptions and provide references to the part of the MIPI DSI specification regarding what they mean. Signed-off-by: Dave Stevenson <[email protected]>
mipi_dsi_attach can fail due to resources not being available yet, therefore do not log error messages should they occur. Signed-off-by: Dave Stevenson <[email protected]>
…DSI host TC358762 wants the DSI host to be prepared before it is powered up, so set the flag to request that the upstream bridges have their pre_enable called first. Signed-off-by: Dave Stevenson <[email protected]>
Take it back - compile fails. Fixing it..... |
In preparation for converting the encoder to being a bridge, rename the variable holding the next bridge in the chain to out_bridge, so that our bridge can be called bridge. Signed-off-by: Dave Stevenson <[email protected]>
Breaking the bridge chain does not work for atomic bridges/panels and generally causes issues. We need to initialise the DSI host before the bridge pre_enables are called, so move that to encoder_mode_set in the same way that dw-mipi-dsi does. Signed-off-by: Dave Stevenson <[email protected]>
Splitting the bridge chain fails for atomic bridges as the framework can't add the relevant state in drm_atomic_add_encoder_bridges. The chain was split because we needed to power up before calling pre_enable, but that is now done in mode_set, and will move into the framework. Signed-off-by: Dave Stevenson <[email protected]>
The atomic calls are preferred as the non-atomic ones are deprecated. In preparation for conversion to a bridge, switch to the atomic calls. Signed-off-by: Dave Stevenson <[email protected]>
Remove the encoder functions, and create a bridge attached to this dumb encoder which implements the same functionality. As a bridge has state which an encoder doesn't, we need to add the state management functions as well. As there is no bridge atomic_mode_set, move the initialisation code that was in mode_set into _pre_enable. The code to actually enable and disable sending video are split from the general control into _enable and _disable. Signed-off-by: Dave Stevenson <[email protected]>
Post_disable was sending the D-PHY sequence to put any device into ULPS suspend mode, and then cutting power to the DSI block. The power-on reset state of the DSI block is for DSI to be in an operational state, not ULPS, so it then never sent the sequence for exiting ULPS. Any attached device that didn't have an external reset therefore remained in ULPS / standby, and didn't function. Use of ULPS isn't well specified in DRM, therefore remove entering it to avoid the above situation. Signed-off-by: Dave Stevenson <[email protected]>
Fixed. |
want to have it tested on a different DSI target? Let me know and I'll pull and compile it for DSI8x testing. |
This is a straight port of the patches from 5.15 to 5.16, so I'm not expecting any difference in behaviour. |
Port #4878 to Rpi 5.16.y
It was only the "Rename bridge to out_bridge" bridge that appeared not to apply cleanly, and that is a simple rename.
Still compile testing, but I expect this to be good.