linux-fbdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [patch] added brightness feature to lcd class.
@ 2009-11-02  8:50 InKi Dae
  2009-11-05 19:27 ` Pavel Machek
                   ` (2 more replies)
  0 siblings, 3 replies; 14+ messages in thread
From: InKi Dae @ 2009-11-02  8:50 UTC (permalink / raw)
  To: linux-fbdev-devel, linux-kernel; +Cc: Kyungmin Park

[-- Attachment #1: Type: text/plain, Size: 686 bytes --]

This patch adds brightness feature to lcd class.
(kernel/driver/video/backlight/lcd.c)

In the past, most of the lcd panels for embedded system was TFT-LCD
Panel needing backlight device.
But now AMOLED LCD Panel appeared so we should consider brightness
control for AMOLED Panel.

For the time being, I used backlight fake driver for brightness
control of AMOLED LCD Panel.
But this way is not good, so I propose to add brightness feature to lcd class.

For this, I attached patch file and if my proposal is approved
Then I will send s6e63m0 and tl2796 AMOLED lcd panel driver based on
lcd class modified soon.

signed-off-by : InKi Dae <inki.dae@samsung.com>

Best Regards,
InKi Dae.

[-- Attachment #2: lcd.patch --]
[-- Type: application/octet-stream, Size: 2951 bytes --]

diff --git a/drivers/video/backlight/lcd.c b/drivers/video/backlight/lcd.c
index b644947..cc19ee9 100644
--- a/drivers/video/backlight/lcd.c
+++ b/drivers/video/backlight/lcd.c
@@ -164,6 +164,53 @@ static ssize_t lcd_show_max_contrast(struct device *dev,
 	return sprintf(buf, "%d\n", ld->props.max_contrast);
 }
 
+static ssize_t lcd_show_brightness(struct device *dev,
+		struct device_attribute *attr, char *buf)
+{
+	int rc = -ENXIO;
+	struct lcd_device *ld = to_lcd_device(dev);
+
+	mutex_lock(&ld->ops_lock);
+	if (ld->ops && ld->ops->get_brightness)
+		rc = sprintf(buf, "%d\n", ld->ops->get_brightness(ld));
+	mutex_unlock(&ld->ops_lock);
+
+	return rc;
+}
+
+static ssize_t lcd_store_brightness(struct device *dev,
+		struct device_attribute *attr, const char *buf, size_t count)
+{
+	int rc = -ENXIO;
+	char *endp;
+	struct lcd_device *ld = to_lcd_device(dev);
+	int brightness = simple_strtoul(buf, &endp, 0);
+	size_t size = endp - buf;
+
+	if (*endp && isspace(*endp))
+		size++;
+	if (size != count)
+		return -EINVAL;
+
+	mutex_lock(&ld->ops_lock);
+	if (ld->ops && ld->ops->set_brightness) {
+		pr_debug("lcd: set brightness to %d\n", brightness);
+		ld->ops->set_brightness(ld, brightness);
+		rc = count;
+	}
+	mutex_unlock(&ld->ops_lock);
+
+	return rc;
+}
+
+static ssize_t lcd_show_max_brightness(struct device *dev,
+		struct device_attribute *attr, char *buf)
+{
+	struct lcd_device *ld = to_lcd_device(dev);
+
+	return sprintf(buf, "%d\n", ld->props.max_brightness);
+}
+
 static struct class *lcd_class;
 
 static void lcd_device_release(struct device *dev)
@@ -176,6 +223,8 @@ static struct device_attribute lcd_device_attributes[] = {
 	__ATTR(lcd_power, 0644, lcd_show_power, lcd_store_power),
 	__ATTR(contrast, 0644, lcd_show_contrast, lcd_store_contrast),
 	__ATTR(max_contrast, 0444, lcd_show_max_contrast, NULL),
+	__ATTR(brightness, 0644, lcd_show_brightness, lcd_store_brightness),
+	__ATTR(max_brightness, 0444, lcd_show_max_brightness, NULL),
 	__ATTR_NULL,
 };
 
diff --git a/include/linux/lcd.h b/include/linux/lcd.h
index c67feca..5145fc6 100644
--- a/include/linux/lcd.h
+++ b/include/linux/lcd.h
@@ -34,6 +34,9 @@ struct fb_info;
 struct lcd_properties {
 	/* The maximum value for contrast (read-only) */
 	int max_contrast;
+
+	/* The maximum value for brightness (read-only) */
+	int max_brightness;
 };
 
 struct lcd_ops {
@@ -46,6 +49,10 @@ struct lcd_ops {
 	int (*get_contrast)(struct lcd_device *);
 	/* Set LCD panel contrast */
         int (*set_contrast)(struct lcd_device *, int contrast);
+	/* Get the current brighness setting (only AMOLED lcd panel) */
+	int (*get_brightness)(struct lcd_device *);
+	/* Set LCD panel brightness (only AMOLED lcd panel) */
+	int (*set_brightness)(struct lcd_device *, int brightness);
 	/* Set LCD panel mode (resolutions ...) */
 	int (*set_mode)(struct lcd_device *, struct fb_videomode *);
 	/* Check if given framebuffer device is the one LCD is bound to;

^ permalink raw reply related	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2009-11-13  3:13 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-11-02  8:50 [patch] added brightness feature to lcd class InKi Dae
2009-11-05 19:27 ` Pavel Machek
2009-11-07 12:43   ` InKi Dae
2009-11-07 16:48     ` Pavel Machek
2009-11-09 15:37       ` InKi Dae
2009-11-09 20:15         ` Pavel Machek
2009-11-09 23:18 ` Andrew Morton
2009-11-09 23:35 ` Richard Purdie
2009-11-10  3:26   ` InKi Dae
2009-11-10  8:43     ` Richard Purdie
2009-11-10 15:27       ` Matthew Garrett
2009-11-11  6:17       ` InKi Dae
2009-11-11  9:28         ` Richard Purdie
2009-11-13  3:13           ` InKi Dae

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).