lkml.org 
[lkml]   [2017]   [Jul]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v5 2/6] drm/bridge: Add a devm_ allocator for panel bridge.
    Date
    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>
    ---
    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 685c1a480201..292ee92a9c97 100644
    --- a/drivers/gpu/drm/bridge/panel.c
    +++ b/drivers/gpu/drm/bridge/panel.c
    @@ -195,3 +195,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 = 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);
    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
    --
    2.11.0
    \
     
     \ /
      Last update: 2017-07-18 23:07    [W:4.059 / U:0.204 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site