On 27.06.2017 21:58, Eric Anholt wrote:
This will let drivers reduce the error cleanup they need, in particular the "is_panel_bridge" flag.
Signed-off-by: Eric Anholt eric@anholt.net
drivers/gpu/drm/bridge/panel.c | 30 ++++++++++++++++++++++++++++++ include/drm/drm_bridge.h | 3 +++ 2 files changed, 33 insertions(+)
diff --git a/drivers/gpu/drm/bridge/panel.c b/drivers/gpu/drm/bridge/panel.c index 67fe19e5a9c6..cdf367d2653a 100644 --- a/drivers/gpu/drm/bridge/panel.c +++ b/drivers/gpu/drm/bridge/panel.c @@ -198,3 +198,33 @@ void drm_panel_bridge_remove(struct drm_bridge *bridge) devm_kfree(panel_bridge->panel->dev, bridge); } EXPORT_SYMBOL(drm_panel_bridge_remove);
+static void devm_drm_panel_bridge_release(struct device *dev, void *res) +{
- struct drm_bridge *bridge = *(struct drm_bridge **)res;
- drm_panel_bridge_remove(bridge);
I guess more elegant would be: struct drm_bridge **bridge = res;
drm_panel_bridge_remove(*bridge);
I am still not convinced to the idea of this panel_bridge stuff, but this is different issue :)
Anyway: Reviewed-by: Andrzej Hajda a.hajda@samsung.com
-- Regards Andrzej
+}
+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); diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h index 1dc94d5392e2..6522d4cbc9d9 100644 --- a/include/drm/drm_bridge.h +++ b/include/drm/drm_bridge.h @@ -268,6 +268,9 @@ void drm_bridge_enable(struct drm_bridge *bridge); struct drm_bridge *drm_panel_bridge_add(struct drm_panel *panel, u32 connector_type); 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