Re: [PATCH v17 03/10] video: backlight: Add of_find_backlight helper in backlight.c

From: Noralf TrÃnnes
Date: Sun Jan 21 2018 - 13:35:37 EST



Den 19.01.2018 12.05, skrev Daniel Thompson:
On Fri, Jan 19, 2018 at 10:42:15AM +0000, Meghana Madhyastha wrote:
Add of_find_backlight, a helper function which is a generic version
of tinydrm_of_find_backlight that can be used by other drivers to avoid
repetition of code and simplify things.

Signed-off-by: Meghana Madhyastha <meghana.madhyastha@xxxxxxxxx>
Didn't I already ack this one?

Meghana,

You are supposed to pick up the r-b/acks you get and add them when you send
a new version. This way the reviewer knows which patches still need attention.

Here's a good overview of the acks/r-b's you've received:
https://patchwork.freedesktop.org/project/dri-devel/patches/?submitter=17149

Beware that r-b/ack to the cover letter doesn't show up in patchwork, like
Sean did on the last version putting his r-b on the whole series.
The same goes for someone putting an r-b in one of the patches stating that
it applies to whole series, patchwork thinks it only applies to this one patch.

Noralf.


---
changes in v17:
-rebase with drm-misc-next
-convert st7735r callers from tinydrm specific helpers
to new generic backlight helpers
-remove select BACKLIGHT_LCD_SUPPORT
and select BACKLIGHT_CLASS_DEVICE from
tinydrm/Kconfig

drivers/video/backlight/backlight.c | 43 +++++++++++++++++++++++++++++++++++++
include/linux/backlight.h | 19 ++++++++++++++++
2 files changed, 62 insertions(+)

diff --git a/drivers/video/backlight/backlight.c b/drivers/video/backlight/backlight.c
index 8049e7656..553bf5c48 100644
--- a/drivers/video/backlight/backlight.c
+++ b/drivers/video/backlight/backlight.c
@@ -580,6 +580,49 @@ struct backlight_device *of_find_backlight_by_node(struct device_node *node)
EXPORT_SYMBOL(of_find_backlight_by_node);
#endif
+/**
+ * of_find_backlight - Get backlight device
+ * @dev: Device
+ *
+ * This function looks for a property named 'backlight' on the DT node
+ * connected to @dev and looks up the backlight device.
+ *
+ * Call backlight_put() to drop the reference on the backlight device.
+ *
+ * Returns:
+ * A pointer to the backlight device if found.
+ * Error pointer -EPROBE_DEFER if the DT property is set, but no backlight
+ * device is found.
+ * NULL if there's no backlight property.
+ */
+struct backlight_device *of_find_backlight(struct device *dev)
+{
+ struct backlight_device *bd = NULL;
+ struct device_node *np;
+
+ if (!dev)
+ return NULL;
+
+ if (IS_ENABLED(CONFIG_OF) && dev->of_node) {
+ np = of_parse_phandle(dev->of_node, "backlight", 0);
+ if (np) {
+ bd = of_find_backlight_by_node(np);
+ of_node_put(np);
+ if (!bd)
+ return ERR_PTR(-EPROBE_DEFER);
+ /*
+ * Note: gpio_backlight uses brightness as
+ * power state during probe
+ */
+ if (!bd->props.brightness)
+ bd->props.brightness = bd->props.max_brightness;
+ }
+ }
+
+ return bd;
+}
+EXPORT_SYMBOL(of_find_backlight);
+
static void __exit backlight_class_exit(void)
{
class_destroy(backlight_class);
diff --git a/include/linux/backlight.h b/include/linux/backlight.h
index ace825e2c..ddc9bade4 100644
--- a/include/linux/backlight.h
+++ b/include/linux/backlight.h
@@ -162,6 +162,16 @@ static inline int backlight_disable(struct backlight_device *bd)
return backlight_update_status(bd);
}
+/**
+ * backlight_put - Drop backlight reference
+ * @bd: the backlight device to put
+ */
+static inline void backlight_put(struct backlight_device *bd)
+{
+ if (bd)
+ put_device(&bd->dev);
+}
+
extern struct backlight_device *backlight_device_register(const char *name,
struct device *dev, void *devdata, const struct backlight_ops *ops,
const struct backlight_properties *props);
@@ -205,4 +215,13 @@ of_find_backlight_by_node(struct device_node *node)
}
#endif
+#if IS_ENABLED(CONFIG_BACKLIGHT_CLASS_DEVICE)
+struct backlight_device *of_find_backlight(struct device *dev);
+#else
+static inline struct backlight_device *of_find_backlight(struct device *dev)
+{
+ return NULL;
+}
+#endif
+
#endif
--
2.11.0