r1125 - trunk/src/target/kernel/patches

laforge at sita.openmoko.org laforge at sita.openmoko.org
Mon Feb 26 00:46:41 CET 2007


Author: laforge
Date: 2007-02-26 00:46:40 +0100 (Mon, 26 Feb 2007)
New Revision: 1125

Added:
   trunk/src/target/kernel/patches/s3c2410-qt2410-buttons.patch
Modified:
   trunk/src/target/kernel/patches/qt2410-base.patch
   trunk/src/target/kernel/patches/series
Log:
* add driver for qt2410 buttons (wakeup source). this is really ugly copy+paste
  of something else that's ugly copy+paste, don't look at it.
* qt2410: remove static partition table and rather use mtdparts 


Modified: trunk/src/target/kernel/patches/qt2410-base.patch
===================================================================
--- trunk/src/target/kernel/patches/qt2410-base.patch	2007-02-25 20:45:53 UTC (rev 1124)
+++ trunk/src/target/kernel/patches/qt2410-base.patch	2007-02-25 23:46:40 UTC (rev 1125)
@@ -1,7 +1,7 @@
-Index: linux-2.6.20/arch/arm/mach-s3c2410/Kconfig
+Index: linux-2.6.20.1/arch/arm/mach-s3c2410/Kconfig
 ===================================================================
---- linux-2.6.20.orig/arch/arm/mach-s3c2410/Kconfig	2007-02-17 00:43:51.000000000 +0100
-+++ linux-2.6.20/arch/arm/mach-s3c2410/Kconfig	2007-02-17 00:43:54.000000000 +0100
+--- linux-2.6.20.1.orig/arch/arm/mach-s3c2410/Kconfig	2007-02-20 21:32:44.000000000 +0100
++++ linux-2.6.20.1/arch/arm/mach-s3c2410/Kconfig	2007-02-21 16:28:00.000000000 +0100
 @@ -80,6 +80,12 @@
  	   Say Y here if you are using the SMDK2410 or the derived module A9M2410
             <http://www.fsforth.de>
@@ -15,10 +15,10 @@
  config ARCH_S3C2440
  	bool "SMDK2440"
  	select CPU_S3C2440
-Index: linux-2.6.20/arch/arm/mach-s3c2410/Makefile
+Index: linux-2.6.20.1/arch/arm/mach-s3c2410/Makefile
 ===================================================================
---- linux-2.6.20.orig/arch/arm/mach-s3c2410/Makefile	2007-02-17 00:43:51.000000000 +0100
-+++ linux-2.6.20/arch/arm/mach-s3c2410/Makefile	2007-02-17 00:43:54.000000000 +0100
+--- linux-2.6.20.1.orig/arch/arm/mach-s3c2410/Makefile	2007-02-20 21:32:44.000000000 +0100
++++ linux-2.6.20.1/arch/arm/mach-s3c2410/Makefile	2007-02-21 16:28:00.000000000 +0100
 @@ -88,5 +88,6 @@
  obj-$(CONFIG_MACH_OTOM)		+= mach-otom.o
  obj-$(CONFIG_MACH_NEXCODER_2440) += mach-nexcoder.o
@@ -28,11 +28,11 @@
 -obj-$(CONFIG_MACH_SMDK)		+= common-smdk.o
 \ No newline at end of file
 +obj-$(CONFIG_MACH_SMDK)		+= common-smdk.o
