Move drm helper functions from tinydrm-helpers to linux/backlight for ease of use by callers in other drivers.
Changes in v8: -Move backlight_enable and backlight_disable to linux/backlight.h as static inline functions. -Move drm_of_find_backlight to backlight.c and rename it to backlight_get.
Meghana Madhyastha (3): drm/tinydrm: Move helper functions from tinydrm-helpers to backlight.h drm/tinydrm: Move tinydrm_of_find_backlight to backlight.c drm/tinydrm: Add devres versions of backlight_get
drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c | 95 -------------------------- drivers/gpu/drm/tinydrm/mi0283qt.c | 3 +- drivers/gpu/drm/tinydrm/mipi-dbi.c | 3 +- drivers/video/backlight/backlight.c | 71 +++++++++++++++++++ include/drm/tinydrm/tinydrm-helpers.h | 5 -- include/linux/backlight.h | 55 +++++++++++++++ 6 files changed, 130 insertions(+), 102 deletions(-)
Move the helper functions enable_backlight and disable_backlight from tinydrm-helpers.c to backlight.h as static inline functions so that they can be used by other drivers.
Signed-off-by: Meghana Madhyastha meghana.madhyastha@gmail.com --- Changes in v8: -This patch was not present in the earlier versions.
drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c | 55 -------------------------- drivers/gpu/drm/tinydrm/mipi-dbi.c | 3 +- include/drm/tinydrm/tinydrm-helpers.h | 2 - include/linux/backlight.h | 30 ++++++++++++++ 4 files changed, 32 insertions(+), 58 deletions(-)
diff --git a/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c b/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c index bd6cce0..a42dee6 100644 --- a/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c +++ b/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c @@ -276,61 +276,6 @@ struct backlight_device *tinydrm_of_find_backlight(struct device *dev) } EXPORT_SYMBOL(tinydrm_of_find_backlight);
-/** - * tinydrm_enable_backlight - Enable backlight helper - * @backlight: Backlight device - * - * Returns: - * Zero on success, negative error code on failure. - */ -int tinydrm_enable_backlight(struct backlight_device *backlight) -{ - unsigned int old_state; - int ret; - - if (!backlight) - return 0; - - old_state = backlight->props.state; - backlight->props.state &= ~BL_CORE_FBBLANK; - DRM_DEBUG_KMS("Backlight state: 0x%x -> 0x%x\n", old_state, - backlight->props.state); - - ret = backlight_update_status(backlight); - if (ret) - DRM_ERROR("Failed to enable backlight %d\n", ret); - - return ret; -} -EXPORT_SYMBOL(tinydrm_enable_backlight); - -/** - * tinydrm_disable_backlight - Disable backlight helper - * @backlight: Backlight device - * - * Returns: - * Zero on success, negative error code on failure. - */ -int tinydrm_disable_backlight(struct backlight_device *backlight) -{ - unsigned int old_state; - int ret; - - if (!backlight) - return 0; - - old_state = backlight->props.state; - backlight->props.state |= BL_CORE_FBBLANK; - DRM_DEBUG_KMS("Backlight state: 0x%x -> 0x%x\n", old_state, - backlight->props.state); - ret = backlight_update_status(backlight); - if (ret) - DRM_ERROR("Failed to disable backlight %d\n", ret); - - return ret; -} -EXPORT_SYMBOL(tinydrm_disable_backlight); - #if IS_ENABLED(CONFIG_SPI)
/** diff --git a/drivers/gpu/drm/tinydrm/mipi-dbi.c b/drivers/gpu/drm/tinydrm/mipi-dbi.c index 2caeabc..46f0e80 100644 --- a/drivers/gpu/drm/tinydrm/mipi-dbi.c +++ b/drivers/gpu/drm/tinydrm/mipi-dbi.c @@ -11,6 +11,7 @@
#include <drm/tinydrm/mipi-dbi.h> #include <drm/tinydrm/tinydrm-helpers.h> +#include <linux/backlight.h> #include <linux/debugfs.h> #include <linux/dma-buf.h> #include <linux/gpio/consumer.h> @@ -279,7 +280,7 @@ void mipi_dbi_pipe_enable(struct drm_simple_display_pipe *pipe, if (fb) fb->funcs->dirty(fb, NULL, 0, 0, NULL, 0);
- tinydrm_enable_backlight(mipi->backlight); + enable_backlight(mipi->backlight); } EXPORT_SYMBOL(mipi_dbi_pipe_enable);
diff --git a/include/drm/tinydrm/tinydrm-helpers.h b/include/drm/tinydrm/tinydrm-helpers.h index d554ded..f54fae0 100644 --- a/include/drm/tinydrm/tinydrm-helpers.h +++ b/include/drm/tinydrm/tinydrm-helpers.h @@ -47,8 +47,6 @@ void tinydrm_xrgb8888_to_gray8(u8 *dst, void *vaddr, struct drm_framebuffer *fb, struct drm_clip_rect *clip);
struct backlight_device *tinydrm_of_find_backlight(struct device *dev); -int tinydrm_enable_backlight(struct backlight_device *backlight); -int tinydrm_disable_backlight(struct backlight_device *backlight);
size_t tinydrm_spi_max_transfer_size(struct spi_device *spi, size_t max_len); bool tinydrm_spi_bpw_supported(struct spi_device *spi, u8 bpw); diff --git a/include/linux/backlight.h b/include/linux/backlight.h index 5f2fd61..355e9f5 100644 --- a/include/linux/backlight.h +++ b/include/linux/backlight.h @@ -153,6 +153,36 @@ static inline void * bl_get_data(struct backlight_device *bl_dev) return dev_get_drvdata(&bl_dev->dev); }
+/** + * backlight_enable - Enable backlight + * @bd: the backlight device to enable + */ +static inline int backlight_enable(struct backlight_device *bd) +{ + if (!bd) + return 0; + + bd->props.power = FB_BLANK_UNBLANK; + bd->props.state &= ~BL_CORE_FBBLANK; + + return backlight_update_status(bd); +} + +/** + * backlight_disable - Disable backlight + * @bd: the backlight device to disable + */ +static inline int backlight_disable(struct backlight_device *bd) +{ + if (!bd) + return 0; + + bd->props.power = FB_BLANK_POWERDOWN; + bd->props.state |= BL_CORE_FBBLANK; + + return backlight_update_status(bd); +} + struct generic_bl_info { const char *name; int max_intensity;
Rename tinydrm_of_find_backlight to backlight_get and move it to linux/backlight.c so that it can be used by other drivers.
Signed-off-by: Meghana Madhyastha meghana.madhyastha@gmail.com --- Changes in v8: -Changed the name of the tinydrm_of_find_backlight to backlight_get and moved it to backlight.c
drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c | 40 -------------------------- drivers/gpu/drm/tinydrm/mi0283qt.c | 3 +- drivers/video/backlight/backlight.c | 40 ++++++++++++++++++++++++++ include/drm/tinydrm/tinydrm-helpers.h | 3 -- include/linux/backlight.h | 9 ++++++ 5 files changed, 51 insertions(+), 44 deletions(-)
diff --git a/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c b/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c index a42dee6..cb1a01a 100644 --- a/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c +++ b/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c @@ -236,46 +236,6 @@ void tinydrm_xrgb8888_to_gray8(u8 *dst, void *vaddr, struct drm_framebuffer *fb, } EXPORT_SYMBOL(tinydrm_xrgb8888_to_gray8);
-/** - * tinydrm_of_find_backlight - Find backlight device in device-tree - * @dev: Device - * - * This function looks for a DT node pointed to by a property named 'backlight' - * and uses of_find_backlight_by_node() to get the backlight device. - * Additionally if the brightness property is zero, it is set to - * max_brightness. - * - * 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 *tinydrm_of_find_backlight(struct device *dev) -{ - struct backlight_device *backlight; - struct device_node *np; - - np = of_parse_phandle(dev->of_node, "backlight", 0); - if (!np) - return NULL; - - backlight = of_find_backlight_by_node(np); - of_node_put(np); - - if (!backlight) - return ERR_PTR(-EPROBE_DEFER); - - if (!backlight->props.brightness) { - backlight->props.brightness = backlight->props.max_brightness; - DRM_DEBUG_KMS("Backlight brightness set to %d\n", - backlight->props.brightness); - } - - return backlight; -} -EXPORT_SYMBOL(tinydrm_of_find_backlight); - #if IS_ENABLED(CONFIG_SPI)
/** diff --git a/drivers/gpu/drm/tinydrm/mi0283qt.c b/drivers/gpu/drm/tinydrm/mi0283qt.c index 7e5bb7d..edf9502 100644 --- a/drivers/gpu/drm/tinydrm/mi0283qt.c +++ b/drivers/gpu/drm/tinydrm/mi0283qt.c @@ -12,6 +12,7 @@ #include <drm/tinydrm/ili9341.h> #include <drm/tinydrm/mipi-dbi.h> #include <drm/tinydrm/tinydrm-helpers.h> +#include <linux/backlight.h> #include <linux/delay.h> #include <linux/gpio/consumer.h> #include <linux/module.h> @@ -189,7 +190,7 @@ static int mi0283qt_probe(struct spi_device *spi) if (IS_ERR(mipi->regulator)) return PTR_ERR(mipi->regulator);
- mipi->backlight = tinydrm_of_find_backlight(dev); + mipi->backlight = backlight_get(dev); if (IS_ERR(mipi->backlight)) return PTR_ERR(mipi->backlight);
diff --git a/drivers/video/backlight/backlight.c b/drivers/video/backlight/backlight.c index 8049e76..1debb60 100644 --- a/drivers/video/backlight/backlight.c +++ b/drivers/video/backlight/backlight.c @@ -580,6 +580,46 @@ struct backlight_device *of_find_backlight_by_node(struct device_node *node) EXPORT_SYMBOL(of_find_backlight_by_node); #endif
+/** + * backlight_get - 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. + */ + +#if IS_ENABLED(CONFIG_BACKLIGHT_CLASS_DEVICE) +struct backlight_device *backlight_get(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); + } + } + + return bd; +} +EXPORT_SYMBOL(backlight_get); +#endif + static void __exit backlight_class_exit(void) { class_destroy(backlight_class); diff --git a/include/drm/tinydrm/tinydrm-helpers.h b/include/drm/tinydrm/tinydrm-helpers.h index f54fae0..b89d8e4 100644 --- a/include/drm/tinydrm/tinydrm-helpers.h +++ b/include/drm/tinydrm/tinydrm-helpers.h @@ -10,7 +10,6 @@ #ifndef __LINUX_TINYDRM_HELPERS_H #define __LINUX_TINYDRM_HELPERS_H
-struct backlight_device; struct tinydrm_device; struct drm_clip_rect; struct spi_transfer; @@ -46,8 +45,6 @@ void tinydrm_xrgb8888_to_rgb565(u16 *dst, void *vaddr, void tinydrm_xrgb8888_to_gray8(u8 *dst, void *vaddr, struct drm_framebuffer *fb, struct drm_clip_rect *clip);
-struct backlight_device *tinydrm_of_find_backlight(struct device *dev); - size_t tinydrm_spi_max_transfer_size(struct spi_device *spi, size_t max_len); bool tinydrm_spi_bpw_supported(struct spi_device *spi, u8 bpw); int tinydrm_spi_transfer(struct spi_device *spi, u32 speed_hz, diff --git a/include/linux/backlight.h b/include/linux/backlight.h index 355e9f5..1d713b3 100644 --- a/include/linux/backlight.h +++ b/include/linux/backlight.h @@ -202,4 +202,13 @@ of_find_backlight_by_node(struct device_node *node) } #endif
+#if IS_ENABLED(CONFIG_BACKLIGHT_CLASS_DEVICE) +struct backlight_device *backlight_get(struct device *dev); +#else +static inline struct backlight_device *backlight_get(struct device *dev) +{ + return NULL; +} +#endif + #endif
Add devm_backlight_get and the corresponding release function because some drivers use devres versions of functions for requiring device resources.
Signed-off-by: Meghana Madhyastha meghana.madhyastha@gmail.com --- Changes in v8: -Put the devres version to backlight.c along with backlight_get.
drivers/gpu/drm/tinydrm/mi0283qt.c | 2 +- drivers/video/backlight/backlight.c | 31 +++++++++++++++++++++++++++++++ include/linux/backlight.h | 16 ++++++++++++++++ 3 files changed, 48 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/tinydrm/mi0283qt.c b/drivers/gpu/drm/tinydrm/mi0283qt.c index edf9502..03fec36 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 = backlight_get(dev); + mipi->backlight = devm_backlight_get(dev); if (IS_ERR(mipi->backlight)) return PTR_ERR(mipi->backlight);
diff --git a/drivers/video/backlight/backlight.c b/drivers/video/backlight/backlight.c index 1debb60..9b24dc2 100644 --- a/drivers/video/backlight/backlight.c +++ b/drivers/video/backlight/backlight.c @@ -618,6 +618,37 @@ struct backlight_device *backlight_get(struct device *dev) return bd; } EXPORT_SYMBOL(backlight_get); + +static void devm_backlight_get_release(void *data) +{ + backlight_put(data); +} + +/** + * devm_backlight_get - Resource-managed backlight_get() + * @dev: Device + * + * Device managed version of backlight_get(). The reference on the backlight + * device is automatically dropped on driver detach. + */ +struct backlight_device *devm_backlight_get(struct device *dev) +{ + struct backlight_device *bd; + int ret; + + bd = backlight_get(dev); + if (!bd) + return NULL; + + ret = devm_add_action(dev, devm_backlight_get_release, bd); + if (ret) { + backlight_put(bd); + return ERR_PTR(ret); + } + + return bd; +} +EXPORT_SYMBOL(devm_backlight_get); #endif
static void __exit backlight_class_exit(void) diff --git a/include/linux/backlight.h b/include/linux/backlight.h index 1d713b3..0bfadb6 100644 --- a/include/linux/backlight.h +++ b/include/linux/backlight.h @@ -183,6 +183,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); +} + struct generic_bl_info { const char *name; int max_intensity; @@ -204,11 +214,17 @@ of_find_backlight_by_node(struct device_node *node)
#if IS_ENABLED(CONFIG_BACKLIGHT_CLASS_DEVICE) struct backlight_device *backlight_get(struct device *dev); +struct backlight_device *devm_backlight_get(struct device *dev); #else static inline struct backlight_device *backlight_get(struct device *dev) { return NULL; } + +static inline struct backlight_device *devm_backlight_get(struct device *dev) +{ + return NULL; +} #endif
#endif
On Wed, 11 Oct 2017, Meghana Madhyastha meghana.madhyastha@gmail.com wrote:
Add devm_backlight_get and the corresponding release function because some drivers use devres versions of functions for requiring device resources.
Signed-off-by: Meghana Madhyastha meghana.madhyastha@gmail.com
Changes in v8: -Put the devres version to backlight.c along with backlight_get.
drivers/gpu/drm/tinydrm/mi0283qt.c | 2 +- drivers/video/backlight/backlight.c | 31 +++++++++++++++++++++++++++++++ include/linux/backlight.h | 16 ++++++++++++++++ 3 files changed, 48 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/tinydrm/mi0283qt.c b/drivers/gpu/drm/tinydrm/mi0283qt.c index edf9502..03fec36 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 = backlight_get(dev);
- mipi->backlight = devm_backlight_get(dev); if (IS_ERR(mipi->backlight)) return PTR_ERR(mipi->backlight);
diff --git a/drivers/video/backlight/backlight.c b/drivers/video/backlight/backlight.c index 1debb60..9b24dc2 100644 --- a/drivers/video/backlight/backlight.c +++ b/drivers/video/backlight/backlight.c @@ -618,6 +618,37 @@ struct backlight_device *backlight_get(struct device *dev) return bd; } EXPORT_SYMBOL(backlight_get);
+static void devm_backlight_get_release(void *data)
I think that's a confusing name because of the "get", maybe just call it devm_backlight_put?
BR, Jani.
+{
- backlight_put(data);
+}
+/**
- devm_backlight_get - Resource-managed backlight_get()
- @dev: Device
- Device managed version of backlight_get(). The reference on the backlight
- device is automatically dropped on driver detach.
- */
+struct backlight_device *devm_backlight_get(struct device *dev) +{
- struct backlight_device *bd;
- int ret;
- bd = backlight_get(dev);
- if (!bd)
return NULL;
- ret = devm_add_action(dev, devm_backlight_get_release, bd);
- if (ret) {
backlight_put(bd);
return ERR_PTR(ret);
- }
- return bd;
+} +EXPORT_SYMBOL(devm_backlight_get); #endif
static void __exit backlight_class_exit(void) diff --git a/include/linux/backlight.h b/include/linux/backlight.h index 1d713b3..0bfadb6 100644 --- a/include/linux/backlight.h +++ b/include/linux/backlight.h @@ -183,6 +183,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);
+}
struct generic_bl_info { const char *name; int max_intensity; @@ -204,11 +214,17 @@ of_find_backlight_by_node(struct device_node *node)
#if IS_ENABLED(CONFIG_BACKLIGHT_CLASS_DEVICE) struct backlight_device *backlight_get(struct device *dev); +struct backlight_device *devm_backlight_get(struct device *dev); #else static inline struct backlight_device *backlight_get(struct device *dev) { return NULL; }
+static inline struct backlight_device *devm_backlight_get(struct device *dev) +{
- return NULL;
+} #endif
#endif
On Wed, Oct 11, 2017 at 04:56:25PM +0300, Jani Nikula wrote:
On Wed, 11 Oct 2017, Meghana Madhyastha meghana.madhyastha@gmail.com wrote:
Add devm_backlight_get and the corresponding release function because some drivers use devres versions of functions for requiring device resources.
Signed-off-by: Meghana Madhyastha meghana.madhyastha@gmail.com
Changes in v8: -Put the devres version to backlight.c along with backlight_get.
drivers/gpu/drm/tinydrm/mi0283qt.c | 2 +- drivers/video/backlight/backlight.c | 31 +++++++++++++++++++++++++++++++ include/linux/backlight.h | 16 ++++++++++++++++ 3 files changed, 48 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/tinydrm/mi0283qt.c b/drivers/gpu/drm/tinydrm/mi0283qt.c index edf9502..03fec36 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 = backlight_get(dev);
- mipi->backlight = devm_backlight_get(dev); if (IS_ERR(mipi->backlight)) return PTR_ERR(mipi->backlight);
diff --git a/drivers/video/backlight/backlight.c b/drivers/video/backlight/backlight.c index 1debb60..9b24dc2 100644 --- a/drivers/video/backlight/backlight.c +++ b/drivers/video/backlight/backlight.c @@ -618,6 +618,37 @@ struct backlight_device *backlight_get(struct device *dev) return bd; } EXPORT_SYMBOL(backlight_get);
+static void devm_backlight_get_release(void *data)
I think that's a confusing name because of the "get", maybe just call it devm_backlight_put?
backlight_put is already in use as a helper function so wouldn't devm_backlight_put be confusing as there is already a backlight_put?
Regards, Meghana
BR, Jani.
+{
- backlight_put(data);
+}
+/**
- devm_backlight_get - Resource-managed backlight_get()
- @dev: Device
- Device managed version of backlight_get(). The reference on the backlight
- device is automatically dropped on driver detach.
- */
+struct backlight_device *devm_backlight_get(struct device *dev) +{
- struct backlight_device *bd;
- int ret;
- bd = backlight_get(dev);
- if (!bd)
return NULL;
- ret = devm_add_action(dev, devm_backlight_get_release, bd);
- if (ret) {
backlight_put(bd);
return ERR_PTR(ret);
- }
- return bd;
+} +EXPORT_SYMBOL(devm_backlight_get); #endif
static void __exit backlight_class_exit(void) diff --git a/include/linux/backlight.h b/include/linux/backlight.h index 1d713b3..0bfadb6 100644 --- a/include/linux/backlight.h +++ b/include/linux/backlight.h @@ -183,6 +183,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);
+}
struct generic_bl_info { const char *name; int max_intensity; @@ -204,11 +214,17 @@ of_find_backlight_by_node(struct device_node *node)
#if IS_ENABLED(CONFIG_BACKLIGHT_CLASS_DEVICE) struct backlight_device *backlight_get(struct device *dev); +struct backlight_device *devm_backlight_get(struct device *dev); #else static inline struct backlight_device *backlight_get(struct device *dev) { return NULL; }
+static inline struct backlight_device *devm_backlight_get(struct device *dev) +{
- return NULL;
+} #endif
#endif
-- Jani Nikula, Intel Open Source Technology Center
On Wed, 11 Oct 2017, Meghana Madhyastha meghana.madhyastha@gmail.com wrote:
On Wed, Oct 11, 2017 at 04:56:25PM +0300, Jani Nikula wrote:
On Wed, 11 Oct 2017, Meghana Madhyastha meghana.madhyastha@gmail.com wrote:
Add devm_backlight_get and the corresponding release function because some drivers use devres versions of functions for requiring device resources.
Signed-off-by: Meghana Madhyastha meghana.madhyastha@gmail.com
Changes in v8: -Put the devres version to backlight.c along with backlight_get.
drivers/gpu/drm/tinydrm/mi0283qt.c | 2 +- drivers/video/backlight/backlight.c | 31 +++++++++++++++++++++++++++++++ include/linux/backlight.h | 16 ++++++++++++++++ 3 files changed, 48 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/tinydrm/mi0283qt.c b/drivers/gpu/drm/tinydrm/mi0283qt.c index edf9502..03fec36 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 = backlight_get(dev);
- mipi->backlight = devm_backlight_get(dev); if (IS_ERR(mipi->backlight)) return PTR_ERR(mipi->backlight);
diff --git a/drivers/video/backlight/backlight.c b/drivers/video/backlight/backlight.c index 1debb60..9b24dc2 100644 --- a/drivers/video/backlight/backlight.c +++ b/drivers/video/backlight/backlight.c @@ -618,6 +618,37 @@ struct backlight_device *backlight_get(struct device *dev) return bd; } EXPORT_SYMBOL(backlight_get);
+static void devm_backlight_get_release(void *data)
I think that's a confusing name because of the "get", maybe just call it devm_backlight_put?
backlight_put is already in use as a helper function so wouldn't devm_backlight_put be confusing as there is already a backlight_put?
I'd think not, as it literally is a devm version of the same thing.
BR, Jani.
Regards, Meghana
BR, Jani.
+{
- backlight_put(data);
+}
+/**
- devm_backlight_get - Resource-managed backlight_get()
- @dev: Device
- Device managed version of backlight_get(). The reference on the backlight
- device is automatically dropped on driver detach.
- */
+struct backlight_device *devm_backlight_get(struct device *dev) +{
- struct backlight_device *bd;
- int ret;
- bd = backlight_get(dev);
- if (!bd)
return NULL;
- ret = devm_add_action(dev, devm_backlight_get_release, bd);
- if (ret) {
backlight_put(bd);
return ERR_PTR(ret);
- }
- return bd;
+} +EXPORT_SYMBOL(devm_backlight_get); #endif
static void __exit backlight_class_exit(void) diff --git a/include/linux/backlight.h b/include/linux/backlight.h index 1d713b3..0bfadb6 100644 --- a/include/linux/backlight.h +++ b/include/linux/backlight.h @@ -183,6 +183,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);
+}
struct generic_bl_info { const char *name; int max_intensity; @@ -204,11 +214,17 @@ of_find_backlight_by_node(struct device_node *node)
#if IS_ENABLED(CONFIG_BACKLIGHT_CLASS_DEVICE) struct backlight_device *backlight_get(struct device *dev); +struct backlight_device *devm_backlight_get(struct device *dev); #else static inline struct backlight_device *backlight_get(struct device *dev) { return NULL; }
+static inline struct backlight_device *devm_backlight_get(struct device *dev) +{
- return NULL;
+} #endif
#endif
-- Jani Nikula, Intel Open Source Technology Center
dri-devel@lists.freedesktop.org