[PATCH v2 1/3] drm: Move EXPORT_SYMBOL so that it immediately follows its function

2017-09-14 Thread Meghana Madhyastha
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"

2017-09-14 Thread Meghana Madhyastha
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

2017-09-14 Thread Meghana Madhyastha
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

2017-09-14 Thread Meghana Madhyastha
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

2017-09-14 Thread Meghana Madhyastha
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

2017-09-14 Thread Meghana Madhyastha
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

2017-09-14 Thread Meghana Madhyastha
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"

2017-09-14 Thread Meghana Madhyastha
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

2017-09-14 Thread Meghana Madhyastha
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

2017-09-22 Thread Meghana Madhyastha
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

2017-09-22 Thread Meghana Madhyastha
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

2017-09-22 Thread 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>
---
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

2017-10-04 Thread Meghana Madhyastha
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 Vetter  wrote:
> 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

2017-10-13 Thread Meghana Madhyastha
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

2017-10-13 Thread Meghana Madhyastha
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

2017-10-11 Thread Meghana Madhyastha
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

2017-10-11 Thread Meghana Madhyastha
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

2017-10-11 Thread Meghana Madhyastha
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

2017-10-11 Thread Meghana Madhyastha
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

2017-10-12 Thread Meghana Madhyastha
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

2017-10-12 Thread Meghana Madhyastha
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

2017-10-12 Thread Meghana Madhyastha
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

2017-10-12 Thread Meghana Madhyastha
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

2017-10-12 Thread Meghana Madhyastha
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

2017-10-12 Thread Meghana Madhyastha
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

2017-10-12 Thread Meghana Madhyastha
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

2017-10-12 Thread Meghana Madhyastha
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

2017-10-12 Thread Meghana Madhyastha
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

2017-10-12 Thread Meghana Madhyastha
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

2017-10-12 Thread Meghana Madhyastha
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

2017-10-12 Thread Meghana Madhyastha
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

2017-10-13 Thread Meghana Madhyastha
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

2017-10-13 Thread Meghana Madhyastha
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

2017-09-26 Thread Meghana Madhyastha
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

2017-09-29 Thread Meghana Madhyastha
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

2017-09-29 Thread 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 (!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

2017-09-30 Thread Meghana Madhyastha
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

2017-09-30 Thread Meghana Madhyastha
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

2017-09-30 Thread 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 = 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

2017-09-30 Thread 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 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

2017-09-30 Thread Meghana Madhyastha
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

2017-09-30 Thread Meghana Madhyastha
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

2017-09-30 Thread 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 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

2017-09-30 Thread 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 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

2017-09-30 Thread Meghana Madhyastha
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

2017-09-30 Thread 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);
> >  /**
> >- * 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

2017-10-01 Thread 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 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

2017-10-01 Thread Meghana Madhyastha
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)

2017-10-01 Thread Meghana Madhyastha
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

2017-10-01 Thread 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;
> >>>+  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

2017-10-01 Thread Meghana Madhyastha
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

2017-10-01 Thread Meghana Madhyastha
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

2017-09-29 Thread 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)
> >>>>>>+{
> >>>>>>+   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

2017-09-29 Thread 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 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

2017-09-29 Thread Meghana Madhyastha
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

2017-09-29 Thread Meghana Madhyastha
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

2017-09-29 Thread 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 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

2017-09-28 Thread 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 ?

> >+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

2017-09-28 Thread 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
> >>--- 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

2017-09-28 Thread Meghana Madhyastha
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

2017-09-28 Thread 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 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

2017-09-28 Thread Meghana Madhyastha
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

2017-09-28 Thread 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 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

2017-09-28 Thread 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 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

2017-09-28 Thread Meghana Madhyastha
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

2017-09-28 Thread Meghana Madhyastha
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

2017-09-28 Thread 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.
+ */
+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

2017-09-26 Thread Meghana Madhyastha
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

2017-09-28 Thread Meghana Madhyastha
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

2017-10-11 Thread Meghana Madhyastha
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

2017-10-12 Thread Meghana Madhyastha
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

2017-10-12 Thread Meghana Madhyastha
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

2017-10-12 Thread Meghana Madhyastha
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

2017-10-12 Thread Meghana Madhyastha
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

2017-09-27 Thread Meghana Madhyastha
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

2017-09-27 Thread Meghana Madhyastha
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

2017-09-27 Thread Meghana Madhyastha
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

2017-09-27 Thread 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>
---
 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

2017-10-18 Thread Meghana Madhyastha
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

2017-12-11 Thread 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] 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

2017-12-11 Thread Meghana Madhyastha
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

2017-12-06 Thread Meghana Madhyastha
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

2017-10-21 Thread Meghana Madhyastha
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

2017-10-21 Thread Meghana Madhyastha
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

2017-10-21 Thread Meghana Madhyastha
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

2017-10-21 Thread 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

 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

2018-01-16 Thread Meghana Madhyastha
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

2018-01-16 Thread Meghana Madhyastha
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

2018-01-16 Thread Meghana Madhyastha
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

2018-01-16 Thread Meghana Madhyastha
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

2018-01-16 Thread Meghana Madhyastha
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

2018-01-16 Thread Meghana Madhyastha
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

2018-01-16 Thread Meghana Madhyastha
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

2018-01-16 Thread Meghana Madhyastha
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

2018-01-16 Thread Meghana Madhyastha
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

2018-01-16 Thread Meghana Madhyastha
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

2018-01-16 Thread Meghana Madhyastha
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

2018-01-19 Thread Meghana Madhyastha
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

2018-01-19 Thread Meghana Madhyastha
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

2018-01-19 Thread Meghana Madhyastha
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


  1   2   >