[RFC/PATCH 1/2] backlight: Add backlight framework to support backlight driver

Gregory CLEMENT gregory.clement at free-electrons.com
Thu Oct 6 04:05:12 EDT 2011


Signed-off-by: Gregory CLEMENT <gregory.clement at free-electrons.com>
---
 drivers/video/Kconfig               |    3 +-
 drivers/video/Makefile              |    2 +
 drivers/video/backlight/Kconfig     |    8 +++
 drivers/video/backlight/Makefile    |    1 +
 drivers/video/backlight/backlight.c |   85 +++++++++++++++++++++++++++++++++++
 include/backlight.h                 |   21 +++++++++
 6 files changed, 119 insertions(+), 1 deletions(-)
 create mode 100644 drivers/video/backlight/Kconfig
 create mode 100644 drivers/video/backlight/Makefile
 create mode 100644 drivers/video/backlight/backlight.c
 create mode 100644 include/backlight.h

diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig
index 28bcfed..e3e6894 100644
--- a/drivers/video/Kconfig
+++ b/drivers/video/Kconfig
@@ -39,5 +39,6 @@ config DRIVER_VIDEO_S3C_VERBOSE
 	bool "S3C244x verbose framebuffer info"
 
 endif
-
+source "drivers/video/backlight/Kconfig"
 endif
+
diff --git a/drivers/video/Makefile b/drivers/video/Makefile
index 66b08d8..a619b09 100644
--- a/drivers/video/Makefile
+++ b/drivers/video/Makefile
@@ -4,3 +4,5 @@ obj-$(CONFIG_DRIVER_VIDEO_STM) += stm.o
 obj-$(CONFIG_DRIVER_VIDEO_IMX) += imx.o
 obj-$(CONFIG_DRIVER_VIDEO_IMX_IPU) += imx-ipu-fb.o
 obj-$(CONFIG_DRIVER_VIDEO_S3C) += s3c.o
+
+obj-$(CONFIG_BACKLIGHT) += backlight/
\ No newline at end of file
diff --git a/drivers/video/backlight/Kconfig b/drivers/video/backlight/Kconfig
new file mode 100644
index 0000000..b593a82
--- /dev/null
+++ b/drivers/video/backlight/Kconfig
@@ -0,0 +1,8 @@
+#
+# Backlight configuration
+#
+
+menuconfig BACKLIGHT
+	bool "Backlight support"
+	help
+	  Add support for backlight
diff --git a/drivers/video/backlight/Makefile b/drivers/video/backlight/Makefile
new file mode 100644
index 0000000..3c63230
--- /dev/null
+++ b/drivers/video/backlight/Makefile
@@ -0,0 +1 @@
+obj-$(CONFIG_BACKLIGHT) += backlight.o
\ No newline at end of file
diff --git a/drivers/video/backlight/backlight.c b/drivers/video/backlight/backlight.c
new file mode 100644
index 0000000..d4161e9
--- /dev/null
+++ b/drivers/video/backlight/backlight.c
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2011 Gregory Clement, Free Electrons
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,
+ * USA.
+ *
+ */
+#include <common.h>
+#include <backlight.h>
+#include <errno.h>
+#include <init.h>
+
+static int backlight_set_brightness(struct device_d *dev,
+				    struct param_d *param, const char *val)
+{
+	struct backlight_dev *backlight;
+	int percent = 0;
+	unsigned char new[4];
+
+	backlight = (struct backlight_dev *)dev->priv;
+
+	if (!val)
+		return dev_param_set_generic(dev, param, NULL);
+
+	percent = simple_strtoul(val, NULL, 0);
+
+	if (backlight->set_brightness) {
+		percent = backlight->set_brightness(backlight, percent);
+		snprintf(new, 4, "%.3d", percent);
+		dev_param_set_generic(dev, param, new);
+	} else {
+		dev_err(dev, "unsupported function\n");
+	}
+
+	return 0;
+}
+
+int register_backlight(struct backlight_dev *backlight)
+{
+	int id = get_free_deviceid("backlight");
+	struct device_d *dev;
+
+	dev = &backlight->dev;
+
+	dev->priv = backlight;
+	dev->id = id;
+
+	sprintf(dev->name, "backlight");
+
+	register_device(&backlight->dev);
+	dev_add_param(dev, "brightness", backlight_set_brightness, NULL, 0);
+	dev_set_param(dev, "brightness", "0");
+	return 0;
+}
+EXPORT_SYMBOL(register_backlight);
+
+static int backlight_probe(struct device_d *hw_dev)
+{
+	return 0;
+}
+
+static struct driver_d backlight_driver = {
+	.name = "backlight",
+	.probe = backlight_probe,
+};
+
+static int backlight_init_driver(void)
+{
+	register_driver(&backlight_driver);
+	return 0;
+}
+
+device_initcall(backlight_init_driver);
diff --git a/include/backlight.h b/include/backlight.h
new file mode 100644
index 0000000..7785c63
--- /dev/null
+++ b/include/backlight.h
@@ -0,0 +1,21 @@
+/*
+ * backlight.h - definitions for the barebox backlight framework
+ *
+ * Copyright (C) 2011 Gregory Clement, Free Electrons
+ *
+ * This file is released under the GPLv2 or later
+ *
+ */
+
+#ifndef BACKLIGHT_H
+#define BACKLIGHT_H
+
+struct backlight_dev {
+	struct device_d dev;
+	void *priv;
+	int (*set_brightness) (struct backlight_dev *backlight, int percent);
+};
+
+int register_backlight(struct backlight_dev *backlight);
+
+#endif /* BACKLIGHT_H */
-- 
1.7.4.1






More information about the barebox mailing list