Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c2adda27 authored by Meghana Madhyastha's avatar Meghana Madhyastha Committed by Sean Paul
Browse files

video: backlight: Add of_find_backlight helper in backlight.c



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.

Acked-by: default avatarDaniel Thompson <daniel.thompson@linaro.org>
Reviewed-by: default avatarNoralf Trønnes <noralf@tronnes.org>
Reviewed-by: default avatarSean Paul <seanpaul@chromium.org>
Reviewed-by: default avatarThierry Reding <treding@nvidia.com>
Signed-off-by: default avatarMeghana Madhyastha <meghana.madhyastha@gmail.com>
Signed-off-by: default avatarSean Paul <seanpaul@chromium.org>
Link: https://patchwork.freedesktop.org/patch/msgid/116d160ba78be2e6dcbdcb6855622bce67da9472.1516810725.git.meghana.madhyastha@gmail.com
parent 5b698be0
Loading
Loading
Loading
Loading
+43 −0
Original line number Diff line number Diff line
@@ -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);
+19 −0
Original line number Diff line number Diff line
@@ -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