r1273 - trunk/src/target/kernel/patches
laforge at sita.openmoko.org
laforge at sita.openmoko.org
Thu Mar 8 14:36:06 CET 2007
Author: laforge
Date: 2007-03-08 14:36:05 +0100 (Thu, 08 Mar 2007)
New Revision: 1273
Modified:
trunk/src/target/kernel/patches/gta01-core.patch
trunk/src/target/kernel/patches/gta01-inputdevice.patch
Log:
* Rename 911 GPIO/IRQ to AUX GPIO/IRQ
* Give interrupts of gta01kbd driver better description
* Add headphone jack switch support to gta01kbd
* Fix input key reporting of gta01kbd (no keybits were set)
Modified: trunk/src/target/kernel/patches/gta01-core.patch
===================================================================
--- trunk/src/target/kernel/patches/gta01-core.patch 2007-03-08 12:08:37 UTC (rev 1272)
+++ trunk/src/target/kernel/patches/gta01-core.patch 2007-03-08 13:36:05 UTC (rev 1273)
@@ -3,8 +3,8 @@
Index: linux-2.6.20.1/arch/arm/mach-s3c2410/Kconfig
===================================================================
---- linux-2.6.20.1.orig/arch/arm/mach-s3c2410/Kconfig 2007-03-02 18:23:34.000000000 +0100
-+++ linux-2.6.20.1/arch/arm/mach-s3c2410/Kconfig 2007-03-02 18:39:51.000000000 +0100
+--- linux-2.6.20.1.orig/arch/arm/mach-s3c2410/Kconfig 2007-03-08 13:36:44.000000000 +0100
++++ linux-2.6.20.1/arch/arm/mach-s3c2410/Kconfig 2007-03-08 13:37:56.000000000 +0100
@@ -86,6 +86,14 @@
help
Say Y here if you are using the Armzone QT2410
@@ -22,8 +22,8 @@
select CPU_S3C2440
Index: linux-2.6.20.1/arch/arm/mach-s3c2410/Makefile
===================================================================
---- linux-2.6.20.1.orig/arch/arm/mach-s3c2410/Makefile 2007-03-02 18:23:34.000000000 +0100
-+++ linux-2.6.20.1/arch/arm/mach-s3c2410/Makefile 2007-03-02 18:39:51.000000000 +0100
+--- linux-2.6.20.1.orig/arch/arm/mach-s3c2410/Makefile 2007-03-08 13:36:44.000000000 +0100
++++ linux-2.6.20.1/arch/arm/mach-s3c2410/Makefile 2007-03-08 13:36:44.000000000 +0100
@@ -89,5 +89,6 @@
obj-$(CONFIG_MACH_NEXCODER_2440) += mach-nexcoder.o
obj-$(CONFIG_MACH_VSTMS) += mach-vstms.o
@@ -34,7 +34,7 @@
Index: linux-2.6.20.1/arch/arm/mach-s3c2410/mach-gta01.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.20.1/arch/arm/mach-s3c2410/mach-gta01.c 2007-03-02 18:40:31.000000000 +0100
++++ linux-2.6.20.1/arch/arm/mach-s3c2410/mach-gta01.c 2007-03-08 13:38:24.000000000 +0100
@@ -0,0 +1,506 @@
+/*
+ * linux/arch/arm/mach-s3c2410/mach-gta01.c
@@ -454,8 +454,8 @@
+
+static struct resource gta01_button_resources[] = {
+ [0] = {
-+ .start = GTA01_GPIO_911_KEY,
-+ .end = GTA01_GPIO_911_KEY,
++ .start = GTA01_GPIO_AUX_KEY,
++ .end = GTA01_GPIO_AUX_KEY,
+ },
+ [1] = {
+ .start = GTA01_GPIO_HOLD_KEY,
@@ -545,7 +545,7 @@
Index: linux-2.6.20.1/include/asm-arm/arch-s3c2410/gta01.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.20.1/include/asm-arm/arch-s3c2410/gta01.h 2007-03-02 18:39:51.000000000 +0100
++++ linux-2.6.20.1/include/asm-arm/arch-s3c2410/gta01.h 2007-03-08 13:38:38.000000000 +0100
@@ -0,0 +1,60 @@
+#ifndef _GTA01_H
+#define _GTA01_H
@@ -575,13 +575,13 @@
+#define GTA01_GPIO_LCD_RESET S3C2410_GPC6
+#define GTA01_GPIO_JACK_INSERT S3C2410_GPF4
+#define GTA01_GPIO_nSD_DETECT S3C2410_GPF5
-+#define GTA01_GPIO_911_KEY S3C2410_GPF6
++#define GTA01_GPIO_AUX_KEY S3C2410_GPF6
+#define GTA01_GPIO_HOLD_KEY S3C2410_GPF7
+#define GTA01_GPIO_VIBRATOR_ON S3C2410_GPG11
+
+#define GTA01_IRQ_JACK_INSERT IRQ_EINT4
+#define GTA01_IRQ_nSD_DETECT IRQ_EINT5
-+#define GTA01_IRQ_911_KEY IRQ_EINT6
++#define GTA01_IRQ_AUX_KEY IRQ_EINT6
+#define GTA01_IRQ_PCF50606 IRQ_EINT16
+
+/* GTA01v3 */
Modified: trunk/src/target/kernel/patches/gta01-inputdevice.patch
===================================================================
--- trunk/src/target/kernel/patches/gta01-inputdevice.patch 2007-03-08 12:08:37 UTC (rev 1272)
+++ trunk/src/target/kernel/patches/gta01-inputdevice.patch 2007-03-08 13:36:05 UTC (rev 1273)
@@ -1,9 +1,9 @@
This provides support for the GTA01 keyboard
-Index: linux-2.6.20/drivers/input/keyboard/Kconfig
+Index: linux-2.6.20.1/drivers/input/keyboard/Kconfig
===================================================================
---- linux-2.6.20.orig/drivers/input/keyboard/Kconfig 2007-02-20 18:56:10.000000000 +0100
-+++ linux-2.6.20/drivers/input/keyboard/Kconfig 2007-02-20 18:58:03.000000000 +0100
+--- linux-2.6.20.1.orig/drivers/input/keyboard/Kconfig 2007-03-08 13:37:56.000000000 +0100
++++ linux-2.6.20.1/drivers/input/keyboard/Kconfig 2007-03-08 14:03:22.000000000 +0100
@@ -214,4 +214,16 @@
To compile this driver as a module, choose M here: the
module will be called aaed2000_kbd.
@@ -21,10 +21,10 @@
+
+
endif
-Index: linux-2.6.20/drivers/input/keyboard/Makefile
+Index: linux-2.6.20.1/drivers/input/keyboard/Makefile
===================================================================
---- linux-2.6.20.orig/drivers/input/keyboard/Makefile 2007-02-20 18:56:10.000000000 +0100
-+++ linux-2.6.20/drivers/input/keyboard/Makefile 2007-02-20 18:58:03.000000000 +0100
+--- linux-2.6.20.1.orig/drivers/input/keyboard/Makefile 2007-03-08 13:37:56.000000000 +0100
++++ linux-2.6.20.1/drivers/input/keyboard/Makefile 2007-03-08 14:03:22.000000000 +0100
@@ -13,6 +13,7 @@
obj-$(CONFIG_KEYBOARD_NEWTON) += newtonkbd.o
obj-$(CONFIG_KEYBOARD_STOWAWAY) += stowaway.o
@@ -33,11 +33,11 @@
obj-$(CONFIG_KEYBOARD_SPITZ) += spitzkbd.o
obj-$(CONFIG_KEYBOARD_HIL) += hil_kbd.o
obj-$(CONFIG_KEYBOARD_HIL_OLD) += hilkbd.o
-Index: linux-2.6.20/drivers/input/keyboard/gta01kbd.c
+Index: linux-2.6.20.1/drivers/input/keyboard/gta01kbd.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.20/drivers/input/keyboard/gta01kbd.c 2007-02-20 19:48:56.000000000 +0100
-@@ -0,0 +1,234 @@
++++ linux-2.6.20.1/drivers/input/keyboard/gta01kbd.c 2007-03-08 14:01:38.000000000 +0100
+@@ -0,0 +1,249 @@
+/*
+ * Keyboard driver for FIC GTA01 (Neo1973) GSM phone
+ *
@@ -69,16 +69,26 @@
+ unsigned long suspend_jiffies;
+};
+
-+static irqreturn_t gta01kbd_interrupt(int irq, void *dev_id)
++static irqreturn_t gta01kbd_aux_irq(int irq, void *dev_id)
+{
+ struct gta01kbd *gta01kbd_data = dev_id;
+
+ /* FIXME: use GPIO from platform_dev resources */
-+ if (s3c2410_gpio_getpin(GTA01_GPIO_911_KEY))
++ if (s3c2410_gpio_getpin(GTA01_GPIO_AUX_KEY))
+ input_report_key(gta01kbd_data->input, KEY_PHONE, 1);
+ else
+ input_report_key(gta01kbd_data->input, KEY_PHONE, 0);
+
++ input_sync(gta01kbd_data->input);
++
++ return IRQ_HANDLED;
++}
++
++static irqreturn_t gta01kbd_hold_irq(int irq, void *dev_id)
++{
++ struct gta01kbd *gta01kbd_data = dev_id;
++
++ /* FIXME: use GPIO from platform_dev resources */
+ if (s3c2410_gpio_getpin(GTA01_GPIO_HOLD_KEY))
+ input_report_key(gta01kbd_data->input, KEY_PAUSE, 1);
+ else
@@ -89,11 +99,24 @@
+ return IRQ_HANDLED;
+}
+
++static irqreturn_t gta01kbd_headphone_irq(int irq, void *dev_id)
++{
++ struct gta01kbd *gta01kbd_data = dev_id;
+
++ /* FIXME: use GPIO from platform_dev resources */
++ if (s3c2410_gpio_getpin(GTA01_GPIO_JACK_INSERT))
++ input_report_switch(gta01kbd_data->input, SW_HEADPHONE_INSERT, 1);
++ else
++ input_report_switch(gta01kbd_data->input, SW_HEADPHONE_INSERT, 0);
++
++ input_sync(gta01kbd_data->input);
++
++ return IRQ_HANDLED;
++}
++
+#ifdef CONFIG_PM
+static int gta01kbd_suspend(struct platform_device *dev, pm_message_t state)
+{
-+ int i;
+ struct gta01kbd *gta01kbd = platform_get_drvdata(dev);
+
+ gta01kbd->suspended = 1;
@@ -103,7 +126,6 @@
+
+static int gta01kbd_resume(struct platform_device *dev)
+{
-+ int i;
+ struct gta01kbd *gta01kbd = platform_get_drvdata(dev);
+
+ gta01kbd->suspended = 0;
@@ -119,7 +141,7 @@
+{
+ struct gta01kbd *gta01kbd;
+ struct input_dev *input_dev;
-+ int irq_911, irq_hold;
++ int irq_aux, irq_hold, irq_jack;
+
+ gta01kbd = kzalloc(sizeof(struct gta01kbd), GFP_KERNEL);
+ input_dev = input_allocate_device();
@@ -132,14 +154,18 @@
+ if (pdev->resource[0].flags != 0)
+ return -EINVAL;
+
-+ irq_911 = s3c2410_gpio_getirq(pdev->resource[0].start);
-+ if (irq_911 < 0)
++ irq_aux = s3c2410_gpio_getirq(pdev->resource[0].start);
++ if (irq_aux < 0)
+ return -EINVAL;
+
+ irq_hold = s3c2410_gpio_getirq(pdev->resource[1].start);
+ if (irq_hold < 0)
+ return -EINVAL;
+
++ irq_jack = s3c2410_gpio_getirq(pdev->resource[2].start);
++ if (irq_jack < 0)
++ return -EINVAL;
++
+ platform_set_drvdata(pdev, gta01kbd);
+
+ gta01kbd->input = input_dev;
@@ -157,11 +183,9 @@
+ corgikbd->htimer.data = (unsigned long) corgikbd;
+
+ corgikbd->suspend_jiffies=jiffies;
-+
-+ memcpy(corgikbd->keycode, corgikbd_keycode, sizeof(corgikbd->keycode));
+#endif
+
-+ input_dev->name = "GTA01 Buttons";
++ input_dev->name = "Neo1973 Buttons";
+ input_dev->phys = "gta01kbd/input0";
+ input_dev->id.bustype = BUS_HOST;
+ input_dev->id.vendor = 0x0001;
@@ -170,77 +194,68 @@
+ input_dev->cdev.dev = &pdev->dev;
+ input_dev->private = gta01kbd;
+
-+ input_dev->evbit[0] = BIT(EV_KEY);
++ input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_SW);
+ set_bit(SW_HEADPHONE_INSERT, input_dev->swbit);
-+#if 0
-+ input_dev->keycode = gta01kbd->keycode;
-+ input_dev->keycodesize = sizeof(unsigned char);
-+ input_dev->keycodemax = ARRAY_SIZE(corgikbd_keycode);
++ set_bit(KEY_PHONE, input_dev->keybit);
++ set_bit(KEY_PAUSE, input_dev->keybit);
+
-+ for (i = 0; i < ARRAY_SIZE(corgikbd_keycode); i++)
-+ set_bit(corgikbd->keycode[i], input_dev->keybit);
-+ clear_bit(0, input_dev->keybit);
-+ set_bit(SW_LID, input_dev->swbit);
-+ set_bit(SW_TABLET_MODE, input_dev->swbit);
-+ set_bit(SW_HEADPHONE_INSERT, input_dev->swbit);
-+#endif
-+
+ input_register_device(gta01kbd->input);
+
-+ if (request_irq(irq_911, gta01kbd_interrupt,
++ if (request_irq(irq_aux, gta01kbd_aux_irq,
+ SA_INTERRUPT | SA_TRIGGER_RISING | SA_TRIGGER_FALLING,
-+ "gta01kbd_911", gta01kbd))
-+ printk(KERN_WARNING "gta01kbd: Can't get IRQ\n");
-+ enable_irq_wake(irq_911);
++ "Neo1973 AUX button", gta01kbd)) {
++ dev_err(&pdev->dev, "Can't get IRQ %u\n", irq_aux);
++ goto out_aux;
++ }
++ enable_irq_wake(irq_aux);
+
-+ if (request_irq(irq_hold, gta01kbd_interrupt,
++ if (request_irq(irq_hold, gta01kbd_hold_irq,
+ SA_INTERRUPT | SA_TRIGGER_RISING | SA_TRIGGER_FALLING,
-+ "gta01kbd_hold", gta01kbd))
-+ printk(KERN_WARNING "gta01kbd: Can't get IRQ\n");
++ "Neo1973 HOLD button", gta01kbd)) {
++ dev_err(&pdev->dev, "Can't get IRQ %u\n", irq_hold);
++ goto out_hold;
++ }
+ enable_irq_wake(irq_hold);
+
-+ /* FIXME: headphone insert */
-+
++ if (request_irq(irq_jack, gta01kbd_headphone_irq,
++ SA_INTERRUPT | SA_TRIGGER_RISING | SA_TRIGGER_FALLING,
++ "Neo1973 Headphone Jack", gta01kbd)) {
++ dev_err(&pdev->dev, "Can't get IRQ %u\n", irq_jack);
++ goto out_jack;
++ }
++ enable_irq_wake(irq_jack);
+#if 0
+ mod_timer(&corgikbd->htimer, jiffies + msecs_to_jiffies(HINGE_SCAN_INTERVAL));
++#endif
++ return 0;
+
-+ /* Setup sense interrupts - RisingEdge Detect, sense lines as inputs */
-+ for (i = 0; i < CORGI_KEY_SENSE_NUM; i++) {
-+ pxa_gpio_mode(CORGI_GPIO_KEY_SENSE(i) | GPIO_IN);
-+ if (request_irq(CORGI_IRQ_GPIO_KEY_SENSE(i), corgikbd_interrupt,
-+ SA_INTERRUPT | SA_TRIGGER_RISING,
-+ "corgikbd", corgikbd))
-+ printk(KERN_WARNING "corgikbd: Can't get IRQ: %d!\n", i);
-+ }
++out_jack:
++ free_irq(irq_hold, gta01kbd);
++out_hold:
++ free_irq(irq_aux, gta01kbd);
++out_aux:
++ input_unregister_device(gta01kbd->input);
++ input_free_device(gta01kbd->input);
++ platform_set_drvdata(pdev, NULL);
++ kfree(gta01kbd);
+
-+ /* Set Strobe lines as outputs - set high */
-+ for (i = 0; i < CORGI_KEY_STROBE_NUM; i++)
-+ pxa_gpio_mode(CORGI_GPIO_KEY_STROBE(i) | GPIO_OUT | GPIO_DFLT_HIGH);
-+
-+ /* Setup the headphone jack as an input */
-+ pxa_gpio_mode(CORGI_GPIO_AK_INT | GPIO_IN);
-+#endif
-+
-+ return 0;
++ return -ENODEV;
+}
+
+static int gta01kbd_remove(struct platform_device *pdev)
+{
+ struct gta01kbd *gta01kbd = platform_get_drvdata(pdev);
+
++ free_irq(s3c2410_gpio_getirq(pdev->resource[2].start), gta01kbd);
++ free_irq(s3c2410_gpio_getirq(pdev->resource[1].start), gta01kbd);
+ free_irq(s3c2410_gpio_getirq(pdev->resource[0].start), gta01kbd);
-+ free_irq(s3c2410_gpio_getirq(pdev->resource[1].start), gta01kbd);
+#if 0
-+ int i;
-+
-+ for (i = 0; i < CORGI_KEY_SENSE_NUM; i++)
-+ free_irq(CORGI_IRQ_GPIO_KEY_SENSE(i), corgikbd);
-+
+ del_timer_sync(&corgikbd->htimer);
+ del_timer_sync(&corgikbd->timer);
+#endif
+ input_unregister_device(gta01kbd->input);
-+
++ input_free_device(gta01kbd->input);
++ platform_set_drvdata(pdev, NULL);
+ kfree(gta01kbd);
+
+ return 0;
@@ -270,5 +285,5 @@
+module_exit(gta01kbd_exit);
+
+MODULE_AUTHOR("Harald Welte <laforge at openmoko.org>");
-+MODULE_DESCRIPTION("FIC GTA01 (Neo1973) Buttons Driver");
++MODULE_DESCRIPTION("FIC Neo1973 (GTA01) Buttons Driver");
+MODULE_LICENSE("GPL");
More information about the commitlog
mailing list