On Mon, Feb 6, 2017 at 4:18 AM, Liviu Dudau <liviu.dudau@xxxxxxx> wrote: > On Fri, Feb 03, 2017 at 09:36:32PM -0600, Rob Herring wrote: >> Many drivers have a common pattern of searching the OF graph for either an >> attached panel or bridge and then finding the DRM struct for the panel >> or bridge. Also, most drivers need to handle deferred probing when the >> DRM device is not yet instantiated. Create a common function, >> drm_of_find_panel_or_bridge, to find the connected node and the >> associated DRM panel or bridge device. >> >> Signed-off-by: Rob Herring <robh@xxxxxxxxxx> >> --- >> drivers/gpu/drm/drm_of.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++ >> include/drm/drm_of.h | 13 +++++++++++++ >> 2 files changed, 63 insertions(+) >> >> diff --git a/drivers/gpu/drm/drm_of.c b/drivers/gpu/drm/drm_of.c >> index 47848ed8ca48..b29ce2f52113 100644 >> --- a/drivers/gpu/drm/drm_of.c >> +++ b/drivers/gpu/drm/drm_of.c >> @@ -3,7 +3,9 @@ >> #include <linux/list.h> >> #include <linux/of_graph.h> >> #include <drm/drmP.h> >> +#include <drm/drm_bridge.h> >> #include <drm/drm_crtc.h> >> +#include <drm/drm_panel.h> >> #include <drm/drm_of.h> >> >> static void drm_release_of(struct device *dev, void *data) >> @@ -207,3 +209,51 @@ int drm_of_encoder_active_endpoint(struct device_node *node, >> return -EINVAL; >> } >> EXPORT_SYMBOL_GPL(drm_of_encoder_active_endpoint); >> + >> +/* >> + * drm_of_find_panel_or_bridge - return connected panel or bridge device >> + * @np: device tree node containing encoder input ports >> + * @panel: pointer to hold returned drm_panel >> + * @bridge: pointer to hold returned drm_bridge >> + * >> + * Given a DT node's port and endpoint number, find the connected node and >> + * return either the associated struct drm_panel or drm_bridge device. >> + * >> + * Returns zero if successful, or one of the standard error codes if it fails. >> + */ >> +int drm_of_find_panel_or_bridge(const struct device_node *np, >> + int port, int endpoint, >> + struct drm_panel **panel, >> + struct drm_bridge **bridge) >> +{ >> + int ret = -ENODEV; > > Given that you never return 'ret' with -ENODEV can I suggest that you initialise 'ret' > with -EPROBE_DEFER and then you can get rid of the two assignments further down? But I can if both panel and bridge are NULL. I'm going with Philipp's suggestion of -EINVAL here. Rob -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html