if (!bridge->ycbcr_420_allowed)
connector->ycbcr_420_allowed = false;
- if (bridge->ops & DRM_BRIDGE_OP_EDID) {
+ /*
+ * Ensure the last bridge declares OP_EDID or OP_MODES or both.
+ */
+ if (bridge->ops & DRM_BRIDGE_OP_EDID || bridge->ops & DRM_BRIDGE_OP_MODES) {
drm_bridge_put(bridge_connector->bridge_edid);
- bridge_connector->bridge_edid = drm_bridge_get(bridge);
+ bridge_connector->bridge_edid = NULL;
+ drm_bridge_put(bridge_connector->bridge_modes);
+ bridge_connector->bridge_modes = NULL;
+
+ if (bridge->ops & DRM_BRIDGE_OP_EDID)
+ bridge_connector->bridge_edid = drm_bridge_get(bridge);
+ if (bridge->ops & DRM_BRIDGE_OP_MODES)
+ bridge_connector->bridge_modes = drm_bridge_get(bridge);
}
if (bridge->ops & DRM_BRIDGE_OP_HPD) {
drm_bridge_put(bridge_connector->bridge_hpd);
drm_bridge_put(bridge_connector->bridge_detect);
bridge_connector->bridge_detect = drm_bridge_get(bridge);
}
- if (bridge->ops & DRM_BRIDGE_OP_MODES) {
- drm_bridge_put(bridge_connector->bridge_modes);
- bridge_connector->bridge_modes = drm_bridge_get(bridge);
- }
if (bridge->ops & DRM_BRIDGE_OP_HDMI) {
if (bridge_connector->bridge_hdmi)
return ERR_PTR(-EBUSY);