|
@@ -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);
|