diff options
Diffstat (limited to 'drivers/gpu/drm/bridge/panel.c')
| -rw-r--r-- | drivers/gpu/drm/bridge/panel.c | 37 | 
1 files changed, 37 insertions, 0 deletions
| diff --git a/drivers/gpu/drm/bridge/panel.c b/drivers/gpu/drm/bridge/panel.c index c916f4b8907e..b32295abd9e7 100644 --- a/drivers/gpu/drm/bridge/panel.c +++ b/drivers/gpu/drm/bridge/panel.c @@ -9,6 +9,7 @@  #include <drm/drm_connector.h>  #include <drm/drm_encoder.h>  #include <drm/drm_modeset_helper_vtables.h> +#include <drm/drm_of.h>  #include <drm/drm_panel.h>  #include <drm/drm_print.h>  #include <drm/drm_probe_helper.h> @@ -332,3 +333,39 @@ struct drm_connector *drm_panel_bridge_connector(struct drm_bridge *bridge)  	return &panel_bridge->connector;  }  EXPORT_SYMBOL(drm_panel_bridge_connector); + +#ifdef CONFIG_OF +/** + * devm_drm_of_get_bridge - Return next bridge in the chain + * @dev: device to tie the bridge lifetime to + * @np: device tree node containing encoder output ports + * @port: port in the device tree node + * @endpoint: endpoint in the device tree node + * + * Given a DT node's port and endpoint number, finds the connected node + * and returns the associated bridge if any, or creates and returns a + * drm panel bridge instance if a panel is connected. + * + * Returns a pointer to the bridge if successful, or an error pointer + * otherwise. + */ +struct drm_bridge *devm_drm_of_get_bridge(struct device *dev, +					  struct device_node *np, +					  u32 port, u32 endpoint) +{ +	struct drm_bridge *bridge; +	struct drm_panel *panel; +	int ret; + +	ret = drm_of_find_panel_or_bridge(np, port, endpoint, +					  &panel, &bridge); +	if (ret) +		return ERR_PTR(ret); + +	if (panel) +		bridge = devm_drm_panel_bridge_add(dev, panel); + +	return bridge; +} +EXPORT_SYMBOL(devm_drm_of_get_bridge); +#endif | 
