[PATCH v2 1/3] drm: Move EXPORT_SYMBOL so that it immediately follows its function
EXPORT_SYMBOL(foo) should immediately follow its function/variable. This coding style is preferred. Found by checkpath.pl. Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> --- drivers/gpu/drm/drm_agpsupport.c | 4 1 file changed, 4 deletions(-) diff --git a/drivers/gpu/drm/drm_agpsupport.c b/drivers/gpu/drm/drm_agpsupport.c index c899534..928248e 100644 --- a/drivers/gpu/drm/drm_agpsupport.c +++ b/drivers/gpu/drm/drm_agpsupport.c @@ -70,7 +70,6 @@ int drm_agp_info(struct drm_device *dev, struct drm_agp_info *info) return 0; } - EXPORT_SYMBOL(drm_agp_info); int drm_agp_info_ioctl(struct drm_device *dev, void *data, @@ -106,7 +105,6 @@ int drm_agp_acquire(struct drm_device * dev) dev->agp->acquired = 1; return 0; } - EXPORT_SYMBOL(drm_agp_acquire); /** @@ -171,7 +169,6 @@ int drm_agp_enable(struct drm_device * dev, struct drm_agp_mode mode) dev->agp->enabled = 1; return 0; } - EXPORT_SYMBOL(drm_agp_enable); int drm_agp_enable_ioctl(struct drm_device *dev, void *data, @@ -373,7 +370,6 @@ int drm_agp_free(struct drm_device *dev, struct drm_agp_buffer *request) EXPORT_SYMBOL(drm_agp_free); - int drm_agp_free_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv) { -- 2.7.4 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH v3 1/4] drm/agpsupport: Replace "foo * bar" with "foo *bar"
This replaces all instances of foo * bar with foo *bar in drm_agpsupport.c. This is so that it adheres to standard C syntax for pointers. Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> --- Changes in v3: -None drivers/gpu/drm/drm_agpsupport.c | 10 +- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/drm_agpsupport.c b/drivers/gpu/drm/drm_agpsupport.c index c899534..d9e8cdd 100644 --- a/drivers/gpu/drm/drm_agpsupport.c +++ b/drivers/gpu/drm/drm_agpsupport.c @@ -95,7 +95,7 @@ int drm_agp_info_ioctl(struct drm_device *dev, void *data, * Verifies the AGP device hasn't been acquired before and calls * \c agp_backend_acquire. */ -int drm_agp_acquire(struct drm_device * dev) +int drm_agp_acquire(struct drm_device *dev) { if (!dev->agp) return -ENODEV; @@ -135,7 +135,7 @@ int drm_agp_acquire_ioctl(struct drm_device *dev, void *data, * * Verifies the AGP device has been acquired and calls \c agp_backend_release. */ -int drm_agp_release(struct drm_device * dev) +int drm_agp_release(struct drm_device *dev) { if (!dev->agp || !dev->agp->acquired) return -EINVAL; @@ -161,7 +161,7 @@ int drm_agp_release_ioctl(struct drm_device *dev, void *data, * Verifies the AGP device has been acquired but not enabled, and calls * \c agp_enable. */ -int drm_agp_enable(struct drm_device * dev, struct drm_agp_mode mode) +int drm_agp_enable(struct drm_device *dev, struct drm_agp_mode mode) { if (!dev->agp || !dev->agp->acquired) return -EINVAL; @@ -244,8 +244,8 @@ int drm_agp_alloc_ioctl(struct drm_device *dev, void *data, * * Walks through drm_agp_head::memory until finding a matching handle. */ -static struct drm_agp_mem *drm_agp_lookup_entry(struct drm_device * dev, - unsigned long handle) +static struct drm_agp_mem *drm_agp_lookup_entry(struct drm_device *dev, + unsigned long handle) { struct drm_agp_mem *entry; -- 2.7.4 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH v3 2/4] drm/agpsupport: Remove assignment in if condition
Move the assignment so that it happens before the if condition. Merged multiple similar conditionals to a single conditional statement. This results in syntax which is easier to read. Found by checkpath.pl Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> --- Changes in v3: -Added "Merged multiple similar conditionals" to the commit message. drivers/gpu/drm/drm_agpsupport.c | 31 ++- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/drivers/gpu/drm/drm_agpsupport.c b/drivers/gpu/drm/drm_agpsupport.c index d9e8cdd..860d57a 100644 --- a/drivers/gpu/drm/drm_agpsupport.c +++ b/drivers/gpu/drm/drm_agpsupport.c @@ -101,7 +101,8 @@ int drm_agp_acquire(struct drm_device *dev) return -ENODEV; if (dev->agp->acquired) return -EBUSY; - if (!(dev->agp->bridge = agp_backend_acquire(dev->pdev))) + dev->agp->bridge = agp_backend_acquire(dev->pdev); + if (!dev->agp->bridge) return -ENODEV; dev->agp->acquired = 1; return 0; @@ -203,12 +204,14 @@ int drm_agp_alloc(struct drm_device *dev, struct drm_agp_buffer *request) if (!dev->agp || !dev->agp->acquired) return -EINVAL; - if (!(entry = kzalloc(sizeof(*entry), GFP_KERNEL))) + entry = kzalloc(sizeof(*entry), GFP_KERNEL); + if (!entry) return -ENOMEM; pages = (request->size + PAGE_SIZE - 1) / PAGE_SIZE; type = (u32) request->type; - if (!(memory = agp_allocate_memory(dev->agp->bridge, pages, type))) { + memory = agp_allocate_memory(dev->agp->bridge, pages, type); + if (!memory) { kfree(entry); return -ENOMEM; } @@ -275,9 +278,8 @@ int drm_agp_unbind(struct drm_device *dev, struct drm_agp_binding *request) if (!dev->agp || !dev->agp->acquired) return -EINVAL; - if (!(entry = drm_agp_lookup_entry(dev, request->handle))) - return -EINVAL; - if (!entry->bound) + entry = drm_agp_lookup_entry(dev, request->handle); + if (!entry || !entry->bound) return -EINVAL; ret = drm_unbind_agp(entry->memory); if (ret == 0) @@ -316,12 +318,12 @@ int drm_agp_bind(struct drm_device *dev, struct drm_agp_binding *request) if (!dev->agp || !dev->agp->acquired) return -EINVAL; - if (!(entry = drm_agp_lookup_entry(dev, request->handle))) - return -EINVAL; - if (entry->bound) + entry = drm_agp_lookup_entry(dev, request->handle); + if (!entry || entry->bound) return -EINVAL; page = (request->offset + PAGE_SIZE - 1) / PAGE_SIZE; - if ((retcode = drm_bind_agp(entry->memory, page))) + retcode = drm_bind_agp(entry->memory, page); + if (retcode) return retcode; entry->bound = dev->agp->base + (page << PAGE_SHIFT); DRM_DEBUG("base = 0x%lx entry->bound = 0x%lx\n", @@ -359,7 +361,8 @@ int drm_agp_free(struct drm_device *dev, struct drm_agp_buffer *request) if (!dev->agp || !dev->agp->acquired) return -EINVAL; - if (!(entry = drm_agp_lookup_entry(dev, request->handle))) + entry = drm_agp_lookup_entry(dev, request->handle); + if (!entry) return -EINVAL; if (entry->bound) drm_unbind_agp(entry->memory); @@ -398,11 +401,13 @@ struct drm_agp_head *drm_agp_init(struct drm_device *dev) { struct drm_agp_head *head = NULL; - if (!(head = kzalloc(sizeof(*head), GFP_KERNEL))) + head = kzalloc(sizeof(*head), GFP_KERNEL); + if (!head) return NULL; head->bridge = agp_find_bridge(dev->pdev); if (!head->bridge) { - if (!(head->bridge = agp_backend_acquire(dev->pdev))) { + head->bridge = agp_backend_acquire(dev->pdev); + if (!head->bridge) { kfree(head); return NULL; } -- 2.7.4 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH v3 0/4] drm/agpsupport: Code cleanup
Removes checkpath.pl errors and warnings. Changes in v3: -Change commit title prefix from drm to drm/agpsupport -Split the commit "Move EXPORT_SYMBOL so that it immediately follows its function" into two commits. Removing the extra blank line is now a separate commit. -Included merging conditionals in "Remove assignment in if condition" in the commit message Meghana Madhyastha (4): drm/agpsupport: Replace "foo * bar" with "foo *bar" drm/agpsupport: Remove assignment in if condition drm/agpsupport: Move EXPORT_SYMBOL so that it immediately follows its function drm/agpsupport: Remove extra blank line drivers/gpu/drm/drm_agpsupport.c | 45 1 file changed, 23 insertions(+), 22 deletions(-) -- 2.7.4 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH v3 4/4] drm/agpsupport: Remove extra blank line
Remove extra blank line to adhere to standard coding style. Found by checkpath.pl.. Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> --- Changes in v3: -This was part of another commit in v2 and v1. Now made this a separate commit drivers/gpu/drm/drm_agpsupport.c | 1 - 1 file changed, 1 deletion(-) diff --git a/drivers/gpu/drm/drm_agpsupport.c b/drivers/gpu/drm/drm_agpsupport.c index a0510557..737f028 100644 --- a/drivers/gpu/drm/drm_agpsupport.c +++ b/drivers/gpu/drm/drm_agpsupport.c @@ -373,7 +373,6 @@ int drm_agp_free(struct drm_device *dev, struct drm_agp_buffer *request) EXPORT_SYMBOL(drm_agp_free); - int drm_agp_free_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv) { -- 2.7.4 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH v3 3/4] drm/agpsupport: Move EXPORT_SYMBOL so that it immediately follows its function
EXPORT_SYMBOL(foo) should immediately follow its function/variable. This coding style is preferred. Found by checkpath.pl. Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> --- Changes in v3: -Split this commit into two commits and made another commit for removing the extra blank line not part of the EXPORT_SYMBOL warning drivers/gpu/drm/drm_agpsupport.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/drivers/gpu/drm/drm_agpsupport.c b/drivers/gpu/drm/drm_agpsupport.c index 860d57a..a0510557 100644 --- a/drivers/gpu/drm/drm_agpsupport.c +++ b/drivers/gpu/drm/drm_agpsupport.c @@ -70,7 +70,6 @@ int drm_agp_info(struct drm_device *dev, struct drm_agp_info *info) return 0; } - EXPORT_SYMBOL(drm_agp_info); int drm_agp_info_ioctl(struct drm_device *dev, void *data, @@ -107,7 +106,6 @@ int drm_agp_acquire(struct drm_device *dev) dev->agp->acquired = 1; return 0; } - EXPORT_SYMBOL(drm_agp_acquire); /** @@ -172,7 +170,6 @@ int drm_agp_enable(struct drm_device *dev, struct drm_agp_mode mode) dev->agp->enabled = 1; return 0; } - EXPORT_SYMBOL(drm_agp_enable); int drm_agp_enable_ioctl(struct drm_device *dev, void *data, -- 2.7.4 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH v2 0/3] drm: Code cleanup
These patches fix the checkpath warnings and errors in drm_agpsupport.c changes in v2: -Changed the commit subject prefix to follow the style used in drm. -Combine multiple redundant if conditions to a single condition in patch 3. Meghana Madhyastha (3): drm: Move EXPORT_SYMBOL so that it immediately follows its function drm: Replace "foo * bar" with "foo *bar" drm: Remove assignment in if condition drivers/gpu/drm/drm_agpsupport.c | 45 1 file changed, 23 insertions(+), 22 deletions(-) -- 2.7.4 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH v2 2/3] drm: Replace "foo * bar" with "foo *bar"
This replaces all instances of foo * bar with foo *bar in drm_agpsupport.c. This is so that it adheres to standard C syntax for pointers. Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> --- drivers/gpu/drm/drm_agpsupport.c | 10 +- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/drm_agpsupport.c b/drivers/gpu/drm/drm_agpsupport.c index 928248e..993e486 100644 --- a/drivers/gpu/drm/drm_agpsupport.c +++ b/drivers/gpu/drm/drm_agpsupport.c @@ -94,7 +94,7 @@ int drm_agp_info_ioctl(struct drm_device *dev, void *data, * Verifies the AGP device hasn't been acquired before and calls * \c agp_backend_acquire. */ -int drm_agp_acquire(struct drm_device * dev) +int drm_agp_acquire(struct drm_device *dev) { if (!dev->agp) return -ENODEV; @@ -133,7 +133,7 @@ int drm_agp_acquire_ioctl(struct drm_device *dev, void *data, * * Verifies the AGP device has been acquired and calls \c agp_backend_release. */ -int drm_agp_release(struct drm_device * dev) +int drm_agp_release(struct drm_device *dev) { if (!dev->agp || !dev->agp->acquired) return -EINVAL; @@ -159,7 +159,7 @@ int drm_agp_release_ioctl(struct drm_device *dev, void *data, * Verifies the AGP device has been acquired but not enabled, and calls * \c agp_enable. */ -int drm_agp_enable(struct drm_device * dev, struct drm_agp_mode mode) +int drm_agp_enable(struct drm_device *dev, struct drm_agp_mode mode) { if (!dev->agp || !dev->agp->acquired) return -EINVAL; @@ -241,8 +241,8 @@ int drm_agp_alloc_ioctl(struct drm_device *dev, void *data, * * Walks through drm_agp_head::memory until finding a matching handle. */ -static struct drm_agp_mem *drm_agp_lookup_entry(struct drm_device * dev, - unsigned long handle) +static struct drm_agp_mem *drm_agp_lookup_entry(struct drm_device *dev, + unsigned long handle) { struct drm_agp_mem *entry; -- 2.7.4 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH v2 3/3] drm: Remove assignment in if condition
Move the assignment so that it happens before the if condition. This results in syntax which is easier to read. Found by checkpath.pl Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> --- drivers/gpu/drm/drm_agpsupport.c | 31 ++- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/drivers/gpu/drm/drm_agpsupport.c b/drivers/gpu/drm/drm_agpsupport.c index 993e486..737f028 100644 --- a/drivers/gpu/drm/drm_agpsupport.c +++ b/drivers/gpu/drm/drm_agpsupport.c @@ -100,7 +100,8 @@ int drm_agp_acquire(struct drm_device *dev) return -ENODEV; if (dev->agp->acquired) return -EBUSY; - if (!(dev->agp->bridge = agp_backend_acquire(dev->pdev))) + dev->agp->bridge = agp_backend_acquire(dev->pdev); + if (!dev->agp->bridge) return -ENODEV; dev->agp->acquired = 1; return 0; @@ -200,12 +201,14 @@ int drm_agp_alloc(struct drm_device *dev, struct drm_agp_buffer *request) if (!dev->agp || !dev->agp->acquired) return -EINVAL; - if (!(entry = kzalloc(sizeof(*entry), GFP_KERNEL))) + entry = kzalloc(sizeof(*entry), GFP_KERNEL); + if (!entry) return -ENOMEM; pages = (request->size + PAGE_SIZE - 1) / PAGE_SIZE; type = (u32) request->type; - if (!(memory = agp_allocate_memory(dev->agp->bridge, pages, type))) { + memory = agp_allocate_memory(dev->agp->bridge, pages, type); + if (!memory) { kfree(entry); return -ENOMEM; } @@ -272,9 +275,8 @@ int drm_agp_unbind(struct drm_device *dev, struct drm_agp_binding *request) if (!dev->agp || !dev->agp->acquired) return -EINVAL; - if (!(entry = drm_agp_lookup_entry(dev, request->handle))) - return -EINVAL; - if (!entry->bound) + entry = drm_agp_lookup_entry(dev, request->handle); + if (!entry || !entry->bound) return -EINVAL; ret = drm_unbind_agp(entry->memory); if (ret == 0) @@ -313,12 +315,12 @@ int drm_agp_bind(struct drm_device *dev, struct drm_agp_binding *request) if (!dev->agp || !dev->agp->acquired) return -EINVAL; - if (!(entry = drm_agp_lookup_entry(dev, request->handle))) - return -EINVAL; - if (entry->bound) + entry = drm_agp_lookup_entry(dev, request->handle); + if (!entry || entry->bound) return -EINVAL; page = (request->offset + PAGE_SIZE - 1) / PAGE_SIZE; - if ((retcode = drm_bind_agp(entry->memory, page))) + retcode = drm_bind_agp(entry->memory, page); + if (retcode) return retcode; entry->bound = dev->agp->base + (page << PAGE_SHIFT); DRM_DEBUG("base = 0x%lx entry->bound = 0x%lx\n", @@ -356,7 +358,8 @@ int drm_agp_free(struct drm_device *dev, struct drm_agp_buffer *request) if (!dev->agp || !dev->agp->acquired) return -EINVAL; - if (!(entry = drm_agp_lookup_entry(dev, request->handle))) + entry = drm_agp_lookup_entry(dev, request->handle); + if (!entry) return -EINVAL; if (entry->bound) drm_unbind_agp(entry->memory); @@ -394,11 +397,13 @@ struct drm_agp_head *drm_agp_init(struct drm_device *dev) { struct drm_agp_head *head = NULL; - if (!(head = kzalloc(sizeof(*head), GFP_KERNEL))) + head = kzalloc(sizeof(*head), GFP_KERNEL); + if (!head) return NULL; head->bridge = agp_find_bridge(dev->pdev); if (!head->bridge) { - if (!(head->bridge = agp_backend_acquire(dev->pdev))) { + head->bridge = agp_backend_acquire(dev->pdev); + if (!head->bridge) { kfree(head); return NULL; } -- 2.7.4 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH] drm/tinydrm: Move backlight helpers to a separate file
Move backlight helpers from tinydrm-helpers.c to tinydrm-backlight.c Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> --- drivers/gpu/drm/tinydrm/core/Makefile| 2 +- drivers/gpu/drm/tinydrm/core/tinydrm-backlight.c | 103 +++ drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c | 94 - drivers/gpu/drm/tinydrm/mi0283qt.c | 1 + drivers/gpu/drm/tinydrm/mipi-dbi.c | 1 + include/drm/tinydrm/tinydrm-backlight.h | 18 6 files changed, 124 insertions(+), 95 deletions(-) create mode 100644 drivers/gpu/drm/tinydrm/core/tinydrm-backlight.c create mode 100644 include/drm/tinydrm/tinydrm-backlight.h diff --git a/drivers/gpu/drm/tinydrm/core/Makefile b/drivers/gpu/drm/tinydrm/core/Makefile index fb221e6..389ca7a 100644 --- a/drivers/gpu/drm/tinydrm/core/Makefile +++ b/drivers/gpu/drm/tinydrm/core/Makefile @@ -1,3 +1,3 @@ -tinydrm-y := tinydrm-core.o tinydrm-pipe.o tinydrm-helpers.o +tinydrm-y := tinydrm-core.o tinydrm-pipe.o tinydrm-backlight.o tinydrm-helpers.o obj-$(CONFIG_DRM_TINYDRM) += tinydrm.o diff --git a/drivers/gpu/drm/tinydrm/core/tinydrm-backlight.c b/drivers/gpu/drm/tinydrm/core/tinydrm-backlight.c new file mode 100644 index 000..dc6f17d --- /dev/null +++ b/drivers/gpu/drm/tinydrm/core/tinydrm-backlight.c @@ -0,0 +1,103 @@ +#include +#include +#include +#include + +#include +#include + +/** + * 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); + +/** + * 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); diff --git a/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c b/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c index bd6cce0..ee8ad8c 100644 --- a/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c +++ b/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c @@ -236,100 +236,6 @@ void tinydrm_xrgb_to_gray8(u8 *dst, void *vaddr, struct drm_framebuffer *fb, } EXPORT_SYMBOL(tinydrm_xrgb_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_ba
[PATCH] drm/amdgpu: Replace ref/unref with get/put
Replace functions with reference/unreference suffix with get/put suffix. Get/put is shorter and more consistent with the kernel function suffixes. Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> --- drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c| 4 ++-- drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.c | 4 ++-- drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c | 12 ++-- drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c | 2 +- drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c| 6 +++--- drivers/gpu/drm/amd/amdgpu/amdgpu_display.c | 6 +++--- drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c | 2 +- drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 2 +- drivers/gpu/drm/amd/amdgpu/amdgpu_object.c| 26 +++--- drivers/gpu/drm/amd/amdgpu/amdgpu_object.h| 2 ++ drivers/gpu/drm/amd/amdgpu/amdgpu_sa.c| 2 +- drivers/gpu/drm/amd/amdgpu/amdgpu_test.c | 6 +++--- drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 2 +- drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c | 4 ++-- drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c | 10 +- drivers/gpu/drm/amd/amdgpu/amdgpu_vcn.c | 10 +- drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c| 12 ++-- 17 files changed, 63 insertions(+), 49 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c index 5432af3..4d04194 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c @@ -223,7 +223,7 @@ int alloc_gtt_mem(struct kgd_dev *kgd, size_t size, allocate_mem_pin_bo_failed: amdgpu_bo_unreserve((*mem)->bo); allocate_mem_reserve_bo_failed: - amdgpu_bo_unref(&(*mem)->bo); + amdgpu_bo_put(&(*mem)->bo); return r; } @@ -238,7 +238,7 @@ void free_gtt_mem(struct kgd_dev *kgd, void *mem_obj) amdgpu_bo_kunmap(mem->bo); amdgpu_bo_unpin(mem->bo); amdgpu_bo_unreserve(mem->bo); - amdgpu_bo_unref(&(mem->bo)); + amdgpu_bo_put(&(mem->bo)); kfree(mem); } diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.c index 63ec1e1..a218d340 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.c @@ -128,7 +128,7 @@ static void amdgpu_benchmark_move(struct amdgpu_device *adev, unsigned size, amdgpu_bo_unpin(sobj); amdgpu_bo_unreserve(sobj); } - amdgpu_bo_unref(); + amdgpu_bo_put(); } if (dobj) { r = amdgpu_bo_reserve(dobj, true); @@ -136,7 +136,7 @@ static void amdgpu_benchmark_move(struct amdgpu_device *adev, unsigned size, amdgpu_bo_unpin(dobj); amdgpu_bo_unreserve(dobj); } - amdgpu_bo_unref(); + amdgpu_bo_put(); } } diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c index 59089e0..6a6c8c2 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c @@ -48,7 +48,7 @@ static void amdgpu_bo_list_release_rcu(struct kref *ref) refcount); for (i = 0; i < list->num_entries; ++i) - amdgpu_bo_unref(>array[i].robj); + amdgpu_bo_put(>array[i].robj); mutex_destroy(>lock); kvfree(list->array); @@ -135,13 +135,13 @@ static int amdgpu_bo_list_set(struct amdgpu_device *adev, goto error_free; } - bo = amdgpu_bo_ref(gem_to_amdgpu_bo(gobj)); + bo = amdgpu_bo_get(gem_to_amdgpu_bo(gobj)); drm_gem_object_put_unlocked(gobj); usermm = amdgpu_ttm_tt_get_usermm(bo->tbo.ttm); if (usermm) { if (usermm != current->mm) { - amdgpu_bo_unref(); + amdgpu_bo_put(); r = -EPERM; goto error_free; } @@ -168,7 +168,7 @@ static int amdgpu_bo_list_set(struct amdgpu_device *adev, } for (i = 0; i < list->num_entries; ++i) - amdgpu_bo_unref(>array[i].robj); + amdgpu_bo_put(>array[i].robj); kvfree(list->array); @@ -184,7 +184,7 @@ static int amdgpu_bo_list_set(struct amdgpu_device *adev, error_free: while (i--) - amdgpu_bo_unref([i].robj); + amdgpu_bo_put([i].robj); kvfree(array); return r; } @@ -254,7 +254,7 @@ void amdgpu_bo_list_free(struct amdgpu_bo_list *list) unsigned i; for (i = 0; i < list->num_entries; ++i) - amdgpu_bo_un
[PATCH v2] drm/tinydrm: Move backlight helpers to a separate file
Move backlight helpers from tinydrm-helpers.c to tinydrm-backlight.c. This is because it is organizationally simpler to understand and advantageous to group functions performing a similar function to a separate file as opposed to having one helper file with heteregenous helper functions. Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> --- Changes in v2: -Improved commit message by explaining why the changes were made. drivers/gpu/drm/tinydrm/core/Makefile| 2 +- drivers/gpu/drm/tinydrm/core/tinydrm-backlight.c | 103 +++ drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c | 94 - drivers/gpu/drm/tinydrm/mi0283qt.c | 1 + drivers/gpu/drm/tinydrm/mipi-dbi.c | 1 + include/drm/tinydrm/tinydrm-backlight.h | 18 6 files changed, 124 insertions(+), 95 deletions(-) create mode 100644 drivers/gpu/drm/tinydrm/core/tinydrm-backlight.c create mode 100644 include/drm/tinydrm/tinydrm-backlight.h diff --git a/drivers/gpu/drm/tinydrm/core/Makefile b/drivers/gpu/drm/tinydrm/core/Makefile index fb221e6..389ca7a 100644 --- a/drivers/gpu/drm/tinydrm/core/Makefile +++ b/drivers/gpu/drm/tinydrm/core/Makefile @@ -1,3 +1,3 @@ -tinydrm-y := tinydrm-core.o tinydrm-pipe.o tinydrm-helpers.o +tinydrm-y := tinydrm-core.o tinydrm-pipe.o tinydrm-backlight.o tinydrm-helpers.o obj-$(CONFIG_DRM_TINYDRM) += tinydrm.o diff --git a/drivers/gpu/drm/tinydrm/core/tinydrm-backlight.c b/drivers/gpu/drm/tinydrm/core/tinydrm-backlight.c new file mode 100644 index 000..dc6f17d --- /dev/null +++ b/drivers/gpu/drm/tinydrm/core/tinydrm-backlight.c @@ -0,0 +1,103 @@ +#include +#include +#include +#include + +#include +#include + +/** + * 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); + +/** + * 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); diff --git a/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c b/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c index bd6cce0..ee8ad8c 100644 --- a/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c +++ b/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c @@ -236,100 +236,6 @@ void tinydrm_xrg
Re: [PATCH v3 1/2] drm/tinydrm: Move tinydrm_of_find_backlight into drm_of.c
On Tue, Oct 03, 2017 at 07:38:29PM +0200, Noralf Trønnes wrote: > > Den 03.10.2017 18.02, skrev Noralf Trønnes: > > > >Den 03.10.2017 16.58, skrev Noralf Trønnes: > >> > >>Den 02.10.2017 10.13, skrev Jani Nikula: > >>>On Mon, 02 Oct 2017, Daniel Vetterwrote: > Also adding Jani, who looked at the backlight Kconfig mess in the > past. > >>>I've even sent patches to fix some of the dependency mess, but the > >>>problem is social not technical. The problem is that people think > >>>"select" is more convenient than "depends" because they can just enable > >>>a config that way, while "depends" would require finding and enabling > >>>all the dependencies before the menu option even shows up. > >>> > >>>I don't deny, that's annoying. But it's also abuse of select, see > >>>Documentation/kbuild/kconfig-language.txt: > >>> > >>> Note: > >>>select should be used with care. select will force > >>>a symbol to a value without visiting the dependencies. > >>>By abusing select you are able to select a symbol FOO even > >>>if FOO depends on BAR that is not set. > >>>In general use select only for non-visible symbols > >>>(no prompts anywhere) and for symbols with no dependencies. > >>>That will limit the usefulness but on the other hand avoid > >>>the illegal configurations all over. > >>> > >>>The real fix would be making finding and enabling dependencies > >>>recursively more convenient, but I don't see that happening anytime > >>>soon. > >> > >>If we don't select BACKLIGHT in drivers, we can end up with CONFIG_DRM=y > >>and CONFIG_BACKLIGHT_CLASS_DEVICE=m. > >> > >>So we can either do: > >> > >>menuconfig DRM > >> depends on (BACKLIGHT_CLASS_DEVICE || BACKLIGHT_CLASS_DEVICE=n) > >> > > > >No, this was the thing that didn't work: > > > >drivers/gpu/drm/Kconfig:7: symbol DRM depends on > >BACKLIGHT_CLASS_DEVICE > >drivers/video/backlight/Kconfig:158: symbol BACKLIGHT_CLASS_DEVICE is > >selected by DRM_RADEON > >drivers/gpu/drm/Kconfig:164: symbol DRM_RADEON depends on DRM > > > > How about putting the dependency in the driver combined with IS_REACHABLE, > but not in backlight.h as I first proposed, that won't work: > > menuconfig DRM_TINYDRM > - select BACKLIGHT_LCD_SUPPORT > - select BACKLIGHT_CLASS_DEVICE > + depends on (BACKLIGHT_CLASS_DEVICE || BACKLIGHT_CLASS_DEVICE=n) > > > struct backlight_device *drm_of_find_backlight(struct device *dev) > { > struct backlight_device *backlight; > struct device_node *np; > > if (!IS_REACHABLE(CONFIG_BACKLIGHT_CLASS_DEVICE)) > return NULL; > [...] > } > > But the IS_REACHABLE doesn't feel right. > > Maybe the problem is putting a function in DRM that really doesn't > belong there. How about calling it of_find_backlight() instead and > put it in backlight.[hc]? Wouldn't it make more sense to put the function in DRM ? Because all of the callers are located in DRM and so I'd think it makes more sense to put it in DRM along with the other _of functions. > Noralf. > > >>Or we can: > >> > >>-#ifdef CONFIG_OF > >>+#if IS_ENABLED(CONFIG_OF) && > >>IS_REACHABLE(CONFIG_BACKLIGHT_CLASS_DEVICE) > >> struct backlight_device *of_find_backlight_by_node(struct device_node > >>*node); > >> #else > >> static inline struct backlight_device * I have one question. Why isn't your previous solution a good solution? i.e IS_ENABLED(CONFIG_BACKLIGHT_CLASS_DEVICE) which was part of v7 > >>Using the second one it won't be obvious to users why backlight doesn't > >>work, > >>they have after all enabled backlight (but as module and DRM builtin). > >> > >>So I suppose the first one is preferred. > >>What effect will such a change have on an existing configuration where > >>DRM=y and BACKLIGHT_CLASS_DEVICE=m? Will DRM become a module or will it > >>be disabled? Why would it be disabled in this case ? Thanks and regards, Meghana > >>Noralf. > >> > >>___ > >>dri-devel mailing list > >>dri-devel@lists.freedesktop.org > >>https://lists.freedesktop.org/mailman/listinfo/dri-devel > >> > > > >___ > >dri-devel mailing list > >dri-devel@lists.freedesktop.org > >https://lists.freedesktop.org/mailman/listinfo/dri-devel > > > ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH v13 2/3] drm/tinydrm: Move tinydrm_of_find_backlight to backlight.c
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.madhyas...@gmail.com> --- Changes in v13: -Add backlight_put to backlight.h in this patch drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c | 40 -- drivers/gpu/drm/tinydrm/mi0283qt.c | 3 +- drivers/video/backlight/backlight.c| 37 include/drm/tinydrm/tinydrm-helpers.h | 2 -- include/linux/backlight.h | 19 5 files changed, 58 insertions(+), 43 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_xrgb_to_gray8(u8 *dst, void *vaddr, struct drm_framebuffer *fb, } EXPORT_SYMBOL(tinydrm_xrgb_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 7fd2691..a932185 100644 --- a/drivers/gpu/drm/tinydrm/mi0283qt.c +++ b/drivers/gpu/drm/tinydrm/mi0283qt.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -188,7 +189,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..c4e94d0 100644 --- a/drivers/video/backlight/backlight.c +++ b/drivers/video/backlight/backlight.c @@ -580,6 +580,43 @@ 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. + */ +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); + 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..0a4ddbc 100644 --- a/include/drm/tinydrm/tinydrm-helpers.h +++ b/include/drm/tinydrm/tinydrm-helpers.h @@ -46,8 +46,6 @@ void tinydrm_xrgb_to_rgb565(u16 *dst, void *vaddr, void tinydrm_xrgb_to_gray8(u8 *d
[PATCH v13 3/3] drm/tinydrm: Add devres versions of backlight_get
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.madhyas...@gmail.com> --- Changes in v13: -Add devm_backlight_put to backlight.c drivers/gpu/drm/tinydrm/mi0283qt.c | 2 +- drivers/video/backlight/backlight.c | 31 +++ include/linux/backlight.h | 6 ++ 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/tinydrm/mi0283qt.c b/drivers/gpu/drm/tinydrm/mi0283qt.c index a932185..e3e7583 100644 --- a/drivers/gpu/drm/tinydrm/mi0283qt.c +++ b/drivers/gpu/drm/tinydrm/mi0283qt.c @@ -189,7 +189,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 c4e94d0..b6c505a 100644 --- a/drivers/video/backlight/backlight.c +++ b/drivers/video/backlight/backlight.c @@ -617,6 +617,37 @@ struct backlight_device *backlight_get(struct device *dev) } EXPORT_SYMBOL(backlight_get); +static void devm_backlight_put(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_put, bd); + if (ret) { + backlight_put(bd); + return ERR_PTR(ret); + } + + return bd; +} +EXPORT_SYMBOL(devm_backlight_get); + static void __exit backlight_class_exit(void) { class_destroy(backlight_class); diff --git a/include/linux/backlight.h b/include/linux/backlight.h index 987a6d7..8db9ba9 100644 --- a/include/linux/backlight.h +++ b/include/linux/backlight.h @@ -214,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 -- 2.7.4 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH v8 3/3] drm/tinydrm: Add devres versions of backlight_get
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.madhyas...@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(>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 -- 2.7.4 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH v8 1/3] drm/tinydrm: Move helper functions from tinydrm-helpers to backlight.h
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.madhyas...@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 #include +#include #include #include #include @@ -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_xrgb_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(_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 { co
[PATCH v8 2/3] drm/tinydrm: Move tinydrm_of_find_backlight to backlight.c
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.madhyas...@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_xrgb_to_gray8(u8 *dst, void *vaddr, struct drm_framebuffer *fb, } EXPORT_SYMBOL(tinydrm_xrgb_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 #include #include +#include #include #include #include @@ -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 @@ #ifnd
[PATCH v8 0/3] Move backlight helper functions from tinydrm-helpers to linux/backlight
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(-) -- 2.7.4 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH v10 1/3] drm/tinydrm: Move helper functions from tinydrm-helpers to backlight.h
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.madhyas...@gmail.com> --- Changes in v10: -Change from enable_backlight to backlight_enable 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..9a7abd1 100644 --- a/drivers/gpu/drm/tinydrm/mipi-dbi.c +++ b/drivers/gpu/drm/tinydrm/mipi-dbi.c @@ -11,6 +11,7 @@ #include #include +#include #include #include #include @@ -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); + backlight_enable(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_xrgb_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(_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 { co
[PATCH v11 3/3] drm/tinydrm: Add devres versions of backlight_get
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.madhyas...@gmail.com> --- Changes in v11: -None 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..fff2d1a 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_put(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_put, 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(>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 -- 2.7.4 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH v10 0/3] Move backlight helper functions from tinydrm-helpers to linux/backlight
Move drm helper functions from tinydrm-helpers to linux/backlight for ease of use by callers in other drivers. Changes in v10: -Change enable_backlight to backlight_enable 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(-) -- 2.7.4 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH v11 1/3] drm/tinydrm: Move helper functions from tinydrm-helpers to backlight.h
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.madhyas...@gmail.com> --- Changes in v11: -Move over tinydrm_disable_backlight to backlight_disable in the caller in mipi-dbi.c drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c | 55 -- drivers/gpu/drm/tinydrm/mipi-dbi.c | 5 ++- include/drm/tinydrm/tinydrm-helpers.h | 2 - include/linux/backlight.h | 30 ++ 4 files changed, 33 insertions(+), 59 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..71b416b 100644 --- a/drivers/gpu/drm/tinydrm/mipi-dbi.c +++ b/drivers/gpu/drm/tinydrm/mipi-dbi.c @@ -11,6 +11,7 @@ #include #include +#include #include #include #include @@ -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); + backlight_enable(mipi->backlight); } EXPORT_SYMBOL(mipi_dbi_pipe_enable); @@ -318,7 +319,7 @@ void mipi_dbi_pipe_disable(struct drm_simple_display_pipe *pipe) mipi->enabled = false; if (mipi->backlight) - tinydrm_disable_backlight(mipi->backlight); + backlight_disable(mipi->backlight); else mipi_dbi_blank(mipi); } 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_xrgb_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(_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_disabl
[PATCH v11 2/3] drm/tinydrm: Move tinydrm_of_find_backlight to backlight.c
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.madhyas...@gmail.com> --- Changes in v11: -None 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_xrgb_to_gray8(u8 *dst, void *vaddr, struct drm_framebuffer *fb, } EXPORT_SYMBOL(tinydrm_xrgb_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 #include #include +#include #include #include #include @@ -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_de
[PATCH v10 3/3] drm/tinydrm: Add devres versions of backlight_get
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.madhyas...@gmail.com> --- Changes in v10: -None 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..fff2d1a 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_put(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_put, 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(>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 -- 2.7.4 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH v11 0/3] Move backlight helper functions from tinydrm-helpers to linux/backlight
Move drm helper functions from tinydrm-helpers to linux/backlight for ease of use by callers in other drivers. Changes in v11: -Move over tinydrm_disable_backlight to backlight_disable in the caller in mipi-dbi.c 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 | 5 +- drivers/video/backlight/backlight.c| 71 +++ include/drm/tinydrm/tinydrm-helpers.h | 5 -- include/linux/backlight.h | 55 +++ 6 files changed, 131 insertions(+), 103 deletions(-) -- 2.7.4 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH v10 2/3] drm/tinydrm: Move tinydrm_of_find_backlight to backlight.c
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.madhyas...@gmail.com> --- Changes in v10: -None 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_xrgb_to_gray8(u8 *dst, void *vaddr, struct drm_framebuffer *fb, } EXPORT_SYMBOL(tinydrm_xrgb_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 #include #include +#include #include #include #include @@ -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_de
[PATCH v12 0/3] Move backlight helper functions from tinydrm-helpers to linux/backlight
Move drm helper functions from tinydrm-helpers to linux/backlight for ease of use by callers in other drivers. Changes in v12: -Move backlight_put() to the patch 2/3 from patch 3/3. -Remove #if IS_ENABLED(CONFIG_BACKLIGHT_CLASS_DEVICE)..#endif because the file is not built if it isn't enabled 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 | 5 +- drivers/video/backlight/backlight.c| 68 ++ include/drm/tinydrm/tinydrm-helpers.h | 5 -- include/linux/backlight.h | 55 +++ 6 files changed, 128 insertions(+), 103 deletions(-) -- 2.7.4 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH v12 1/3] drm/tinydrm: Move helper functions from tinydrm-helpers to backlight.h
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.madhyas...@gmail.com> --- Changes in v12: -None drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c | 55 -- drivers/gpu/drm/tinydrm/mipi-dbi.c | 5 ++- include/drm/tinydrm/tinydrm-helpers.h | 2 - include/linux/backlight.h | 30 ++ 4 files changed, 33 insertions(+), 59 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..71b416b 100644 --- a/drivers/gpu/drm/tinydrm/mipi-dbi.c +++ b/drivers/gpu/drm/tinydrm/mipi-dbi.c @@ -11,6 +11,7 @@ #include #include +#include #include #include #include @@ -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); + backlight_enable(mipi->backlight); } EXPORT_SYMBOL(mipi_dbi_pipe_enable); @@ -318,7 +319,7 @@ void mipi_dbi_pipe_disable(struct drm_simple_display_pipe *pipe) mipi->enabled = false; if (mipi->backlight) - tinydrm_disable_backlight(mipi->backlight); + backlight_disable(mipi->backlight); else mipi_dbi_blank(mipi); } 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_xrgb_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(_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 inlin
[PATCH v12 2/3] drm/tinydrm: Move tinydrm_of_find_backlight to backlight.c
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.madhyas...@gmail.com> --- Changes in v12: -Move backlight_put() to the patch 2/3 from patch 3/3. -Remove #if IS_ENABLED(CONFIG_BACKLIGHT_CLASS_DEVICE)..#endif because the file is not built if it isn't enabled drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c | 40 drivers/gpu/drm/tinydrm/mi0283qt.c | 3 +- drivers/video/backlight/backlight.c| 43 ++ include/drm/tinydrm/tinydrm-helpers.h | 3 -- include/linux/backlight.h | 9 ++ 5 files changed, 54 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_xrgb_to_gray8(u8 *dst, void *vaddr, struct drm_framebuffer *fb, } EXPORT_SYMBOL(tinydrm_xrgb_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 #include #include +#include #include #include #include @@ -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..f3e95b3 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 +/** + * 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. + */ +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); + +static inline void backlight_put(struct backlight_device *bd) +{ + if (bd) + put_device(>dev); +} + 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 ind
[PATCH v12 3/3] drm/tinydrm: Add devres versions of backlight_get
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.madhyas...@gmail.com> --- Changes in v12: -Move backlight_put() to the patch 2/3 from patch 3/3. drivers/gpu/drm/tinydrm/mi0283qt.c | 2 +- drivers/video/backlight/backlight.c | 25 + include/linux/backlight.h | 16 3 files changed, 42 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 f3e95b3..3663f26 100644 --- a/drivers/video/backlight/backlight.c +++ b/drivers/video/backlight/backlight.c @@ -623,6 +623,31 @@ static inline void backlight_put(struct backlight_device *bd) put_device(>dev); } +/** + ** 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); + static void __exit backlight_class_exit(void) { class_destroy(backlight_class); 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(>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 -- 2.7.4 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH v13 1/3] drm/tinydrm: Move helper functions from tinydrm-helpers to backlight.h
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.madhyas...@gmail.com> --- Changes in v13: -None drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c | 55 -- drivers/gpu/drm/tinydrm/mipi-dbi.c | 5 ++- include/drm/tinydrm/tinydrm-helpers.h | 2 - include/linux/backlight.h | 30 ++ 4 files changed, 33 insertions(+), 59 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 d43e992..2561549 100644 --- a/drivers/gpu/drm/tinydrm/mipi-dbi.c +++ b/drivers/gpu/drm/tinydrm/mipi-dbi.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -280,7 +281,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); + backlight_enable(mipi->backlight); } EXPORT_SYMBOL(mipi_dbi_pipe_enable); @@ -319,7 +320,7 @@ void mipi_dbi_pipe_disable(struct drm_simple_display_pipe *pipe) mipi->enabled = false; if (mipi->backlight) - tinydrm_disable_backlight(mipi->backlight); + backlight_disable(mipi->backlight); else mipi_dbi_blank(mipi); } 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_xrgb_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..b88fabb 100644 --- a/include/linux/backlight.h +++ b/include/linux/backlight.h @@ -129,6 +129,36 @@ static inline int backlight_update_status(struct backlight_device *bd) return ret; } +/** + * 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 i
[PATCH v13 0/3] Move backlight helper functions from tinydrm-helpers to linux/backlight
Move drm helper functions from tinydrm-helpers to linux/backlight for ease of use by callers in other drivers. Changes in v13: -Rebase against drm-misc -Put devm_backlight_put back 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 | 5 +- drivers/video/backlight/backlight.c| 68 ++ include/drm/tinydrm/tinydrm-helpers.h | 4 -- include/linux/backlight.h | 55 +++ 6 files changed, 128 insertions(+), 102 deletions(-) -- 2.7.4 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
Re: [PATCH v2] drm/tinydrm: Move backlight helpers to a separate file
On Tue, Sep 26, 2017 at 01:32:15PM +0200, Daniel Vetter wrote: > On Tue, Sep 26, 2017 at 04:46:53PM +0530, Meghana Madhyastha wrote: > > On Mon, Sep 25, 2017 at 06:31:58PM +0200, Noralf Trønnes wrote: > > > > > > Den 25.09.2017 16.56, skrev Noralf Trønnes: > > > >Hi Meghana, > > > > > > > > > > > >Den 22.09.2017 17.09, skrev Meghana Madhyastha: > > > >>Move backlight helpers from tinydrm-helpers.c to > > > >>tinydrm-backlight.c. This is because it is organizationally > > > >>simpler to understand and advantageous to group functions > > > >>performing a similar function to a separate file as opposed to > > > >>having one helper file with heteregenous helper functions. > > > >> > > > >>Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> > > > >>--- > > > > > > > >I don't think there is much gain in just moving the code like this. > > > > > > > >The idea is to add a drm_backlight helper that can be useful for all > > > >DRM drivers that use the backlight subsystem. > > > > Yes I agree. That definitely makes more sense. > > > > > > The full path to that helper would be: > > > drivers/gpu/drm/drm_backlight.c > > > > > > >This is what the TODO says: > > > >https://dri.freedesktop.org/docs/drm/gpu/todo.html#tinydrm > > > > > > > >- backlight helpers, probably best to put them into a new > > > >drm_backlight.c. > > > > This is because drivers/video is de-facto unmaintained. We could also > > > > move drivers/video/backlight to drivers/gpu/backlight and take it all > > > > over within drm-misc, but that’s more work. > > > > > > > >There is also this discussion to take into account: > > > >KMS backlight ABI proposition > > > >https://lists.freedesktop.org/archives/dri-devel/2017-February/133206.html > > > > > > > > > > > >I don't remember what came out of that discussion. > > > > > > > >Noralf. > > > > After having discussed this with Daniel on the #dri-devel irc channel, > > here are some of the points suggested. > > > > Daniel suggested that I first look into the usage of shared backlight > > helpers in drm (specifically backlight_update_status to begin with). The > > idea > > was to see whether there is any pattern in usage and/or code dupication. > > If there is, then the next step would be to write helper functions which > > can be used by other drivers (and not just tinydrm). > > > > To start with, I went through the instances of backlight_update_status > > in the drm code, and made the following observations(most of them are > > very simple/naive observations). > > > > - backlight_update_status is usually called in backlight init (and > > sometimes exit) functions of the drivers just after the device is > > registered. > > So backlight_update_status is called with the registered device as the > > parameter. > > > > Here are the following cases of properties changed/set before > > backlight_update_status is called. > > > > - CASE 1: Brightness is changed (either a macro BRIGHTNESS_MAX_LEVEL 100 > > is defined or it is manually set) This happens in the following files: > > > > gma500/cdv_device.c, gma500/mdfld_device.c, gma500/oaktrail_device.c, > > gma500/psb_device.c, noveau/noveau_backlight.c(here brightness is > > determined by fuction > > static int nv50_get_intensity) > > > > - CASE 2: Power property is set (to FB_BLANK_UNBLANK mostly) > > This happens in the following files: > > > > omapdrm/displays/panel-dpi.c, panel/panel-innolux-p079zca.c, > > panel/panel-jdi-lt070me05000.c, panel/panel-sharp-lq101r1sx01.c, > > panel/panel-sharp-ls043t1le01.c, tilcdc/tilcdc_panel.c > > > > - CASE 3: State is set > > This happens in the following files: > > > > tinydrm/tinydrm-helpers.c > > > > - CASE 4: Power and brightness properties are set > > This happens in the following files: > > > > atombios_encoders.c, radeon/radeon_legacy_encoders.c, > > shmobile/shmob_drm_backlight.c > > > > - CASE 5: Power and the state properties are set > > This happens in the following files: > > > > panel/panel-lvds.c, panel/panel-panasonic-vvx10f034n00.c, > > panel/panel-simple.c, panel/panel-sitronix-st7789v.c > >
Re: [PATCH v3 2/2] drm/tinydrm: Add devres versions of drm_of_find_backlight
On Fri, Sep 29, 2017 at 02:20:16PM +0200, Noralf Trønnes wrote: > > Den 29.09.2017 05.17, skrev Meghana Madhyastha: > >On Thu, Sep 28, 2017 at 06:19:35PM +0200, Noralf Trønnes wrote: > >>Den 28.09.2017 11.15, skrev Meghana Madhyastha: > >>>Add devm_drm_of_find_backlight and the corresponding release > >>>function because some drivers such as tinydrm use devres versions > >>>of functions for requiring device resources. > >>> > >>>Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> > >>>--- > >>>Changes in v3: > >>>-None > >>> > >>> drivers/gpu/drm/drm_of.c | 48 > >>> > >>> include/drm/drm_of.h | 2 ++ > >>> 2 files changed, 50 insertions(+) > >>> > >>>diff --git a/drivers/gpu/drm/drm_of.c b/drivers/gpu/drm/drm_of.c > >>>index d878d3a..238e8e5 100644 > >>>--- a/drivers/gpu/drm/drm_of.c > >>>+++ b/drivers/gpu/drm/drm_of.c > >>>@@ -304,3 +304,51 @@ struct backlight_device *drm_of_find_backlight(struct > >>>device *dev) > >>> return backlight; > >>> } > >>> EXPORT_SYMBOL(drm_of_find_backlight); > >>>+ > >>>+/** > >>>+ * devm_drm_of_find_backlight_release - Release backlight device > >>>+ * @dev: Device > >>>+ * > >>>+ * This is the release function corresponding to the > >>>devm_drm_of_find_backlight. > >>>+ * Each devres entry is associated with a release function. > >>>+ */ > >>This is an internal function so no need for docs or exporting. I know > >>that some devm_ functions have explicit release functions, but I don't > >>think this is necessary since those users can just use > >>drm_of_find_backlight() directly instead. > >I have a question here. devm_drm_of_find_backlight_release is a > >wrapper around put_device which is passed as a parameter to > >devm_add_action in devm_drm_of_find_backlight. So isn't the function > >useful here ? > > We need the function for devm_add_action(), but no one outside of this file > needs > it. Hence the static definition. > > We can't use put_device directly: > ret = devm_add_action(dev, put_device, > >dev); > because devm_add_action expects an argument like this: void (*action)(void > *) > and put_device is: void put_device(struct device *dev) > They differ in their argument type: void * vs. struct device * > The compiler would complain. > > So we need a wrapper. Yes this is what I thought. Okay, I misunderstood your previous suggestion as removing the release function entirely which is why I asked my question. Now it makes sense and I understood. Thanks for the clarifications. Regards, Meghana > >>>+static void devm_drm_of_find_backlight_release(void *data) > >>>+{ > >>>+ put_device(data); > >>>+} > >>>+EXPORT_SYMBOL(devm_drm_of_find_backlight_release); > >>>+ > >>>+/** > >>>+ * 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 such as tinydrm use devres versions of functions for > >>No need to mention tinydrm here. > >> > >>>+ * 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, > >>>+>dev); > >>>+ if (ret) { > >>>+ put_device(>dev); > >>>+ return ERR_PTR(ret); > >>>+ } > >>>+ > >>>+ return backlight; > >>>+} >
Re: [PATCH v3 1/2] drm/tinydrm: Move tinydrm_of_find_backlight into drm_of.c
On Fri, Sep 29, 2017 at 02:10:31PM +0200, Noralf Trønnes wrote: > > Den 29.09.2017 05.22, skrev Meghana Madhyastha: > >On Thu, Sep 28, 2017 at 06:02:27PM +0200, Noralf Trønnes wrote: > >>Den 28.09.2017 16.08, skrev Daniel Vetter: > >>>On Thu, Sep 28, 2017 at 02:44:34PM +0530, Meghana Madhyastha wrote: > >>>>Rename tinydrm_of_find_backlight to drm_of_find_backlight > >>>>and move it into drm_of.c from tinydrm-helpers.c. This is > >>>>because other drivers in the drm subsystem might need to call > >>>>this function. In that case and otherwise, it is better from > >>>>an organizational point of view to move it into drm_of.c along > >>>>with the other _of.c functions. > >>>> > >>>>Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> > >>>>--- > >>>>Changes in v3: > >>>>-Change it back to a single patch from two patches in v2 > >>>> > >>>> drivers/gpu/drm/drm_of.c | 44 > >>>> ++ > >>>> drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c | 40 > >>>> --- > >>>> drivers/gpu/drm/tinydrm/mi0283qt.c | 3 +- > >>>> include/drm/drm_of.h | 1 + > >>>> include/drm/tinydrm/tinydrm-helpers.h | 1 - > >>>> 5 files changed, 47 insertions(+), 42 deletions(-) > >>>> > >>>>diff --git a/drivers/gpu/drm/drm_of.c b/drivers/gpu/drm/drm_of.c > >>>>index 8dafbdf..d878d3a 100644 > >>>>--- a/drivers/gpu/drm/drm_of.c > >>>>+++ b/drivers/gpu/drm/drm_of.c > >>>>@@ -1,6 +1,7 @@ > >>>> #include > >>>> #include > >>>> #include > >>>>+#include > >>>> #include > >>>> #include > >>>> #include > >>>>@@ -260,3 +261,46 @@ int drm_of_find_panel_or_bridge(const struct > >>>>device_node *np, > >>>> return ret; > >>>> } > >>>> EXPORT_SYMBOL_GPL(drm_of_find_panel_or_bridge); > >>>>+ > >>>>+/** > >>>>+ * drm_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. > >>>>+ * > >>>>+ * Note: It is the responsibility of the caller to call put_device() when > >>>>+ * releasing the resource. > >>>>+ * > >>>>+ * 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 *drm_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(drm_of_find_backlight); > >>>>diff --git a/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c > >>>>b/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c > >>>>index bd6cce0..cd4c6a5 100644 > >>>>---
[PATCH v5 3/4] drm/tinydrm: Add the dummy versions of drm_of_find_backlight functions
Add the dummy versions (function definition returning -EINVAL) of drm_of_find_backlight and devm_drm_of_find_backlight in the #else part of the conditional directive in drm_of.h. This is needed for drivers where CONFIG_OF is optional. Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> --- Changes in v5: -Fix the kbuild errors and warnings such as return 0 instead of -EINVAL. include/drm/drm_of.h | 13 + 1 file changed, 13 insertions(+) diff --git a/include/drm/drm_of.h b/include/drm/drm_of.h index b2d6e0c..55c9304 100644 --- a/include/drm/drm_of.h +++ b/include/drm/drm_of.h @@ -60,6 +60,7 @@ static inline int drm_of_encoder_active_endpoint(struct device_node *node, { return -EINVAL; } + static inline int drm_of_find_panel_or_bridge(const struct device_node *np, int port, int endpoint, struct drm_panel **panel, @@ -67,6 +68,18 @@ static inline int drm_of_find_panel_or_bridge(const struct device_node *np, { return -EINVAL; } + +static inline struct backlight_device *drm_of_find_backlight( + struct device *dev) +{ + return 0; +} + +static inline struct backlight_device *devm_drm_of_find_backlight( + struct device *dev) +{ + return 0; +} #endif static inline int drm_of_encoder_active_endpoint_id(struct device_node *node, -- 2.7.4 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
Re: [PATCH v3 1/2] drm/tinydrm: Move tinydrm_of_find_backlight into drm_of.c
On Fri, Sep 29, 2017 at 05:41:04PM +0200, Noralf Trønnes wrote: > > Den 29.09.2017 16.13, skrev Meghana Madhyastha: > >On Fri, Sep 29, 2017 at 02:33:12PM +0200, Noralf Trønnes wrote: > >>Den 29.09.2017 14.20, skrev Meghana Madhyastha: > >>>On Fri, Sep 29, 2017 at 02:10:31PM +0200, Noralf Trønnes wrote: > >>>>Den 29.09.2017 05.22, skrev Meghana Madhyastha: > >>>>>On Thu, Sep 28, 2017 at 06:02:27PM +0200, Noralf Trønnes wrote: > >>>>>>Den 28.09.2017 16.08, skrev Daniel Vetter: > >>>>>>>On Thu, Sep 28, 2017 at 02:44:34PM +0530, Meghana Madhyastha wrote: > >>>>>>>>Rename tinydrm_of_find_backlight to drm_of_find_backlight > >>>>>>>>and move it into drm_of.c from tinydrm-helpers.c. This is > >>>>>>>>because other drivers in the drm subsystem might need to call > >>>>>>>>this function. In that case and otherwise, it is better from > >>>>>>>>an organizational point of view to move it into drm_of.c along > >>>>>>>>with the other _of.c functions. > >>>>>>>> > >>>>>>>>Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> > >>>>>>>>--- > >>>>>>>>Changes in v3: > >>>>>>>>-Change it back to a single patch from two patches in v2 > >>>>>>>> > >>>>>>>> drivers/gpu/drm/drm_of.c | 44 > >>>>>>>> ++ > >>>>>>>> drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c | 40 > >>>>>>>> --- > >>>>>>>> drivers/gpu/drm/tinydrm/mi0283qt.c | 3 +- > >>>>>>>> include/drm/drm_of.h | 1 + > >>>>>>>> include/drm/tinydrm/tinydrm-helpers.h | 1 - > >>>>>>>> 5 files changed, 47 insertions(+), 42 deletions(-) > >>>>>>>> > >>>>>>>>diff --git a/drivers/gpu/drm/drm_of.c b/drivers/gpu/drm/drm_of.c > >>>>>>>>index 8dafbdf..d878d3a 100644 > >>>>>>>>--- a/drivers/gpu/drm/drm_of.c > >>>>>>>>+++ b/drivers/gpu/drm/drm_of.c > >>>>>>>>@@ -1,6 +1,7 @@ > >>>>>>>> #include > >>>>>>>> #include > >>>>>>>> #include > >>>>>>>>+#include > >>>>>>>> #include > >>>>>>>> #include > >>>>>>>> #include > >>>>>>>>@@ -260,3 +261,46 @@ int drm_of_find_panel_or_bridge(const struct > >>>>>>>>device_node *np, > >>>>>>>> return ret; > >>>>>>>> } > >>>>>>>> EXPORT_SYMBOL_GPL(drm_of_find_panel_or_bridge); > >>>>>>>>+ > >>>>>>>>+/** > >>>>>>>>+ * drm_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. > >>>>>>>>+ * > >>>>>>>>+ * Note: It is the responsibility of the caller to call put_device() > >>>>>>>>when > >>>>>>>>+ * releasing the resource. > >>>>>>>>+ * > >>>>>>>>+ * 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 *drm_of_find_backlight(struct device *dev) > &
[PATCH v6 1/2] drm/tinydrm: Move tinydrm_of_find_backlight into drm_of.c
Rename tinydrm_of_find_backlight to drm_of_find_backlight and move it into drm_of.c from tinydrm-helpers.c. This is because other drivers in the drm subsystem might need to call this function. In that case and otherwise, it is better from an organizational point of view to move it into drm_of.c along with the other _of.c functions. Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> --- Changes in v6: -Move function declarations to linux/backlight.h to resolve module dependency issues. drivers/gpu/drm/drm_of.c | 44 ++ drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c | 40 --- drivers/gpu/drm/tinydrm/mi0283qt.c | 2 +- include/drm/tinydrm/tinydrm-helpers.h | 1 - include/linux/backlight.h | 11 +++ 5 files changed, 56 insertions(+), 42 deletions(-) diff --git a/drivers/gpu/drm/drm_of.c b/drivers/gpu/drm/drm_of.c index 8dafbdf..d878d3a 100644 --- a/drivers/gpu/drm/drm_of.c +++ b/drivers/gpu/drm/drm_of.c @@ -1,6 +1,7 @@ #include #include #include +#include #include #include #include @@ -260,3 +261,46 @@ int drm_of_find_panel_or_bridge(const struct device_node *np, return ret; } EXPORT_SYMBOL_GPL(drm_of_find_panel_or_bridge); + +/** + * drm_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. + * + * Note: It is the responsibility of the caller to call put_device() when + * releasing the resource. + * + * 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 *drm_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(drm_of_find_backlight); diff --git a/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c b/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c index bd6cce0..cd4c6a5 100644 --- a/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c +++ b/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c @@ -237,46 +237,6 @@ void tinydrm_xrgb_to_gray8(u8 *dst, void *vaddr, struct drm_framebuffer *fb, EXPORT_SYMBOL(tinydrm_xrgb_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); - -/** * tinydrm_enable_backlight - Enable backlight helper * @backlight: Backlight device * diff --git a/drivers/gpu/drm/tinydrm/mi0283qt.c b/drivers/gpu/drm/tinydrm/mi0283qt.c index 7e5bb7d..682b4db 100644 --- a/drivers/gpu/drm/tinydrm/mi0283qt.c +++ b/drivers/gpu/drm/tinydrm/mi0283qt.c @@ -189,7 +189,7 @@ static int mi0283qt_probe(struct spi_device *spi) if (IS_ERR(mipi->regulator)) return PTR_ERR(mipi->regulator); - mipi->backlight
[PATCH v6 2/2] drm/tinydrm: Add devres versions of drm_of_find_backlight
Add devm_drm_of_find_backlight and the corresponding release function because some drivers such as tinydrm use devres versions of functions for requiring device resources. Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> --- Changes in v6: - Remove docstring for devm_drm_of_backlight_release because it is and internal function. drivers/gpu/drm/drm_of.c | 40 ++ drivers/gpu/drm/tinydrm/mi0283qt.c | 2 +- include/linux/backlight.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 d878d3a..6fb3fe5 100644 --- a/drivers/gpu/drm/drm_of.c +++ b/drivers/gpu/drm/drm_of.c @@ -304,3 +304,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, + >dev); + if (ret) { + put_device(>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 682b4db..6724e5e 100644 --- a/drivers/gpu/drm/tinydrm/mi0283qt.c +++ b/drivers/gpu/drm/tinydrm/mi0283qt.c @@ -189,7 +189,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/linux/backlight.h b/include/linux/backlight.h index 47a095e..f601f15 100644 --- a/include/linux/backlight.h +++ b/include/linux/backlight.h @@ -175,12 +175,19 @@ of_find_backlight_by_node(struct device_node *node) #if defined(CONFIG_OF) && IS_ENABLED(CONFIG_BACKLIGHT_CLASS_DEVICE) struct backlight_device * drm_of_find_backlight(struct device *dev); +devm_drm_of_find_backlight(struct device *dev); #else static inline struct backlight_device * 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 #endif -- 2.7.4 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH v6 0/2] drm/tinydrm: drm_of_find_backlight helper
Move tinydrm_of_find_backlight to drm_of.c and rename it to drm_of_find_backlight for better organizational structure. Changes in v6: -Move function declarations to linux/backlight.h to prevent build errors for the dependencies issue. -Remove docs for devm_drm_of_find_backlight_release as it is an internal function. Meghana Madhyastha (2): drm/tinydrm: Move tinydrm_of_find_backlight into drm_of.c drm/tinydrm: Add devres versions of drm_of_find_backlight drivers/gpu/drm/drm_of.c | 84 ++ drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c | 40 drivers/gpu/drm/tinydrm/mi0283qt.c | 2 +- include/drm/tinydrm/tinydrm-helpers.h | 1 - include/linux/backlight.h | 18 ++ 5 files changed, 103 insertions(+), 42 deletions(-) -- 2.7.4 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH v5 4/4] drm/tinydrm: select BACKLIGHT_LCD_SUPPORT, BACKLIGHT_CLASS_DEVICE
Add select BACKLIGHT_LCD_SUPPORT, BACKLIGHT_CLASS_DEVICE to the Kconfig of drm. This is required for the successful build of drm_of_find_backlight helpers. Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> --- Changes in v5: -This commit was not present in v4. Selecting BACKLIGHT_LCD_SUPPORT, BACKLIGHT_CLASS_DEVICE in the Kconfig file under the symbol DRM seems to fix the Kbuild error drm_of.c:(.text+0x3bc): undefined reference to `of_find_backlight_by_node'. drivers/gpu/drm/Kconfig | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig index 83cb2a8..3ba5632 100644 --- a/drivers/gpu/drm/Kconfig +++ b/drivers/gpu/drm/Kconfig @@ -7,6 +7,8 @@ menuconfig DRM tristate "Direct Rendering Manager (XFree86 4.1.0 and higher DRI support)" depends on (AGP || AGP=n) && !EMULATED_CMPXCHG && HAS_DMA + select BACKLIGHT_LCD_SUPPORT + select BACKLIGHT_CLASS_DEVICE select HDMI select FB_CMDLINE select I2C -- 2.7.4 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH v5 2/4] drm/tinydrm: Add devres versions of drm_of_find_backlight
Add devm_drm_of_find_backlight and the corresponding release function because some drivers such as tinydrm use devres versions of functions for requiring device resources. Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> --- Changes in v5: -None drivers/gpu/drm/drm_of.c | 47 ++ drivers/gpu/drm/tinydrm/mi0283qt.c | 2 +- include/drm/drm_of.h | 1 + 3 files changed, 49 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/drm_of.c b/drivers/gpu/drm/drm_of.c index d878d3a..cd80dfc 100644 --- a/drivers/gpu/drm/drm_of.c +++ b/drivers/gpu/drm/drm_of.c @@ -304,3 +304,50 @@ struct backlight_device *drm_of_find_backlight(struct device *dev) return backlight; } EXPORT_SYMBOL(drm_of_find_backlight); + +/** + * devm_drm_of_find_backlight_release - Release backlight device + * @dev: Device + * + * This is the release function corresponding to the devm_drm_of_find_backlight. + * Each devres entry is associated with a release function. + */ +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, + >dev); + if (ret) { + put_device(>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 e8fba5b..b2d6e0c 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) -- 2.7.4 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH v5 1/4] drm/tinydrm: Move tinydrm_of_find_backlight into drm_of.c
Rename tinydrm_of_find_backlight to drm_of_find_backlight and move it into drm_of.c from tinydrm-helpers.c. This is because other drivers in the drm subsystem might need to call this function. In that case and otherwise, it is better from an organizational point of view to move it into drm_of.c along with the other _of.c functions. Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> --- Changes in v5: -None drivers/gpu/drm/drm_of.c | 44 ++ drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c | 40 --- drivers/gpu/drm/tinydrm/mi0283qt.c | 3 +- include/drm/drm_of.h | 1 + include/drm/tinydrm/tinydrm-helpers.h | 1 - 5 files changed, 47 insertions(+), 42 deletions(-) diff --git a/drivers/gpu/drm/drm_of.c b/drivers/gpu/drm/drm_of.c index 8dafbdf..d878d3a 100644 --- a/drivers/gpu/drm/drm_of.c +++ b/drivers/gpu/drm/drm_of.c @@ -1,6 +1,7 @@ #include #include #include +#include #include #include #include @@ -260,3 +261,46 @@ int drm_of_find_panel_or_bridge(const struct device_node *np, return ret; } EXPORT_SYMBOL_GPL(drm_of_find_panel_or_bridge); + +/** + * drm_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. + * + * Note: It is the responsibility of the caller to call put_device() when + * releasing the resource. + * + * 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 *drm_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(drm_of_find_backlight); diff --git a/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c b/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c index bd6cce0..cd4c6a5 100644 --- a/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c +++ b/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c @@ -237,46 +237,6 @@ void tinydrm_xrgb_to_gray8(u8 *dst, void *vaddr, struct drm_framebuffer *fb, EXPORT_SYMBOL(tinydrm_xrgb_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); - -/** * tinydrm_enable_backlight - Enable backlight helper * @backlight: Backlight device * diff --git a/drivers/gpu/drm/tinydrm/mi0283qt.c b/drivers/gpu/drm/tinydrm/mi0283qt.c index 7e5bb7d..5e3d635 100644 --- a/drivers/gpu/drm/tinydrm/mi0283qt.c +++ b/drivers/gpu/drm/tinydrm/mi0283qt.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -189,7 +190,7 @@ static int mi0283qt_probe(struct spi_device *spi) if (IS_ERR(mipi->regulator)) return PTR_ERR(mipi->regulator); - mipi->backlight
[PATCH v5 0/4] drm/tinydrm: drm_of_find_backlight helper
This patchset introduces some changes such as move tinydrm_of_find_backlight to drm_of.c and rename it to drm_of_find_backlight for better organizational structure. Changes in v5: -Fix kbuild errors and warnings Meghana Madhyastha (4): drm/tinydrm: Move tinydrm_of_find_backlight into drm_of.c drm/tinydrm: Add devres versions of drm_of_find_backlight drm/tinydrm: Add the dummy versions of drm_of_find_backlight functions drm/tinydrm: select BACKLIGHT_LCD_SUPPORT, BACKLIGHT_CLASS_DEVICE drivers/gpu/drm/Kconfig| 2 + drivers/gpu/drm/drm_of.c | 91 ++ drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c | 40 --- drivers/gpu/drm/tinydrm/mi0283qt.c | 3 +- include/drm/drm_of.h | 15 + include/drm/tinydrm/tinydrm-helpers.h | 1 - 6 files changed, 110 insertions(+), 42 deletions(-) -- 2.7.4 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
Re: [PATCH v6 1/2] drm/tinydrm: Move tinydrm_of_find_backlight into drm_of.c
On Sat, Sep 30, 2017 at 09:04:57PM +0200, Noralf Trønnes wrote: > > Den 30.09.2017 19.12, skrev Meghana Madhyastha: > >Rename tinydrm_of_find_backlight to drm_of_find_backlight > >and move it into drm_of.c from tinydrm-helpers.c. This is > >because other drivers in the drm subsystem might need to call > >this function. In that case and otherwise, it is better from > >an organizational point of view to move it into drm_of.c along > >with the other _of.c functions. > > > >Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> > >--- > >Changes in v6: > >-Move function declarations to linux/backlight.h to resolve > > module dependency issues. > > > > drivers/gpu/drm/drm_of.c | 44 > > ++ > > drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c | 40 --- > > drivers/gpu/drm/tinydrm/mi0283qt.c | 2 +- > > include/drm/tinydrm/tinydrm-helpers.h | 1 - > > include/linux/backlight.h | 11 +++ > > 5 files changed, 56 insertions(+), 42 deletions(-) > > > >diff --git a/drivers/gpu/drm/drm_of.c b/drivers/gpu/drm/drm_of.c > >index 8dafbdf..d878d3a 100644 > >--- a/drivers/gpu/drm/drm_of.c > >+++ b/drivers/gpu/drm/drm_of.c > >@@ -1,6 +1,7 @@ > > #include > > #include > > #include > >+#include > > #include > > #include > > #include > >@@ -260,3 +261,46 @@ int drm_of_find_panel_or_bridge(const struct > >device_node *np, > > return ret; > > } > > EXPORT_SYMBOL_GPL(drm_of_find_panel_or_bridge); > >+ > >+/** > >+ * drm_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. > >+ * > >+ * Note: It is the responsibility of the caller to call put_device() when > >+ * releasing the resource. > >+ * > >+ * 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 *drm_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(drm_of_find_backlight); > >diff --git a/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c > >b/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c > >index bd6cce0..cd4c6a5 100644 > >--- a/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c > >+++ b/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c > >@@ -237,46 +237,6 @@ void tinydrm_xrgb_to_gray8(u8 *dst, void *vaddr, > >struct drm_framebuffer *fb, > > EXPORT_SYMBOL(tinydrm_xrgb_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
[PATCH v7 2/3] drm/tinydrm: Move tinydrm_of_find_backlight into drm_of.c
Rename tinydrm_of_find_backlight to drm_of_find_backlight and move it into drm_of.c from tinydrm-helpers.c. This is because other drivers in the drm subsystem might need to call this function. In that case and otherwise, it is better from an organizational point of view to move it into drm_of.c along with the other _of.c functions. Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> --- Changes in v7: -Move function declarations back to drm_of.h drivers/gpu/drm/drm_of.c | 45 ++ drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c | 40 --- drivers/gpu/drm/tinydrm/mi0283qt.c | 3 +- include/drm/drm_of.h | 7 include/drm/tinydrm/tinydrm-helpers.h | 1 - 5 files changed, 54 insertions(+), 42 deletions(-) diff --git a/drivers/gpu/drm/drm_of.c b/drivers/gpu/drm/drm_of.c index 8dafbdf..7417725 100644 --- a/drivers/gpu/drm/drm_of.c +++ b/drivers/gpu/drm/drm_of.c @@ -1,7 +1,9 @@ #include #include #include +#include #include +#include #include #include #include @@ -260,3 +262,46 @@ int drm_of_find_panel_or_bridge(const struct device_node *np, return ret; } EXPORT_SYMBOL_GPL(drm_of_find_panel_or_bridge); + +/** + * drm_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. + * + * Note: It is the responsibility of the caller to call put_device() when + * releasing the resource. + * + * 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 *drm_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(drm_of_find_backlight); diff --git a/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c b/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c index bd6cce0..cd4c6a5 100644 --- a/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c +++ b/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c @@ -237,46 +237,6 @@ void tinydrm_xrgb_to_gray8(u8 *dst, void *vaddr, struct drm_framebuffer *fb, EXPORT_SYMBOL(tinydrm_xrgb_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); - -/** * tinydrm_enable_backlight - Enable backlight helper * @backlight: Backlight device * diff --git a/drivers/gpu/drm/tinydrm/mi0283qt.c b/drivers/gpu/drm/tinydrm/mi0283qt.c index 7e5bb7d..5e3d635 100644 --- a/drivers/gpu/drm/tinydrm/mi0283qt.c +++ b/drivers/gpu/drm/tinydrm/mi0283qt.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -189,7 +190,7 @@ static int mi0283qt_probe(struct spi_device *spi) if (IS_ERR(mipi->regulator)) return
[PATCH v7 3/3] drm/tinydrm: Add devres versions of drm_of_find_backlight
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.madhyas...@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, + >dev); + if (ret) { + put_device(>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 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH v7 1/3] backlight: Add IS_ENABLED(CONFIG_BACKLIGHT_CLASS_DEVICE)
Add IS_ENABLED(CONFIG_BACKLIGHT_CLASS_DEVICE) as part of the if directive for the function declaration of of_find_backlight_by_node in order to avoid module dependency errors. Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> --- Changes in v7: -This patch did not exist in v6. include/linux/backlight.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/linux/backlight.h b/include/linux/backlight.h index 5f2fd61..a52ce82 100644 --- a/include/linux/backlight.h +++ b/include/linux/backlight.h @@ -162,7 +162,7 @@ struct generic_bl_info { void (*kick_battery)(void); }; -#ifdef CONFIG_OF +#if defined CONFIG_OF && IS_ENABLED(CONFIG_BACKLIGHT_CLASS_DEVICE) struct backlight_device *of_find_backlight_by_node(struct device_node *node); #else static inline struct backlight_device * -- 2.7.4 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
Re: [PATCH v6 1/2] drm/tinydrm: Move tinydrm_of_find_backlight into drm_of.c
On Sun, Oct 01, 2017 at 03:26:36PM +0200, Noralf Trønnes wrote: > > Den 01.10.2017 06.14, skrev Meghana Madhyastha: > >On Sat, Sep 30, 2017 at 09:04:57PM +0200, Noralf Trønnes wrote: > >>Den 30.09.2017 19.12, skrev Meghana Madhyastha: > >>>Rename tinydrm_of_find_backlight to drm_of_find_backlight > >>>and move it into drm_of.c from tinydrm-helpers.c. This is > >>>because other drivers in the drm subsystem might need to call > >>>this function. In that case and otherwise, it is better from > >>>an organizational point of view to move it into drm_of.c along > >>>with the other _of.c functions. > >>> > >>>Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> > >>>--- > >>>Changes in v6: > >>>-Move function declarations to linux/backlight.h to resolve > >>> module dependency issues. > >>> > >>> drivers/gpu/drm/drm_of.c | 44 > >>> ++ > >>> drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c | 40 > >>> --- > >>> drivers/gpu/drm/tinydrm/mi0283qt.c | 2 +- > >>> include/drm/tinydrm/tinydrm-helpers.h | 1 - > >>> include/linux/backlight.h | 11 +++ > >>> 5 files changed, 56 insertions(+), 42 deletions(-) > >>> > >>>diff --git a/drivers/gpu/drm/drm_of.c b/drivers/gpu/drm/drm_of.c > >>>index 8dafbdf..d878d3a 100644 > >>>--- a/drivers/gpu/drm/drm_of.c > >>>+++ b/drivers/gpu/drm/drm_of.c > >>>@@ -1,6 +1,7 @@ > >>> #include > >>> #include > >>> #include > >>>+#include > >>> #include > >>> #include > >>> #include > >>>@@ -260,3 +261,46 @@ int drm_of_find_panel_or_bridge(const struct > >>>device_node *np, > >>> return ret; > >>> } > >>> EXPORT_SYMBOL_GPL(drm_of_find_panel_or_bridge); > >>>+ > >>>+/** > >>>+ * drm_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. > >>>+ * > >>>+ * Note: It is the responsibility of the caller to call put_device() when > >>>+ * releasing the resource. > >>>+ * > >>>+ * 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 *drm_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(drm_of_find_backlight); > >>>diff --git a/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c > >>>b/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c > >>>index bd6cce0..cd4c6a5 100644 > >>>--- a/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c > >>>+++ b/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c > >>>@@ -237,46 +237,6 @@ void tinydrm_xrgb_to_gray8(u8 *dst, void *vaddr, > >>>struct drm_framebuffer *fb, > >>> EXPORT_SYMBOL(tinydrm_xrgb_to_gray8); > >>> /** > >>>- * tinydr
[PATCH v7 0/3] drm/tinydrm: drm_of_find_backlight helper
Move tinydrm_of_find_backlight to drm_of.c and rename it to drm_of_find_backlight for better organizational structure. Changes in v7: -Move the function definitions/declarations back to drm_of.h and modify the config option for of_find_backlight_by_node in linux/backlight.h to resolve the build errors. Meghana Madhyastha (3): backlight: Add IS_ENABLED(CONFIG_BACKLIGHT_CLASS_DEVICE) drm/tinydrm: Move tinydrm_of_find_backlight into drm_of.c drm/tinydrm: Add devres versions of drm_of_find_backlight drivers/gpu/drm/drm_of.c | 85 ++ drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c | 40 drivers/gpu/drm/tinydrm/mi0283qt.c | 3 +- include/drm/drm_of.h | 14 + include/drm/tinydrm/tinydrm-helpers.h | 1 - include/linux/backlight.h | 2 +- 6 files changed, 102 insertions(+), 43 deletions(-) -- 2.7.4 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
Re: [PATCH v6 1/2] drm/tinydrm: Move tinydrm_of_find_backlight into drm_of.c
On Sun, Oct 01, 2017 at 04:47:26PM +0200, Noralf Trønnes wrote: > > Den 01.10.2017 15.34, skrev Meghana Madhyastha: > >On Sun, Oct 01, 2017 at 03:26:36PM +0200, Noralf Trønnes wrote: > >>Den 01.10.2017 06.14, skrev Meghana Madhyastha: > >>>On Sat, Sep 30, 2017 at 09:04:57PM +0200, Noralf Trønnes wrote: > >>>>Den 30.09.2017 19.12, skrev Meghana Madhyastha: > >>>>>Rename tinydrm_of_find_backlight to drm_of_find_backlight > >>>>>and move it into drm_of.c from tinydrm-helpers.c. This is > >>>>>because other drivers in the drm subsystem might need to call > >>>>>this function. In that case and otherwise, it is better from > >>>>>an organizational point of view to move it into drm_of.c along > >>>>>with the other _of.c functions. > >>>>> > >>>>>Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> > >>>>>--- > >>>>>Changes in v6: > >>>>>-Move function declarations to linux/backlight.h to resolve > >>>>> module dependency issues. > >>>>> > >>>>> drivers/gpu/drm/drm_of.c | 44 > >>>>> ++ > >>>>> drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c | 40 > >>>>> --- > >>>>> drivers/gpu/drm/tinydrm/mi0283qt.c | 2 +- > >>>>> include/drm/tinydrm/tinydrm-helpers.h | 1 - > >>>>> include/linux/backlight.h | 11 +++ > >>>>> 5 files changed, 56 insertions(+), 42 deletions(-) > >>>>> > >>>>>diff --git a/drivers/gpu/drm/drm_of.c b/drivers/gpu/drm/drm_of.c > >>>>>index 8dafbdf..d878d3a 100644 > >>>>>--- a/drivers/gpu/drm/drm_of.c > >>>>>+++ b/drivers/gpu/drm/drm_of.c > >>>>>@@ -1,6 +1,7 @@ > >>>>> #include > >>>>> #include > >>>>> #include > >>>>>+#include > >>>>> #include > >>>>> #include > >>>>> #include > >>>>>@@ -260,3 +261,46 @@ int drm_of_find_panel_or_bridge(const struct > >>>>>device_node *np, > >>>>> return ret; > >>>>> } > >>>>> EXPORT_SYMBOL_GPL(drm_of_find_panel_or_bridge); > >>>>>+ > >>>>>+/** > >>>>>+ * drm_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. > >>>>>+ * > >>>>>+ * Note: It is the responsibility of the caller to call put_device() > >>>>>when > >>>>>+ * releasing the resource. > >>>>>+ * > >>>>>+ * 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 *drm_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; > >>>>
Re: [PATCH v3 1/2] drm/tinydrm: Move tinydrm_of_find_backlight into drm_of.c
On Fri, Sep 29, 2017 at 02:33:12PM +0200, Noralf Trønnes wrote: > > Den 29.09.2017 14.20, skrev Meghana Madhyastha: > >On Fri, Sep 29, 2017 at 02:10:31PM +0200, Noralf Trønnes wrote: > >>Den 29.09.2017 05.22, skrev Meghana Madhyastha: > >>>On Thu, Sep 28, 2017 at 06:02:27PM +0200, Noralf Trønnes wrote: > >>>>Den 28.09.2017 16.08, skrev Daniel Vetter: > >>>>>On Thu, Sep 28, 2017 at 02:44:34PM +0530, Meghana Madhyastha wrote: > >>>>>>Rename tinydrm_of_find_backlight to drm_of_find_backlight > >>>>>>and move it into drm_of.c from tinydrm-helpers.c. This is > >>>>>>because other drivers in the drm subsystem might need to call > >>>>>>this function. In that case and otherwise, it is better from > >>>>>>an organizational point of view to move it into drm_of.c along > >>>>>>with the other _of.c functions. > >>>>>> > >>>>>>Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> > >>>>>>--- > >>>>>>Changes in v3: > >>>>>>-Change it back to a single patch from two patches in v2 > >>>>>> > >>>>>> drivers/gpu/drm/drm_of.c | 44 > >>>>>> ++ > >>>>>> drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c | 40 > >>>>>> --- > >>>>>> drivers/gpu/drm/tinydrm/mi0283qt.c | 3 +- > >>>>>> include/drm/drm_of.h | 1 + > >>>>>> include/drm/tinydrm/tinydrm-helpers.h | 1 - > >>>>>> 5 files changed, 47 insertions(+), 42 deletions(-) > >>>>>> > >>>>>>diff --git a/drivers/gpu/drm/drm_of.c b/drivers/gpu/drm/drm_of.c > >>>>>>index 8dafbdf..d878d3a 100644 > >>>>>>--- a/drivers/gpu/drm/drm_of.c > >>>>>>+++ b/drivers/gpu/drm/drm_of.c > >>>>>>@@ -1,6 +1,7 @@ > >>>>>> #include > >>>>>> #include > >>>>>> #include > >>>>>>+#include > >>>>>> #include > >>>>>> #include > >>>>>> #include > >>>>>>@@ -260,3 +261,46 @@ int drm_of_find_panel_or_bridge(const struct > >>>>>>device_node *np, > >>>>>>return ret; > >>>>>> } > >>>>>> EXPORT_SYMBOL_GPL(drm_of_find_panel_or_bridge); > >>>>>>+ > >>>>>>+/** > >>>>>>+ * drm_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. > >>>>>>+ * > >>>>>>+ * Note: It is the responsibility of the caller to call put_device() > >>>>>>when > >>>>>>+ * releasing the resource. > >>>>>>+ * > >>>>>>+ * 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 *drm_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 (!backlig
[PATCH v4 2/3] drm/tinydrm: Add devres versions of drm_of_find_backlight
Add devm_drm_of_find_backlight and the corresponding release function because some drivers such as tinydrm use devres versions of functions for requiring device resources. Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> --- Changes in v4: -Made the release function an internal static function. -Removed specific reference to tinydrm in the function comments. drivers/gpu/drm/drm_of.c | 47 ++ drivers/gpu/drm/tinydrm/mi0283qt.c | 2 +- include/drm/drm_of.h | 1 + 3 files changed, 49 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/drm_of.c b/drivers/gpu/drm/drm_of.c index d878d3a..cd80dfc 100644 --- a/drivers/gpu/drm/drm_of.c +++ b/drivers/gpu/drm/drm_of.c @@ -304,3 +304,50 @@ struct backlight_device *drm_of_find_backlight(struct device *dev) return backlight; } EXPORT_SYMBOL(drm_of_find_backlight); + +/** + * devm_drm_of_find_backlight_release - Release backlight device + * @dev: Device + * + * This is the release function corresponding to the devm_drm_of_find_backlight. + * Each devres entry is associated with a release function. + */ +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, + >dev); + if (ret) { + put_device(>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 e8fba5b..b2d6e0c 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) -- 2.7.4 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH v4 3/3] drm/tinydrm: Add the dummy versions of drm_of_find_backlight functions
Add the dummy versions (function definition returning -EINVAL) of drm_of_find_backlight and devm_drm_of_find_backlight in the #else part of the conditional directive in drm_of.h. This is needed for drivers where CONFIG_OF is optional. Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> --- Changes in v4: -This commit was not present in the previous versions. include/drm/drm_of.h | 13 + 1 file changed, 13 insertions(+) diff --git a/include/drm/drm_of.h b/include/drm/drm_of.h index b2d6e0c..b11d55b 100644 --- a/include/drm/drm_of.h +++ b/include/drm/drm_of.h @@ -60,6 +60,7 @@ static inline int drm_of_encoder_active_endpoint(struct device_node *node, { return -EINVAL; } + static inline int drm_of_find_panel_or_bridge(const struct device_node *np, int port, int endpoint, struct drm_panel **panel, @@ -67,6 +68,18 @@ static inline int drm_of_find_panel_or_bridge(const struct device_node *np, { return -EINVAL; } + +static inline struct backlight_device *drm_of_find_backlight( + struct device *dev); +{ + return -EINVAL; +} + +static inline struct backlight_device *devm_drm_of_find_backlight( + struct device *dev); +{ + return -EINVAL; +} #endif static inline int drm_of_encoder_active_endpoint_id(struct device_node *node, -- 2.7.4 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH v4 0/3] drm/tinydrm: drm_of_find_backlight helper
This patchset introduces some changes such as move tinydrm_of_find_backlight to drm_of.c and rename it to drm_of_find_backlight for better organizational structure. Changes in v4: - Remove "devices like tinydrm" from the function comments. - Made devm_drm_of_find_backlight_release an internal function. - Add dummy versions of drm_of_backlight functions. Meghana Madhyastha (3): drm/tinydrm: Move tinydrm_of_find_backlight into drm_of.c drm/tinydrm: Add devres versions of drm_of_find_backlight drm/tinydrm: Add the dummy versions of drm_of_find_backlight functions drivers/gpu/drm/drm_of.c | 91 ++ drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c | 40 --- drivers/gpu/drm/tinydrm/mi0283qt.c | 3 +- include/drm/drm_of.h | 15 + include/drm/tinydrm/tinydrm-helpers.h | 1 - 5 files changed, 108 insertions(+), 42 deletions(-) -- 2.7.4 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH v4 1/3] drm/tinydrm: Move tinydrm_of_find_backlight into drm_of.c
Rename tinydrm_of_find_backlight to drm_of_find_backlight and move it into drm_of.c from tinydrm-helpers.c. This is because other drivers in the drm subsystem might need to call this function. In that case and otherwise, it is better from an organizational point of view to move it into drm_of.c along with the other _of.c functions. Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> --- Changes in v4: -None drivers/gpu/drm/drm_of.c | 44 ++ drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c | 40 --- drivers/gpu/drm/tinydrm/mi0283qt.c | 3 +- include/drm/drm_of.h | 1 + include/drm/tinydrm/tinydrm-helpers.h | 1 - 5 files changed, 47 insertions(+), 42 deletions(-) diff --git a/drivers/gpu/drm/drm_of.c b/drivers/gpu/drm/drm_of.c index 8dafbdf..d878d3a 100644 --- a/drivers/gpu/drm/drm_of.c +++ b/drivers/gpu/drm/drm_of.c @@ -1,6 +1,7 @@ #include #include #include +#include #include #include #include @@ -260,3 +261,46 @@ int drm_of_find_panel_or_bridge(const struct device_node *np, return ret; } EXPORT_SYMBOL_GPL(drm_of_find_panel_or_bridge); + +/** + * drm_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. + * + * Note: It is the responsibility of the caller to call put_device() when + * releasing the resource. + * + * 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 *drm_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(drm_of_find_backlight); diff --git a/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c b/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c index bd6cce0..cd4c6a5 100644 --- a/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c +++ b/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c @@ -237,46 +237,6 @@ void tinydrm_xrgb_to_gray8(u8 *dst, void *vaddr, struct drm_framebuffer *fb, EXPORT_SYMBOL(tinydrm_xrgb_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); - -/** * tinydrm_enable_backlight - Enable backlight helper * @backlight: Backlight device * diff --git a/drivers/gpu/drm/tinydrm/mi0283qt.c b/drivers/gpu/drm/tinydrm/mi0283qt.c index 7e5bb7d..5e3d635 100644 --- a/drivers/gpu/drm/tinydrm/mi0283qt.c +++ b/drivers/gpu/drm/tinydrm/mi0283qt.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -189,7 +190,7 @@ static int mi0283qt_probe(struct spi_device *spi) if (IS_ERR(mipi->regulator)) return PTR_ERR(mipi->regulator); - mipi->backlight
Re: [PATCH v3 2/2] drm/tinydrm: Add devres versions of drm_of_find_backlight
On Thu, Sep 28, 2017 at 06:19:35PM +0200, Noralf Trønnes wrote: > > Den 28.09.2017 11.15, skrev Meghana Madhyastha: > >Add devm_drm_of_find_backlight and the corresponding release > >function because some drivers such as tinydrm use devres versions > >of functions for requiring device resources. > > > >Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> > >--- > >Changes in v3: > >-None > > > > drivers/gpu/drm/drm_of.c | 48 > > > > include/drm/drm_of.h | 2 ++ > > 2 files changed, 50 insertions(+) > > > >diff --git a/drivers/gpu/drm/drm_of.c b/drivers/gpu/drm/drm_of.c > >index d878d3a..238e8e5 100644 > >--- a/drivers/gpu/drm/drm_of.c > >+++ b/drivers/gpu/drm/drm_of.c > >@@ -304,3 +304,51 @@ struct backlight_device *drm_of_find_backlight(struct > >device *dev) > > return backlight; > > } > > EXPORT_SYMBOL(drm_of_find_backlight); > >+ > >+/** > >+ * devm_drm_of_find_backlight_release - Release backlight device > >+ * @dev: Device > >+ * > >+ * This is the release function corresponding to the > >devm_drm_of_find_backlight. > >+ * Each devres entry is associated with a release function. > >+ */ > > This is an internal function so no need for docs or exporting. I know > that some devm_ functions have explicit release functions, but I don't > think this is necessary since those users can just use > drm_of_find_backlight() directly instead. I have a question here. devm_drm_of_find_backlight_release is a wrapper around put_device which is passed as a parameter to devm_add_action in devm_drm_of_find_backlight. So isn't the function useful here ? > >+static void devm_drm_of_find_backlight_release(void *data) > >+{ > >+put_device(data); > >+} > >+EXPORT_SYMBOL(devm_drm_of_find_backlight_release); > >+ > >+/** > >+ * 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 such as tinydrm use devres versions of functions for > > No need to mention tinydrm here. > > >+ * 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, > >+ >dev); > >+if (ret) { > >+put_device(>dev); > >+return ERR_PTR(ret); > >+} > >+ > >+return backlight; > >+} > >+EXPORT_SYMBOL(devm_drm_of_find_backlight); > >diff --git a/include/drm/drm_of.h b/include/drm/drm_of.h > >index e8fba5b..071fb3b 100644 > >--- a/include/drm/drm_of.h > >+++ b/include/drm/drm_of.h > >@@ -30,7 +30,9 @@ 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 > > We need a dummy version of devm_drm_of_find_backlight() here that > returns NULL as in the previous patch. > > >+static void devm_drm_of_find_backlight_release(void *data); > > And this isn't needed as explained above. > > static inline uint32_t drm_of_find_possible_crtcs(struct drm_device *dev, > > struct device_node *port) > > { > > I'd appreciate if you could also switch mi0283qt over to this helper :-) > > Noralf. > > ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
Re: [PATCH v3 1/2] drm/tinydrm: Move tinydrm_of_find_backlight into drm_of.c
On Thu, Sep 28, 2017 at 06:02:27PM +0200, Noralf Trønnes wrote: > > Den 28.09.2017 16.08, skrev Daniel Vetter: > >On Thu, Sep 28, 2017 at 02:44:34PM +0530, Meghana Madhyastha wrote: > >>Rename tinydrm_of_find_backlight to drm_of_find_backlight > >>and move it into drm_of.c from tinydrm-helpers.c. This is > >>because other drivers in the drm subsystem might need to call > >>this function. In that case and otherwise, it is better from > >>an organizational point of view to move it into drm_of.c along > >>with the other _of.c functions. > >> > >>Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> > >>--- > >>Changes in v3: > >>-Change it back to a single patch from two patches in v2 > >> > >> drivers/gpu/drm/drm_of.c | 44 > >> ++ > >> drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c | 40 > >> --- > >> drivers/gpu/drm/tinydrm/mi0283qt.c | 3 +- > >> include/drm/drm_of.h | 1 + > >> include/drm/tinydrm/tinydrm-helpers.h | 1 - > >> 5 files changed, 47 insertions(+), 42 deletions(-) > >> > >>diff --git a/drivers/gpu/drm/drm_of.c b/drivers/gpu/drm/drm_of.c > >>index 8dafbdf..d878d3a 100644 > >>--- a/drivers/gpu/drm/drm_of.c > >>+++ b/drivers/gpu/drm/drm_of.c > >>@@ -1,6 +1,7 @@ > >> #include > >> #include > >> #include > >>+#include > >> #include > >> #include > >> #include > >>@@ -260,3 +261,46 @@ int drm_of_find_panel_or_bridge(const struct > >>device_node *np, > >>return ret; > >> } > >> EXPORT_SYMBOL_GPL(drm_of_find_panel_or_bridge); > >>+ > >>+/** > >>+ * drm_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. > >>+ * > >>+ * Note: It is the responsibility of the caller to call put_device() when > >>+ * releasing the resource. > >>+ * > >>+ * 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 *drm_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(drm_of_find_backlight); > >>diff --git a/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c > >>b/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c > >>index bd6cce0..cd4c6a5 100644 > >>--- a/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c > >>+++ b/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c > >>@@ -237,46 +237,6 @@ void tinydrm_xrgb_to_gray8(u8 *dst, void *vaddr, > >>struct drm_framebuffer *fb, > >> EXPORT_SYMBOL(tinydrm_xrgb_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 prop
Re: [PATCH] drm/tinydrm: Move tinydrm_of_find_backlight into drm_of.c
On Thu, Sep 28, 2017 at 11:38:36AM +0200, Daniel Vetter wrote: > On Thu, Sep 28, 2017 at 11:27 AM, Meghana Madhyastha > <meghana.madhyas...@gmail.com> wrote: > > On Thu, Sep 28, 2017 at 09:15:39AM +0200, Daniel Vetter wrote: > >> On Wed, Sep 27, 2017 at 05:08:07PM +0200, Noralf Trønnes wrote: > >> > > >> > Den 27.09.2017 15.54, skrev Meghana Madhyastha: > >> > > Rename tinydrm_of_find_backlight to drm_of_find_backlight > >> > > and move it into drm_of.c from tinydrm-helpers.c. This is > >> > > because other drivers in the drm subsystem might need to call > >> > > this function. In that case and otherwise, it is better from > >> > > an organizational point of view to move it into drm_of.c along > >> > > with the other _of.c functions. > >> > > > >> > > Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> > >> > > --- > >> > > >> > I suggest you split this patch in 2, one to add the function and one to > >> > use it in tinydrm. > >> > >> In general I'd agree to split into 3 phases: 1) add new function 2) > >> convert drivers 3) remove old one. > >> > >> But since there's only 1 caller this seems like overkill. > >> > >> > > drivers/gpu/drm/drm_of.c | 41 > >> > > ++ > >> > > drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c | 40 > >> > > - > >> > > drivers/gpu/drm/tinydrm/mi0283qt.c | 3 +- > >> > > include/drm/drm_of.h | 1 + > >> > > include/drm/tinydrm/tinydrm-helpers.h | 1 - > >> > > 5 files changed, 44 insertions(+), 42 deletions(-) > >> > > > >> > > diff --git a/drivers/gpu/drm/drm_of.c b/drivers/gpu/drm/drm_of.c > >> > > index 8dafbdf..d8cded3 100644 > >> > > --- a/drivers/gpu/drm/drm_of.c > >> > > +++ b/drivers/gpu/drm/drm_of.c > >> > > @@ -1,6 +1,7 @@ > >> > > #include > >> > > #include > >> > > #include > >> > > +#include > >> > > #include > >> > > #include > >> > > #include > >> > > @@ -260,3 +261,43 @@ int drm_of_find_panel_or_bridge(const struct > >> > > device_node *np, > >> > > return ret; > >> > > } > >> > > EXPORT_SYMBOL_GPL(drm_of_find_panel_or_bridge); > >> > > + > >> > > +/** > >> > > + * drm_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. > >> > > >> > Please add a note here about the callers responsibility to call > >> > put_device() when releasing the resource. > >> > See the of_find_backlight_by_node() docs. > >> > > >> > > + * > >> > > + * 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 *drm_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 =
[PATCH v2 1/3] drm/tinydrm: Move tinydrm_of_find_backlight into drm_of.c
Rename tinydrm_of_find_backlight to drm_of_find_backlight and move it into drm_of.c from tinydrm-helpers.c. This is because other drivers in the drm subsystem might need to call this function. In that case and otherwise, it is better from an organizational point of view to move it into drm_of.c along with the other _of.c functions. Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> --- Changes in v2: -Added note about it being the callers responsibility to call put_device. drivers/gpu/drm/drm_of.c | 44 ++ drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c | 40 --- include/drm/drm_of.h | 1 + include/drm/tinydrm/tinydrm-helpers.h | 1 - 4 files changed, 45 insertions(+), 41 deletions(-) diff --git a/drivers/gpu/drm/drm_of.c b/drivers/gpu/drm/drm_of.c index 8dafbdf..d878d3a 100644 --- a/drivers/gpu/drm/drm_of.c +++ b/drivers/gpu/drm/drm_of.c @@ -1,6 +1,7 @@ #include #include #include +#include #include #include #include @@ -260,3 +261,46 @@ int drm_of_find_panel_or_bridge(const struct device_node *np, return ret; } EXPORT_SYMBOL_GPL(drm_of_find_panel_or_bridge); + +/** + * drm_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. + * + * Note: It is the responsibility of the caller to call put_device() when + * releasing the resource. + * + * 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 *drm_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(drm_of_find_backlight); diff --git a/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c b/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c index bd6cce0..cd4c6a5 100644 --- a/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c +++ b/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c @@ -237,46 +237,6 @@ void tinydrm_xrgb_to_gray8(u8 *dst, void *vaddr, struct drm_framebuffer *fb, EXPORT_SYMBOL(tinydrm_xrgb_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); - -/** * tinydrm_enable_backlight - Enable backlight helper * @backlight: Backlight device * diff --git a/include/drm/drm_of.h b/include/drm/drm_of.h index 104dd51..e8fba5b 100644 --- a/include/drm/drm_of.h +++ b/include/drm/drm_of.h @@ -29,6 +29,7 @@ int drm_of_find_panel_or_bridge(const struct device_node *np, int port, int endpoint, struct drm_panel **panel, struct drm_bridge **bridge); +struct backlight_device *drm_of_find_backlight(struct device *dev); #el
[PATCH v2 2/3] drm/tinydrm: Call drm_of_find_backlight instead of tinydrm_of_find_backlight
Call drm_of_find_backlight from of_drm.c as the function has been renamed and moved. Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> --- Changes in v2: -Introduce this as a separate patch in a patchset instead of combining it with the previous changes. drivers/gpu/drm/tinydrm/mi0283qt.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/tinydrm/mi0283qt.c b/drivers/gpu/drm/tinydrm/mi0283qt.c index 7e5bb7d..5e3d635 100644 --- a/drivers/gpu/drm/tinydrm/mi0283qt.c +++ b/drivers/gpu/drm/tinydrm/mi0283qt.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -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 = drm_of_find_backlight(dev); if (IS_ERR(mipi->backlight)) return PTR_ERR(mipi->backlight); -- 2.7.4 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH v2 3/3] drm/tinydrm: Add devres versions of drm_of_find_backlight
Add devm_drm_of_find_backlight and the corresponding release function because some drivers such as tinydrm use devres versions of functions for requiring device resources. Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> --- Changes in v2: -This was not present in the initial version. drivers/gpu/drm/drm_of.c | 47 +++ include/drm/drm_of.h | 2 ++ 2 files changed, 49 insertions(+) diff --git a/drivers/gpu/drm/drm_of.c b/drivers/gpu/drm/drm_of.c index d878d3a..26090e1 100644 --- a/drivers/gpu/drm/drm_of.c +++ b/drivers/gpu/drm/drm_of.c @@ -304,3 +304,50 @@ struct backlight_device *drm_of_find_backlight(struct device *dev) return backlight; } EXPORT_SYMBOL(drm_of_find_backlight); + +/** + * 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 such as tinydrm 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); + +/** + * devm_drm_of_find_backlight_release - Release backlight device + * + * This is the release function corresponding to the devm_drm_of_find_backlight. + * Each devres entry is associated with a release function. + */ +static void devm_drm_of_find_backlight_release(void *data) +{ + put_device(data); +} +EXPORT_SYMBOL(devm_drm_of_find_backlight_release) diff --git a/include/drm/drm_of.h b/include/drm/drm_of.h index e8fba5b..89a37da 100644 --- a/include/drm/drm_of.h +++ b/include/drm/drm_of.h @@ -30,6 +30,8 @@ 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) +static void devm_drm_of_find_backlight_release(void *data) #else static inline uint32_t drm_of_find_possible_crtcs(struct drm_device *dev, struct device_node *port) -- 2.7.4 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH v3 1/2] drm/tinydrm: Move tinydrm_of_find_backlight into drm_of.c
Rename tinydrm_of_find_backlight to drm_of_find_backlight and move it into drm_of.c from tinydrm-helpers.c. This is because other drivers in the drm subsystem might need to call this function. In that case and otherwise, it is better from an organizational point of view to move it into drm_of.c along with the other _of.c functions. Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> --- Changes in v3: -Change it back to a single patch from two patches in v2 drivers/gpu/drm/drm_of.c | 44 ++ drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c | 40 --- drivers/gpu/drm/tinydrm/mi0283qt.c | 3 +- include/drm/drm_of.h | 1 + include/drm/tinydrm/tinydrm-helpers.h | 1 - 5 files changed, 47 insertions(+), 42 deletions(-) diff --git a/drivers/gpu/drm/drm_of.c b/drivers/gpu/drm/drm_of.c index 8dafbdf..d878d3a 100644 --- a/drivers/gpu/drm/drm_of.c +++ b/drivers/gpu/drm/drm_of.c @@ -1,6 +1,7 @@ #include #include #include +#include #include #include #include @@ -260,3 +261,46 @@ int drm_of_find_panel_or_bridge(const struct device_node *np, return ret; } EXPORT_SYMBOL_GPL(drm_of_find_panel_or_bridge); + +/** + * drm_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. + * + * Note: It is the responsibility of the caller to call put_device() when + * releasing the resource. + * + * 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 *drm_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(drm_of_find_backlight); diff --git a/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c b/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c index bd6cce0..cd4c6a5 100644 --- a/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c +++ b/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c @@ -237,46 +237,6 @@ void tinydrm_xrgb_to_gray8(u8 *dst, void *vaddr, struct drm_framebuffer *fb, EXPORT_SYMBOL(tinydrm_xrgb_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); - -/** * tinydrm_enable_backlight - Enable backlight helper * @backlight: Backlight device * diff --git a/drivers/gpu/drm/tinydrm/mi0283qt.c b/drivers/gpu/drm/tinydrm/mi0283qt.c index 7e5bb7d..5e3d635 100644 --- a/drivers/gpu/drm/tinydrm/mi0283qt.c +++ b/drivers/gpu/drm/tinydrm/mi0283qt.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -189,7 +190,7 @@ static int mi0283qt_probe(struct spi_device *spi) if (IS_ERR(mipi->regulator)) return PTR_
Re: [PATCH] drm/tinydrm: Move tinydrm_of_find_backlight into drm_of.c
On Thu, Sep 28, 2017 at 09:15:39AM +0200, Daniel Vetter wrote: > On Wed, Sep 27, 2017 at 05:08:07PM +0200, Noralf Trønnes wrote: > > > > Den 27.09.2017 15.54, skrev Meghana Madhyastha: > > > Rename tinydrm_of_find_backlight to drm_of_find_backlight > > > and move it into drm_of.c from tinydrm-helpers.c. This is > > > because other drivers in the drm subsystem might need to call > > > this function. In that case and otherwise, it is better from > > > an organizational point of view to move it into drm_of.c along > > > with the other _of.c functions. > > > > > > Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> > > > --- > > > > I suggest you split this patch in 2, one to add the function and one to > > use it in tinydrm. > > In general I'd agree to split into 3 phases: 1) add new function 2) > convert drivers 3) remove old one. > > But since there's only 1 caller this seems like overkill. > > > > drivers/gpu/drm/drm_of.c | 41 > > > ++ > > > drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c | 40 > > > - > > > drivers/gpu/drm/tinydrm/mi0283qt.c | 3 +- > > > include/drm/drm_of.h | 1 + > > > include/drm/tinydrm/tinydrm-helpers.h | 1 - > > > 5 files changed, 44 insertions(+), 42 deletions(-) > > > > > > diff --git a/drivers/gpu/drm/drm_of.c b/drivers/gpu/drm/drm_of.c > > > index 8dafbdf..d8cded3 100644 > > > --- a/drivers/gpu/drm/drm_of.c > > > +++ b/drivers/gpu/drm/drm_of.c > > > @@ -1,6 +1,7 @@ > > > #include > > > #include > > > #include > > > +#include > > > #include > > > #include > > > #include > > > @@ -260,3 +261,43 @@ int drm_of_find_panel_or_bridge(const struct > > > device_node *np, > > > return ret; > > > } > > > EXPORT_SYMBOL_GPL(drm_of_find_panel_or_bridge); > > > + > > > +/** > > > + * drm_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. > > > > Please add a note here about the callers responsibility to call > > put_device() when releasing the resource. > > See the of_find_backlight_by_node() docs. > > > > > + * > > > + * 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 *drm_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(drm_of_find_backlight); > > > > Can you also please add a devm_ version of this function. tinydrm uses > > devres[1] versions of functions for requiring device resources, so it > > would be nice to do this for backlight as well. tinydrm is currently > > broken in this respect, it doesn't put the backlight device. > > > > I had a devm_of_find_backlight() version lying around that I've adjusted > > to give you an idea of what I'm talking about: > > > > static void devm_drm_of_find_backlight_release(void *data) > > { > > put_device(data); > > } > > > > struct back
[PATCH v3 0/2] drm/tinydrm: drm_of_find_backlight helper
This patchset introduces some changes such as move tinydrm_of_find_backlight to drm_of.c and rename it to drm_of_find_backlight for better organizational structure. Changes in v3: -Changed it back to a single patch for the caller in mi0283qt.c and the removal and renaming of the helper function. Meghana Madhyastha (2): drm/tinydrm: Move tinydrm_of_find_backlight into drm_of.c drm/tinydrm: Add devres versions of drm_of_find_backlight drivers/gpu/drm/drm_of.c | 92 ++ drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c | 40 --- drivers/gpu/drm/tinydrm/mi0283qt.c | 3 +- include/drm/drm_of.h | 3 + include/drm/tinydrm/tinydrm-helpers.h | 1 - 5 files changed, 97 insertions(+), 42 deletions(-) -- 2.7.4 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH v3 2/2] drm/tinydrm: Add devres versions of drm_of_find_backlight
Add devm_drm_of_find_backlight and the corresponding release function because some drivers such as tinydrm use devres versions of functions for requiring device resources. Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> --- Changes in v3: -None drivers/gpu/drm/drm_of.c | 48 include/drm/drm_of.h | 2 ++ 2 files changed, 50 insertions(+) diff --git a/drivers/gpu/drm/drm_of.c b/drivers/gpu/drm/drm_of.c index d878d3a..238e8e5 100644 --- a/drivers/gpu/drm/drm_of.c +++ b/drivers/gpu/drm/drm_of.c @@ -304,3 +304,51 @@ struct backlight_device *drm_of_find_backlight(struct device *dev) return backlight; } EXPORT_SYMBOL(drm_of_find_backlight); + +/** + * devm_drm_of_find_backlight_release - Release backlight device + * @dev: Device + * + * This is the release function corresponding to the devm_drm_of_find_backlight. + * Each devres entry is associated with a release function. + */ +static void devm_drm_of_find_backlight_release(void *data) +{ + put_device(data); +} +EXPORT_SYMBOL(devm_drm_of_find_backlight_release); + +/** + * 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 such as tinydrm 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, + >dev); + if (ret) { + put_device(>dev); + return ERR_PTR(ret); + } + + return backlight; +} +EXPORT_SYMBOL(devm_drm_of_find_backlight); diff --git a/include/drm/drm_of.h b/include/drm/drm_of.h index e8fba5b..071fb3b 100644 --- a/include/drm/drm_of.h +++ b/include/drm/drm_of.h @@ -30,7 +30,9 @@ 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 void devm_drm_of_find_backlight_release(void *data); static inline uint32_t drm_of_find_possible_crtcs(struct drm_device *dev, struct device_node *port) { -- 2.7.4 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
Re: [PATCH v2] drm/tinydrm: Move backlight helpers to a separate file
On Mon, Sep 25, 2017 at 06:31:58PM +0200, Noralf Trønnes wrote: > > Den 25.09.2017 16.56, skrev Noralf Trønnes: > >Hi Meghana, > > > > > >Den 22.09.2017 17.09, skrev Meghana Madhyastha: > >>Move backlight helpers from tinydrm-helpers.c to > >>tinydrm-backlight.c. This is because it is organizationally > >>simpler to understand and advantageous to group functions > >>performing a similar function to a separate file as opposed to > >>having one helper file with heteregenous helper functions. > >> > >>Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> > >>--- > > > >I don't think there is much gain in just moving the code like this. > > > >The idea is to add a drm_backlight helper that can be useful for all > >DRM drivers that use the backlight subsystem. Yes I agree. That definitely makes more sense. > > The full path to that helper would be: > drivers/gpu/drm/drm_backlight.c > > >This is what the TODO says: > >https://dri.freedesktop.org/docs/drm/gpu/todo.html#tinydrm > > > >- backlight helpers, probably best to put them into a new drm_backlight.c. > > This is because drivers/video is de-facto unmaintained. We could also > > move drivers/video/backlight to drivers/gpu/backlight and take it all > > over within drm-misc, but that’s more work. > > > >There is also this discussion to take into account: > >KMS backlight ABI proposition > >https://lists.freedesktop.org/archives/dri-devel/2017-February/133206.html > > > > > >I don't remember what came out of that discussion. > > > >Noralf. After having discussed this with Daniel on the #dri-devel irc channel, here are some of the points suggested. Daniel suggested that I first look into the usage of shared backlight helpers in drm (specifically backlight_update_status to begin with). The idea was to see whether there is any pattern in usage and/or code dupication. If there is, then the next step would be to write helper functions which can be used by other drivers (and not just tinydrm). To start with, I went through the instances of backlight_update_status in the drm code, and made the following observations(most of them are very simple/naive observations). - backlight_update_status is usually called in backlight init (and sometimes exit) functions of the drivers just after the device is registered. So backlight_update_status is called with the registered device as the parameter. Here are the following cases of properties changed/set before backlight_update_status is called. - CASE 1: Brightness is changed (either a macro BRIGHTNESS_MAX_LEVEL 100 is defined or it is manually set) This happens in the following files: gma500/cdv_device.c, gma500/mdfld_device.c, gma500/oaktrail_device.c, gma500/psb_device.c, noveau/noveau_backlight.c(here brightness is determined by fuction static int nv50_get_intensity) - CASE 2: Power property is set (to FB_BLANK_UNBLANK mostly) This happens in the following files: omapdrm/displays/panel-dpi.c, panel/panel-innolux-p079zca.c, panel/panel-jdi-lt070me05000.c, panel/panel-sharp-lq101r1sx01.c, panel/panel-sharp-ls043t1le01.c, tilcdc/tilcdc_panel.c - CASE 3: State is set This happens in the following files: tinydrm/tinydrm-helpers.c - CASE 4: Power and brightness properties are set This happens in the following files: atombios_encoders.c, radeon/radeon_legacy_encoders.c, shmobile/shmob_drm_backlight.c - CASE 5: Power and the state properties are set This happens in the following files: panel/panel-lvds.c, panel/panel-panasonic-vvx10f034n00.c, panel/panel-simple.c, panel/panel-sitronix-st7789v.c Please let me know if I am wrong / missed something. As for next steps, wouldn't it be an overkill to have a separate helper function for each of these cases ? Perhaps a generic helper function which would somehow address these cases would be more appropriate ? Thank you for your time/patience. -Meghana > >>Changes in v2: > >> -Improved commit message by explaining why the changes were made. > >> > >> drivers/gpu/drm/tinydrm/core/Makefile | 2 +- > >> drivers/gpu/drm/tinydrm/core/tinydrm-backlight.c | 103 > >>+++ > >> drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c | 94 > >>- > >> drivers/gpu/drm/tinydrm/mi0283qt.c | 1 + > >> drivers/gpu/drm/tinydrm/mipi-dbi.c | 1 + > >> include/drm/tinydrm/tinydrm-backlight.h | 18 > >> 6 files changed, 124 insertions(+), 95 deletions(-) > >> create mode 100644 drivers/gpu/drm/tinydrm/core/tinydrm-backlight.c > >> create mode 100644 include/drm/tinydrm/
[PATCH v2 0/3] drm/tinydrm: drm_of_find_backlight helper
This patchset introduces some changes such as move tinydrm_of_find_backlight to drm_of.c and rename it to drm_of_find_backlight for better organizational structure. Changes in v2: -Broke the patch into a patchset of 3 patches -Added devres versions of drm_of_find_backlight -Added a note about caller having to call put_device Meghana Madhyastha (3): drm/tinydrm: Move tinydrm_of_find_backlight into drm_of.c drm/tinydrm: Call drm_of_find_backlight instead of tinydrm_of_find_backlight drm/tinydrm: Add devres versions of drm_of_find_backlight drivers/gpu/drm/drm_of.c | 44 ++ drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c | 40 --- drivers/gpu/drm/tinydrm/mi0283qt.c | 3 +- include/drm/drm_of.h | 3 ++ include/drm/tinydrm/tinydrm-helpers.h | 1 - 5 files changed, 49 insertions(+), 42 deletions(-) -- 2.7.4 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
Re: [PATCH v8 3/3] drm/tinydrm: Add devres versions of backlight_get
On Wed, Oct 11, 2017 at 04:56:25PM +0300, Jani Nikula wrote: > On Wed, 11 Oct 2017, Meghana Madhyastha <meghana.madhyas...@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.madhyas...@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(>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 mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH v9 0/3] Move backlight helper functions from tinydrm-helpers to linux/backlight
Move drm helper functions from tinydrm-helpers to linux/backlight for ease of use by callers in other drivers. Changes in v9: -Change function name from devm_backlight_get_release to devm_backlight_put because it is more apt name. 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(-) -- 2.7.4 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH v9 2/3] drm/tinydrm: Move tinydrm_of_find_backlight to backlight.c
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.madhyas...@gmail.com> --- Changes in v9: -None 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_xrgb_to_gray8(u8 *dst, void *vaddr, struct drm_framebuffer *fb, } EXPORT_SYMBOL(tinydrm_xrgb_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 #include #include +#include #include #include #include @@ -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_de
[PATCH v9 1/3] drm/tinydrm: Move helper functions from tinydrm-helpers to backlight.h
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.madhyas...@gmail.com> --- Changes in v9: -None 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 #include +#include #include #include #include @@ -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_xrgb_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(_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 m
[PATCH v9 3/3] drm/tinydrm: Add devres versions of backlight_get
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.madhyas...@gmail.com> --- Changes in v9: -Change function name from devm_backlight_get_release to devm_backlight_put because it is more apt name. 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..fff2d1a 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_put(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_put, 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(>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 -- 2.7.4 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH] drm/Documentation: Refine TODO for backlight helpers in tinydrm
Add a summary which resulted from discussions on what should be done to refactor backlight helpers in tinydrm so that they can be used in other drivers as well. Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> --- Documentation/gpu/todo.rst | 11 ++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/Documentation/gpu/todo.rst b/Documentation/gpu/todo.rst index 22af55d..1acf84fe 100644 --- a/Documentation/gpu/todo.rst +++ b/Documentation/gpu/todo.rst @@ -353,7 +353,16 @@ those drivers as simple as possible, so lots of room for refactoring: - backlight helpers, probably best to put them into a new drm_backlight.c. This is because drivers/video is de-facto unmaintained. We could also move drivers/video/backlight to drivers/gpu/backlight and take it all - over within drm-misc, but that's more work. + over within drm-misc, but that's more work. Backlight helpers require a fair + bit of reworking and refactoring. A simple example is the enabling of a backlight. + Tinydrm has helpers for this. It would be good if other drivers can also use the + helper. However, there are various cases we need to consider i.e different + drivers seem to have different ways of enabling/disabling a backlight. + We also need to consider the backlight drivers (like gpio_backlight). The situation + is further complicated by the fact that the backlight is tied to fbdev + via fb_notifier_callback() which has complicated logic. For further details, refer + to the following discussion thread: + https://groups.google.com/forum/#!topic/outreachy-kernel/8rBe30lwtdA - spi helpers, probably best put into spi core/helper code. Thierry said the spi maintainer is fast, so shouldn't be a big issue. -- 2.7.4 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
Re: [PATCH v2] drm/tinydrm: Move backlight helpers to a separate file
On Wed, Sep 27, 2017 at 10:49:15AM +0200, Daniel Vetter wrote: > On Tue, Sep 26, 2017 at 03:53:33PM +0200, Noralf Trønnes wrote: > > > > Den 26.09.2017 15.06, skrev Noralf Trønnes: > > > > > > Den 26.09.2017 13.32, skrev Daniel Vetter: > > > > On Tue, Sep 26, 2017 at 04:46:53PM +0530, Meghana Madhyastha wrote: > > > > > On Mon, Sep 25, 2017 at 06:31:58PM +0200, Noralf Trønnes wrote: > > > > > > Den 25.09.2017 16.56, skrev Noralf Trønnes: > > > > > > > Hi Meghana, > > > > > > > > > > > > > > > > > > > > > Den 22.09.2017 17.09, skrev Meghana Madhyastha: > > > > > > > > Move backlight helpers from tinydrm-helpers.c to > > > > > > > > tinydrm-backlight.c. This is because it is organizationally > > > > > > > > simpler to understand and advantageous to group functions > > > > > > > > performing a similar function to a separate file as opposed to > > > > > > > > having one helper file with heteregenous helper functions. > > > > > > > > > > > > > > > > Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> > > > > > > > > --- > > > > > > > I don't think there is much gain in just moving the code like > > > > > > > this. > > > > > > > > > > > > > > The idea is to add a drm_backlight helper that can be useful for > > > > > > > all > > > > > > > DRM drivers that use the backlight subsystem. > > > > > Yes I agree. That definitely makes more sense. > > > > > > The full path to that helper would be: > > > > > > drivers/gpu/drm/drm_backlight.c > > > > > > > > > > > > > This is what the TODO says: > > > > > > > https://dri.freedesktop.org/docs/drm/gpu/todo.html#tinydrm > > > > > > > > > > > > > > - backlight helpers, probably best to put them into a > > > > > > > new drm_backlight.c. > > > > > > > This is because drivers/video is de-facto > > > > > > > unmaintained. We could also > > > > > > > move drivers/video/backlight to drivers/gpu/backlight > > > > > > > and take it all > > > > > > > over within drm-misc, but that’s more work. > > > > > > > > > > > > > > There is also this discussion to take into account: > > > > > > > KMS backlight ABI proposition > > > > > > > https://lists.freedesktop.org/archives/dri-devel/2017-February/133206.html > > > > > > > > > > > > > > > > > > > > > > > > > > > > I don't remember what came out of that discussion. > > > > > > > > > > > > > > Noralf. > > > > > After having discussed this with Daniel on the #dri-devel irc channel, > > > > > here are some of the points suggested. > > > > > > > > > > Daniel suggested that I first look into the usage of shared backlight > > > > > helpers in drm (specifically backlight_update_status to begin > > > > > with). The idea > > > > > was to see whether there is any pattern in usage and/or code > > > > > dupication. > > > > > If there is, then the next step would be to write helper > > > > > functions which > > > > > can be used by other drivers (and not just tinydrm). > > > > > > > > > > To start with, I went through the instances of backlight_update_status > > > > > in the drm code, and made the following observations(most of them are > > > > > very simple/naive observations). > > > > > > > > > > - backlight_update_status is usually called in backlight init (and > > > > > sometimes exit) functions of the drivers just after the > > > > > device is registered. > > > > > So backlight_update_status is called with the registered > > > > > device as the > > > > > parameter. > > > > > > > > > > Here are the following cases of properties changed/set before > > > > > backlight_update_status is called. > > > > > > > > > > - CASE 1: Brightness is changed (
Re: [PATCH] drm/Documentation: Refine TODO for backlight helpers in tinydrm
On Wed, Sep 27, 2017 at 02:32:16PM +0200, Daniel Vetter wrote: > On Wed, Sep 27, 2017 at 04:21:23PM +0530, Meghana Madhyastha wrote: > > Add a summary which resulted from discussions on what should > > be done to refactor backlight helpers in tinydrm so that > > they can be used in other drivers as well. > > > > Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> > > Applied, thanks. > > One thing that just crossed my mind is that we could still move > tinydrm_of_find_backlight into drm_of.c (and rename to > drm_of_find_backlight). Plus check out all other drivers for similar code. > > That should be a much more well defined task, suitable for the application > period. Signed up? Sure ! I will work on this. Thanks and regards, Meghana > Thanks, Daniel > > > --- > > Documentation/gpu/todo.rst | 11 ++- > > 1 file changed, 10 insertions(+), 1 deletion(-) > > > > diff --git a/Documentation/gpu/todo.rst b/Documentation/gpu/todo.rst > > index 22af55d..1acf84fe 100644 > > --- a/Documentation/gpu/todo.rst > > +++ b/Documentation/gpu/todo.rst > > @@ -353,7 +353,16 @@ those drivers as simple as possible, so lots of room > > for refactoring: > > - backlight helpers, probably best to put them into a new drm_backlight.c. > >This is because drivers/video is de-facto unmaintained. We could also > >move drivers/video/backlight to drivers/gpu/backlight and take it all > > - over within drm-misc, but that's more work. > > + over within drm-misc, but that's more work. Backlight helpers require a > > fair > > + bit of reworking and refactoring. A simple example is the enabling of a > > backlight. > > + Tinydrm has helpers for this. It would be good if other drivers can also > > use the > > + helper. However, there are various cases we need to consider i.e > > different > > + drivers seem to have different ways of enabling/disabling a backlight. > > + We also need to consider the backlight drivers (like gpio_backlight). > > The situation > > + is further complicated by the fact that the backlight is tied to fbdev > > + via fb_notifier_callback() which has complicated logic. For further > > details, refer > > + to the following discussion thread: > > + https://groups.google.com/forum/#!topic/outreachy-kernel/8rBe30lwtdA > > > > - spi helpers, probably best put into spi core/helper code. Thierry said > >the spi maintainer is fast, so shouldn't be a big issue. > > -- > > 2.7.4 > > > > -- > Daniel Vetter > Software Engineer, Intel Corporation > http://blog.ffwll.ch ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH] drm/tinydrm: Move tinydrm_of_find_backlight into drm_of.c
Rename tinydrm_of_find_backlight to drm_of_find_backlight and move it into drm_of.c from tinydrm-helpers.c. This is because other drivers in the drm subsystem might need to call this function. In that case and otherwise, it is better from an organizational point of view to move it into drm_of.c along with the other _of.c functions. Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> --- drivers/gpu/drm/drm_of.c | 41 ++ drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c | 40 - drivers/gpu/drm/tinydrm/mi0283qt.c | 3 +- include/drm/drm_of.h | 1 + include/drm/tinydrm/tinydrm-helpers.h | 1 - 5 files changed, 44 insertions(+), 42 deletions(-) diff --git a/drivers/gpu/drm/drm_of.c b/drivers/gpu/drm/drm_of.c index 8dafbdf..d8cded3 100644 --- a/drivers/gpu/drm/drm_of.c +++ b/drivers/gpu/drm/drm_of.c @@ -1,6 +1,7 @@ #include #include #include +#include #include #include #include @@ -260,3 +261,43 @@ int drm_of_find_panel_or_bridge(const struct device_node *np, return ret; } EXPORT_SYMBOL_GPL(drm_of_find_panel_or_bridge); + +/** + * drm_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 *drm_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(drm_of_find_backlight); diff --git a/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c b/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c index bd6cce0..cd4c6a5 100644 --- a/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c +++ b/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c @@ -237,46 +237,6 @@ void tinydrm_xrgb_to_gray8(u8 *dst, void *vaddr, struct drm_framebuffer *fb, EXPORT_SYMBOL(tinydrm_xrgb_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); - -/** * tinydrm_enable_backlight - Enable backlight helper * @backlight: Backlight device * diff --git a/drivers/gpu/drm/tinydrm/mi0283qt.c b/drivers/gpu/drm/tinydrm/mi0283qt.c index 7e5bb7d..5e3d635 100644 --- a/drivers/gpu/drm/tinydrm/mi0283qt.c +++ b/drivers/gpu/drm/tinydrm/mi0283qt.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -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 = drm_of_find_backlight(dev); if (IS_ERR(mipi->backlig
Re: [Outreachy kernel] [PATCH v13 2/3] drm/tinydrm: Move tinydrm_of_find_backlight to backlight.c
On Mon, Oct 16, 2017 at 02:26:00PM -0400, Sean Paul wrote: > On Fri, Oct 13, 2017 at 6:42 PM, Noralf Trønnes <nor...@tronnes.org> wrote: > > > > Den 13.10.2017 22.25, skrev Sean Paul: > >> > >> On Fri, Oct 13, 2017 at 04:11:43PM +0530, Meghana Madhyastha wrote: > >>> > >>> Rename tinydrm_of_find_backlight to backlight_get and move it > >>> to linux/backlight.c so that it can be used by other drivers. > >> > >> [apologies if this has been brought up in previous versions, I haven't > >> been > >> following closely] > >> > >> I don't think "backlight_get" is a good name for this function. How about > >> of_find_backlight_by_name (since there's already > >> of_find_backlight_by_node)? > > > > > > I came up with that name modelled after gpiod_get() and gpiod_put() and I > > deliberately kept the of_ part out of the name like the gpio functions. > > gpiod_get() checks OF, ACPI and platform for gpios and calling it > > backlight_get() would keep the door open for other ways of connecting > > backlight devices in the future, other than Device Tree. > > > > Thanks for the background, Noralf! Apologies for stepping on top of > your previous reviews. > > > I think of_find_backlight() would be better than *_by_name(), since > > 'backlight' is the common DT property name, so it wouldn't make much sense > > to require every caller to pass in the same name. > > > > of_find_backlight() sounds like a good compromise. > > Sean Are there any changes that need to be made to this patchset now ? Regards, Meghana > > > Either way is fine with me. > > > > Noralf. > > > > > > > >>> Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> > >>> --- > >>> Changes in v13: > >>> -Add backlight_put to backlight.h in this patch > >>> > >>> drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c | 40 > >>> -- > >>> drivers/gpu/drm/tinydrm/mi0283qt.c | 3 +- > >>> drivers/video/backlight/backlight.c| 37 > >>> > >>> include/drm/tinydrm/tinydrm-helpers.h | 2 -- > >>> include/linux/backlight.h | 19 > >>> 5 files changed, 58 insertions(+), 43 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_xrgb_to_gray8(u8 *dst, void *vaddr, > >>> struct drm_framebuffer *fb, > >>> } > >>> EXPORT_SYMBOL(tinydrm_xrgb_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
Re: [PATCH v14 0/3] Move backlight helper functions from tinydrm-helpers to linux/backlight
On Sat, Dec 09, 2017 at 03:09:28PM +0100, Noralf Trønnes wrote: > > Den 21.10.2017 13.55, skrev Meghana Madhyastha: > >Changes in v14: > >- s/backlight_get/of_find_backlight/ in patch 2/3 > >- Change commit message in patch 3/3 from requiring to acquiring > > > >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 of_find_backlight > > I tried the patchset and this is what I got: > > [ 8.057792] Unable to handle kernel paging request at virtual address > fe6b > [ 8.069118] pgd = 93817cf7 > [ 8.075704] [fe6b] *pgd=1bfd7861, *pte=, *ppte= > [ 8.086047] Internal error: Oops: 37 [#1] ARM > [ 8.094285] Modules linked in: mi0283qt(+) mipi_dbi tinydrm backlight > bcm2835_rng rng_core > [ 8.110535] CPU: 0 PID: 121 Comm: systemd-udevd Not tainted 4.15.0-rc2+ > #2 > [ 8.121531] Hardware name: BCM2835 > [ 8.128964] task: 85dc6e21 task.stack: 4d8f2d19 > [ 8.137482] PC is at kobject_put+0x18/0x1dc > [ 8.145556] LR is at put_device+0x24/0x28 > [ 8.153312] pc : [] lr : [] psr: a013 > [ 8.163321] sp : d6d33c18 ip : d6d33c40 fp : d6d33c3c > [ 8.172238] r10: c0496d38 r9 : r8 : d6e46680 > [ 8.181108] r7 : 0004 r6 : d766bc00 r5 : d6d33c70 r4 : fe4b > [ 8.191237] r3 : bf0113b8 r2 : d766bd2c r1 : d6e46710 r0 : fe4b > [ 8.201248] Flags: NzCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment > none > [ 8.211869] Control: 00c5387d Table: 16d20008 DAC: 0051 > [ 8.221141] Process systemd-udevd (pid: 121, stack limit = 0xa0ab0c84) > [ 8.231264] Stack: (0xd6d33c18 to 0xd6d34000) > [ 8.239228] 3c00: > bf011858 c049728c > [ 8.254539] 3c20: d7737010 d6e46700 d6d33c70 d766bc00 d6d33c4c d6d33c40 > c048edb8 c076a1a8 > [ 8.270045] 3c40: d6d33c5c d6d33c50 bf0113dc c048eda0 d6d33c6c d6d33c60 > c0496fc4 bf0113c4 > [ 8.285883] 3c60: d6d33ca4 d6d33c70 c04979f0 c0496fb4 d7737000 d6e46700 > d6d33c9c d766bc00 > [ 8.301819] 3c80: bf030100 c0d369dc c0d369e0 000e fdfb > d6d33cb4 d6d33ca8 > [ 8.317917] 3ca0: c0497ad0 c0497858 d6d33cec d6d33cb8 c0493efc c0497a94 > c057e738 c057d26c > [ 8.334043] 3cc0: d6d33cec d766bc00 d766bc34 bf030100 c0c4a5d8 0001 > d6e46464 0028 > [ 8.350344] 3ce0: d6d33d0c d6d33cf0 c049414c c0493c4c 0001 > bf030100 c04940b0 > [ 8.367036] 3d00: d6d33d34 d6d33d10 c0492018 c04940bc d754f28c d76afbb0 > d6dca534 bf030100 > [ 8.383997] 3d20: d6dca500 d6d33d44 d6d33d38 c0493750 c0491fa8 > d6d33d6c d6d33d48 > [ 8.401301] 3d40: c0493124 c0493734 bf02f4d6 d6d33d58 bf030100 bf033000 > c0c04048 > [ 8.418938] 3d60: d6d33d84 d6d33d70 c0494954 c0493048 bf030140 bf033000 > d6d33d94 d6d33d88 > [ 8.436692] 3d80: c04c8794 c04948b4 d6d33da4 d6d33d98 bf033020 c04c8748 > d6d33e1c d6d33da8 > [ 8.454638] 3da0: c0101a30 bf03300c d6d33dcc d6d33db8 c01013f4 c03f7c64 > c0221690 6013 > [ 8.472918] 3dc0: d6d33e44 d6d33dd0 c010d04c c01013e0 d7401e40 014000c0 > 000c c0221770 > [ 8.491185] 3de0: d6d33e1c d6d33df0 c0221770 c021e29c 0001 fc36740d > bf030140 0001 > [ 8.509455] 3e00: d6e46500 d6e46440 0001 d6e46464 d6d33e44 d6d33e20 > c0178628 c0101978 > [ 8.527727] 3e20: bf030140 d6e46440 d6d33e44 d6d33f40 0001 bf030140 > d6d33f1c d6d33e48 > [ 8.546000] 3e40: c0177810 c01785c8 bf03014c 7fff bf030140 c0174ae8 > d6d33f38 d6d33eb8 > [ 8.564264] 3e60: d6d33e9c b6d4f004 dcb059a4 c0c1619c bf030324 d6e46448 > bf030188 dcad6000 > [ 8.582529] 3e80: d6ca3e40 > > [ 8.600797] 3ea0: 6e72656b 6c65 > > [ 8.619065] 3ec0: > > [ 8.637319] 3ee0: fc36740d 7fff > b6d4f004 000d > [ 8.655582] 3f00: 017b c0108044 d6d32000 d6d33fa4 d6d33f20 > c0177f94 c0175d00 > [ 8.673835] 3f20: 7fff 0003 dcad6000 > 0002f9f4 > [ 8.692093] 3f40: dcad6b80 dcad6000 0002f9f4 dcb05274 dcaf9e6a dcafa860 > 3000 3240 > [ 8.710350] 3f60: 1e34 002e 002f > 0019 > [ 8.728612] 3f80: 0013 1ef80900 > d6d33fa8 > [ 8.746870] 3fa0: c0107e60 c0177f04 1ef80900 000d b6d4f004 > b6d4f928 > [ 8.7651
Re: [PATCH v14 0/3] Move backlight helper functions from tinydrm-helpers to linux/backlight
On Mon, Dec 11, 2017 at 03:12:06PM +0100, Noralf Trønnes wrote: > > Den 11.12.2017 14.17, skrev Meghana Madhyastha: > >On Sat, Dec 09, 2017 at 03:09:28PM +0100, Noralf Trønnes wrote: > >>Den 21.10.2017 13.55, skrev Meghana Madhyastha: > >>>Changes in v14: > >>>- s/backlight_get/of_find_backlight/ in patch 2/3 > >>>- Change commit message in patch 3/3 from requiring to acquiring > >>> > >>>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 of_find_backlight > >>I tried the patchset and this is what I got: > >> > >>[ 8.057792] Unable to handle kernel paging request at virtual address > >>fe6b > >>[ 8.069118] pgd = 93817cf7 > >>[ 8.075704] [fe6b] *pgd=1bfd7861, *pte=, *ppte= > >>[ 8.086047] Internal error: Oops: 37 [#1] ARM > >>[ 8.094285] Modules linked in: mi0283qt(+) mipi_dbi tinydrm backlight > >>bcm2835_rng rng_core > >>[ 8.110535] CPU: 0 PID: 121 Comm: systemd-udevd Not tainted 4.15.0-rc2+ > >>#2 > >>[ 8.121531] Hardware name: BCM2835 > >>[ 8.128964] task: 85dc6e21 task.stack: 4d8f2d19 > >>[ 8.137482] PC is at kobject_put+0x18/0x1dc > >>[ 8.145556] LR is at put_device+0x24/0x28 > >>[ 8.153312] pc : [] lr : [] psr: a013 > >>[ 8.163321] sp : d6d33c18 ip : d6d33c40 fp : d6d33c3c > >>[ 8.172238] r10: c0496d38 r9 : r8 : d6e46680 > >>[ 8.181108] r7 : 0004 r6 : d766bc00 r5 : d6d33c70 r4 : fe4b > >>[ 8.191237] r3 : bf0113b8 r2 : d766bd2c r1 : d6e46710 r0 : fe4b > >>[ 8.201248] Flags: NzCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment > >>none > >>[ 8.211869] Control: 00c5387d Table: 16d20008 DAC: 0051 > >>[ 8.221141] Process systemd-udevd (pid: 121, stack limit = 0xa0ab0c84) > >>[ 8.231264] Stack: (0xd6d33c18 to 0xd6d34000) > >>[ 8.239228] 3c00: > >>bf011858 c049728c > >>[ 8.254539] 3c20: d7737010 d6e46700 d6d33c70 d766bc00 d6d33c4c d6d33c40 > >>c048edb8 c076a1a8 > >>[ 8.270045] 3c40: d6d33c5c d6d33c50 bf0113dc c048eda0 d6d33c6c d6d33c60 > >>c0496fc4 bf0113c4 > >>[ 8.285883] 3c60: d6d33ca4 d6d33c70 c04979f0 c0496fb4 d7737000 d6e46700 > >>d6d33c9c d766bc00 > >>[ 8.301819] 3c80: bf030100 c0d369dc c0d369e0 000e fdfb > >>d6d33cb4 d6d33ca8 > >>[ 8.317917] 3ca0: c0497ad0 c0497858 d6d33cec d6d33cb8 c0493efc c0497a94 > >>c057e738 c057d26c > >>[ 8.334043] 3cc0: d6d33cec d766bc00 d766bc34 bf030100 c0c4a5d8 0001 > >>d6e46464 0028 > >>[ 8.350344] 3ce0: d6d33d0c d6d33cf0 c049414c c0493c4c 0001 > >>bf030100 c04940b0 > >>[ 8.367036] 3d00: d6d33d34 d6d33d10 c0492018 c04940bc d754f28c d76afbb0 > >>d6dca534 bf030100 > >>[ 8.383997] 3d20: d6dca500 d6d33d44 d6d33d38 c0493750 c0491fa8 > >>d6d33d6c d6d33d48 > >>[ 8.401301] 3d40: c0493124 c0493734 bf02f4d6 d6d33d58 bf030100 bf033000 > >>c0c04048 > >>[ 8.418938] 3d60: d6d33d84 d6d33d70 c0494954 c0493048 bf030140 bf033000 > >>d6d33d94 d6d33d88 > >>[ 8.436692] 3d80: c04c8794 c04948b4 d6d33da4 d6d33d98 bf033020 c04c8748 > >>d6d33e1c d6d33da8 > >>[ 8.454638] 3da0: c0101a30 bf03300c d6d33dcc d6d33db8 c01013f4 c03f7c64 > >>c0221690 6013 > >>[ 8.472918] 3dc0: d6d33e44 d6d33dd0 c010d04c c01013e0 d7401e40 014000c0 > >>000c c0221770 > >>[ 8.491185] 3de0: d6d33e1c d6d33df0 c0221770 c021e29c 0001 fc36740d > >>bf030140 0001 > >>[ 8.509455] 3e00: d6e46500 d6e46440 0001 d6e46464 d6d33e44 d6d33e20 > >>c0178628 c0101978 > >>[ 8.527727] 3e20: bf030140 d6e46440 d6d33e44 d6d33f40 0001 bf030140 > >>d6d33f1c d6d33e48 > >>[ 8.546000] 3e40: c0177810 c01785c8 bf03014c 7fff bf030140 c0174ae8 > >>d6d33f38 d6d33eb8 > >>[ 8.564264] 3e60: d6d33e9c b6d4f004 dcb059a4 c0c1619c bf030324 d6e46448 > >>bf030188 dcad6000 > >>[ 8.582529] 3e80: d6ca3e40 > >> > >>[ 8.600797] 3ea0: 6e72656b 6c65 > >> > >>[ 8.619065] 3ec0: > >> > >>[ 8.637319] 3
Re: [Outreachy kernel] [PATCH v14 2/3] drm/tinydrm: Move tinydrm_of_find_backlight to backlight.c
On Tue, Oct 24, 2017 at 06:45:34PM +0200, Noralf Trønnes wrote: > > Den 24.10.2017 17.42, skrev Sean Paul: > >On Sat, Oct 21, 2017 at 05:27:33PM +0530, Meghana Madhyastha wrote: > >>Rename tinydrm_of_find_backlight to of_find_backlight and move > >>it to linux/backlight.c so that it can be used by other drivers. > >> > >>Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> > >>--- > >>Changes in v14: > >> -s/backlight_get/of_find_backlight/ > >> > >> drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c | 40 > >> -- > >> drivers/gpu/drm/tinydrm/mi0283qt.c | 3 +- > >> drivers/video/backlight/backlight.c| 37 > >> > >> include/drm/tinydrm/tinydrm-helpers.h | 2 -- > >> include/linux/backlight.h | 19 > >> 5 files changed, 58 insertions(+), 43 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_xrgb_to_gray8(u8 *dst, void *vaddr, > >>struct drm_framebuffer *fb, > >> } > >> EXPORT_SYMBOL(tinydrm_xrgb_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 7fd2691..53ab5a0 100644 > >>--- a/drivers/gpu/drm/tinydrm/mi0283qt.c > >>+++ b/drivers/gpu/drm/tinydrm/mi0283qt.c > >>@@ -12,6 +12,7 @@ > >> #include > >> #include > >> #include > >>+#include > >> #include > >> #include > >> #include > >>@@ -188,7 +189,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 = of_find_backlight(dev); > >Sorry for the follow-up spam, but are you missing the put_device somewhere? > >The > >next patch uses devm_of_find_backlight. So AFAICT you're either leaking a > >reference > >here, or you're closing an additional reference in the next patch. > > This is my fault, put_device() has been missing all along, so Meghana is > plugging that hole, > in the next patch :-) > > Noralf. Is there anything else that needs to be done for this patch ? If not, and it is ready, can this be acked ? It seems to have been stuck for some time now and I will definitely fix anything that needs to be fixed in this patch ASAP. -Meghana > >Sean > &
[PATCH v14 3/3] drm/tinydrm: Add devres versions of of_find_backlight
Add devm_of_find_backlight and the corresponding release function because some drivers use devres versions of functions for acquiring device resources. Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> --- Changes in v14: - s/devm_backlight_get/devm_of_find_backlight/ - change commit message from requiring to acquiring drivers/gpu/drm/tinydrm/mi0283qt.c | 2 +- drivers/video/backlight/backlight.c | 31 +++ include/linux/backlight.h | 7 +++ 3 files changed, 39 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/tinydrm/mi0283qt.c b/drivers/gpu/drm/tinydrm/mi0283qt.c index 53ab5a0..568834a 100644 --- a/drivers/gpu/drm/tinydrm/mi0283qt.c +++ b/drivers/gpu/drm/tinydrm/mi0283qt.c @@ -189,7 +189,7 @@ static int mi0283qt_probe(struct spi_device *spi) if (IS_ERR(mipi->regulator)) return PTR_ERR(mipi->regulator); - mipi->backlight = of_find_backlight(dev); + mipi->backlight = devm_of_find_backlight(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 76d46c3..4bb7bf3 100644 --- a/drivers/video/backlight/backlight.c +++ b/drivers/video/backlight/backlight.c @@ -617,6 +617,37 @@ struct backlight_device *of_find_backlight(struct device *dev) } EXPORT_SYMBOL(of_find_backlight); +static void devm_backlight_put(void *data) +{ + backlight_put(data); +} + +/** + * devm_of_find_backlight - Resource-managed of_find_backlight() + * @dev: Device + * + * Device managed version of of_find_backlight(). The reference on the backlight + * device is automatically dropped on driver detach. + */ +struct backlight_device *devm_of_find_backlight(struct device *dev) +{ + struct backlight_device *bd; + int ret; + + bd = of_find_backlight(dev); + if (!bd) + return NULL; + + ret = devm_add_action(dev, devm_backlight_put, bd); + if (ret) { + backlight_put(bd); + return ERR_PTR(ret); + } + + return bd; +} +EXPORT_SYMBOL(devm_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 f98b684..a52bda0 100644 --- a/include/linux/backlight.h +++ b/include/linux/backlight.h @@ -214,11 +214,18 @@ of_find_backlight_by_node(struct device_node *node) #if IS_ENABLED(CONFIG_BACKLIGHT_CLASS_DEVICE) struct backlight_device *of_find_backlight(struct device *dev); +struct backlight_device *devm_of_find_backlight(struct device *dev); #else static inline struct backlight_device *of_find_backlight(struct device *dev) { return NULL; } + +static inline struct backlight_device * +devm_of_find_backlight(struct device *dev) +{ + return NULL; +} #endif #endif -- 2.7.4 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH v14 2/3] drm/tinydrm: Move tinydrm_of_find_backlight to backlight.c
Rename tinydrm_of_find_backlight to of_find_backlight and move it to linux/backlight.c so that it can be used by other drivers. Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> --- Changes in v14: -s/backlight_get/of_find_backlight/ drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c | 40 -- drivers/gpu/drm/tinydrm/mi0283qt.c | 3 +- drivers/video/backlight/backlight.c| 37 include/drm/tinydrm/tinydrm-helpers.h | 2 -- include/linux/backlight.h | 19 5 files changed, 58 insertions(+), 43 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_xrgb_to_gray8(u8 *dst, void *vaddr, struct drm_framebuffer *fb, } EXPORT_SYMBOL(tinydrm_xrgb_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 7fd2691..53ab5a0 100644 --- a/drivers/gpu/drm/tinydrm/mi0283qt.c +++ b/drivers/gpu/drm/tinydrm/mi0283qt.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -188,7 +189,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 = of_find_backlight(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..76d46c3 100644 --- a/drivers/video/backlight/backlight.c +++ b/drivers/video/backlight/backlight.c @@ -580,6 +580,43 @@ 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); + } + } + + return bd; +} +EXPORT_SYMBOL(of_find_backlight); + 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..0a4ddbc 100644 --- a/include/drm/tinydrm/tinydrm-helpers.h +++ b/include/drm/tinydrm/tinydrm-helpers.h @@ -46,8 +46,6 @@ void tinydrm_xrgb_to_rgb565(u16 *dst, void *vaddr
[PATCH v14 1/3] drm/tinydrm: Move helper functions from tinydrm-helpers to backlight.h
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.madhyas...@gmail.com> --- Changes in v14: - None drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c | 55 -- drivers/gpu/drm/tinydrm/mipi-dbi.c | 5 ++- include/drm/tinydrm/tinydrm-helpers.h | 2 - include/linux/backlight.h | 30 ++ 4 files changed, 33 insertions(+), 59 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 d43e992..2561549 100644 --- a/drivers/gpu/drm/tinydrm/mipi-dbi.c +++ b/drivers/gpu/drm/tinydrm/mipi-dbi.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -280,7 +281,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); + backlight_enable(mipi->backlight); } EXPORT_SYMBOL(mipi_dbi_pipe_enable); @@ -319,7 +320,7 @@ void mipi_dbi_pipe_disable(struct drm_simple_display_pipe *pipe) mipi->enabled = false; if (mipi->backlight) - tinydrm_disable_backlight(mipi->backlight); + backlight_disable(mipi->backlight); else mipi_dbi_blank(mipi); } 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_xrgb_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..b88fabb 100644 --- a/include/linux/backlight.h +++ b/include/linux/backlight.h @@ -129,6 +129,36 @@ static inline int backlight_update_status(struct backlight_device *bd) return ret; } +/** + * 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 i
[PATCH v14 0/3] Move backlight helper functions from tinydrm-helpers to linux/backlight
Changes in v14: - s/backlight_get/of_find_backlight/ in patch 2/3 - Change commit message in patch 3/3 from requiring to acquiring 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 of_find_backlight drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c | 95 -- drivers/gpu/drm/tinydrm/mi0283qt.c | 3 +- drivers/gpu/drm/tinydrm/mipi-dbi.c | 5 +- drivers/video/backlight/backlight.c| 68 ++ include/drm/tinydrm/tinydrm-helpers.h | 4 -- include/linux/backlight.h | 56 +++ 6 files changed, 129 insertions(+), 102 deletions(-) -- 2.7.4 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH v16 05/10] video: backlight: Add devres versions of of_find_backlight
Add devm_of_find_backlight and the corresponding release function because some drivers use devres versions of functions for acquiring device resources. Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> --- drivers/video/backlight/backlight.c | 29 + include/linux/backlight.h | 7 +++ 2 files changed, 36 insertions(+) diff --git a/drivers/video/backlight/backlight.c b/drivers/video/backlight/backlight.c index 7e4a5d77d..b3f76945f 100644 --- a/drivers/video/backlight/backlight.c +++ b/drivers/video/backlight/backlight.c @@ -620,6 +620,35 @@ struct backlight_device *of_find_backlight(struct device *dev) } EXPORT_SYMBOL(of_find_backlight); +static void devm_backlight_put(void *data) +{ + backlight_put(data); +} + +/** + * devm_of_find_backlight - Resource-managed of_find_backlight() + * @dev: Device + * + * Device managed version of of_find_backlight(). The reference on the backlight + * device is automatically dropped on driver detach. + */ +struct backlight_device *devm_of_find_backlight(struct device *dev) +{ + struct backlight_device *bd; + int ret; + + bd = of_find_backlight(dev); + if (IS_ERR_OR_NULL(bd)) + return bd; + ret = devm_add_action(dev, devm_backlight_put, bd); + if (ret) { + backlight_put(bd); + return ERR_PTR(ret); + } + return bd; +} +EXPORT_SYMBOL(devm_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 32ea510da..1d373f5a6 100644 --- a/include/linux/backlight.h +++ b/include/linux/backlight.h @@ -215,11 +215,18 @@ of_find_backlight_by_node(struct device_node *node) #if IS_ENABLED(CONFIG_BACKLIGHT_CLASS_DEVICE) struct backlight_device *of_find_backlight(struct device *dev); +struct backlight_device *devm_of_find_backlight(struct device *dev); #else static inline struct backlight_device *of_find_backlight(struct device *dev) { return NULL; } + +static inline struct backlight_device * +devm_of_find_backlight(struct device *dev) +{ + return NULL; +} #endif #endif -- 2.11.0 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH v16 04/10] drm/tinydrm: Replace tinydrm_of_find_backlight with of_find_backlight
Remove tinydrm_of_find_backlight from tinydrm-helpers.c. We now have a generic of_find_backlight defined in backlight.c. Let the callers of tinydrm_of_find_backlight call of_find_backlight. Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> --- drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c | 40 -- drivers/gpu/drm/tinydrm/mi0283qt.c | 3 +- include/drm/tinydrm/tinydrm-helpers.h | 2 -- 3 files changed, 2 insertions(+), 43 deletions(-) diff --git a/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c b/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c index 7326e1758..d1c3ce9ab 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_xrgb_to_gray8(u8 *dst, void *vaddr, struct drm_framebuffer *fb, } EXPORT_SYMBOL(tinydrm_xrgb_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 674d40764..3f9065fb5 100644 --- a/drivers/gpu/drm/tinydrm/mi0283qt.c +++ b/drivers/gpu/drm/tinydrm/mi0283qt.c @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -190,7 +191,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 = of_find_backlight(dev); if (IS_ERR(mipi->backlight)) return PTR_ERR(mipi->backlight); diff --git a/include/drm/tinydrm/tinydrm-helpers.h b/include/drm/tinydrm/tinydrm-helpers.h index f54fae03e..0a4ddbc04 100644 --- a/include/drm/tinydrm/tinydrm-helpers.h +++ b/include/drm/tinydrm/tinydrm-helpers.h @@ -46,8 +46,6 @@ void tinydrm_xrgb_to_rgb565(u16 *dst, void *vaddr, void tinydrm_xrgb_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, -- 2.11.0 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH v16 03/10] 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. Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> --- Changes in v16: -Add comment about brightness in of_find_backlight drivers/video/backlight/backlight.c | 40 + include/linux/backlight.h | 19 ++ 2 files changed, 59 insertions(+) diff --git a/drivers/video/backlight/backlight.c b/drivers/video/backlight/backlight.c index 8049e7656..7e4a5d77d 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 +/** + * 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. + * gpio_backlight uses brightness as power state during probe. + * + * 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); + 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 7b6a9a2a3..32ea510da 100644 --- a/include/linux/backlight.h +++ b/include/linux/backlight.h @@ -160,6 +160,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(>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); @@ -203,4 +213,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 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH v16 07/10] drm/panel: Use backlight_enable/disable helpers
Use backlight_enable/disable helpers instead of changing the property and calling backlight_update_status for cleaner and simpler code and also to avoid repetitions. Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> --- drivers/gpu/drm/panel/panel-innolux-p079zca.c | 6 ++ drivers/gpu/drm/panel/panel-jdi-lt070me05000.c | 6 ++ drivers/gpu/drm/panel/panel-sharp-lq101r1sx01.c | 12 drivers/gpu/drm/panel/panel-sharp-ls043t1le01.c | 12 4 files changed, 12 insertions(+), 24 deletions(-) diff --git a/drivers/gpu/drm/panel/panel-innolux-p079zca.c b/drivers/gpu/drm/panel/panel-innolux-p079zca.c index 6ba93449f..4c1b29eec 100644 --- a/drivers/gpu/drm/panel/panel-innolux-p079zca.c +++ b/drivers/gpu/drm/panel/panel-innolux-p079zca.c @@ -45,8 +45,7 @@ static int innolux_panel_disable(struct drm_panel *panel) if (!innolux->enabled) return 0; - innolux->backlight->props.power = FB_BLANK_POWERDOWN; - backlight_update_status(innolux->backlight); + backlight_disable(innolux->backlight); err = mipi_dsi_dcs_set_display_off(innolux->link); if (err < 0) @@ -151,8 +150,7 @@ static int innolux_panel_enable(struct drm_panel *panel) if (innolux->enabled) return 0; - innolux->backlight->props.power = FB_BLANK_UNBLANK; - ret = backlight_update_status(innolux->backlight); + ret = backlight_enable(innolux->backlight); if (ret) { DRM_DEV_ERROR(panel->drm->dev, "Failed to enable backlight %d\n", ret); diff --git a/drivers/gpu/drm/panel/panel-jdi-lt070me05000.c b/drivers/gpu/drm/panel/panel-jdi-lt070me05000.c index 5b2340ef7..0a94ab79a 100644 --- a/drivers/gpu/drm/panel/panel-jdi-lt070me05000.c +++ b/drivers/gpu/drm/panel/panel-jdi-lt070me05000.c @@ -192,8 +192,7 @@ static int jdi_panel_disable(struct drm_panel *panel) if (!jdi->enabled) return 0; - jdi->backlight->props.power = FB_BLANK_POWERDOWN; - backlight_update_status(jdi->backlight); + backlight_disable(jdi->backlight); jdi->enabled = false; @@ -289,8 +288,7 @@ static int jdi_panel_enable(struct drm_panel *panel) if (jdi->enabled) return 0; - jdi->backlight->props.power = FB_BLANK_UNBLANK; - backlight_update_status(jdi->backlight); + backlight_enable(jdi->backlight); jdi->enabled = true; diff --git a/drivers/gpu/drm/panel/panel-sharp-lq101r1sx01.c b/drivers/gpu/drm/panel/panel-sharp-lq101r1sx01.c index 3cce3ca19..1512ec4f3 100644 --- a/drivers/gpu/drm/panel/panel-sharp-lq101r1sx01.c +++ b/drivers/gpu/drm/panel/panel-sharp-lq101r1sx01.c @@ -96,10 +96,8 @@ static int sharp_panel_disable(struct drm_panel *panel) if (!sharp->enabled) return 0; - if (sharp->backlight) { - sharp->backlight->props.power = FB_BLANK_POWERDOWN; - backlight_update_status(sharp->backlight); - } + if (sharp->backlight) + backlight_disable(sharp->backlight); sharp->enabled = false; @@ -263,10 +261,8 @@ static int sharp_panel_enable(struct drm_panel *panel) if (sharp->enabled) return 0; - if (sharp->backlight) { - sharp->backlight->props.power = FB_BLANK_UNBLANK; - backlight_update_status(sharp->backlight); - } + if (sharp->backlight) + backlight_enable(sharp->backlight); sharp->enabled = true; diff --git a/drivers/gpu/drm/panel/panel-sharp-ls043t1le01.c b/drivers/gpu/drm/panel/panel-sharp-ls043t1le01.c index 3aeb0bda4..a6af3257f 100644 --- a/drivers/gpu/drm/panel/panel-sharp-ls043t1le01.c +++ b/drivers/gpu/drm/panel/panel-sharp-ls043t1le01.c @@ -117,10 +117,8 @@ static int sharp_nt_panel_disable(struct drm_panel *panel) if (!sharp_nt->enabled) return 0; - if (sharp_nt->backlight) { - sharp_nt->backlight->props.power = FB_BLANK_POWERDOWN; - backlight_update_status(sharp_nt->backlight); - } + if (sharp_nt->backlight) + backlight_disable(sharp_nt->backlight); sharp_nt->enabled = false; @@ -203,10 +201,8 @@ static int sharp_nt_panel_enable(struct drm_panel *panel) if (sharp_nt->enabled) return 0; - if (sharp_nt->backlight) { - sharp_nt->backlight->props.power = FB_BLANK_UNBLANK; - backlight_update_status(sharp_nt->backlight); - } + if (sharp_nt->backlight) + backlight_enable(sharp_nt->backlight); sharp_nt->enabled = true; -- 2.11.0 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH v16 06/10] drm/tinydrm: Call devres version of of_find_backlight
Call devm_of_find_backlight (the devres version) instead of of_find_backlight. Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> --- drivers/gpu/drm/tinydrm/mi0283qt.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/gpu/drm/tinydrm/mi0283qt.c b/drivers/gpu/drm/tinydrm/mi0283qt.c index 3f9065fb5..4d8650bdc 100644 --- a/drivers/gpu/drm/tinydrm/mi0283qt.c +++ b/drivers/gpu/drm/tinydrm/mi0283qt.c @@ -191,7 +191,7 @@ static int mi0283qt_probe(struct spi_device *spi) if (IS_ERR(mipi->regulator)) return PTR_ERR(mipi->regulator); - mipi->backlight = of_find_backlight(dev); + mipi->backlight = devm_of_find_backlight(dev); if (IS_ERR(mipi->backlight)) return PTR_ERR(mipi->backlight); -- 2.11.0 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH v16 02/10] drm/tinydrm: Convert tinydrm_enable/disable_backlight to backlight_enable/disable
Remove tinydrm_enable/disable_backlight and let the callers call the more generic backlight_enable/disable helpers Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> --- drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c | 55 -- drivers/gpu/drm/tinydrm/mipi-dbi.c | 4 +- include/drm/tinydrm/tinydrm-helpers.h | 2 - 3 files changed, 2 insertions(+), 59 deletions(-) diff --git a/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c b/drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c index bf96072d1..7326e1758 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 aa6b6ce56..8c2cb1cf2 100644 --- a/drivers/gpu/drm/tinydrm/mipi-dbi.c +++ b/drivers/gpu/drm/tinydrm/mipi-dbi.c @@ -291,7 +291,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); + backlight_enable(mipi->backlight); } EXPORT_SYMBOL(mipi_dbi_pipe_enable); @@ -330,7 +330,7 @@ void mipi_dbi_pipe_disable(struct drm_simple_display_pipe *pipe) mipi->enabled = false; if (mipi->backlight) - tinydrm_disable_backlight(mipi->backlight); + backlight_disable(mipi->backlight); else mipi_dbi_blank(mipi); } diff --git a/include/drm/tinydrm/tinydrm-helpers.h b/include/drm/tinydrm/tinydrm-helpers.h index d554ded60..f54fae03e 100644 --- a/include/drm/tinydrm/tinydrm-helpers.h +++ b/include/drm/tinydrm/tinydrm-helpers.h @@ -47,8 +47,6 @@ void tinydrm_xrgb_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); -- 2.11.0 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH v16 10/10] drm/omapdrm: Use of_find_backlight helper
Replace of_find_backlight_by_node and of the code around it with of_find_backlight helper to avoid repetition of code. Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> --- drivers/gpu/drm/omapdrm/displays/panel-dpi.c | 10 +++--- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/omapdrm/displays/panel-dpi.c b/drivers/gpu/drm/omapdrm/displays/panel-dpi.c index 0803f64cb..4a5e707a1 100644 --- a/drivers/gpu/drm/omapdrm/displays/panel-dpi.c +++ b/drivers/gpu/drm/omapdrm/displays/panel-dpi.c @@ -186,14 +186,10 @@ static int panel_dpi_probe_of(struct platform_device *pdev) if (IS_ERR(ddata->vcc_supply)) return PTR_ERR(ddata->vcc_supply); - bl_node = of_parse_phandle(node, "backlight", 0); - if (bl_node) { - ddata->backlight = of_find_backlight_by_node(bl_node); - of_node_put(bl_node); + ddata->backlight = of_find_backlight(bl_node); - if (!ddata->backlight) - return -EPROBE_DEFER; - } + if (IS_ERR(ddata->backlight)) + return PTR_ERR(ddata->backlight); r = of_get_display_timing(node, "panel-timing", ); if (r) { -- 2.11.0 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH v16 00/10] Add backlight helper functions
Move drm helper functions from tinydrm-helpers to linux/backlight for ease of use by callers in other drivers. Changes in v16: -Add a comment about setting brightness = max_brightness in of_find_backlight -Add dri-devel and linux-kernel mailing lists Meghana Madhyastha (10): video: backlight: Add helpers to enable and disable backlight drm/tinydrm: Convert tinydrm_enable/disable_backlight to backlight_enable/disable video: backlight: Add of_find_backlight helper in backlight.c drm/tinydrm: Replace tinydrm_of_find_backlight with of_find_backlight video: backlight: Add devres versions of of_find_backlight drm/tinydrm: Call devres version of of_find_backlight drm/panel: Use backlight_enable/disable helpers drm/omapdrm: Use backlight_enable/disable helpers drm/panel: Use of_find_backlight helper drm/omapdrm: Use of_find_backlight helper drivers/gpu/drm/omapdrm/displays/panel-dpi.c| 22 ++ drivers/gpu/drm/panel/panel-innolux-p079zca.c | 16 ++--- drivers/gpu/drm/panel/panel-jdi-lt070me05000.c | 6 +- drivers/gpu/drm/panel/panel-sharp-lq101r1sx01.c | 22 ++ drivers/gpu/drm/panel/panel-sharp-ls043t1le01.c | 22 ++ drivers/gpu/drm/tinydrm/core/tinydrm-helpers.c | 95 - drivers/gpu/drm/tinydrm/mi0283qt.c | 3 +- drivers/gpu/drm/tinydrm/mipi-dbi.c | 4 +- drivers/video/backlight/backlight.c | 69 ++ include/drm/tinydrm/tinydrm-helpers.h | 4 -- include/linux/backlight.h | 56 +++ 11 files changed, 157 insertions(+), 162 deletions(-) -- 2.11.0 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH v16 01/10] video: backlight: Add helpers to enable and disable backlight
Add helper functions backlight_enable and backlight_disable to enable/disable a backlight device. These helper functions can then be used by different drm and tinydrm drivers to avoid repetition of code and also to enforce a uniform and consistent way to enable/disable a backlight device. Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> --- include/linux/backlight.h | 30 ++ 1 file changed, 30 insertions(+) diff --git a/include/linux/backlight.h b/include/linux/backlight.h index af7003548..7b6a9a2a3 100644 --- a/include/linux/backlight.h +++ b/include/linux/backlight.h @@ -130,6 +130,36 @@ static inline int backlight_update_status(struct backlight_device *bd) return ret; } +/** + * 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); +} + 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); -- 2.11.0 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH v16 08/10] drm/omapdrm: Use backlight_enable/disable helpers
Use backlight_enable/disable helpers instead of changing the property and calling backlight_update_status for cleaner and simpler code and also to avoid repetitions. Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> --- drivers/gpu/drm/omapdrm/displays/panel-dpi.c | 12 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/drm/omapdrm/displays/panel-dpi.c b/drivers/gpu/drm/omapdrm/displays/panel-dpi.c index e065f7e10..0803f64cb 100644 --- a/drivers/gpu/drm/omapdrm/displays/panel-dpi.c +++ b/drivers/gpu/drm/omapdrm/displays/panel-dpi.c @@ -88,10 +88,8 @@ static int panel_dpi_enable(struct omap_dss_device *dssdev) gpiod_set_value_cansleep(ddata->enable_gpio, 1); - if (ddata->backlight) { - ddata->backlight->props.power = FB_BLANK_UNBLANK; - backlight_update_status(ddata->backlight); - } + if (ddata->backlight) + backlight_enable(ddata->backlight); dssdev->state = OMAP_DSS_DISPLAY_ACTIVE; @@ -106,10 +104,8 @@ static void panel_dpi_disable(struct omap_dss_device *dssdev) if (!omapdss_device_is_enabled(dssdev)) return; - if (ddata->backlight) { - ddata->backlight->props.power = FB_BLANK_POWERDOWN; - backlight_update_status(ddata->backlight); - } + if (ddata->backlight) + backlight_disable(ddata->backlight); gpiod_set_value_cansleep(ddata->enable_gpio, 0); regulator_disable(ddata->vcc_supply); -- 2.11.0 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH v16 09/10] drm/panel: Use of_find_backlight helper
Replace of_find_backlight_by_node and of the code around it with of_find_backlight helper to avoid repetition of code. Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> --- drivers/gpu/drm/panel/panel-innolux-p079zca.c | 10 +++--- drivers/gpu/drm/panel/panel-sharp-lq101r1sx01.c | 10 +++--- drivers/gpu/drm/panel/panel-sharp-ls043t1le01.c | 10 +++--- 3 files changed, 9 insertions(+), 21 deletions(-) diff --git a/drivers/gpu/drm/panel/panel-innolux-p079zca.c b/drivers/gpu/drm/panel/panel-innolux-p079zca.c index 4c1b29eec..a69b0530f 100644 --- a/drivers/gpu/drm/panel/panel-innolux-p079zca.c +++ b/drivers/gpu/drm/panel/panel-innolux-p079zca.c @@ -230,14 +230,10 @@ static int innolux_panel_add(struct innolux_panel *innolux) innolux->enable_gpio = NULL; } - np = of_parse_phandle(dev->of_node, "backlight", 0); - if (np) { - innolux->backlight = of_find_backlight_by_node(np); - of_node_put(np); + innolux->backlight = devm_of_find_backlight(np); - if (!innolux->backlight) - return -EPROBE_DEFER; - } + if (IS_ERR(innolux->backlight)) + return PTR_ERR(innolux->backlight); drm_panel_init(>base); innolux->base.funcs = _panel_funcs; diff --git a/drivers/gpu/drm/panel/panel-sharp-lq101r1sx01.c b/drivers/gpu/drm/panel/panel-sharp-lq101r1sx01.c index 1512ec4f3..d5450c9d9 100644 --- a/drivers/gpu/drm/panel/panel-sharp-lq101r1sx01.c +++ b/drivers/gpu/drm/panel/panel-sharp-lq101r1sx01.c @@ -329,14 +329,10 @@ static int sharp_panel_add(struct sharp_panel *sharp) if (IS_ERR(sharp->supply)) return PTR_ERR(sharp->supply); - np = of_parse_phandle(sharp->link1->dev.of_node, "backlight", 0); - if (np) { - sharp->backlight = of_find_backlight_by_node(np); - of_node_put(np); + sharp->backlight = devm_of_find_backlight(np); - if (!sharp->backlight) - return -EPROBE_DEFER; - } + if (IS_ERR(sharp->backlight)) + return PTR_ERR(sharp->backlight); drm_panel_init(>base); sharp->base.funcs = _panel_funcs; diff --git a/drivers/gpu/drm/panel/panel-sharp-ls043t1le01.c b/drivers/gpu/drm/panel/panel-sharp-ls043t1le01.c index a6af3257f..db31d8268 100644 --- a/drivers/gpu/drm/panel/panel-sharp-ls043t1le01.c +++ b/drivers/gpu/drm/panel/panel-sharp-ls043t1le01.c @@ -273,14 +273,10 @@ static int sharp_nt_panel_add(struct sharp_nt_panel *sharp_nt) gpiod_set_value(sharp_nt->reset_gpio, 0); } - np = of_parse_phandle(dev->of_node, "backlight", 0); - if (np) { - sharp_nt->backlight = of_find_backlight_by_node(np); - of_node_put(np); + sharp_nt->backlight = devm_of_find_backlight(np); - if (!sharp_nt->backlight) - return -EPROBE_DEFER; - } + if (IS_ERR(sharp_nt->backlight)) + return PTR_ERR(sharp_nt->backlight); drm_panel_init(_nt->base); sharp_nt->base.funcs = _nt_panel_funcs; -- 2.11.0 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH v17 03/10] 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. Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> --- 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(>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 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH v17 10/10] drm/omapdrm: Use of_find_backlight helper
Replace of_find_backlight_by_node and of the code around it with of_find_backlight helper to avoid repetition of code. Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> --- changes in v17: -remove put_device() to avoid double put as we are using the devm version drivers/gpu/drm/omapdrm/displays/panel-dpi.c | 21 + 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/drivers/gpu/drm/omapdrm/displays/panel-dpi.c b/drivers/gpu/drm/omapdrm/displays/panel-dpi.c index ac9596251..4d598167f 100644 --- a/drivers/gpu/drm/omapdrm/displays/panel-dpi.c +++ b/drivers/gpu/drm/omapdrm/displays/panel-dpi.c @@ -183,19 +183,15 @@ static int panel_dpi_probe_of(struct platform_device *pdev) if (IS_ERR(ddata->vcc_supply)) return PTR_ERR(ddata->vcc_supply); - bl_node = of_parse_phandle(node, "backlight", 0); - if (bl_node) { - ddata->backlight = of_find_backlight_by_node(bl_node); - of_node_put(bl_node); + ddata->backlight = of_find_backlight(bl_node); - if (!ddata->backlight) - return -EPROBE_DEFER; - } + if (IS_ERR(ddata->backlight)) + return PTR_ERR(ddata->backlight); r = of_get_display_timing(node, "panel-timing", ); if (r) { dev_err(>dev, "failed to get video timing\n"); - goto error_free_backlight; + return r; } videomode_from_timing(, >vm); @@ -203,19 +199,12 @@ static int panel_dpi_probe_of(struct platform_device *pdev) in = omapdss_of_find_source_for_first_ep(node); if (IS_ERR(in)) { dev_err(>dev, "failed to find video source\n"); - r = PTR_ERR(in); - goto error_free_backlight; + return PTR_ERR(in); } ddata->in = in; return 0; - -error_free_backlight: - if (ddata->backlight) - put_device(>backlight->dev); - - return r; } static int panel_dpi_probe(struct platform_device *pdev) -- 2.11.0 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH v17 07/10] drm/panel: Use backlight_enable/disable helpers
Use backlight_enable/disable helpers instead of changing the property and calling backlight_update_status for cleaner and simpler code and also to avoid repetitions. Signed-off-by: Meghana Madhyastha <meghana.madhyas...@gmail.com> --- changes in v17: -remove redundant NULL check drivers/gpu/drm/panel/panel-innolux-p079zca.c | 6 ++ drivers/gpu/drm/panel/panel-jdi-lt070me05000.c | 6 ++ drivers/gpu/drm/panel/panel-sharp-lq101r1sx01.c | 10 ++ drivers/gpu/drm/panel/panel-sharp-ls043t1le01.c | 10 ++ 4 files changed, 8 insertions(+), 24 deletions(-) diff --git a/drivers/gpu/drm/panel/panel-innolux-p079zca.c b/drivers/gpu/drm/panel/panel-innolux-p079zca.c index 6ba93449f..4c1b29eec 100644 --- a/drivers/gpu/drm/panel/panel-innolux-p079zca.c +++ b/drivers/gpu/drm/panel/panel-innolux-p079zca.c @@ -45,8 +45,7 @@ static int innolux_panel_disable(struct drm_panel *panel) if (!innolux->enabled) return 0; - innolux->backlight->props.power = FB_BLANK_POWERDOWN; - backlight_update_status(innolux->backlight); + backlight_disable(innolux->backlight); err = mipi_dsi_dcs_set_display_off(innolux->link); if (err < 0) @@ -151,8 +150,7 @@ static int innolux_panel_enable(struct drm_panel *panel) if (innolux->enabled) return 0; - innolux->backlight->props.power = FB_BLANK_UNBLANK; - ret = backlight_update_status(innolux->backlight); + ret = backlight_enable(innolux->backlight); if (ret) { DRM_DEV_ERROR(panel->drm->dev, "Failed to enable backlight %d\n", ret); diff --git a/drivers/gpu/drm/panel/panel-jdi-lt070me05000.c b/drivers/gpu/drm/panel/panel-jdi-lt070me05000.c index 5b2340ef7..0a94ab79a 100644 --- a/drivers/gpu/drm/panel/panel-jdi-lt070me05000.c +++ b/drivers/gpu/drm/panel/panel-jdi-lt070me05000.c @@ -192,8 +192,7 @@ static int jdi_panel_disable(struct drm_panel *panel) if (!jdi->enabled) return 0; - jdi->backlight->props.power = FB_BLANK_POWERDOWN; - backlight_update_status(jdi->backlight); + backlight_disable(jdi->backlight); jdi->enabled = false; @@ -289,8 +288,7 @@ static int jdi_panel_enable(struct drm_panel *panel) if (jdi->enabled) return 0; - jdi->backlight->props.power = FB_BLANK_UNBLANK; - backlight_update_status(jdi->backlight); + backlight_enable(jdi->backlight); jdi->enabled = true; diff --git a/drivers/gpu/drm/panel/panel-sharp-lq101r1sx01.c b/drivers/gpu/drm/panel/panel-sharp-lq101r1sx01.c index 3cce3ca19..072c0fc79 100644 --- a/drivers/gpu/drm/panel/panel-sharp-lq101r1sx01.c +++ b/drivers/gpu/drm/panel/panel-sharp-lq101r1sx01.c @@ -96,10 +96,7 @@ static int sharp_panel_disable(struct drm_panel *panel) if (!sharp->enabled) return 0; - if (sharp->backlight) { - sharp->backlight->props.power = FB_BLANK_POWERDOWN; - backlight_update_status(sharp->backlight); - } + backlight_disable(sharp->backlight); sharp->enabled = false; @@ -263,10 +260,7 @@ static int sharp_panel_enable(struct drm_panel *panel) if (sharp->enabled) return 0; - if (sharp->backlight) { - sharp->backlight->props.power = FB_BLANK_UNBLANK; - backlight_update_status(sharp->backlight); - } + backlight_enable(sharp->backlight); sharp->enabled = true; diff --git a/drivers/gpu/drm/panel/panel-sharp-ls043t1le01.c b/drivers/gpu/drm/panel/panel-sharp-ls043t1le01.c index 3aeb0bda4..8a5137963 100644 --- a/drivers/gpu/drm/panel/panel-sharp-ls043t1le01.c +++ b/drivers/gpu/drm/panel/panel-sharp-ls043t1le01.c @@ -117,10 +117,7 @@ static int sharp_nt_panel_disable(struct drm_panel *panel) if (!sharp_nt->enabled) return 0; - if (sharp_nt->backlight) { - sharp_nt->backlight->props.power = FB_BLANK_POWERDOWN; - backlight_update_status(sharp_nt->backlight); - } + backlight_disable(sharp_nt->backlight); sharp_nt->enabled = false; @@ -203,10 +200,7 @@ static int sharp_nt_panel_enable(struct drm_panel *panel) if (sharp_nt->enabled) return 0; - if (sharp_nt->backlight) { - sharp_nt->backlight->props.power = FB_BLANK_UNBLANK; - backlight_update_status(sharp_nt->backlight); - } + backlight_enable(sharp_nt->backlight); sharp_nt->enabled = true; -- 2.11.0 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel