[PATCH v7 3/3] drm/tinydrm: Add devres versions of drm_of_find_backlight
Meghana Madhyastha
meghana.madhyastha at gmail.com
Sun Oct 1 17:29:03 UTC 2017
Add devm_drm_of_find_backlight and the corresponding release
function because some drivers use devres versions of functions
for requiring device resources.
Signed-off-by: Meghana Madhyastha <meghana.madhyastha at gmail.com>
---
Changes in v7:
-None
drivers/gpu/drm/drm_of.c | 40 ++++++++++++++++++++++++++++++++++++++
drivers/gpu/drm/tinydrm/mi0283qt.c | 2 +-
include/drm/drm_of.h | 7 +++++++
3 files changed, 48 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/drm_of.c b/drivers/gpu/drm/drm_of.c
index 7417725..82b5113 100644
--- a/drivers/gpu/drm/drm_of.c
+++ b/drivers/gpu/drm/drm_of.c
@@ -305,3 +305,43 @@ struct backlight_device *drm_of_find_backlight(struct device *dev)
return backlight;
}
EXPORT_SYMBOL(drm_of_find_backlight);
+
+static void devm_drm_of_find_backlight_release(void *data)
+{
+ put_device(data);
+}
+
+/**
+ * devm_drm_of_find_backlight - Find backlight device in device-tree
+ * devres version of the function
+ * @dev: Device
+ *
+ * This is the devres version of the function drm_of_find_backlight.
+ * Some drivers use devres versions of functions for
+ * requiring device resources.
+ *
+ * Returns:
+ * NULL if there's no backlight property.
+ * Error pointer -EPROBE_DEFER if the DT node is found, but no backlight device
+ * is found.
+ * If the backlight device is found, a pointer to the structure is returned.
+ */
+struct backlight_device *devm_drm_of_find_backlight(struct device *dev)
+{
+ struct backlight_device *backlight;
+ int ret;
+
+ backlight = drm_of_find_backlight(dev);
+ if (IS_ERR_OR_NULL(backlight))
+ return backlight;
+
+ ret = devm_add_action(dev, devm_drm_of_find_backlight_release,
+ &backlight->dev);
+ if (ret) {
+ put_device(&backlight->dev);
+ return ERR_PTR(ret);
+ }
+
+ return backlight;
+}
+EXPORT_SYMBOL(devm_drm_of_find_backlight);
diff --git a/drivers/gpu/drm/tinydrm/mi0283qt.c b/drivers/gpu/drm/tinydrm/mi0283qt.c
index 5e3d635..d37f658 100644
--- a/drivers/gpu/drm/tinydrm/mi0283qt.c
+++ b/drivers/gpu/drm/tinydrm/mi0283qt.c
@@ -190,7 +190,7 @@ static int mi0283qt_probe(struct spi_device *spi)
if (IS_ERR(mipi->regulator))
return PTR_ERR(mipi->regulator);
- mipi->backlight = drm_of_find_backlight(dev);
+ mipi->backlight = devm_drm_of_find_backlight(dev);
if (IS_ERR(mipi->backlight))
return PTR_ERR(mipi->backlight);
diff --git a/include/drm/drm_of.h b/include/drm/drm_of.h
index 6e93311..b95f3fb 100644
--- a/include/drm/drm_of.h
+++ b/include/drm/drm_of.h
@@ -30,6 +30,7 @@ int drm_of_find_panel_or_bridge(const struct device_node *np,
struct drm_panel **panel,
struct drm_bridge **bridge);
struct backlight_device *drm_of_find_backlight(struct device *dev);
+struct backlight_device *devm_drm_of_find_backlight(struct device *dev);
#else
static inline uint32_t drm_of_find_possible_crtcs(struct drm_device *dev,
struct device_node *port)
@@ -72,6 +73,12 @@ drm_of_find_backlight(struct device *dev)
{
return NULL;
}
+
+static inline struct backlight_device *
+devm_drm_of_find_backlight(struct device *dev)
+{
+ return NULL;
+}
#endif
static inline int drm_of_encoder_active_endpoint_id(struct device_node *node,
--
2.7.4
More information about the dri-devel
mailing list