summaryrefslogtreecommitdiff
path: root/packages/linux/linux-ezx-2.6.24/patches/e680-leds.patch
diff options
context:
space:
mode:
Diffstat (limited to 'packages/linux/linux-ezx-2.6.24/patches/e680-leds.patch')
-rw-r--r--packages/linux/linux-ezx-2.6.24/patches/e680-leds.patch300
1 files changed, 0 insertions, 300 deletions
diff --git a/packages/linux/linux-ezx-2.6.24/patches/e680-leds.patch b/packages/linux/linux-ezx-2.6.24/patches/e680-leds.patch
deleted file mode 100644
index 9de1f0fa8f..0000000000
--- a/packages/linux/linux-ezx-2.6.24/patches/e680-leds.patch
+++ /dev/null
@@ -1,300 +0,0 @@
-
-#
-# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
-#
-
-Index: linux-2.6.24/drivers/leds/Kconfig
-===================================================================
---- linux-2.6.24.orig/drivers/leds/Kconfig
-+++ linux-2.6.24/drivers/leds/Kconfig
-@@ -130,6 +130,13 @@
- This option enables support for the LEDs on the
- Motorola A780 GSM Phone.
-
-+config LEDS_E680
-+ tristate "LED Support for the Motorola E680(i) GSM Phone"
-+ depends on LEDS_CLASS && PXA_EZX_E680
-+ help
-+ This options enables support for the LEDs on the
-+ Motorola E680(i) GSM Phone.
-+
- config LEDS_TRIGGER_TIMER
- tristate "LED Timer Trigger"
- depends on LEDS_TRIGGERS
-Index: linux-2.6.24/drivers/leds/Makefile
-===================================================================
---- linux-2.6.24.orig/drivers/leds/Makefile
-+++ linux-2.6.24/drivers/leds/Makefile
-@@ -20,6 +20,7 @@
- obj-$(CONFIG_LEDS_GPIO) += leds-gpio.o
- obj-$(CONFIG_LEDS_CM_X270) += leds-cm-x270.o
- obj-$(CONFIG_LEDS_A780) += leds-a780.o
-+obj-$(CONFIG_LEDS_E680) += leds-e680.o
-
- # LED Triggers
- obj-$(CONFIG_LEDS_TRIGGER_TIMER) += ledtrig-timer.o
-Index: linux-2.6.24/drivers/leds/leds-e680.c
-===================================================================
---- /dev/null
-+++ linux-2.6.24/drivers/leds/leds-e680.c
-@@ -0,0 +1,235 @@
-+/*
-+ * EZX Platform LED Driver for the Motorola E680(i) GSM Phone
-+ *
-+ * Copyright 2006 Vanille-Media
-+ *
-+ * Author: Michael Lauer <mickey@Vanille.de>
-+ *
-+ * Based on the Motorola 2.4 leds-e680.c and leds-corgi.c by Richard Purdie
-+ *
-+ * 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/delay.h>
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/platform_device.h>
-+#include <linux/leds.h>
-+#include <asm/mach-types.h>
-+#include <asm/arch/hardware.h>
-+#include <asm/arch/pxa-regs.h>
-+#include <asm/arch/ezx-pcap.h>
-+
-+//FIXME move defines to a common header file
-+#define IND_CNTL_R_BUL 46
-+#define IND_CNTL_G_BUL 47
-+#define SSP_PCAP_LED_MASK 0x000fffe0
-+#define SSP_PCAP_LED_SHIFT 5
-+#define GPIO_TC_MM_EN 99
-+
-+extern int ezx_pcap_read(u_int8_t, u_int32_t *);
-+extern int ezx_pcap_write(u_int8_t, u_int32_t);
-+
-+typedef struct {
-+ u_int8_t ind_GPIO_red; /*Indicator Red control GPIO 46: 0 active, 1 inactive */
-+ u_int8_t ind_GPIO_green; /*Indicator Green control GPIO 47: 0 inactive, 1 active */
-+ u_int8_t pcap_LEDR_en; /*pcap LEDR_EN bit value: 1 =Red LED(&Green) sink circuit enabled*/
-+ u_int8_t pcap_LEDG_en; /*pcap LEDG_EN bit value:1 =Green(->Blue)LED sink circuit enabled*/
-+ u_int8_t pcap_LEDR_CTRL; /* 4bits Sets the timing for the red(&Green) LED sink circuit*/
-+ u_int8_t pcap_LEDG_CTRL; /* 4bits Sets the timing for the GREEN (->Blue) LED sink circuit*/
-+ u_int8_t pcap_LEDR_I; /* 2 bits 00 3mA,01 4mA, 10 5mA, 11 9mA, sets the pulsed current level for LEDR*/
-+ u_int8_t pcap_LEDG_I; /* 2 bits 00 3mA,01 4mA, 10 5mA, 11 9mA, sets the pulsed current level for LEDG*/
-+// u_int8_t pcap_SKIP_on; /*1=The ON timing sequence defined by LEDx_CTRL is executed on every other cycle*/
-+} PCAP2_LED_REGISTER_VALUE;
-+
-+const PCAP2_LED_REGISTER_VALUE led_register_value[]=
-+{
-+ {0x1,0x0, 0x0,0x0, 0x0,0x0, 0x1,0x0}, /* 0 OFF */
-+
-+ {0x0,0x0, 0x1,0x0, 0xf,0x0, 0x1,0x0}, /* 1 RED */
-+ {0x1,0x1, 0x1,0x0, 0xf,0x0, 0x1,0x0}, /* 2 GREEN */
-+ {0x0,0x1, 0x1,0x0, 0xf,0x0, 0x1,0x0}, /* 3 ORANGE */
-+ {0x1,0x0, 0x0,0x1, 0x0,0xf, 0x0,0x0}, /* 4 BLUE */
-+ {0x0,0x0, 0x1,0x1, 0xf,0xf, 0x1,0x0}, /* 5 MAGENTA */
-+ {0x1,0x1, 0x1,0x1, 0xf,0xf, 0x1,0x0}, /* 6 CYAN */
-+ {0x0,0x1, 0x1,0x1, 0xf,0xf, 0x1,0x0}, /* 7 WHITE */
-+};
-+
-+static void e680led_set(struct led_classdev *led_cdev, enum led_brightness value)
-+{
-+ unsigned int tempValue;
-+ unsigned char gpio_red, gpio_green, ledr_en, ledg_en, ledr_ctrl,
-+ ledg_ctrl, ledr_i, ledg_i, skip, t, color;
-+ unsigned char t_mask[2] = { 0xc, 0xc };
-+
-+ skip = 0;
-+ if (value & 128) {
-+ value &= (~128);
-+ skip = 1;
-+ }
-+
-+ /* 7 colors - simple on */
-+ if (value <= 7)
-+ color = value;
-+ /* 4 colors - 11 timed on */
-+ else if (value <= 51) {
-+ value -= 7;
-+ color = ((value-1)%4)+1;
-+ t = ((value-1)/4)+1;
-+ t_mask[0] = t;
-+ t_mask[1] = t;
-+ }
-+ /* 3 colors - 22 change color */
-+ else if (value <= 84) {
-+ value -= 51;
-+ color = ((value-1)%3)+5;
-+ t = ((value-1)/3)+1;
-+ t_mask[1] = t;
-+ }
-+ else if (value <= 117) {
-+ value -= 84;
-+ color = ((value-1)%3)+5;
-+ t = ((value-1)/3)+1;
-+ t_mask[0] = t;
-+ }
-+ /* 3 colors - alternate with blue */
-+ else if (value <= 120) {
-+ color = value-113;
-+ t_mask[0] = 0xa;
-+ t_mask[1] = 0xb;
-+ }
-+ /* invalid value */
-+ else
-+ color = 1;
-+
-+ gpio_red = led_register_value[color].ind_GPIO_red;
-+ gpio_green = led_register_value[color].ind_GPIO_green;
-+ ledr_en = led_register_value[color].pcap_LEDR_en;
-+ ledg_en = led_register_value[color].pcap_LEDG_en;
-+ ledr_ctrl = led_register_value[color].pcap_LEDR_CTRL & t_mask[0];
-+ ledg_ctrl = led_register_value[color].pcap_LEDG_CTRL & t_mask[1];
-+ ledr_i = led_register_value[color].pcap_LEDR_I;
-+ ledg_i = led_register_value[color].pcap_LEDG_I;
-+
-+ ezx_pcap_read(PCAP_REG_PERIPH,&tempValue);
-+
-+ tempValue &= (~SSP_PCAP_LED_MASK);
-+
-+ pxa_gpio_set_value(IND_CNTL_R_BUL, gpio_red);
-+ pxa_gpio_set_value(IND_CNTL_G_BUL, gpio_green);
-+
-+ /* Write PCAP LED Peripheral Control Register*/
-+ tempValue = ((ledr_en | (ledg_en << 1) | (ledr_ctrl << 2) |
-+ (ledg_ctrl << 6) | (ledr_i << 10) | (ledg_i << 12) |
-+ (skip << 14)) & 0x7fff) << SSP_PCAP_LED_SHIFT;
-+
-+ ezx_pcap_write(PCAP_REG_PERIPH,tempValue);
-+}
-+
-+static void e680led_keypad_set(struct led_classdev *led_cdev, enum led_brightness value)
-+{
-+ /* this is not working yet, as there is something else missing */
-+#if 0
-+ printk( KERN_DEBUG "e680led_keypad_set: %d\n", value );
-+
-+ pxa_gpio_mode(GPIO_TC_MM_EN);
-+ GPDR(GPIO_TC_MM_EN) |= GPIO_bit(GPIO_TC_MM_EN);
-+ GPSR(GPIO_TC_MM_EN) = GPIO_bit(GPIO_TC_MM_EN);
-+
-+ udelay( 100 );
-+
-+ if ( value ) {
-+ GPCR(GPIO_TC_MM_EN) = GPIO_bit(GPIO_TC_MM_EN);
-+ PGSR3 &= ~GPIO_bit(GPIO_TC_MM_EN);
-+ } else {
-+ GPSR(GPIO_TC_MM_EN) = GPIO_bit(GPIO_TC_MM_EN);
-+ PGSR3 |= GPIO_bit(GPIO_TC_MM_EN);
-+ }
-+#endif
-+}
-+
-+static struct led_classdev e680_led = {
-+ .name = "e680:led",
-+ .default_trigger = "none",
-+ .brightness_set = e680led_set,
-+};
-+
-+static struct led_classdev e680_keypad = {
-+ .name = "e680:keypad",
-+ .default_trigger = "none",
-+ .brightness_set = e680led_keypad_set,
-+};
-+
-+#ifdef CONFIG_PM
-+static int e680led_suspend(struct platform_device *dev, pm_message_t state)
-+{
-+ led_classdev_suspend(&e680_led);
-+ led_classdev_suspend(&e680_keypad);
-+ return 0;
-+}
-+
-+static int e680led_resume(struct platform_device *dev)
-+{
-+ led_classdev_resume(&e680_led);
-+ led_classdev_resume(&e680_keypad);
-+ return 0;
-+}
-+#endif
-+
-+static int e680led_probe(struct platform_device *pdev)
-+{
-+ int ret;
-+
-+ /* configure GPIOs as output */
-+ pxa_gpio_mode(IND_CNTL_R_BUL | GPIO_OUT);
-+ pxa_gpio_mode(IND_CNTL_G_BUL | GPIO_OUT);
-+
-+ ret = led_classdev_register(&pdev->dev, &e680_led);
-+ if (ret < 0)
-+ return ret;
-+
-+ ret = led_classdev_register(&pdev->dev, &e680_keypad);
-+ if (ret < 0) {
-+ led_classdev_unregister(&e680_led);
-+ }
-+ return ret;
-+}
-+
-+static int e680led_remove(struct platform_device *pdev)
-+{
-+ led_classdev_unregister(&e680_led);
-+ led_classdev_unregister(&e680_keypad);
-+ return 0;
-+}
-+
-+static struct platform_driver e680led_driver = {
-+ .probe = e680led_probe,
-+ .remove = e680led_remove,
-+#ifdef CONFIG_PM
-+ .suspend = e680led_suspend,
-+ .resume = e680led_resume,
-+#endif
-+ .driver = {
-+ .name = "e680-led",
-+ },
-+};
-+
-+static int __init e680led_init(void)
-+{
-+ return platform_driver_register(&e680led_driver);
-+}
-+
-+static void __exit e680led_exit(void)
-+{
-+ platform_driver_unregister(&e680led_driver);
-+}
-+
-+module_init(e680led_init);
-+module_exit(e680led_exit);
-+
-+MODULE_AUTHOR("Michael Lauer <mickey@Vanille.de>");
-+MODULE_DESCRIPTION("Motorola E680 LED driver");
-+MODULE_LICENSE("GPL");
-Index: linux-2.6.24/arch/arm/mach-pxa/ezx-e680.c
-===================================================================
---- linux-2.6.24.orig/arch/arm/mach-pxa/ezx-e680.c
-+++ linux-2.6.24/arch/arm/mach-pxa/ezx-e680.c
-@@ -337,11 +337,20 @@
- },
- };
-
-+static struct platform_device e680led_device = {
-+ .name = "e680-led",
-+ .id = -1,
-+ .dev = {
-+ .parent = &e680_pcap_device.dev,
-+ },
-+};
-+
- static struct platform_device *devices[] __initdata = {
- &e680_pcap_device,
- &e680_emu_device,
- &pcap_ts_device,
- &e680locksw_device,
-+ &e680led_device,
- };
-
- static void __init e680_init(void)