On Mon, May 03, 2021 at 11:00:20AM +0300, Heikki Krogerus wrote:
Hi Hans,
On Wed, Apr 28, 2021 at 11:52:52PM +0200, Hans de Goede wrote:
+/**
- struct drm_connector_oob_hotplug_event_data: OOB hotplug event data
- Contains data about out-of-band hotplug events, signalled through
- drm_connector_oob_hotplug_event().
- */
+struct drm_connector_oob_hotplug_event_data {
- /**
* @connected: New connected status for the connector.
*/
- bool connected;
- /**
* @dp_lanes: Number of available displayport lanes, 0 if unknown.
*/
- int dp_lanes;
- /**
* @orientation: Connector orientation.
*/
- enum typec_orientation orientation;
+};
I don't think the orientation is relevant. It will always be "normal" from DP PoW after muxing, no?
I'm also not sure those deatils are enough in the long run. Based on what I've understood from our graphics team guys, for example knowing if multi-function is preferred may be important in some cases.
Combo PHY ports - which is what this patchset is adding the notification for - can only reverse the lane assignment. TypeC PHY ports (on ICL+) have a more C-type aware mux in the SoC (FIA) as well, so in theory we could have a system based on such platforms with an external mux only switching between the USB, DP, USB+DP (MFD) modes, but leaving the plug orientation specific muxing up to the FIA. The graphics driver is not involved in programming the FIA though, it's done by a firmware component, so I don't think this configuration needs to get passed.
Yes, the driver needs to know if the PD controller configured the sink in the MFD mode (DP+USB) or in the DP-only mode. For that the number of lanes assigned to DP is enough.
+Imre.
All of that, and more, is already available in the Configuration VDO Status VDO that the we have negotiated with the DP partner. Both those VDOs are part of struct typec_displayport_data. I think we should simply supply that structure to the DRM code instead of picking those details out of it...
/**
- struct drm_tv_connector_state - TV connector related states
- @subconnector: selected subconnector
@@ -1110,6 +1132,15 @@ struct drm_connector_funcs { */ void (*atomic_print_state)(struct drm_printer *p, const struct drm_connector_state *state);
- /**
* @oob_hotplug_event:
*
* This will get called when a hotplug-event for a drm-connector
* has been received from a source outside the display driver / device.
*/
- void (*oob_hotplug_event)(struct drm_connector *connector,
struct drm_connector_oob_hotplug_event_data *data);
So I would not try to generalise this like that. This callback should be USB Type-C DP altmode specific:
void (*oob_hotplug_event)(struct drm_connector *connector, struct typec_displayport_data *data);
Or like this if the orientation can really be reversed after muxing:
void (*oob_hotplug_event)(struct drm_connector *connector, struct typec_altmode *altmode, struct typec_displayport_data *data);
You can now check the orientation separately with typec_altmode_get_orientation() if necessary.
thanks,
-- heikki