drm/bridge: Add a devm_ allocator for panel bridge.
This will let drivers reduce the error cleanup they need, in particular the "is_panel_bridge" flag. v2: Slight cleanup of remove function by Andrzej Signed-off-by: Eric Anholt <eric@anholt.net> Reviewed-by: Andrzej Hajda <a.hajda@samsung.com> Reviewed-by: Philippe Cornu <philippe.cornu@st.com> Tested-by: Philippe Cornu <philippe.cornu@st.com> Link: https://patchwork.freedesktop.org/patch/msgid/20170718210510.12229-2-eric@anholt.net
This commit is contained in:
parent
15b4511a4a
commit
67022227ff
@ -195,3 +195,33 @@ void drm_panel_bridge_remove(struct drm_bridge *bridge)
|
|||||||
devm_kfree(panel_bridge->panel->dev, bridge);
|
devm_kfree(panel_bridge->panel->dev, bridge);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(drm_panel_bridge_remove);
|
EXPORT_SYMBOL(drm_panel_bridge_remove);
|
||||||
|
|
||||||
|
static void devm_drm_panel_bridge_release(struct device *dev, void *res)
|
||||||
|
{
|
||||||
|
struct drm_bridge **bridge = res;
|
||||||
|
|
||||||
|
drm_panel_bridge_remove(*bridge);
|
||||||
|
}
|
||||||
|
|
||||||
|
struct drm_bridge *devm_drm_panel_bridge_add(struct device *dev,
|
||||||
|
struct drm_panel *panel,
|
||||||
|
u32 connector_type)
|
||||||
|
{
|
||||||
|
struct drm_bridge **ptr, *bridge;
|
||||||
|
|
||||||
|
ptr = devres_alloc(devm_drm_panel_bridge_release, sizeof(*ptr),
|
||||||
|
GFP_KERNEL);
|
||||||
|
if (!ptr)
|
||||||
|
return ERR_PTR(-ENOMEM);
|
||||||
|
|
||||||
|
bridge = drm_panel_bridge_add(panel, connector_type);
|
||||||
|
if (!IS_ERR(bridge)) {
|
||||||
|
*ptr = bridge;
|
||||||
|
devres_add(dev, ptr);
|
||||||
|
} else {
|
||||||
|
devres_free(ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
return bridge;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(devm_drm_panel_bridge_add);
|
||||||
|
@ -268,6 +268,9 @@ void drm_bridge_enable(struct drm_bridge *bridge);
|
|||||||
struct drm_bridge *drm_panel_bridge_add(struct drm_panel *panel,
|
struct drm_bridge *drm_panel_bridge_add(struct drm_panel *panel,
|
||||||
u32 connector_type);
|
u32 connector_type);
|
||||||
void drm_panel_bridge_remove(struct drm_bridge *bridge);
|
void drm_panel_bridge_remove(struct drm_bridge *bridge);
|
||||||
|
struct drm_bridge *devm_drm_panel_bridge_add(struct device *dev,
|
||||||
|
struct drm_panel *panel,
|
||||||
|
u32 connector_type);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user