-Index: linux-2.6.20/arch/arm/mach-s3c2410/mach-qt2410.c
+Index: linux-2.6.20.1/arch/arm/mach-s3c2410/mach-qt2410.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.20/arch/arm/mach-s3c2410/mach-qt2410.c	2007-02-17 00:44:07.000000000 +0100
-@@ -0,0 +1,386 @@
++++ linux-2.6.20.1/arch/arm/mach-s3c2410/mach-qt2410.c	2007-02-21 16:28:56.000000000 +0100
+@@ -0,0 +1,356 @@
 +/*
 + *
 + * linux/arch/arm/mach-s3c2410/mach-qt2410.c
@@ -231,40 +231,10 @@
 +	.devices_count = ARRAY_SIZE(qt2410_devices)
 +};
 +
-+static struct mtd_partition qt2410_nand_part[] = {
-+	[0] = {
-+		.name	= "U-Boot",
-+		.size	= 0x30000,
-+		.offset	= 0,
-+	},
-+	[1] = {
-+		.name	= "U-Boot environment",
-+		.offset = 0x30000,
-+		.size	= 0x4000,
-+	},
-+	[2] = {
-+		.name	= "kernel",
-+		.offset = 0x34000,
-+		.size	= SZ_2M,
-+	},
-+	[3] = {
-+		.name	= "initrd",
-+		.offset	= 0x234000,
-+		.size	= SZ_4M,
-+	},
-+	[4] = {
-+		.name	= "jffs2",
-+		.offset = 0x634000,
-+		.size	= 0x39cc000,
-+	},
-+};
-+
 +static struct s3c2410_nand_set qt2410_nand_sets[] = {
 +	[0] = {
-+		.name		= "NAND",
++		.name		= "qt2410-nand",
 +		.nr_chips	= 1,
-+		.nr_partitions	= ARRAY_SIZE(qt2410_nand_part),
-+		.partitions	= qt2410_nand_part,
 +	},
 +};
 +

Added: trunk/src/target/kernel/patches/s3c2410-qt2410-buttons.patch
===================================================================
--- trunk/src/target/kernel/patches/s3c2410-qt2410-buttons.patch	2007-02-25 20:45:53 UTC (rev 1124)
+++ trunk/src/target/kernel/patches/s3c2410-qt2410-buttons.patch	2007-02-25 23:46:40 UTC (rev 1125)
@@ -0,0 +1,287 @@
+Index: linux-2.6.20.1/arch/arm/mach-s3c2410/mach-qt2410.c
+===================================================================
+--- linux-2.6.20.1.orig/arch/arm/mach-s3c2410/mach-qt2410.c	2007-02-21 17:23:47.000000000 +0100
++++ linux-2.6.20.1/arch/arm/mach-s3c2410/mach-qt2410.c	2007-02-21 17:26:52.000000000 +0100
+@@ -457,6 +457,24 @@
+ 	.ocr_avail 	= MMC_VDD_32_33,
+ };
+ 
++static struct resource qt2410_button_resources[] = {
++	[0] = {
++		.start = S3C2410_GPF0,
++		.end   = S3C2410_GPF0,
++	},
++	[1] = {
++		.start = S3C2410_GPF2,
++		.end   = S3C2410_GPF2,
++	},
++};
++
++struct platform_device qt2410_button_dev = {
++	.name		="qt2410-button",
++	.num_resources	= ARRAY_SIZE(qt2410_button_resources),
++	.resource	= qt2410_button_resources,
++};
++
++
+ static void __init qt2410_map_io(void)
+ {
+ 	s3c24xx_init_io(qt2410_iodesc, ARRAY_SIZE(qt2410_iodesc));
+@@ -502,6 +520,7 @@
+ 	spi_register_board_info(qt2410_spi_board_info,
+ 				ARRAY_SIZE(qt2410_spi_board_info));
+ 	platform_device_register(&s3c_device_spi_lcm);
++	platform_device_register(&qt2410_button_dev);
+ 
+ 	s3c2410_pm_init();
+ }
+Index: linux-2.6.20.1/drivers/input/keyboard/Kconfig
+===================================================================
+--- linux-2.6.20.1.orig/drivers/input/keyboard/Kconfig	2007-02-21 17:22:08.000000000 +0100
++++ linux-2.6.20.1/drivers/input/keyboard/Kconfig	2007-02-21 17:22:39.000000000 +0100
+@@ -225,5 +225,10 @@
+ 	  To compile this driver as a module, choose M here: the
+ 	  module will be called gta01kbd.
+ 
++config KEYBOARD_QT2410
++	tristate "QT2410 buttons"
++	depends on MACH_QT2410
++	default y
++
+ 
+ endif
+Index: linux-2.6.20.1/drivers/input/keyboard/Makefile
+===================================================================
+--- linux-2.6.20.1.orig/drivers/input/keyboard/Makefile	2007-02-21 17:22:06.000000000 +0100
++++ linux-2.6.20.1/drivers/input/keyboard/Makefile	2007-02-21 17:22:53.000000000 +0100
+@@ -14,6 +14,7 @@
+ obj-$(CONFIG_KEYBOARD_STOWAWAY)		+= stowaway.o
+ obj-$(CONFIG_KEYBOARD_CORGI)		+= corgikbd.o
+ obj-$(CONFIG_KEYBOARD_GTA01)		+= gta01kbd.o
++obj-$(CONFIG_KEYBOARD_QT2410)		+= qt2410kbd.o
+ 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.1/drivers/input/keyboard/qt2410kbd.c
+===================================================================
+--- /dev/null	1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.20.1/drivers/input/keyboard/qt2410kbd.c	2007-02-21 17:25:50.000000000 +0100
+@@ -0,0 +1,218 @@
++/*
++ * Keyboard driver for Armzone QT2410 
++ *
++ * (C) 2006 by OpenMoko, Inc.
++ * Author: Harald Welte <laforge at openmoko.org>
++ * All rights reserved.
++ *
++ * 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/platform_device.h>
++#include <linux/init.h>
++#include <linux/input.h>
++#include <linux/interrupt.h>
++#include <linux/jiffies.h>
++#include <linux/module.h>
++#include <linux/slab.h>
++
++#include <asm/hardware.h>
++#include <asm/arch/gta01.h>
++
++struct gta01kbd {
++	struct input_dev *input;
++	unsigned int suspended;
++	unsigned long suspend_jiffies;
++};
++
++static irqreturn_t gta01kbd_interrupt(int irq, void *dev_id)
++{
++	struct gta01kbd *gta01kbd_data = dev_id;
++
++	/* FIXME: use GPIO from platform_dev resources */
++	if (s3c2410_gpio_getpin(S3C2410_GPF0))
++		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;
++}
++
++
++#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;
++
++	return 0;
++}
++
++static int gta01kbd_resume(struct platform_device *dev)
++{
++	int i;
++	struct gta01kbd *gta01kbd = platform_get_drvdata(dev);
++
++	gta01kbd->suspended = 0;
++
++	return 0;
++}
++#else
++#define gta01kbd_suspend	NULL
++#define gta01kbd_resume		NULL
++#endif
++
++static int gta01kbd_probe(struct platform_device *pdev)
++{
++	struct gta01kbd *gta01kbd;
++	struct input_dev *input_dev;
++	int irq_911, irq_hold;
++
++	gta01kbd = kzalloc(sizeof(struct gta01kbd), GFP_KERNEL);
++	input_dev = input_allocate_device();
++	if (!gta01kbd || !input_dev) {
++		kfree(gta01kbd);
++		input_free_device(input_dev);
++		return -ENOMEM;
++	}
++
++	if (pdev->resource[0].flags != 0)
++		return -EINVAL;
++
++	irq_911 = s3c2410_gpio_getirq(pdev->resource[0].start);
++	if (irq_911 < 0)
++		return -EINVAL;
++
++	platform_set_drvdata(pdev, gta01kbd);
++
++	gta01kbd->input = input_dev;
++
++#if 0
++	spin_lock_init(&gta01kbd->lock);
++	/* Init Keyboard rescan timer */
++	init_timer(&corgikbd->timer);
++	corgikbd->timer.function = corgikbd_timer_callback;
++	corgikbd->timer.data = (unsigned long) corgikbd;
++
++	/* Init Hinge Timer */
++	init_timer(&corgikbd->htimer);
++	corgikbd->htimer.function = corgikbd_hinge_timer;
++	corgikbd->htimer.data = (unsigned long) corgikbd;
++
++	corgikbd->suspend_jiffies=jiffies;
++
++	memcpy(corgikbd->keycode, corgikbd_keycode, sizeof(corgikbd->keycode));
++#endif
++
++	input_dev->name = "QT2410 Buttons";
++	input_dev->phys = "qt2410kbd/input0";
++	input_dev->id.bustype = BUS_HOST;
++	input_dev->id.vendor = 0x0001;
++	input_dev->id.product = 0x0001;
++	input_dev->id.version = 0x0100;
++	input_dev->cdev.dev = &pdev->dev;
++	input_dev->private = gta01kbd;
++
++	input_dev->evbit[0] = BIT(EV_KEY);
++#if 0
++	input_dev->keycode = gta01kbd->keycode;
++	input_dev->keycodesize = sizeof(unsigned char);
++	input_dev->keycodemax = ARRAY_SIZE(corgikbd_keycode);
++
++	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);
++
++	s3c2410_gpio_cfgpin(S3C2410_GPF0, S3C2410_GPF0_EINT0);
++	if (request_irq(irq_911, gta01kbd_interrupt,
++			SA_INTERRUPT | SA_TRIGGER_RISING | SA_TRIGGER_FALLING,
++			"qt2410kbd_eint0", gta01kbd))
++		printk(KERN_WARNING "gta01kbd: Can't get IRQ\n");
++	enable_irq_wake(irq_911);
++
++	/* FIXME: headphone insert */
++
++#if 0
++	mod_timer(&corgikbd->htimer, jiffies + msecs_to_jiffies(HINGE_SCAN_INTERVAL));
++
++	/* 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);
++	}
++
++	/* 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;
++}
++
++static int gta01kbd_remove(struct platform_device *pdev)
++{
++	struct gta01kbd *gta01kbd = platform_get_drvdata(pdev);
++
++	free_irq(s3c2410_gpio_getirq(pdev->resource[0].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);
++
++	kfree(gta01kbd);
++
++	return 0;
++}
++
++static struct platform_driver gta01kbd_driver = {
++	.probe		= gta01kbd_probe,
++	.remove		= gta01kbd_remove,
++	.suspend	= gta01kbd_suspend,
++	.resume		= gta01kbd_resume,
++	.driver		= {
++		.name	= "qt2410-button",
++	},
++};
++
++static int __devinit gta01kbd_init(void)
++{
++	return platform_driver_register(&gta01kbd_driver);
++}
++
++static void __exit gta01kbd_exit(void)
++{
++	platform_driver_unregister(&gta01kbd_driver);
++}
++
++module_init(gta01kbd_init);
++module_exit(gta01kbd_exit);
++
++MODULE_AUTHOR("Harald Welte <laforge at openmoko.org>");
++MODULE_DESCRIPTION("Armzone QT2410 Buttons Driver");
++MODULE_LICENSE("GPL");

Modified: trunk/src/target/kernel/patches/series
===================================================================
--- trunk/src/target/kernel/patches/series	2007-02-25 20:45:53 UTC (rev 1124)
+++ trunk/src/target/kernel/patches/series	2007-02-25 23:46:40 UTC (rev 1125)
@@ -31,3 +31,4 @@
 gta01-no_nand_partitions.patch
 input-nots-mousedev.patch
 ts0710.patch
+s3c2410-qt2410-buttons.patch





More information about the commitlog mailing list