Lines Matching refs:bridge

203 void drm_bridge_add(struct drm_bridge *bridge)  in drm_bridge_add()  argument
205 mutex_init(&bridge->hpd_mutex); in drm_bridge_add()
208 list_add_tail(&bridge->list, &bridge_list); in drm_bridge_add()
213 static void drm_bridge_remove_void(void *bridge) in drm_bridge_remove_void() argument
215 drm_bridge_remove(bridge); in drm_bridge_remove_void()
229 int devm_drm_bridge_add(struct device *dev, struct drm_bridge *bridge) in devm_drm_bridge_add() argument
231 drm_bridge_add(bridge); in devm_drm_bridge_add()
232 return devm_add_action_or_reset(dev, drm_bridge_remove_void, bridge); in devm_drm_bridge_add()
241 void drm_bridge_remove(struct drm_bridge *bridge) in drm_bridge_remove() argument
244 list_del_init(&bridge->list); in drm_bridge_remove()
247 mutex_destroy(&bridge->hpd_mutex); in drm_bridge_remove()
254 struct drm_bridge *bridge = drm_priv_to_bridge(obj); in drm_bridge_atomic_duplicate_priv_state() local
257 state = bridge->funcs->atomic_duplicate_state(bridge); in drm_bridge_atomic_duplicate_priv_state()
266 struct drm_bridge *bridge = drm_priv_to_bridge(obj); in drm_bridge_atomic_destroy_priv_state() local
268 bridge->funcs->atomic_destroy_state(bridge, state); in drm_bridge_atomic_destroy_priv_state()
299 int drm_bridge_attach(struct drm_encoder *encoder, struct drm_bridge *bridge, in drm_bridge_attach() argument
305 if (!encoder || !bridge) in drm_bridge_attach()
311 if (bridge->dev) in drm_bridge_attach()
314 bridge->dev = encoder->dev; in drm_bridge_attach()
315 bridge->encoder = encoder; in drm_bridge_attach()
318 list_add(&bridge->chain_node, &previous->chain_node); in drm_bridge_attach()
320 list_add(&bridge->chain_node, &encoder->bridge_chain); in drm_bridge_attach()
322 if (bridge->funcs->attach) { in drm_bridge_attach()
323 ret = bridge->funcs->attach(bridge, flags); in drm_bridge_attach()
328 if (bridge->funcs->atomic_reset) { in drm_bridge_attach()
331 state = bridge->funcs->atomic_reset(bridge); in drm_bridge_attach()
337 drm_atomic_private_obj_init(bridge->dev, &bridge->base, in drm_bridge_attach()
345 if (bridge->funcs->detach) in drm_bridge_attach()
346 bridge->funcs->detach(bridge); in drm_bridge_attach()
349 bridge->dev = NULL; in drm_bridge_attach()
350 bridge->encoder = NULL; in drm_bridge_attach()
351 list_del(&bridge->chain_node); in drm_bridge_attach()
355 bridge->of_node, encoder->name, ret); in drm_bridge_attach()
365 void drm_bridge_detach(struct drm_bridge *bridge) in drm_bridge_detach() argument
367 if (WARN_ON(!bridge)) in drm_bridge_detach()
370 if (WARN_ON(!bridge->dev)) in drm_bridge_detach()
373 if (bridge->funcs->atomic_reset) in drm_bridge_detach()
374 drm_atomic_private_obj_fini(&bridge->base); in drm_bridge_detach()
376 if (bridge->funcs->detach) in drm_bridge_detach()
377 bridge->funcs->detach(bridge); in drm_bridge_detach()
379 list_del(&bridge->chain_node); in drm_bridge_detach()
380 bridge->dev = NULL; in drm_bridge_detach()
487 bool drm_bridge_chain_mode_fixup(struct drm_bridge *bridge, in drm_bridge_chain_mode_fixup() argument
493 if (!bridge) in drm_bridge_chain_mode_fixup()
496 encoder = bridge->encoder; in drm_bridge_chain_mode_fixup()
497 list_for_each_entry_from(bridge, &encoder->bridge_chain, chain_node) { in drm_bridge_chain_mode_fixup()
498 if (!bridge->funcs->mode_fixup) in drm_bridge_chain_mode_fixup()
501 if (!bridge->funcs->mode_fixup(bridge, mode, adjusted_mode)) in drm_bridge_chain_mode_fixup()
526 drm_bridge_chain_mode_valid(struct drm_bridge *bridge, in drm_bridge_chain_mode_valid() argument
532 if (!bridge) in drm_bridge_chain_mode_valid()
535 encoder = bridge->encoder; in drm_bridge_chain_mode_valid()
536 list_for_each_entry_from(bridge, &encoder->bridge_chain, chain_node) { in drm_bridge_chain_mode_valid()
539 if (!bridge->funcs->mode_valid) in drm_bridge_chain_mode_valid()
542 ret = bridge->funcs->mode_valid(bridge, info, mode); in drm_bridge_chain_mode_valid()
563 void drm_bridge_chain_mode_set(struct drm_bridge *bridge, in drm_bridge_chain_mode_set() argument
569 if (!bridge) in drm_bridge_chain_mode_set()
572 encoder = bridge->encoder; in drm_bridge_chain_mode_set()
573 list_for_each_entry_from(bridge, &encoder->bridge_chain, chain_node) { in drm_bridge_chain_mode_set()
574 if (bridge->funcs->mode_set) in drm_bridge_chain_mode_set()
575 bridge->funcs->mode_set(bridge, mode, adjusted_mode); in drm_bridge_chain_mode_set()
592 void drm_atomic_bridge_chain_disable(struct drm_bridge *bridge, in drm_atomic_bridge_chain_disable() argument
598 if (!bridge) in drm_atomic_bridge_chain_disable()
601 encoder = bridge->encoder; in drm_atomic_bridge_chain_disable()
617 if (iter == bridge) in drm_atomic_bridge_chain_disable()
623 static void drm_atomic_bridge_call_post_disable(struct drm_bridge *bridge, in drm_atomic_bridge_call_post_disable() argument
626 if (old_state && bridge->funcs->atomic_post_disable) { in drm_atomic_bridge_call_post_disable()
631 bridge); in drm_atomic_bridge_call_post_disable()
635 bridge->funcs->atomic_post_disable(bridge, in drm_atomic_bridge_call_post_disable()
637 } else if (bridge->funcs->post_disable) { in drm_atomic_bridge_call_post_disable()
638 bridge->funcs->post_disable(bridge); in drm_atomic_bridge_call_post_disable()
659 void drm_atomic_bridge_chain_post_disable(struct drm_bridge *bridge, in drm_atomic_bridge_chain_post_disable() argument
665 if (!bridge) in drm_atomic_bridge_chain_post_disable()
668 encoder = bridge->encoder; in drm_atomic_bridge_chain_post_disable()
670 list_for_each_entry_from(bridge, &encoder->bridge_chain, chain_node) { in drm_atomic_bridge_chain_post_disable()
673 if (!list_is_last(&bridge->chain_node, &encoder->bridge_chain)) { in drm_atomic_bridge_chain_post_disable()
674 next = list_next_entry(bridge, chain_node); in drm_atomic_bridge_chain_post_disable()
697 if (next == bridge) in drm_atomic_bridge_chain_post_disable()
706 drm_atomic_bridge_call_post_disable(bridge, old_state); in drm_atomic_bridge_chain_post_disable()
710 bridge = limit; in drm_atomic_bridge_chain_post_disable()
715 static void drm_atomic_bridge_call_pre_enable(struct drm_bridge *bridge, in drm_atomic_bridge_call_pre_enable() argument
718 if (old_state && bridge->funcs->atomic_pre_enable) { in drm_atomic_bridge_call_pre_enable()
723 bridge); in drm_atomic_bridge_call_pre_enable()
727 bridge->funcs->atomic_pre_enable(bridge, old_bridge_state); in drm_atomic_bridge_call_pre_enable()
728 } else if (bridge->funcs->pre_enable) { in drm_atomic_bridge_call_pre_enable()
729 bridge->funcs->pre_enable(bridge); in drm_atomic_bridge_call_pre_enable()
749 void drm_atomic_bridge_chain_pre_enable(struct drm_bridge *bridge, in drm_atomic_bridge_chain_pre_enable() argument
755 if (!bridge) in drm_atomic_bridge_chain_pre_enable()
758 encoder = bridge->encoder; in drm_atomic_bridge_chain_pre_enable()
763 limit = bridge; in drm_atomic_bridge_chain_pre_enable()
767 if (next == bridge) in drm_atomic_bridge_chain_pre_enable()
799 if (iter == bridge) in drm_atomic_bridge_chain_pre_enable()
817 void drm_atomic_bridge_chain_enable(struct drm_bridge *bridge, in drm_atomic_bridge_chain_enable() argument
822 if (!bridge) in drm_atomic_bridge_chain_enable()
825 encoder = bridge->encoder; in drm_atomic_bridge_chain_enable()
826 list_for_each_entry_from(bridge, &encoder->bridge_chain, chain_node) { in drm_atomic_bridge_chain_enable()
827 if (bridge->funcs->atomic_enable) { in drm_atomic_bridge_chain_enable()
832 bridge); in drm_atomic_bridge_chain_enable()
836 bridge->funcs->atomic_enable(bridge, old_bridge_state); in drm_atomic_bridge_chain_enable()
837 } else if (bridge->funcs->enable) { in drm_atomic_bridge_chain_enable()
838 bridge->funcs->enable(bridge); in drm_atomic_bridge_chain_enable()
844 static int drm_atomic_bridge_check(struct drm_bridge *bridge, in drm_atomic_bridge_check() argument
848 if (bridge->funcs->atomic_check) { in drm_atomic_bridge_check()
853 bridge); in drm_atomic_bridge_check()
857 ret = bridge->funcs->atomic_check(bridge, bridge_state, in drm_atomic_bridge_check()
861 } else if (bridge->funcs->mode_fixup) { in drm_atomic_bridge_check()
862 if (!bridge->funcs->mode_fixup(bridge, &crtc_state->mode, in drm_atomic_bridge_check()
991 drm_atomic_bridge_chain_select_bus_fmts(struct drm_bridge *bridge, in drm_atomic_bridge_chain_select_bus_fmts() argument
996 struct drm_encoder *encoder = bridge->encoder; in drm_atomic_bridge_chain_select_bus_fmts()
1041 ret = select_bus_fmt_recursive(bridge, last_bridge, crtc_state, in drm_atomic_bridge_chain_select_bus_fmts()
1053 drm_atomic_bridge_propagate_bus_flags(struct drm_bridge *bridge, in drm_atomic_bridge_propagate_bus_flags() argument
1061 bridge_state = drm_atomic_get_new_bridge_state(state, bridge); in drm_atomic_bridge_propagate_bus_flags()
1067 next_bridge = drm_bridge_get_next_bridge(bridge); in drm_atomic_bridge_propagate_bus_flags()
1118 int drm_atomic_bridge_chain_check(struct drm_bridge *bridge, in drm_atomic_bridge_chain_check() argument
1127 if (!bridge) in drm_atomic_bridge_chain_check()
1130 ret = drm_atomic_bridge_chain_select_bus_fmts(bridge, crtc_state, in drm_atomic_bridge_chain_check()
1135 encoder = bridge->encoder; in drm_atomic_bridge_chain_check()
1153 if (iter == bridge) in drm_atomic_bridge_chain_check()
1174 enum drm_connector_status drm_bridge_detect(struct drm_bridge *bridge) in drm_bridge_detect() argument
1176 if (!(bridge->ops & DRM_BRIDGE_OP_DETECT)) in drm_bridge_detect()
1179 return bridge->funcs->detect(bridge); in drm_bridge_detect()
1197 int drm_bridge_get_modes(struct drm_bridge *bridge, in drm_bridge_get_modes() argument
1200 if (!(bridge->ops & DRM_BRIDGE_OP_MODES)) in drm_bridge_get_modes()
1203 return bridge->funcs->get_modes(bridge, connector); in drm_bridge_get_modes()
1219 struct edid *drm_bridge_get_edid(struct drm_bridge *bridge, in drm_bridge_get_edid() argument
1222 if (!(bridge->ops & DRM_BRIDGE_OP_EDID)) in drm_bridge_get_edid()
1225 return bridge->funcs->get_edid(bridge, connector); in drm_bridge_get_edid()
1247 void drm_bridge_hpd_enable(struct drm_bridge *bridge, in drm_bridge_hpd_enable() argument
1252 if (!(bridge->ops & DRM_BRIDGE_OP_HPD)) in drm_bridge_hpd_enable()
1255 mutex_lock(&bridge->hpd_mutex); in drm_bridge_hpd_enable()
1257 if (WARN(bridge->hpd_cb, "Hot plug detection already enabled\n")) in drm_bridge_hpd_enable()
1260 bridge->hpd_cb = cb; in drm_bridge_hpd_enable()
1261 bridge->hpd_data = data; in drm_bridge_hpd_enable()
1263 if (bridge->funcs->hpd_enable) in drm_bridge_hpd_enable()
1264 bridge->funcs->hpd_enable(bridge); in drm_bridge_hpd_enable()
1267 mutex_unlock(&bridge->hpd_mutex); in drm_bridge_hpd_enable()
1283 void drm_bridge_hpd_disable(struct drm_bridge *bridge) in drm_bridge_hpd_disable() argument
1285 if (!(bridge->ops & DRM_BRIDGE_OP_HPD)) in drm_bridge_hpd_disable()
1288 mutex_lock(&bridge->hpd_mutex); in drm_bridge_hpd_disable()
1289 if (bridge->funcs->hpd_disable) in drm_bridge_hpd_disable()
1290 bridge->funcs->hpd_disable(bridge); in drm_bridge_hpd_disable()
1292 bridge->hpd_cb = NULL; in drm_bridge_hpd_disable()
1293 bridge->hpd_data = NULL; in drm_bridge_hpd_disable()
1294 mutex_unlock(&bridge->hpd_mutex); in drm_bridge_hpd_disable()
1309 void drm_bridge_hpd_notify(struct drm_bridge *bridge, in drm_bridge_hpd_notify() argument
1312 mutex_lock(&bridge->hpd_mutex); in drm_bridge_hpd_notify()
1313 if (bridge->hpd_cb) in drm_bridge_hpd_notify()
1314 bridge->hpd_cb(bridge->hpd_data, status); in drm_bridge_hpd_notify()
1315 mutex_unlock(&bridge->hpd_mutex); in drm_bridge_hpd_notify()
1331 struct drm_bridge *bridge; in of_drm_find_bridge() local
1335 list_for_each_entry(bridge, &bridge_list, list) { in of_drm_find_bridge()
1336 if (bridge->of_node == np) { in of_drm_find_bridge()
1338 return bridge; in of_drm_find_bridge()