summaryrefslogtreecommitdiff
path: root/packages/linux/linux-ezx-2.6.24/patches/ezx-backlight.patch
diff options
context:
space:
mode:
Diffstat (limited to 'packages/linux/linux-ezx-2.6.24/patches/ezx-backlight.patch')
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/ezx-backlight.patch203
1 files changed, 203 insertions, 0 deletions
diff --git a/packages/linux/linux-ezx-2.6.24/patches/ezx-backlight.patch b/packages/linux/linux-ezx-2.6.24/patches/ezx-backlight.patch
new file mode 100644
index 0000000000..a2a707014d
--- /dev/null
+++ b/packages/linux/linux-ezx-2.6.24/patches/ezx-backlight.patch
@@ -0,0 +1,203 @@
+
+#
+# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
+#
+
+Index: linux-2.6.24/drivers/video/backlight/Kconfig
+===================================================================
+--- linux-2.6.24.orig/drivers/video/backlight/Kconfig
++++ linux-2.6.24/drivers/video/backlight/Kconfig
+@@ -90,3 +90,12 @@
+ help
+ If you have a Intel LE80578 (Carillo Ranch) say Y to enable the
+ backlight driver.
++
++config BACKLIGHT_EZX
++ tristate "Motorola EXZ Backlight Driver (A780/E680/E680i)"
++ depends on BACKLIGHT_CLASS_DEVICE && PXA_EZX
++ default y
++ help
++ If you have a Motorola A780 or E680(i), say y to enable the
++ backlight driver.
++
+Index: linux-2.6.24/drivers/video/backlight/Makefile
+===================================================================
+--- linux-2.6.24.orig/drivers/video/backlight/Makefile
++++ linux-2.6.24/drivers/video/backlight/Makefile
+@@ -9,3 +9,4 @@
+ obj-$(CONFIG_BACKLIGHT_LOCOMO) += locomolcd.o
+ obj-$(CONFIG_BACKLIGHT_PROGEAR) += progear_bl.o
+ obj-$(CONFIG_BACKLIGHT_CARILLO_RANCH) += cr_bllcd.o
++obj-$(CONFIG_BACKLIGHT_EZX) += ezx_bl.o
+Index: linux-2.6.24/drivers/video/backlight/ezx_bl.c
+===================================================================
+--- /dev/null
++++ linux-2.6.24/drivers/video/backlight/ezx_bl.c
+@@ -0,0 +1,142 @@
++/*
++ * Backlight Driver for Motorola A780 and E680(i) GSM Phones.
++ *
++ * Copyright 2006 Vanille Media
++ *
++ * Author: Michael Lauer <mickey@Vanille.de>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ */
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/fb.h>
++#include <linux/backlight.h>
++
++#include <asm/arch/pxa-regs.h>
++#include <asm/arch/ezx.h>
++
++#define EZX_MIN_INTENSITY 0
++#define EZX_MAX_INTENSITY 50
++#define EZX_DEFAULT_INTENSITY 30
++
++static struct backlight_device *ezx_backlight_device;
++static int last_intensity;
++static int suspended;
++
++static int ezxbl_send_intensity(struct backlight_device *bd)
++{
++ int intensity = bd->props.brightness;
++
++ if (suspended || bd->props.power != FB_BLANK_UNBLANK ||
++ bd->props.fb_blank != FB_BLANK_UNBLANK)
++ intensity = 0;
++
++ if ( !last_intensity && intensity ) {
++ PWM_CTRL0 = 2; /* pre-scaler */
++ PWM_PWDUTY0 = intensity; /* duty cycle */
++ PWM_PERVAL0 = 49; /* period */
++ pxa_gpio_mode(GPIO16_PWM0_MD); /* set GPIO16 as alternate function + output */
++ pxa_set_cken(CKEN_PWM0, 1); /* clock enable */
++ }
++ else if ( last_intensity && !intensity ) {
++ PWM_PWDUTY0 = 0;
++ GAFR0_U &= 0xFFFFFFFC; /* ??? */
++ pxa_set_cken(CKEN_PWM0, 0); /* clock disable */
++ pxa_gpio_mode(GPIO16_PWM0); /* set GPIO16 as input */
++ } else if ( last_intensity && intensity ) {
++ PWM_PWDUTY0 = intensity; /* duty cycle */
++ }
++ last_intensity = intensity;
++ return 0;
++}
++
++static int ezxbl_get_intensity(struct backlight_device *bd)
++{
++ return last_intensity;
++}
++
++static int ezxbl_set_intensity(struct backlight_device *bd)
++{
++ return ezxbl_send_intensity(ezx_backlight_device);
++}
++
++#ifdef CONFIG_PM
++static int ezxbl_suspend(struct platform_device *pdev, pm_message_t state)
++{
++ suspended = 1;
++ ezxbl_set_intensity(ezx_backlight_device);
++ return 0;
++}
++
++static int ezxbl_resume(struct platform_device *pdev)
++{
++ suspended = 0;
++ ezxbl_set_intensity(ezx_backlight_device);
++ return 0;
++}
++#else
++#define ezxbl_suspend NULL
++#define ezxbl_resume NULL
++#endif
++
++static struct backlight_ops ezxbl_ops = {
++ .get_brightness = ezxbl_get_intensity,
++ .update_status = ezxbl_set_intensity,
++};
++
++static int __init ezxbl_probe(struct platform_device *pdev)
++{
++ ezx_backlight_device = backlight_device_register ("ezx-bl",
++ &pdev->dev, NULL, &ezxbl_ops);
++ if (IS_ERR (ezx_backlight_device))
++ return PTR_ERR (ezx_backlight_device);
++
++ platform_set_drvdata(pdev, ezx_backlight_device);
++
++ ezx_backlight_device->props.power = FB_BLANK_UNBLANK;
++ ezx_backlight_device->props.max_brightness = EZX_MAX_INTENSITY;
++ ezx_backlight_device->props.brightness = EZX_DEFAULT_INTENSITY;
++ ezxbl_set_intensity(ezx_backlight_device);
++ backlight_update_status(ezx_backlight_device);
++
++ return 0;
++}
++
++static int ezxbl_remove(struct platform_device *pdev)
++{
++ backlight_device_unregister(ezx_backlight_device);
++ return 0;
++}
++
++static struct platform_driver ezxbl_driver = {
++ .probe = ezxbl_probe,
++ .remove = ezxbl_remove,
++ .suspend = ezxbl_suspend,
++ .resume = ezxbl_resume,
++ .driver = {
++ .name = "ezx-bl",
++ },
++};
++
++static int __init ezxbl_init(void)
++{
++ return platform_driver_register(&ezxbl_driver);
++}
++
++static void __exit ezxbl_exit(void)
++{
++ platform_driver_unregister(&ezxbl_driver);
++}
++
++module_init(ezxbl_init);
++module_exit(ezxbl_exit);
++
++MODULE_AUTHOR("Michael Lauer <mickey@Vanille.de>");
++MODULE_DESCRIPTION("Backlight Driver for Motorola A780|E680(i)");
++MODULE_LICENSE("GPL");
+Index: linux-2.6.24/arch/arm/mach-pxa/ezx.c
+===================================================================
+--- linux-2.6.24.orig/arch/arm/mach-pxa/ezx.c
++++ linux-2.6.24/arch/arm/mach-pxa/ezx.c
+@@ -66,6 +66,12 @@
+ #endif
+ EXPORT_SYMBOL_GPL(ezx_backlight_power);
+
++/* EZX LCD Backlight */
++static struct platform_device ezxbacklight_device = {
++ .name = "ezx-bl",
++ .id = -1,
++};
++
+ /* OHCI Controller */
+ static int ezx_ohci_init(struct device *dev)
+ {
+@@ -107,6 +113,7 @@
+
+ static struct platform_device *devices[] __initdata = {
+ &ezxbp_device,
++ &ezxbacklight_device,
+ };
+
+ /* PM */