summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--meta/packages/linux/linux-rp-2.6.24/htcuni.patch332
-rw-r--r--meta/packages/linux/linux-rp-2.6.24/pxa27x-resume.patch41
-rw-r--r--meta/packages/linux/linux-rp-2.6.24/pxa2xx_udc-clock.patch221
-rw-r--r--meta/packages/linux/linux-rp-2.6.24/sharpsl-rc-r1.patch527
-rw-r--r--meta/packages/linux/linux-rp-2.6.24/sharpsl-rc-r2.patch180
-rw-r--r--meta/packages/linux/linux-rp-2.6.24/spitz_h_rewrite.patch497
6 files changed, 1628 insertions, 170 deletions
diff --git a/meta/packages/linux/linux-rp-2.6.24/htcuni.patch b/meta/packages/linux/linux-rp-2.6.24/htcuni.patch
index f46265056..8448c4ec0 100644
--- a/meta/packages/linux/linux-rp-2.6.24/htcuni.patch
+++ b/meta/packages/linux/linux-rp-2.6.24/htcuni.patch
@@ -57,10 +57,10 @@
include/linux/soc/tmio_mmc.h | 17
56 files changed, 7469 insertions(+), 1 deletion(-)
-Index: linux-2.6.23/arch/arm/mach-pxa/htcuniversal/Makefile
+Index: linux-2.6.24/arch/arm/mach-pxa/htcuniversal/Makefile
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/Makefile 2008-01-20 18:59:46.000000000 +0000
++++ linux-2.6.24/arch/arm/mach-pxa/htcuniversal/Makefile 2008-03-10 16:09:23.000000000 +0000
@@ -0,0 +1,19 @@
+#
+# Makefile for HTC Universal
@@ -81,10 +81,10 @@ Index: linux-2.6.23/arch/arm/mach-pxa/htcuniversal/Makefile
+obj-$(CONFIG_HTCUNIVERSAL_UDC) += htcuniversal_udc.o
+
+obj-$(CONFIG_HTCUNIVERSAL_AK4641) += htcuniversal_ak4641.o
-Index: linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal.c
+Index: linux-2.6.24/arch/arm/mach-pxa/htcuniversal/htcuniversal.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal.c 2008-01-20 18:59:46.000000000 +0000
++++ linux-2.6.24/arch/arm/mach-pxa/htcuniversal/htcuniversal.c 2008-03-10 16:09:23.000000000 +0000
@@ -0,0 +1,468 @@
+/*
+ * Hardware definitions for HTC Universal
@@ -554,10 +554,10 @@ Index: linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal.c
+ .init_machine = htcuniversal_init,
+ .timer = &pxa_timer,
+MACHINE_END
-Index: linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_ak4641.c
+Index: linux-2.6.24/arch/arm/mach-pxa/htcuniversal/htcuniversal_ak4641.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_ak4641.c 2008-01-20 18:59:46.000000000 +0000
++++ linux-2.6.24/arch/arm/mach-pxa/htcuniversal/htcuniversal_ak4641.c 2008-03-10 16:09:23.000000000 +0000
@@ -0,0 +1,917 @@
+/*
+ * Audio support for codec Asahi Kasei AK4641
@@ -1476,10 +1476,10 @@ Index: linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_ak4641.c
+MODULE_LICENSE("GPL");
+
+/* end {{ Module }} */
-Index: linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_ak4641.h
+Index: linux-2.6.24/arch/arm/mach-pxa/htcuniversal/htcuniversal_ak4641.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_ak4641.h 2008-01-20 18:59:46.000000000 +0000
++++ linux-2.6.24/arch/arm/mach-pxa/htcuniversal/htcuniversal_ak4641.h 2008-03-10 16:09:23.000000000 +0000
@@ -0,0 +1,65 @@
+/*
+ * Audio support for codec Asahi Kasei AK4641
@@ -1546,10 +1546,10 @@ Index: linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_ak4641.h
+void snd_ak4641_hp_detected(struct snd_ak4641 *ak, int detected); /* atomic context */
+
+#endif /* __SOUND_AK4641_H */
-Index: linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_asic3_leds.c
+Index: linux-2.6.24/arch/arm/mach-pxa/htcuniversal/htcuniversal_asic3_leds.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_asic3_leds.c 2008-01-20 18:59:46.000000000 +0000
++++ linux-2.6.24/arch/arm/mach-pxa/htcuniversal/htcuniversal_asic3_leds.c 2008-03-10 16:09:23.000000000 +0000
@@ -0,0 +1,143 @@
+/*
+ * LEDs support for the HP iPaq hx4700
@@ -1694,10 +1694,10 @@ Index: linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_asic3_leds.c
+MODULE_AUTHOR("Anton Vorontsov <cbou@mail.ru>");
+MODULE_DESCRIPTION("htcuniversal LEDs driver");
+MODULE_LICENSE("GPL");
-Index: linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_bl.c
+Index: linux-2.6.24/arch/arm/mach-pxa/htcuniversal/htcuniversal_bl.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_bl.c 2008-01-20 18:59:46.000000000 +0000
++++ linux-2.6.24/arch/arm/mach-pxa/htcuniversal/htcuniversal_bl.c 2008-03-10 16:09:23.000000000 +0000
@@ -0,0 +1,61 @@
+/*
+ * Use consistent with the GNU GPL is permitted,
@@ -1760,10 +1760,10 @@ Index: linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_bl.c
+MODULE_AUTHOR("Paul Sokolovsky <pmiscml@gmail.com>");
+MODULE_DESCRIPTION("Backlight driver for HTC Universal");
+MODULE_LICENSE("GPL");
-Index: linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_bt.c
+Index: linux-2.6.24/arch/arm/mach-pxa/htcuniversal/htcuniversal_bt.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_bt.c 2008-01-20 18:59:46.000000000 +0000
++++ linux-2.6.24/arch/arm/mach-pxa/htcuniversal/htcuniversal_bt.c 2008-03-10 16:09:23.000000000 +0000
@@ -0,0 +1,135 @@
+/* Bluetooth interface driver for TI BRF6150 on HX4700
+ *
@@ -1900,10 +1900,10 @@ Index: linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_bt.c
+
+/* vim600: set noexpandtab sw=8 ts=8 :*/
+
-Index: linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_bt.h
+Index: linux-2.6.24/arch/arm/mach-pxa/htcuniversal/htcuniversal_bt.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_bt.h 2008-01-20 18:59:46.000000000 +0000
++++ linux-2.6.24/arch/arm/mach-pxa/htcuniversal/htcuniversal_bt.h 2008-03-10 16:09:23.000000000 +0000
@@ -0,0 +1,17 @@
+/*
+ * Bluetooth support file for calling bluetooth configuration functions
@@ -1922,10 +1922,10 @@ Index: linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_bt.h
+
+
+#endif
-Index: linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_buttons.c
+Index: linux-2.6.24/arch/arm/mach-pxa/htcuniversal/htcuniversal_buttons.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_buttons.c 2008-01-20 18:59:46.000000000 +0000
++++ linux-2.6.24/arch/arm/mach-pxa/htcuniversal/htcuniversal_buttons.c 2008-03-10 16:09:23.000000000 +0000
@@ -0,0 +1,87 @@
+/*
+ * Buttons driver for HTC Universal
@@ -2014,10 +2014,10 @@ Index: linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_buttons.c
+MODULE_AUTHOR ("Joshua Wise, Pawel Kolodziejski, Paul Sokolosvky");
+MODULE_DESCRIPTION ("Buttons support for HTC Universal");
+MODULE_LICENSE ("GPL");
-Index: linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_core.c
+Index: linux-2.6.24/arch/arm/mach-pxa/htcuniversal/htcuniversal_core.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_core.c 2008-01-20 18:59:46.000000000 +0000
++++ linux-2.6.24/arch/arm/mach-pxa/htcuniversal/htcuniversal_core.c 2008-03-10 16:09:23.000000000 +0000
@@ -0,0 +1,226 @@
+/* Core Hardware driver for Hx4700 (Serial, ASIC3, EGPIOs)
+ *
@@ -2245,10 +2245,10 @@ Index: linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_core.c
+MODULE_LICENSE("GPL");
+
+/* vim600: set noexpandtab sw=8 ts=8 :*/
-Index: linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_lcd.c
+Index: linux-2.6.24/arch/arm/mach-pxa/htcuniversal/htcuniversal_lcd.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_lcd.c 2008-01-20 18:59:46.000000000 +0000
++++ linux-2.6.24/arch/arm/mach-pxa/htcuniversal/htcuniversal_lcd.c 2008-03-10 16:09:23.000000000 +0000
@@ -0,0 +1,212 @@
+/*
+ * Use consistent with the GNU GPL is permitted,
@@ -2462,10 +2462,10 @@ Index: linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_lcd.c
+MODULE_DESCRIPTION("Framebuffer driver for HTC Universal");
+MODULE_LICENSE("GPL");
+
-Index: linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_phone.c
+Index: linux-2.6.24/arch/arm/mach-pxa/htcuniversal/htcuniversal_phone.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_phone.c 2008-01-20 18:59:46.000000000 +0000
++++ linux-2.6.24/arch/arm/mach-pxa/htcuniversal/htcuniversal_phone.c 2008-03-10 16:09:23.000000000 +0000
@@ -0,0 +1,167 @@
+
+/* Phone interface driver for Qualcomm MSM6250 on HTC Universal
@@ -2634,10 +2634,10 @@ Index: linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_phone.c
+MODULE_LICENSE("GPL");
+
+/* vim600: set noexpandtab sw=8 ts=8 :*/
-Index: linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_phone.h
+Index: linux-2.6.24/arch/arm/mach-pxa/htcuniversal/htcuniversal_phone.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_phone.h 2008-01-20 18:59:46.000000000 +0000
++++ linux-2.6.24/arch/arm/mach-pxa/htcuniversal/htcuniversal_phone.h 2008-03-10 16:09:23.000000000 +0000
@@ -0,0 +1,16 @@
+/*
+ * Bluetooth support file for calling bluetooth configuration functions
@@ -2655,10 +2655,10 @@ Index: linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_phone.h
+};
+
+#endif
-Index: linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_pm.c
+Index: linux-2.6.24/arch/arm/mach-pxa/htcuniversal/htcuniversal_pm.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_pm.c 2008-01-20 18:59:46.000000000 +0000
++++ linux-2.6.24/arch/arm/mach-pxa/htcuniversal/htcuniversal_pm.c 2008-03-10 16:09:23.000000000 +0000
@@ -0,0 +1,69 @@
+/*
+ * MyPal 716 power management support for the original HTC IPL in DoC G3
@@ -2729,10 +2729,10 @@ Index: linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_pm.c
+ pxa_pm_set_ll_ops(&htcuniversal_ll_pm_ops);
+}
+#endif /* CONFIG_PM */
-Index: linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_power2.c
+Index: linux-2.6.24/arch/arm/mach-pxa/htcuniversal/htcuniversal_power2.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_power2.c 2008-01-20 18:59:46.000000000 +0000
++++ linux-2.6.24/arch/arm/mach-pxa/htcuniversal/htcuniversal_power2.c 2008-03-10 16:09:23.000000000 +0000
@@ -0,0 +1,97 @@
+/*
+ * pda_power driver for HTC Universal
@@ -2831,10 +2831,10 @@ Index: linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_power2.c
+
+MODULE_DESCRIPTION("Power driver for HTC Universal");
+MODULE_LICENSE("GPL");
-Index: linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_ts2.c
+Index: linux-2.6.24/arch/arm/mach-pxa/htcuniversal/htcuniversal_ts2.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_ts2.c 2008-01-20 18:59:46.000000000 +0000
++++ linux-2.6.24/arch/arm/mach-pxa/htcuniversal/htcuniversal_ts2.c 2008-03-10 16:09:23.000000000 +0000
@@ -0,0 +1,490 @@
+/* Touch screen driver for the TI something-or-other
+ *
@@ -3326,10 +3326,10 @@ Index: linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_ts2.c
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Aric Blumer, SDG Systems, LLC");
+MODULE_DESCRIPTION("HTC Universal Touch Screen Driver");
-Index: linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_udc.c
+Index: linux-2.6.24/arch/arm/mach-pxa/htcuniversal/htcuniversal_udc.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_udc.c 2008-01-20 18:59:46.000000000 +0000
++++ linux-2.6.24/arch/arm/mach-pxa/htcuniversal/htcuniversal_udc.c 2008-03-10 16:09:23.000000000 +0000
@@ -0,0 +1,71 @@
+
+/*
@@ -3402,10 +3402,10 @@ Index: linux-2.6.23/arch/arm/mach-pxa/htcuniversal/htcuniversal_udc.c
+
+module_init(htcuniversal_udc_init);
+MODULE_LICENSE("GPL");
-Index: linux-2.6.23/arch/arm/mach-pxa/htcuniversal/tsc2046_ts.h
+Index: linux-2.6.24/arch/arm/mach-pxa/htcuniversal/tsc2046_ts.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/arch/arm/mach-pxa/htcuniversal/tsc2046_ts.h 2008-01-20 18:59:46.000000000 +0000
++++ linux-2.6.24/arch/arm/mach-pxa/htcuniversal/tsc2046_ts.h 2008-03-10 16:09:23.000000000 +0000
@@ -0,0 +1,20 @@
+/*
+ * temporary TSC2046 touchscreen hack
@@ -3427,13 +3427,13 @@ Index: linux-2.6.23/arch/arm/mach-pxa/htcuniversal/tsc2046_ts.h
+#define TSC2046_SAMPLE_Y 0x90
+
+#endif
-Index: linux-2.6.23/arch/arm/mach-pxa/Kconfig
+Index: linux-2.6.24/arch/arm/mach-pxa/Kconfig
===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/Kconfig 2008-01-20 18:59:41.000000000 +0000
-+++ linux-2.6.23/arch/arm/mach-pxa/Kconfig 2008-01-20 18:59:46.000000000 +0000
-@@ -92,6 +92,14 @@ config MACH_HX2750
- help
- This enables support for the HP iPAQ HX2750 handheld.
+--- linux-2.6.24.orig/arch/arm/mach-pxa/Kconfig 2008-03-10 16:08:01.000000000 +0000
++++ linux-2.6.24/arch/arm/mach-pxa/Kconfig 2008-03-10 16:09:23.000000000 +0000
+@@ -92,6 +92,14 @@
+ bool "Sharp PXA270 models (SL-Cxx00)"
+ select PXA27x
+config MACH_HTCUNIVERSAL
+ bool "HTC Universal"
@@ -3446,7 +3446,7 @@ Index: linux-2.6.23/arch/arm/mach-pxa/Kconfig
endchoice
endif
-@@ -111,6 +119,86 @@ endchoice
+@@ -111,6 +119,86 @@
endif
@@ -3533,16 +3533,16 @@ Index: linux-2.6.23/arch/arm/mach-pxa/Kconfig
endmenu
config MACH_POODLE
-@@ -196,4 +284,3 @@ config PXA_KEYS
+@@ -196,4 +284,3 @@
depends on (PXA25x || PXA27x) && INPUT
endif
-
-Index: linux-2.6.23/arch/arm/mach-pxa/Makefile
+Index: linux-2.6.24/arch/arm/mach-pxa/Makefile
===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/Makefile 2008-01-20 18:59:41.000000000 +0000
-+++ linux-2.6.23/arch/arm/mach-pxa/Makefile 2008-01-20 18:59:46.000000000 +0000
-@@ -23,6 +23,7 @@ obj-$(CONFIG_MACH_POODLE) += poodle.o co
+--- linux-2.6.24.orig/arch/arm/mach-pxa/Makefile 2008-03-10 16:08:01.000000000 +0000
++++ linux-2.6.24/arch/arm/mach-pxa/Makefile 2008-03-10 16:09:23.000000000 +0000
+@@ -23,6 +23,7 @@
obj-$(CONFIG_MACH_TOSA) += tosa.o
obj-$(CONFIG_MACH_EM_X270) += em-x270.o
obj-$(CONFIG_MACH_HX2750) += hx2750.o hx2750_test.o
@@ -3550,11 +3550,11 @@ Index: linux-2.6.23/arch/arm/mach-pxa/Makefile
ifeq ($(CONFIG_MACH_ZYLONITE),y)
obj-y += zylonite.o
-Index: linux-2.6.23/drivers/leds/Kconfig
+Index: linux-2.6.24/drivers/leds/Kconfig
===================================================================
---- linux-2.6.23.orig/drivers/leds/Kconfig 2008-01-20 18:59:17.000000000 +0000
-+++ linux-2.6.23/drivers/leds/Kconfig 2008-01-20 18:59:46.000000000 +0000
-@@ -114,6 +114,13 @@ config LEDS_CM_X270
+--- linux-2.6.24.orig/drivers/leds/Kconfig 2008-01-24 22:58:37.000000000 +0000
++++ linux-2.6.24/drivers/leds/Kconfig 2008-03-10 16:09:23.000000000 +0000
+@@ -114,6 +114,13 @@
help
This option enables support for the CM-X270 LEDs.
@@ -3568,10 +3568,10 @@ Index: linux-2.6.23/drivers/leds/Kconfig
comment "LED Triggers"
config LEDS_TRIGGERS
-Index: linux-2.6.23/drivers/leds/leds-asic3.c
+Index: linux-2.6.24/drivers/leds/leds-asic3.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/drivers/leds/leds-asic3.c 2008-01-20 18:59:46.000000000 +0000
++++ linux-2.6.24/drivers/leds/leds-asic3.c 2008-03-10 16:09:23.000000000 +0000
@@ -0,0 +1,189 @@
+/*
+ * LEDs support for HTC ASIC3 devices.
@@ -3762,11 +3762,11 @@ Index: linux-2.6.23/drivers/leds/leds-asic3.c
+MODULE_AUTHOR("Anton Vorontsov <cbou@mail.ru>");
+MODULE_DESCRIPTION("HTC ASIC3 LEDs driver");
+MODULE_LICENSE("GPL");
-Index: linux-2.6.23/drivers/mfd/Kconfig
+Index: linux-2.6.24/drivers/mfd/Kconfig
===================================================================
---- linux-2.6.23.orig/drivers/mfd/Kconfig 2008-01-20 18:59:38.000000000 +0000
-+++ linux-2.6.23/drivers/mfd/Kconfig 2008-01-20 18:59:46.000000000 +0000
-@@ -21,6 +21,16 @@ config MFD_TSC2101
+--- linux-2.6.24.orig/drivers/mfd/Kconfig 2008-03-10 16:07:51.000000000 +0000
++++ linux-2.6.24/drivers/mfd/Kconfig 2008-03-10 16:09:23.000000000 +0000
+@@ -21,6 +21,16 @@
help
Support for TI TSC2101 Touchscreen and Audio Codec
@@ -3783,10 +3783,10 @@ Index: linux-2.6.23/drivers/mfd/Kconfig
endmenu
menu "Multimedia Capabilities Port drivers"
-Index: linux-2.6.23/drivers/mfd/Makefile
+Index: linux-2.6.24/drivers/mfd/Makefile
===================================================================
---- linux-2.6.23.orig/drivers/mfd/Makefile 2008-01-20 18:59:38.000000000 +0000
-+++ linux-2.6.23/drivers/mfd/Makefile 2008-01-20 18:59:46.000000000 +0000
+--- linux-2.6.24.orig/drivers/mfd/Makefile 2008-03-10 16:07:51.000000000 +0000
++++ linux-2.6.24/drivers/mfd/Makefile 2008-03-10 16:09:23.000000000 +0000
@@ -2,6 +2,8 @@
# Makefile for multifunction miscellaneous devices
#
@@ -3796,10 +3796,10 @@ Index: linux-2.6.23/drivers/mfd/Makefile
obj-$(CONFIG_MFD_SM501) += sm501.o
obj-$(CONFIG_MCP) += mcp-core.o
-Index: linux-2.6.23/drivers/mfd/asic3_base.c
+Index: linux-2.6.24/drivers/mfd/asic3_base.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/drivers/mfd/asic3_base.c 2008-01-20 18:59:46.000000000 +0000
++++ linux-2.6.24/drivers/mfd/asic3_base.c 2008-03-10 16:09:23.000000000 +0000
@@ -0,0 +1,1208 @@
+/*
+ * Driver interface to HTC "ASIC3"
@@ -5009,10 +5009,10 @@ Index: linux-2.6.23/drivers/mfd/asic3_base.c
+MODULE_AUTHOR("Phil Blundell <pb@handhelds.org>");
+MODULE_DESCRIPTION("Core driver for HTC ASIC3");
+MODULE_SUPPORTED_DEVICE("asic3");
-Index: linux-2.6.23/drivers/mfd/soc-core.c
+Index: linux-2.6.24/drivers/mfd/soc-core.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/drivers/mfd/soc-core.c 2008-01-20 18:59:46.000000000 +0000
++++ linux-2.6.24/drivers/mfd/soc-core.c 2008-03-10 16:09:23.000000000 +0000
@@ -0,0 +1,106 @@
+/*
+ * drivers/soc/soc-core.c
@@ -5089,7 +5089,7 @@ Index: linux-2.6.23/drivers/mfd/soc-core.c
+ if (blk->res[r].flags & IORESOURCE_MEM) {
+ base = mem->start;
+ } else if ((blk->res[r].flags & IORESOURCE_IRQ) &&
-+ (blk->res[r].flags & IORESOURCE_IRQ_SOC_SUBDEVICE)) {
++ (blk->res[r].flags & IORESOURCE_IRQ_MFD_SUBDEVICE)) {
+ base = irq_base;
+ }
+
@@ -5120,10 +5120,10 @@ Index: linux-2.6.23/drivers/mfd/soc-core.c
+ return NULL;
+}
+EXPORT_SYMBOL_GPL(soc_add_devices);
-Index: linux-2.6.23/drivers/mfd/soc-core.h
+Index: linux-2.6.24/drivers/mfd/soc-core.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/drivers/mfd/soc-core.h 2008-01-20 18:59:46.000000000 +0000
++++ linux-2.6.24/drivers/mfd/soc-core.h 2008-03-10 16:09:23.000000000 +0000
@@ -0,0 +1,30 @@
+/*
+ * drivers/soc/soc-core.h
@@ -5155,10 +5155,10 @@ Index: linux-2.6.23/drivers/mfd/soc-core.h
+
+void soc_free_devices(struct platform_device *devices, int nr_devs);
+
-Index: linux-2.6.23/include/asm-arm/arch-pxa/clock.h
+Index: linux-2.6.24/include/asm-arm/arch-pxa/clock.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/include/asm-arm/arch-pxa/clock.h 2008-01-20 18:59:46.000000000 +0000
++++ linux-2.6.24/include/asm-arm/arch-pxa/clock.h 2008-03-10 16:09:23.000000000 +0000
@@ -0,0 +1,27 @@
+/*
+ * linux/include/asm-arm/arch-pxa/clock.h
@@ -5187,10 +5187,10 @@ Index: linux-2.6.23/include/asm-arm/arch-pxa/clock.h
+
+extern int clk_register(struct clk *clk);
+extern void clk_unregister(struct clk *clk);
-Index: linux-2.6.23/include/asm-arm/arch-pxa/htcuniversal-asic.h
+Index: linux-2.6.24/include/asm-arm/arch-pxa/htcuniversal-asic.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/include/asm-arm/arch-pxa/htcuniversal-asic.h 2008-01-20 18:59:46.000000000 +0000
++++ linux-2.6.24/include/asm-arm/arch-pxa/htcuniversal-asic.h 2008-03-10 16:09:23.000000000 +0000
@@ -0,0 +1,213 @@
+/*
+ * include/asm/arm/arch-pxa/htcuniversal-asic.h
@@ -5405,10 +5405,10 @@ Index: linux-2.6.23/include/asm-arm/arch-pxa/htcuniversal-asic.h
+
+#endif /* _HTCUNIVERSAL_ASIC_H_ */
+
-Index: linux-2.6.23/include/asm-arm/arch-pxa/htcuniversal-gpio.h
+Index: linux-2.6.24/include/asm-arm/arch-pxa/htcuniversal-gpio.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/include/asm-arm/arch-pxa/htcuniversal-gpio.h 2008-01-20 18:59:46.000000000 +0000
++++ linux-2.6.24/include/asm-arm/arch-pxa/htcuniversal-gpio.h 2008-03-10 16:09:23.000000000 +0000
@@ -0,0 +1,220 @@
+/*
+ * include/asm-arm/arch-pxa/htcuniversal-gpio.h
@@ -5630,10 +5630,10 @@ Index: linux-2.6.23/include/asm-arm/arch-pxa/htcuniversal-gpio.h
+#define GPIO_NR_HTCUNIVERSAL_I2C_SDA_MD (118 | GPIO_ALT_FN_1_OUT)
+
+#endif /* _HTCUNIVERSAL_GPIO_H */
-Index: linux-2.6.23/include/asm-arm/arch-pxa/htcuniversal-init.h
+Index: linux-2.6.24/include/asm-arm/arch-pxa/htcuniversal-init.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/include/asm-arm/arch-pxa/htcuniversal-init.h 2008-01-20 18:59:46.000000000 +0000
++++ linux-2.6.24/include/asm-arm/arch-pxa/htcuniversal-init.h 2008-03-10 16:09:23.000000000 +0000
@@ -0,0 +1,14 @@
+/*
+ * include/asm/arm/arch-pxa/htcuniversal-init.h
@@ -5649,18 +5649,18 @@ Index: linux-2.6.23/include/asm-arm/arch-pxa/htcuniversal-init.h
+
+#endif /* _HTCUNIVERSAL_INIT_H_ */
+
-Index: linux-2.6.23/include/asm-arm/arch-pxa/htcuniversal.h
+Index: linux-2.6.24/include/asm-arm/arch-pxa/htcuniversal.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/include/asm-arm/arch-pxa/htcuniversal.h 2008-01-20 18:59:46.000000000 +0000
++++ linux-2.6.24/include/asm-arm/arch-pxa/htcuniversal.h 2008-03-10 16:09:23.000000000 +0000
@@ -0,0 +1,3 @@
+#include <asm/arch/irqs.h>
+
+#define HTCUNIVERSAL_ASIC3_IRQ_BASE IRQ_BOARD_START
-Index: linux-2.6.23/include/asm-arm/arch-pxa/pxa-pm_ll.h
+Index: linux-2.6.24/include/asm-arm/arch-pxa/pxa-pm_ll.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/include/asm-arm/arch-pxa/pxa-pm_ll.h 2008-01-20 18:59:46.000000000 +0000
++++ linux-2.6.24/include/asm-arm/arch-pxa/pxa-pm_ll.h 2008-03-10 16:09:23.000000000 +0000
@@ -0,0 +1,6 @@
+struct pxa_ll_pm_ops {
+ void (*suspend)(unsigned long);
@@ -5668,10 +5668,10 @@ Index: linux-2.6.23/include/asm-arm/arch-pxa/pxa-pm_ll.h
+};
+
+extern struct pxa_ll_pm_ops *pxa_pm_set_ll_ops(struct pxa_ll_pm_ops *new_ops);
-Index: linux-2.6.23/include/asm-arm/hardware/asic3_keys.h
+Index: linux-2.6.24/include/asm-arm/hardware/asic3_keys.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/include/asm-arm/hardware/asic3_keys.h 2008-01-20 18:59:46.000000000 +0000
++++ linux-2.6.24/include/asm-arm/hardware/asic3_keys.h 2008-03-10 16:09:23.000000000 +0000
@@ -0,0 +1,18 @@
+#include <linux/input.h>
+
@@ -5691,10 +5691,10 @@ Index: linux-2.6.23/include/asm-arm/hardware/asic3_keys.h
+ struct input_dev *input;
+ struct device *asic3_dev;
+};
-Index: linux-2.6.23/include/asm-arm/hardware/asic3_leds.h
+Index: linux-2.6.24/include/asm-arm/hardware/asic3_leds.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/include/asm-arm/hardware/asic3_leds.h 2008-01-20 18:59:46.000000000 +0000
++++ linux-2.6.24/include/asm-arm/hardware/asic3_leds.h 2008-03-10 16:09:23.000000000 +0000
@@ -0,0 +1,34 @@
+/*
+ * LEDs support for HTC ASIC3 devices.
@@ -5730,10 +5730,10 @@ Index: linux-2.6.23/include/asm-arm/hardware/asic3_leds.h
+extern int asic3_leds_register(void);
+extern void asic3_leds_unregister(void);
+
-Index: linux-2.6.23/include/asm-arm/hardware/ipaq-asic3.h
+Index: linux-2.6.24/include/asm-arm/hardware/ipaq-asic3.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/include/asm-arm/hardware/ipaq-asic3.h 2008-01-20 18:59:46.000000000 +0000
++++ linux-2.6.24/include/asm-arm/hardware/ipaq-asic3.h 2008-03-10 16:09:23.000000000 +0000
@@ -0,0 +1,602 @@
+/*
+ *
@@ -6337,10 +6337,10 @@ Index: linux-2.6.23/include/asm-arm/hardware/ipaq-asic3.h
+#define IPAQ_ASIC3_MAP_SIZE 0x2000
+
+#endif
-Index: linux-2.6.23/include/linux/gpiodev.h
+Index: linux-2.6.24/include/linux/gpiodev.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/include/linux/gpiodev.h 2008-01-20 18:59:46.000000000 +0000
++++ linux-2.6.24/include/linux/gpiodev.h 2008-03-10 16:09:23.000000000 +0000
@@ -0,0 +1,44 @@
+#ifndef __GPIODEV_H
+#define __GPIODEV_H
@@ -6386,10 +6386,10 @@ Index: linux-2.6.23/include/linux/gpiodev.h
+}
+
+#endif /* __GPIODEV_H */
-Index: linux-2.6.23/include/linux/input_pda.h
+Index: linux-2.6.24/include/linux/input_pda.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/include/linux/input_pda.h 2008-01-20 18:59:46.000000000 +0000
++++ linux-2.6.24/include/linux/input_pda.h 2008-03-10 16:09:23.000000000 +0000
@@ -0,0 +1,47 @@
+#ifndef _INPUT_PDA_H
+#define _INPUT_PDA_H
@@ -6438,10 +6438,10 @@ Index: linux-2.6.23/include/linux/input_pda.h
+#define _KEY_HOMEPAGE _KEY_APP4
+
+#endif
-Index: linux-2.6.23/include/linux/soc/asic3_base.h
+Index: linux-2.6.24/include/linux/soc/asic3_base.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/include/linux/soc/asic3_base.h 2008-01-20 18:59:46.000000000 +0000
++++ linux-2.6.24/include/linux/soc/asic3_base.h 2008-03-10 16:09:23.000000000 +0000
@@ -0,0 +1,104 @@
+#include <asm/types.h>
+#include <linux/gpiodev.h>
@@ -6547,10 +6547,10 @@ Index: linux-2.6.23/include/linux/soc/asic3_base.h
+
+ struct tmio_mmc_hwconfig *tmio_mmc_hwconfig;
+};
-Index: linux-2.6.23/include/linux/soc/tmio_mmc.h
+Index: linux-2.6.24/include/linux/soc/tmio_mmc.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/include/linux/soc/tmio_mmc.h 2008-01-20 18:59:46.000000000 +0000
++++ linux-2.6.24/include/linux/soc/tmio_mmc.h 2008-03-10 16:09:23.000000000 +0000
@@ -0,0 +1,17 @@
+#include <linux/platform_device.h>
+
@@ -6569,10 +6569,10 @@ Index: linux-2.6.23/include/linux/soc/tmio_mmc.h
+ int (*mmc_get_ro)(struct platform_device *pdev);
+ short address_shift;
+};
-Index: linux-2.6.23/include/asm-arm/arch-pxa/pxa-regs.h
+Index: linux-2.6.24/include/asm-arm/arch-pxa/pxa-regs.h
===================================================================
---- linux-2.6.23.orig/include/asm-arm/arch-pxa/pxa-regs.h 2008-01-20 18:59:40.000000000 +0000
-+++ linux-2.6.23/include/asm-arm/arch-pxa/pxa-regs.h 2008-01-20 18:59:46.000000000 +0000
+--- linux-2.6.24.orig/include/asm-arm/arch-pxa/pxa-regs.h 2008-03-10 16:07:59.000000000 +0000
++++ linux-2.6.24/include/asm-arm/arch-pxa/pxa-regs.h 2008-03-10 16:09:23.000000000 +0000
@@ -2058,6 +2058,8 @@
#define LDCMD_SOFINT (1 << 22)
#define LDCMD_EOFINT (1 << 21)
@@ -6582,25 +6582,11 @@ Index: linux-2.6.23/include/asm-arm/arch-pxa/pxa-regs.h
#define LCCR5_SOFM1 (1<<0) /* Start Of Frame Mask for Overlay 1 (channel 1) */
#define LCCR5_SOFM2 (1<<1) /* Start Of Frame Mask for Overlay 2 (channel 2) */
-Index: linux-2.6.23/drivers/mmc/host/Kconfig
-===================================================================
---- linux-2.6.23.orig/drivers/mmc/host/Kconfig 2008-01-20 18:59:18.000000000 +0000
-+++ linux-2.6.23/drivers/mmc/host/Kconfig 2008-01-20 18:59:46.000000000 +0000
-@@ -130,3 +130,9 @@ config MMC_SPI
-
- If unsure, or if your system has no SPI master driver, say N.
-
-+config MMC_ASIC3
-+ tristate "HTC ASIC3 SD/MMC support"
-+ depends on MMC && HTC_ASIC3
-+ help
-+ This provides support for the ASIC3 SD/MMC controller, used
-+ in the iPAQ hx4700 and others.
-Index: linux-2.6.23/drivers/mmc/host/Makefile
+Index: linux-2.6.24/drivers/mmc/host/Makefile
===================================================================
---- linux-2.6.23.orig/drivers/mmc/host/Makefile 2008-01-20 18:59:18.000000000 +0000
-+++ linux-2.6.23/drivers/mmc/host/Makefile 2008-01-20 21:12:10.000000000 +0000
-@@ -13,6 +13,7 @@ obj-$(CONFIG_MMC_SDHCI) += sdhci.o
+--- linux-2.6.24.orig/drivers/mmc/host/Makefile 2008-01-24 22:58:37.000000000 +0000
++++ linux-2.6.24/drivers/mmc/host/Makefile 2008-03-10 16:09:23.000000000 +0000
+@@ -13,6 +13,7 @@
obj-$(CONFIG_MMC_RICOH_MMC) += ricoh_mmc.o
obj-$(CONFIG_MMC_WBSD) += wbsd.o
obj-$(CONFIG_MMC_AU1X) += au1xmmc.o
@@ -6608,10 +6594,10 @@ Index: linux-2.6.23/drivers/mmc/host/Makefile
obj-$(CONFIG_MMC_OMAP) += omap.o
obj-$(CONFIG_MMC_AT91) += at91_mci.o
obj-$(CONFIG_MMC_TIFM_SD) += tifm_sd.o
-Index: linux-2.6.23/drivers/mmc/host/asic3_mmc.c
+Index: linux-2.6.24/drivers/mmc/host/asic3_mmc.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/drivers/mmc/host/asic3_mmc.c 2008-01-20 18:59:46.000000000 +0000
++++ linux-2.6.24/drivers/mmc/host/asic3_mmc.c 2008-03-10 16:09:23.000000000 +0000
@@ -0,0 +1,900 @@
+/* Note that this driver can likely be merged into the tmio driver, so
+ * consider this code temporary. It works, though.
@@ -7513,10 +7499,10 @@ Index: linux-2.6.23/drivers/mmc/host/asic3_mmc.c
+MODULE_AUTHOR("Aric Blumer, SDG Systems, LLC");
+MODULE_LICENSE("GPL");
+
-Index: linux-2.6.23/drivers/mmc/host/asic3_mmc.h
+Index: linux-2.6.24/drivers/mmc/host/asic3_mmc.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/drivers/mmc/host/asic3_mmc.h 2008-01-20 18:59:46.000000000 +0000
++++ linux-2.6.24/drivers/mmc/host/asic3_mmc.h 2008-03-10 16:09:23.000000000 +0000
@@ -0,0 +1,25 @@
+#ifndef __ASIC3_MMC_H
+#define __ASIC3_MMC_H
@@ -7543,22 +7529,10 @@ Index: linux-2.6.23/drivers/mmc/host/asic3_mmc.h
+#define DONT_CARE_BUFFER_BITS ( SD_CTRL_INTMASKBUFFER_UNK7 | SD_CTRL_INTMASKBUFFER_CMD_BUSY )
+
+#endif // __ASIC3_MMC_H
-Index: linux-2.6.23/drivers/input/keyboard/Makefile
-===================================================================
---- linux-2.6.23.orig/drivers/input/keyboard/Makefile 2008-01-20 18:59:16.000000000 +0000
-+++ linux-2.6.23/drivers/input/keyboard/Makefile 2008-01-20 21:11:40.000000000 +0000
-@@ -15,6 +15,7 @@ obj-$(CONFIG_KEYBOARD_NEWTON) += newton
- obj-$(CONFIG_KEYBOARD_STOWAWAY) += stowaway.o
- obj-$(CONFIG_KEYBOARD_CORGI) += corgikbd.o
- obj-$(CONFIG_KEYBOARD_SPITZ) += spitzkbd.o
-+obj-$(CONFIG_KEYBOARD_ASIC3) += asic3_keys.o
- obj-$(CONFIG_KEYBOARD_HIL) += hil_kbd.o
- obj-$(CONFIG_KEYBOARD_HIL_OLD) += hilkbd.o
- obj-$(CONFIG_KEYBOARD_OMAP) += omap-keypad.o
-Index: linux-2.6.23/drivers/input/keyboard/asic3_keys.c
+Index: linux-2.6.24/drivers/input/keyboard/asic3_keys.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/drivers/input/keyboard/asic3_keys.c 2008-01-20 18:59:46.000000000 +0000
++++ linux-2.6.24/drivers/input/keyboard/asic3_keys.c 2008-03-10 16:09:23.000000000 +0000
@@ -0,0 +1,131 @@
+/*
+ * Generic buttons driver for ASIC3 SoC.
@@ -7691,10 +7665,10 @@ Index: linux-2.6.23/drivers/input/keyboard/asic3_keys.c
+MODULE_AUTHOR("Joshua Wise, Pawel Kolodziejski, Paul Sokolovsky");
+MODULE_DESCRIPTION("Buttons driver for HTC ASIC3 SoC");
+MODULE_LICENSE("GPL");
-Index: linux-2.6.23/include/asm-arm/arch-pxa/irqs.h
+Index: linux-2.6.24/include/asm-arm/arch-pxa/irqs.h
===================================================================
---- linux-2.6.23.orig/include/asm-arm/arch-pxa/irqs.h 2008-01-20 18:59:28.000000000 +0000
-+++ linux-2.6.23/include/asm-arm/arch-pxa/irqs.h 2008-01-20 18:59:46.000000000 +0000
+--- linux-2.6.24.orig/include/asm-arm/arch-pxa/irqs.h 2008-01-24 22:58:37.000000000 +0000
++++ linux-2.6.24/include/asm-arm/arch-pxa/irqs.h 2008-03-10 16:09:23.000000000 +0000
@@ -182,6 +182,8 @@
defined(CONFIG_MACH_LOGICPD_PXA270) || \
defined(CONFIG_MACH_MAINSTONE)
@@ -7704,22 +7678,10 @@ Index: linux-2.6.23/include/asm-arm/arch-pxa/irqs.h
#else
#define NR_IRQS (IRQ_BOARD_START)
#endif
-Index: linux-2.6.23/include/linux/ioport.h
-===================================================================
---- linux-2.6.23.orig/include/linux/ioport.h 2008-01-20 18:59:31.000000000 +0000
-+++ linux-2.6.23/include/linux/ioport.h 2008-01-20 18:59:46.000000000 +0000
-@@ -56,6 +56,7 @@ struct resource_list {
- #define IORESOURCE_IRQ_HIGHLEVEL (1<<2)
- #define IORESOURCE_IRQ_LOWLEVEL (1<<3)
- #define IORESOURCE_IRQ_SHAREABLE (1<<4)
-+#define IORESOURCE_IRQ_SOC_SUBDEVICE (1<<5)
-
- /* ISA PnP DMA specific bits (IORESOURCE_BITS) */
- #define IORESOURCE_DMA_TYPE_MASK (3<<0)
-Index: linux-2.6.23/include/asm-arm/arch-pxa/serial.h
+Index: linux-2.6.24/include/asm-arm/arch-pxa/serial.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.23/include/asm-arm/arch-pxa/serial.h 2008-01-20 18:59:46.000000000 +0000
++++ linux-2.6.24/include/asm-arm/arch-pxa/serial.h 2008-03-10 16:09:23.000000000 +0000
@@ -0,0 +1,78 @@
+/*
+ * linux/include/asm-arm/arch-pxa/serial.h
@@ -7799,10 +7761,10 @@ Index: linux-2.6.23/include/asm-arm/arch-pxa/serial.h
+void pxa_set_btuart_info(struct platform_pxa_serial_funcs *btuart_funcs);
+void pxa_set_stuart_info(struct platform_pxa_serial_funcs *stuart_funcs);
+void pxa_set_hwuart_info(struct platform_pxa_serial_funcs *hwuart_funcs);
-Index: linux-2.6.23/drivers/serial/pxa.c
+Index: linux-2.6.24/drivers/serial/pxa.c
===================================================================
---- linux-2.6.23.orig/drivers/serial/pxa.c 2008-01-20 18:59:23.000000000 +0000
-+++ linux-2.6.23/drivers/serial/pxa.c 2008-01-20 18:59:46.000000000 +0000
+--- linux-2.6.24.orig/drivers/serial/pxa.c 2008-01-24 22:58:37.000000000 +0000
++++ linux-2.6.24/drivers/serial/pxa.c 2008-03-10 16:09:23.000000000 +0000
@@ -47,6 +47,7 @@
#include <asm/io.h>
#include <asm/hardware.h>
@@ -7811,7 +7773,7 @@ Index: linux-2.6.23/drivers/serial/pxa.c
#include <asm/arch/pxa-regs.h>
-@@ -60,6 +61,14 @@ struct uart_pxa_port {
+@@ -60,6 +61,14 @@
char *name;
};
@@ -7826,7 +7788,7 @@ Index: linux-2.6.23/drivers/serial/pxa.c
static inline unsigned int serial_in(struct uart_pxa_port *up, int offset)
{
offset <<= 2;
-@@ -347,6 +356,9 @@ static int serial_pxa_startup(struct uar
+@@ -347,6 +356,9 @@
unsigned long flags;
int retval;
@@ -7836,7 +7798,7 @@ Index: linux-2.6.23/drivers/serial/pxa.c
if (port->line == 3) /* HWUART */
up->mcr |= UART_MCR_AFE;
else
-@@ -404,6 +416,12 @@ static int serial_pxa_startup(struct uar
+@@ -404,6 +416,12 @@
(void) serial_in(up, UART_IIR);
(void) serial_in(up, UART_MSR);
@@ -7849,7 +7811,7 @@ Index: linux-2.6.23/drivers/serial/pxa.c
return 0;
}
-@@ -412,6 +430,8 @@ static void serial_pxa_shutdown(struct u
+@@ -412,6 +430,8 @@
struct uart_pxa_port *up = (struct uart_pxa_port *)port;
unsigned long flags;
@@ -7858,7 +7820,7 @@ Index: linux-2.6.23/drivers/serial/pxa.c
free_irq(up->port.irq, up);
/*
-@@ -433,6 +453,8 @@ static void serial_pxa_shutdown(struct u
+@@ -433,6 +453,8 @@
UART_FCR_CLEAR_RCVR |
UART_FCR_CLEAR_XMIT);
serial_out(up, UART_FCR, 0);
@@ -7867,10 +7829,10 @@ Index: linux-2.6.23/drivers/serial/pxa.c
}
static void
-Index: linux-2.6.23/arch/arm/mach-pxa/generic.c
+Index: linux-2.6.24/arch/arm/mach-pxa/generic.c
===================================================================
---- linux-2.6.23.orig/arch/arm/mach-pxa/generic.c 2008-01-20 18:59:09.000000000 +0000
-+++ linux-2.6.23/arch/arm/mach-pxa/generic.c 2008-01-20 18:59:46.000000000 +0000
+--- linux-2.6.24.orig/arch/arm/mach-pxa/generic.c 2008-01-24 22:58:37.000000000 +0000
++++ linux-2.6.24/arch/arm/mach-pxa/generic.c 2008-03-10 16:09:23.000000000 +0000
@@ -38,6 +38,7 @@
#include <asm/arch/mmc.h>
#include <asm/arch/irda.h>
@@ -7879,7 +7841,7 @@ Index: linux-2.6.23/arch/arm/mach-pxa/generic.c
#include "devices.h"
#include "generic.h"
-@@ -412,6 +413,18 @@ struct platform_device pxa_device_hwuart
+@@ -412,6 +413,18 @@
.num_resources = ARRAY_SIZE(pxa_resource_hwuart),
};
@@ -7898,11 +7860,11 @@ Index: linux-2.6.23/arch/arm/mach-pxa/generic.c
static struct resource pxai2c_resources[] = {
{
.start = 0x40301680,
-Index: linux-2.6.23/drivers/leds/Makefile
+Index: linux-2.6.24/drivers/leds/Makefile
===================================================================
---- linux-2.6.23.orig/drivers/leds/Makefile 2008-01-20 18:59:17.000000000 +0000
-+++ linux-2.6.23/drivers/leds/Makefile 2008-01-20 21:10:45.000000000 +0000
-@@ -15,6 +15,7 @@ obj-$(CONFIG_LEDS_AMS_DELTA) += leds-am
+--- linux-2.6.24.orig/drivers/leds/Makefile 2008-01-24 22:58:37.000000000 +0000
++++ linux-2.6.24/drivers/leds/Makefile 2008-03-10 16:09:23.000000000 +0000
+@@ -15,6 +15,7 @@
obj-$(CONFIG_LEDS_NET48XX) += leds-net48xx.o
obj-$(CONFIG_LEDS_WRAP) += leds-wrap.o
obj-$(CONFIG_LEDS_H1940) += leds-h1940.o
@@ -7910,11 +7872,11 @@ Index: linux-2.6.23/drivers/leds/Makefile
obj-$(CONFIG_LEDS_COBALT_QUBE) += leds-cobalt-qube.o
obj-$(CONFIG_LEDS_COBALT_RAQ) += leds-cobalt-raq.o
obj-$(CONFIG_LEDS_GPIO) += leds-gpio.o
-Index: linux-2.6.23/drivers/input/keyboard/Kconfig
+Index: linux-2.6.24/drivers/input/keyboard/Kconfig
===================================================================
---- linux-2.6.23.orig/drivers/input/keyboard/Kconfig 2008-01-20 18:59:16.000000000 +0000
-+++ linux-2.6.23/drivers/input/keyboard/Kconfig 2008-01-20 18:59:46.000000000 +0000
-@@ -293,4 +293,11 @@ config KEYBOARD_BFIN
+--- linux-2.6.24.orig/drivers/input/keyboard/Kconfig 2008-01-24 22:58:37.000000000 +0000
++++ linux-2.6.24/drivers/input/keyboard/Kconfig 2008-03-10 16:09:23.000000000 +0000
+@@ -293,4 +293,11 @@
To compile this driver as a module, choose M here: the
module will be called bf54x-keys.
@@ -7926,3 +7888,33 @@ Index: linux-2.6.23/drivers/input/keyboard/Kconfig
+ HTC ASIC3 peripheral controller.
+
endif
+Index: linux-2.6.24/drivers/mmc/host/Kconfig
+===================================================================
+--- linux-2.6.24.orig/drivers/mmc/host/Kconfig 2008-01-24 22:58:37.000000000 +0000
++++ linux-2.6.24/drivers/mmc/host/Kconfig 2008-03-10 16:09:59.000000000 +0000
+@@ -24,6 +24,13 @@
+
+ If unsure, say N.
+
++config MMC_ASIC3
++ tristate "HTC ASIC3 SD/MMC support"
++ depends on MMC && HTC_ASIC3
++ help
++ This provides support for the ASIC3 SD/MMC controller, used
++ in the iPAQ hx4700 and others.
++
+ config MMC_SDHCI
+ tristate "Secure Digital Host Controller Interface support (EXPERIMENTAL)"
+ depends on PCI && EXPERIMENTAL
+Index: linux-2.6.24/drivers/input/keyboard/Makefile
+===================================================================
+--- linux-2.6.24.orig/drivers/input/keyboard/Makefile 2008-01-24 22:58:37.000000000 +0000
++++ linux-2.6.24/drivers/input/keyboard/Makefile 2008-03-10 16:10:28.000000000 +0000
+@@ -6,6 +6,7 @@
+
+ obj-$(CONFIG_KEYBOARD_ATKBD) += atkbd.o
+ obj-$(CONFIG_KEYBOARD_SUNKBD) += sunkbd.o
++obj-$(CONFIG_KEYBOARD_ASIC3) += asic3_keys.o
+ obj-$(CONFIG_KEYBOARD_LKKBD) += lkkbd.o
+ obj-$(CONFIG_KEYBOARD_XTKBD) += xtkbd.o
+ obj-$(CONFIG_KEYBOARD_AMIGA) += amikbd.o
diff --git a/meta/packages/linux/linux-rp-2.6.24/pxa27x-resume.patch b/meta/packages/linux/linux-rp-2.6.24/pxa27x-resume.patch
new file mode 100644
index 000000000..6447a0b10
--- /dev/null
+++ b/meta/packages/linux/linux-rp-2.6.24/pxa27x-resume.patch
@@ -0,0 +1,41 @@
+List: linux-arm-kernel
+Subject: [PATCH] Fix PXA27x resume
+From: Russell King - ARM Linux <linux@arm.linux.org.uk>
+Date: 2008-01-21 13:53:31
+Message-ID: 20080121135331.GC30149@flint.arm.linux.org.uk
+[Download message RAW]
+
+When PXA27x wakes up, tick_resume_oneshot() tries to set a timer
+interrupt to occur immediately. Since PXA27x requires at least
+MIN_OSCR_DELTA, this causes us to flag an error.
+
+tick_program_event() then increments the next event time by
+min_delta_ns. However, by the time we get back to programming
+the next event, the OSCR has incremented such that we fail again.
+We repeatedly retry, but the OSCR is too fast for us - we never
+catch up, so we never break out of the loop - resulting in us
+never apparantly resuming.
+
+Fix this by doubling min_delta_ns.
+
+Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
+
+diff --git a/arch/arm/mach-pxa/time.c b/arch/arm/mach-pxa/time.c
+index ac0bbad..7b7c017 100644
+--- a/arch/arm/mach-pxa/time.c
++++ b/arch/arm/mach-pxa/time.c
+@@ -169,7 +169,7 @@ static void __init pxa_timer_init(void)
+ ckevt_pxa_osmr0.max_delta_ns =
+ clockevent_delta2ns(0x7fffffff, &ckevt_pxa_osmr0);
+ ckevt_pxa_osmr0.min_delta_ns =
+- clockevent_delta2ns(MIN_OSCR_DELTA, &ckevt_pxa_osmr0) + 1;
++ clockevent_delta2ns(MIN_OSCR_DELTA * 2, &ckevt_pxa_osmr0) + 1;
+
+ cksrc_pxa_oscr0.mult =
+ clocksource_hz2mult(clock_tick_rate, cksrc_pxa_oscr0.shift);
+
+-------------------------------------------------------------------
+List admin: http://lists.arm.linux.org.uk/mailman/listinfo/linux-arm-kernel
+FAQ: http://www.arm.linux.org.uk/mailinglists/faq.php
+Etiquette: http://www.arm.linux.org.uk/mailinglists/etiquette.php
+
diff --git a/meta/packages/linux/linux-rp-2.6.24/pxa2xx_udc-clock.patch b/meta/packages/linux/linux-rp-2.6.24/pxa2xx_udc-clock.patch
new file mode 100644
index 000000000..14c496a31
--- /dev/null
+++ b/meta/packages/linux/linux-rp-2.6.24/pxa2xx_udc-clock.patch
@@ -0,0 +1,221 @@
+---
+ drivers/usb/gadget/pxa2xx_udc.c | 88 ++++++++++++++++++++++------------------
+ drivers/usb/gadget/pxa2xx_udc.h | 4 +
+ 2 files changed, 53 insertions(+), 39 deletions(-)
+
+--- g26.orig/drivers/usb/gadget/pxa2xx_udc.c 2008-02-19 12:47:06.000000000 -0800
++++ g26/drivers/usb/gadget/pxa2xx_udc.c 2008-02-19 14:07:17.000000000 -0800
+@@ -103,6 +103,12 @@ static const char ep0name [] = "ep0";
+ #error "Can't configure both IXP and PXA"
+ #endif
+
++/* IXP doesn't yet support <linux/clk.h> */
++#define clk_get(dev,name) NULL
++#define clk_enable(clk) do { } while (0)
++#define clk_disable(clk) do { } while (0)
++#define clk_put(clk) do { } while (0)
++
+ #endif
+
+ #include "pxa2xx_udc.h"
+@@ -934,20 +940,31 @@ static void udc_disable(struct pxa2xx_ud
+ /* We disable the UDC -- and its 48 MHz clock -- whenever it's not
+ * in active use.
+ */
+-static int pullup(struct pxa2xx_udc *udc, int is_active)
++static int pullup(struct pxa2xx_udc *udc)
+ {
+- is_active = is_active && udc->vbus && udc->pullup;
++ int is_active = udc->vbus && udc->pullup && !udc->suspended;
+ DMSG("%s\n", is_active ? "active" : "inactive");
+- if (is_active)
+- udc_enable(udc);
+- else {
+- if (udc->gadget.speed != USB_SPEED_UNKNOWN) {
+- DMSG("disconnect %s\n", udc->driver
+- ? udc->driver->driver.name
+- : "(no driver)");
+- stop_activity(udc, udc->driver);
++ if (is_active) {
++ if (!udc->active) {
++ udc->active = 1;
++ /* Enable clock for USB device */
++ clk_enable(udc->clk);
++ udc_enable(udc);
+ }
+- udc_disable(udc);
++ } else {
++ if (udc->active) {
++ if (udc->gadget.speed != USB_SPEED_UNKNOWN) {
++ DMSG("disconnect %s\n", udc->driver
++ ? udc->driver->driver.name
++ : "(no driver)");
++ stop_activity(udc, udc->driver);
++ }
++ udc_disable(udc);
++ /* Disable clock for USB device */
++ clk_disable(udc->clk);
++ udc->active = 0;
++ }
++
+ }
+ return 0;
+ }
+@@ -958,9 +975,9 @@ static int pxa2xx_udc_vbus_session(struc
+ struct pxa2xx_udc *udc;
+
+ udc = container_of(_gadget, struct pxa2xx_udc, gadget);
+- udc->vbus = is_active = (is_active != 0);
++ udc->vbus = (is_active != 0);
+ DMSG("vbus %s\n", is_active ? "supplied" : "inactive");
+- pullup(udc, is_active);
++ pullup(udc);
+ return 0;
+ }
+
+@@ -975,9 +992,8 @@ static int pxa2xx_udc_pullup(struct usb_
+ if (!udc->mach->gpio_pullup && !udc->mach->udc_command)
+ return -EOPNOTSUPP;
+
+- is_active = (is_active != 0);
+- udc->pullup = is_active;
+- pullup(udc, is_active);
++ udc->pullup = (is_active != 0);
++ pullup(udc);
+ return 0;
+ }
+
+@@ -1146,11 +1162,6 @@ static void udc_disable(struct pxa2xx_ud
+
+ udc_clear_mask_UDCCR(UDCCR_UDE);
+
+-#ifdef CONFIG_ARCH_PXA
+- /* Disable clock for USB device */
+- clk_disable(dev->clk);
+-#endif
+-
+ ep0_idle (dev);
+ dev->gadget.speed = USB_SPEED_UNKNOWN;
+ }
+@@ -1191,11 +1202,6 @@ static void udc_enable (struct pxa2xx_ud
+ {
+ udc_clear_mask_UDCCR(UDCCR_UDE);
+
+-#ifdef CONFIG_ARCH_PXA
+- /* Enable clock for USB device */
+- clk_enable(dev->clk);
+-#endif
+-
+ /* try to clear these bits before we enable the udc */
+ udc_ack_int_UDCCR(UDCCR_SUSIR|/*UDCCR_RSTIR|*/UDCCR_RESIR);
+
+@@ -1286,7 +1292,7 @@ fail:
+ * for set_configuration as well as eventual disconnect.
+ */
+ DMSG("registered gadget driver '%s'\n", driver->driver.name);
+- pullup(dev, 1);
++ pullup(dev);
+ dump_state(dev);
+ return 0;
+ }
+@@ -1329,7 +1335,8 @@ int usb_gadget_unregister_driver(struct
+ return -EINVAL;
+
+ local_irq_disable();
+- pullup(dev, 0);
++ dev->pullup = 0;
++ pullup(dev);
+ stop_activity(dev, driver);
+ local_irq_enable();
+
+@@ -2131,13 +2138,11 @@ static int __init pxa2xx_udc_probe(struc
+ if (irq < 0)
+ return -ENODEV;
+
+-#ifdef CONFIG_ARCH_PXA
+ dev->clk = clk_get(&pdev->dev, "UDCCLK");
+ if (IS_ERR(dev->clk)) {
+ retval = PTR_ERR(dev->clk);
+ goto err_clk;
+ }
+-#endif
+
+ pr_debug("%s: IRQ %d%s%s\n", driver_name, irq,
+ dev->has_cfr ? "" : " (!cfr)",
+@@ -2250,10 +2255,8 @@ lubbock_fail0:
+ if (dev->mach->gpio_vbus)
+ gpio_free(dev->mach->gpio_vbus);
+ err_gpio_vbus:
+-#ifdef CONFIG_ARCH_PXA
+ clk_put(dev->clk);
+ err_clk:
+-#endif
+ return retval;
+ }
+
+@@ -2269,7 +2272,9 @@ static int __exit pxa2xx_udc_remove(stru
+ if (dev->driver)
+ return -EBUSY;
+
+- udc_disable(dev);
++ dev->pullup = 0;
++ pullup(dev);
++
+ remove_proc_files();
+
+ if (dev->got_irq) {
+@@ -2289,9 +2294,7 @@ static int __exit pxa2xx_udc_remove(stru
+ if (dev->mach->gpio_pullup)
+ gpio_free(dev->mach->gpio_pullup);
+
+-#ifdef CONFIG_ARCH_PXA
+ clk_put(dev->clk);
+-#endif
+
+ platform_set_drvdata(pdev, NULL);
+ the_controller = NULL;
+@@ -2317,10 +2320,15 @@ static int __exit pxa2xx_udc_remove(stru
+ static int pxa2xx_udc_suspend(struct platform_device *dev, pm_message_t state)
+ {
+ struct pxa2xx_udc *udc = platform_get_drvdata(dev);
++ unsigned long flags;
+
+ if (!udc->mach->gpio_pullup && !udc->mach->udc_command)
+ WARN("USB host won't detect disconnect!\n");
+- pullup(udc, 0);
++ udc->suspended = 1;
++
++ local_irq_save(flags);
++ pullup(udc);
++ local_irq_restore(flags);
+
+ return 0;
+ }
+@@ -2328,8 +2336,12 @@ static int pxa2xx_udc_suspend(struct pla
+ static int pxa2xx_udc_resume(struct platform_device *dev)
+ {
+ struct pxa2xx_udc *udc = platform_get_drvdata(dev);
++ unsigned long flags;
+
+- pullup(udc, 1);
++ udc->suspended = 0;
++ local_irq_save(flags);
++ pullup(udc);
++ local_irq_restore(flags);
+
+ return 0;
+ }
+--- g26.orig/drivers/usb/gadget/pxa2xx_udc.h 2008-02-19 12:47:06.000000000 -0800
++++ g26/drivers/usb/gadget/pxa2xx_udc.h 2008-02-19 12:57:42.000000000 -0800
+@@ -119,7 +119,9 @@ struct pxa2xx_udc {
+ has_cfr : 1,
+ req_pending : 1,
+ req_std : 1,
+- req_config : 1;
++ req_config : 1,
++ suspended : 1,
++ active : 1;
+
+ #define start_watchdog(dev) mod_timer(&dev->timer, jiffies + (HZ/200))
+ struct timer_list timer;
+-
diff --git a/meta/packages/linux/linux-rp-2.6.24/sharpsl-rc-r1.patch b/meta/packages/linux/linux-rp-2.6.24/sharpsl-rc-r1.patch
new file mode 100644
index 000000000..bed41c55d
--- /dev/null
+++ b/meta/packages/linux/linux-rp-2.6.24/sharpsl-rc-r1.patch
@@ -0,0 +1,527 @@
+This patch adds support for Sharp CE-RH2 on Spitz.
+
+It is not clean enough to be upstreamed:
+- It is a bit syslog-noisy.
+- Does not support other Zaurus models.
+- Maybe split to more parts:
+ * MAX1111 driver
+ * linear input device
+ * virtual keyboard on top of linear input device
+
+Index: linux-2.6.24/arch/arm/mach-pxa/spitz.c
+===================================================================
+--- linux-2.6.24.orig/arch/arm/mach-pxa/spitz.c 2008-03-10 17:05:37.000000000 +0000
++++ linux-2.6.24/arch/arm/mach-pxa/spitz.c 2008-03-10 17:05:55.000000000 +0000
+@@ -259,6 +259,13 @@
+ .id = -1,
+ };
+
++/*
++ * Spitz Remote Control Device
++ */
++static struct platform_device sharpsl_rc_device = {
++ .name = "sharpsl-remote-control",
++ .id = -1,
++};
+
+ /*
+ * Spitz LEDs
+@@ -548,6 +555,7 @@
+ &spitzscoop_device,
+ &spitzssp_device,
+ &spitzkbd_device,
++ &sharpsl_rc_device,
+ &spitzts_device,
+ &spitzbl_device,
+ &spitzled_device,
+Index: linux-2.6.24/drivers/input/keyboard/Kconfig
+===================================================================
+--- linux-2.6.24.orig/drivers/input/keyboard/Kconfig 2008-03-10 17:05:40.000000000 +0000
++++ linux-2.6.24/drivers/input/keyboard/Kconfig 2008-03-10 17:05:55.000000000 +0000
+@@ -154,6 +154,17 @@
+ To compile this driver as a module, choose M here: the
+ module will be called spitzkbd.
+
++config SHARPSL_RC
++ tristate "Sharp SL-Cxx00 Remote Control"
++ depends on PXA_SHARPSL
++ default y
++ help
++ Say Y here to enable the remote on the Sharp Zaurus SL-Cxx00,
++ SL-C1000, SL-C3000 and Sl-C3100 series of PDAs.
++
++ To compile this driver as a module, choose M here: the
++ module will be called sharpsl_rc.
++
+ config KEYBOARD_AMIGA
+ tristate "Amiga keyboard"
+ depends on AMIGA
+Index: linux-2.6.24/drivers/input/keyboard/Makefile
+===================================================================
+--- linux-2.6.24.orig/drivers/input/keyboard/Makefile 2008-03-10 17:05:40.000000000 +0000
++++ linux-2.6.24/drivers/input/keyboard/Makefile 2008-03-10 17:06:17.000000000 +0000
+@@ -26,3 +26,5 @@
+ obj-$(CONFIG_KEYBOARD_HP7XX) += jornada720_kbd.o
+ obj-$(CONFIG_KEYBOARD_MAPLE) += maple_keyb.o
+ obj-$(CONFIG_KEYBOARD_BFIN) += bf54x-keys.o
++obj-$(CONFIG_SHARPSL_RC) += sharpsl_rc.o
++
+Index: linux-2.6.24/drivers/input/keyboard/sharpsl_rc.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.24/drivers/input/keyboard/sharpsl_rc.c 2008-03-10 17:05:55.000000000 +0000
+@@ -0,0 +1,291 @@
++/*
++ * Keyboard driver for Sharp Clamshell Models (SL-Cxx00)
++ *
++ * Copyright (c) 2004-2005 Richard Purdie
++ *
++ * Based on corgikbd.c and Sharp's RC driver
++ *
++ * 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.
++ *
++ */
++
++#define DEBUG 1
++#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>
++
++#ifdef CONFIG_MACH_SPITZ
++#include <asm/arch/spitz.h>
++#endif
++#ifdef CONFIG_MACH_CORGI
++#include <asm/arch/corgi.h>
++#endif
++
++#include <asm/arch/hardware.h>
++#include <asm/arch/pxa-regs.h>
++#include <asm/hardware/scoop.h>
++#include <asm/arch/sharpsl.h>
++#include <asm/hardware/sharpsl_pm.h>
++
++#define DPRINTK(fmt, args...) dev_dbg(data->dev, fmt "\n", ##args)
++
++struct remote_control_key {
++ unsigned char min;
++ unsigned char max;
++ unsigned char key;
++};
++
++#ifdef CONFIG_MACH_SPITZ
++#define REMOTE_AKIN_PULLUP SPITZ_SCP2_AKIN_PULLUP
++#define REMOTE_SCOOP_DEVICE spitzscoop2_device
++#define REMOTE_GPIO_INT SPITZ_GPIO_AK_INT
++#define REMOTE_IRQ_INT SPITZ_IRQ_GPIO_AK_INT
++static struct remote_control_key remote_keys[] = {
++ { 25, 35, KEY_STOPCD},
++ { 55, 65, KEY_PLAYPAUSE},
++ { 85, 95, KEY_NEXTSONG},
++ { 115, 125, KEY_VOLUMEUP},
++ { 145, 155, KEY_PREVIOUSSONG},
++ { 180, 190, KEY_MUTE},
++ { 215, 225, KEY_VOLUMEDOWN},
++};
++#endif
++#ifdef CONFIG_MACH_CORGI
++#define REMOTE_AKIN_PULLUP CORGI_SCP_AKIN_PULLUP
++#define REMOTE_SCOOP_DEVICE corgiscoop_device
++#define REMOTE_GPIO_INT CORGI_GPIO_AK_INT
++#define REMOTE_IRQ_INT CORGI_IRQ_GPIO_AK_INT
++static struct remote_control_key remote_keys[] = {
++ //These need to be fixed for the CE-RH1's values
++ { 25, 35, KEY_STOPCD},
++ { 55, 65, KEY_PLAYPAUSE},
++ { 85, 95, KEY_NEXTSONG},
++ { 115, 125, KEY_VOLUMEUP},
++ { 145, 155, KEY_PREVIOUSSONG},
++ { 180, 190, KEY_MUTE},
++ { 215, 225, KEY_VOLUMEDOWN},
++};
++#endif
++
++#define RELEASE_HI 230
++#define MAX_EARPHONE 6
++#define RC_POLL_MS 10
++#define RC_FINISH_MS 500
++#define WAIT_STATE 3
++#define NOISE_THRESHOLD 100
++
++struct sharpsl_rc {
++ struct input_dev *input;
++ struct device *dev;
++
++ spinlock_t lock;
++ struct timer_list rctimer;
++ struct timer_list rctimer_finish;
++
++ unsigned int handling_press;
++ unsigned int noise;
++ unsigned int state;
++ unsigned int last_key;
++};
++
++static int get_remocon_raw(void)
++{
++ int i, val;
++
++ val = sharpsl_pm_pxa_read_max1111(MAX1111_REMCOM);
++ for (i = 0; i < ARRAY_SIZE(remote_keys); ++i) {
++ if (val >= remote_keys[i].min
++ && val <= remote_keys[i].max) {
++ printk("get_remocon_raw: VAL=%i, KEY=%i\n", val, remote_keys[i].key);
++ return remote_keys[i].key;
++ }
++ }
++ return 0;
++}
++
++static irqreturn_t sharpsl_rc_interrupt(int irq, void *dev_id, struct pt_regs *regs)
++{
++ struct sharpsl_rc *data = dev_id;
++ DPRINTK("sharpsl_rc_interrupt %d\n", irq);
++ if (!data->handling_press) {
++ DPRINTK("handling interrupt");
++ data->handling_press = 1;
++ data->noise = 0;
++ data->state = 0;
++ data->last_key = 0;
++
++ reset_scoop_gpio(&REMOTE_SCOOP_DEVICE.dev, REMOTE_AKIN_PULLUP);
++
++ mod_timer(&data->rctimer, jiffies + msecs_to_jiffies(RC_POLL_MS));
++ }
++ return IRQ_HANDLED;
++}
++
++static void sharpsl_rc_timer_callback(unsigned long dataPtr)
++{
++ struct sharpsl_rc *data = (struct sharpsl_rc *) dataPtr;
++ int timer = 1;
++ int key = get_remocon_raw();
++ DPRINTK("timer callback, key: %d", key);
++
++ //wait for value to stabilize
++ if (data->state < WAIT_STATE) {
++ if (data->last_key != key) {
++ ++data->noise;
++ if (data->noise > NOISE_THRESHOLD) {
++ DPRINTK("too much noise, bailing");
++ timer = 0;
++ }
++ data->state = 0;
++ } else {
++ ++data->state;
++ }
++ data->last_key = key;
++
++ //stable value, send event
++ } else if (data->state == WAIT_STATE) {
++ data->noise = 0;
++ //non-key returned, skip the rest of the states and bail now
++ if (data->last_key == 0) {
++ DPRINTK("non-key detected %d, noise: %d", data->last_key, data->noise);
++ timer = 0;
++ //send button press
++ } else {
++ DPRINTK("key press detected %d, noise %d", data->last_key, data->noise);
++ input_report_key(data->input, data->last_key, 1);
++ }
++ ++data->state;
++
++ //wait until key is released
++ } else if (data->state < WAIT_STATE * 2) {
++ if (key == data->last_key
++ && data->noise < NOISE_THRESHOLD) {
++ data->state = WAIT_STATE + 1;
++ ++data->noise;
++ } else {
++ ++data->state;
++ }
++ //key is released, send event
++ } else {
++ //send button release
++ DPRINTK("release key %d", data->last_key);
++ input_report_key(data->input, data->last_key, 0);
++ timer = 0;
++ }
++ if (timer) {
++ mod_timer(&data->rctimer, jiffies + msecs_to_jiffies(RC_POLL_MS));
++ } else {
++ set_scoop_gpio(&REMOTE_SCOOP_DEVICE.dev, REMOTE_AKIN_PULLUP);
++ data->handling_press = 0;
++ }
++}
++
++static int __init sharpsl_rc_probe(struct platform_device *pdev)
++{
++ struct sharpsl_rc *sharpsl_rc;
++ struct input_dev *input_dev;
++ int i, ret;
++
++ dev_dbg(&pdev->dev, "sharpsl_rc_probe\n");
++
++ sharpsl_rc = kzalloc(sizeof(struct sharpsl_rc), GFP_KERNEL);
++ input_dev = input_allocate_device();
++ if (!sharpsl_rc || !input_dev) {
++ kfree(sharpsl_rc);
++ input_free_device(input_dev);
++ return -ENOMEM;
++ }
++
++ platform_set_drvdata(pdev, sharpsl_rc);
++
++ sharpsl_rc->dev = &pdev->dev;
++ sharpsl_rc->input = input_dev;
++ spin_lock_init(&sharpsl_rc->lock);
++
++ /* Init Remote Control Timer */
++ init_timer(&sharpsl_rc->rctimer);
++ sharpsl_rc->rctimer.function = sharpsl_rc_timer_callback;
++ sharpsl_rc->rctimer.data = (unsigned long) sharpsl_rc;
++
++ input_dev->name = "Sharp Remote Control CE-RHX";
++ input_dev->phys = "sharpsl_rc/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 = sharpsl_rc;
++
++ input_dev->evbit[0] = BIT(EV_KEY);
++
++ for (i = 0; i <= ARRAY_SIZE(remote_keys); i++)
++ set_bit(remote_keys[i].key, input_dev->keybit);
++
++ input_register_device(sharpsl_rc->input);
++
++ pxa_gpio_mode(REMOTE_GPIO_INT | GPIO_IN);
++ ret = request_irq(REMOTE_IRQ_INT,
++ sharpsl_rc_interrupt,
++ IRQF_DISABLED | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING | IRQF_SHARED,
++ "sharpsl_rc",
++ sharpsl_rc);
++ if (ret < 0) {
++ dev_dbg(&pdev->dev, "Can't get IRQ: %d!\n", i);
++ kfree(sharpsl_rc);
++ input_free_device(input_dev);
++ return ret;
++ }
++
++ return 0;
++}
++
++static int sharpsl_rc_remove(struct platform_device *pdev)
++{
++ struct sharpsl_rc *sharpsl_rc = platform_get_drvdata(pdev);
++
++ dev_dbg(&pdev->dev, "sharpsl_rc_remove\n");
++
++ free_irq(REMOTE_IRQ_INT, sharpsl_rc);
++ del_timer_sync(&sharpsl_rc->rctimer);
++ input_unregister_device(sharpsl_rc->input);
++ kfree(sharpsl_rc);
++
++ return 0;
++}
++
++static struct platform_driver sharpsl_rc_driver = {
++ .probe = sharpsl_rc_probe,
++ .remove = sharpsl_rc_remove,
++ .suspend = NULL,
++ .resume = NULL,
++ .driver = {
++ .name = "sharpsl-remote-control",
++ },
++};
++
++static int __devinit sharpsl_rc_init(void)
++{
++ printk("sharpsl_rc_init\n");
++ return platform_driver_register(&sharpsl_rc_driver);
++}
++
++static void __exit sharpsl_rc_exit(void)
++{
++ printk("sharpsl_rc_exit\n");
++ platform_driver_unregister(&sharpsl_rc_driver);
++}
++
++module_init(sharpsl_rc_init);
++module_exit(sharpsl_rc_exit);
++
++MODULE_AUTHOR("Justin Patrin <papercrane@reversefold.com>");
++MODULE_AUTHOR("Richard Purdie <rpurdie@rpsys.net>");
++MODULE_DESCRIPTION("SharpSL Remote Control Driver");
++MODULE_LICENSE("GPL");
+Index: linux-2.6.24/drivers/input/keyboard/spitzkbd.c
+===================================================================
+--- linux-2.6.24.orig/drivers/input/keyboard/spitzkbd.c 2008-01-24 22:58:37.000000000 +0000
++++ linux-2.6.24/drivers/input/keyboard/spitzkbd.c 2008-03-10 17:05:55.000000000 +0000
+@@ -19,6 +19,7 @@
+ #include <linux/jiffies.h>
+ #include <linux/module.h>
+ #include <linux/slab.h>
++#include <linux/kmod.h>
+
+ #include <asm/arch/spitz.h>
+ #include <asm/arch/hardware.h>
+@@ -279,13 +280,21 @@
+ static int sharpsl_hinge_state;
+ static int hinge_count;
+
++void spitzkbd_handle_sharpsl_rc(void *arg) {
++ request_module("sharpsl_rc");
++}
++
++DECLARE_WORK(spitzkbd_work, spitzkbd_handle_sharpsl_rc);
++
+ static void spitzkbd_hinge_timer(unsigned long data)
+ {
+ struct spitzkbd *spitzkbd_data = (struct spitzkbd *) data;
+ unsigned long state;
+ unsigned long flags;
++ unsigned int headphone, remote;
+
+ state = GPLR(SPITZ_GPIO_SWA) & (GPIO_bit(SPITZ_GPIO_SWA)|GPIO_bit(SPITZ_GPIO_SWB));
++ state |= (GPLR(SPITZ_GPIO_HP_IN) & GPIO_bit(SPITZ_GPIO_HP_IN));
+ state |= (GPLR(SPITZ_GPIO_AK_INT) & GPIO_bit(SPITZ_GPIO_AK_INT));
+ if (state != sharpsl_hinge_state) {
+ hinge_count = 0;
+@@ -299,9 +308,18 @@
+
+ input_report_switch(spitzkbd_data->input, SW_LID, ((GPLR(SPITZ_GPIO_SWA) & GPIO_bit(SPITZ_GPIO_SWA)) != 0));
+ input_report_switch(spitzkbd_data->input, SW_TABLET_MODE, ((GPLR(SPITZ_GPIO_SWB) & GPIO_bit(SPITZ_GPIO_SWB)) != 0));
+- input_report_switch(spitzkbd_data->input, SW_HEADPHONE_INSERT, ((GPLR(SPITZ_GPIO_AK_INT) & GPIO_bit(SPITZ_GPIO_AK_INT)) != 0));
++
++ headphone = ((GPLR(SPITZ_GPIO_HP_IN) & GPIO_bit(SPITZ_GPIO_HP_IN)) != 0);
++ input_report_switch(spitzkbd_data->input, SW_HEADPHONE_INSERT, headphone);
++
++ remote = headphone && ((GPLR(SPITZ_GPIO_AK_INT) & GPIO_bit(SPITZ_GPIO_AK_INT)) == 0);
++ input_report_switch(spitzkbd_data->input, SW_REMOTE_INSERT, remote);
+ input_sync(spitzkbd_data->input);
+
++ if (remote) {
++ schedule_work(&spitzkbd_work);
++ }
++
+ spin_unlock_irqrestore(&spitzkbd_data->lock, flags);
+ } else {
+ mod_timer(&spitzkbd_data->htimer, jiffies + msecs_to_jiffies(HINGE_SCAN_INTERVAL));
+@@ -395,6 +413,7 @@
+ set_bit(SW_LID, input_dev->swbit);
+ set_bit(SW_TABLET_MODE, input_dev->swbit);
+ set_bit(SW_HEADPHONE_INSERT, input_dev->swbit);
++ set_bit(SW_REMOTE_INSERT, input_dev->swbit);
+
+ err = input_register_device(input_dev);
+ if (err)
+@@ -432,9 +451,12 @@
+ request_irq(SPITZ_IRQ_GPIO_SWB, spitzkbd_hinge_isr,
+ IRQF_DISABLED | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
+ "Spitzkbd SWB", spitzkbd);
+- request_irq(SPITZ_IRQ_GPIO_AK_INT, spitzkbd_hinge_isr,
++ request_irq(SPITZ_IRQ_GPIO_HP_IN, spitzkbd_hinge_isr,
+ IRQF_DISABLED | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
+ "Spitzkbd HP", spitzkbd);
++ request_irq(SPITZ_IRQ_GPIO_AK_INT, spitzkbd_hinge_isr,
++ IRQF_DISABLED | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING | IRQF_SHARED,
++ "Spitzkbd HP Type", spitzkbd);
+
+ return 0;
+
+@@ -455,6 +477,7 @@
+ free_irq(SPITZ_IRQ_GPIO_ON_KEY, spitzkbd);
+ free_irq(SPITZ_IRQ_GPIO_SWA, spitzkbd);
+ free_irq(SPITZ_IRQ_GPIO_SWB, spitzkbd);
++ free_irq(SPITZ_IRQ_GPIO_HP_IN, spitzkbd);
+ free_irq(SPITZ_IRQ_GPIO_AK_INT, spitzkbd);
+
+ del_timer_sync(&spitzkbd->htimer);
+Index: linux-2.6.24/arch/arm/mach-pxa/sharpsl.h
+===================================================================
+--- linux-2.6.24.orig/arch/arm/mach-pxa/sharpsl.h 2008-03-10 17:05:35.000000000 +0000
++++ linux-2.6.24/arch/arm/mach-pxa/sharpsl.h 2008-03-10 17:05:55.000000000 +0000
+@@ -37,15 +37,10 @@
+ */
+ #define READ_GPIO_BIT(x) (GPLR(x) & GPIO_bit(x))
+
+-/* MAX1111 Channel Definitions */
+-#define MAX1111_BATT_VOLT 4u
+-#define MAX1111_BATT_TEMP 2u
+-#define MAX1111_ACIN_VOLT 6u
+-
+ extern struct battery_thresh spitz_battery_levels_acin[];
+ extern struct battery_thresh spitz_battery_levels_noac[];
+ void sharpsl_pm_pxa_init(void);
+ void sharpsl_pm_pxa_remove(void);
+-int sharpsl_pm_pxa_read_max1111(int channel);
++
+
+
+Index: linux-2.6.24/arch/arm/mach-pxa/sharpsl_pm.c
+===================================================================
+--- linux-2.6.24.orig/arch/arm/mach-pxa/sharpsl_pm.c 2008-01-24 22:58:37.000000000 +0000
++++ linux-2.6.24/arch/arm/mach-pxa/sharpsl_pm.c 2008-03-10 17:05:55.000000000 +0000
+@@ -135,6 +135,8 @@
+ | MAXCTRL_SGL | MAXCTRL_UNI | MAXCTRL_STR);
+ }
+
++EXPORT_SYMBOL(sharpsl_pm_pxa_read_max1111);
++
+ void sharpsl_pm_pxa_init(void)
+ {
+ pxa_gpio_mode(sharpsl_pm.machinfo->gpio_acin | GPIO_IN);
+Index: linux-2.6.24/include/asm-arm/hardware/sharpsl_pm.h
+===================================================================
+--- linux-2.6.24.orig/include/asm-arm/hardware/sharpsl_pm.h 2008-01-24 22:58:37.000000000 +0000
++++ linux-2.6.24/include/asm-arm/hardware/sharpsl_pm.h 2008-03-10 17:05:55.000000000 +0000
+@@ -104,3 +104,10 @@
+ irqreturn_t sharpsl_chrg_full_isr(int irq, void *dev_id);
+ irqreturn_t sharpsl_fatal_isr(int irq, void *dev_id);
+
++/* MAX1111 Channel Definitions */
++#define MAX1111_REMCOM 0u
++#define MAX1111_BATT_VOLT 4u
++#define MAX1111_BATT_TEMP 2u
++#define MAX1111_ACIN_VOLT 6u
++
++int sharpsl_pm_pxa_read_max1111(int channel);
+Index: linux-2.6.24/include/linux/input.h
+===================================================================
+--- linux-2.6.24.orig/include/linux/input.h 2008-01-24 22:58:37.000000000 +0000
++++ linux-2.6.24/include/linux/input.h 2008-03-10 17:05:55.000000000 +0000
+@@ -636,6 +636,7 @@
+ #define SW_TABLET_MODE 0x01 /* set = tablet mode */
+ #define SW_HEADPHONE_INSERT 0x02 /* set = inserted */
+ #define SW_RADIO 0x03 /* set = radio enabled */
++#define SW_REMOTE_INSERT 0x04 /* set = remote */
+ #define SW_MAX 0x0f
+ #define SW_CNT (SW_MAX+1)
+
+Index: linux-2.6.24/arch/arm/mach-pxa/spitz_pm.c
+===================================================================
+--- linux-2.6.24.orig/arch/arm/mach-pxa/spitz_pm.c 2008-03-10 17:05:40.000000000 +0000
++++ linux-2.6.24/arch/arm/mach-pxa/spitz_pm.c 2008-03-10 17:05:55.000000000 +0000
+@@ -162,6 +162,13 @@
+ if (resume_on_alarm && (PEDR & PWER_RTC))
+ is_resume |= PWER_RTC;
+
++ printk("wakeup: PEDR: %x, PKSR: %x, HP_IN: %x, AK_INT: %x\n", PEDR, PKSR, GPIO_bit(SPITZ_GPIO_HP_IN), GPIO_bit(SPITZ_GPIO_AK_INT));
++
++ //remote/headphone interrupt, wakeup
++ if (PEDR == 0 && (PKSR & 0xc0d01) != 0) {
++ is_resume |= PWER_RTC;
++ }
++
+ dev_dbg(sharpsl_pm.dev, "is_resume: %x\n",is_resume);
+ return is_resume;
+ }
diff --git a/meta/packages/linux/linux-rp-2.6.24/sharpsl-rc-r2.patch b/meta/packages/linux/linux-rp-2.6.24/sharpsl-rc-r2.patch
new file mode 100644
index 000000000..6fb34ec17
--- /dev/null
+++ b/meta/packages/linux/linux-rp-2.6.24/sharpsl-rc-r2.patch
@@ -0,0 +1,180 @@
+This patch adds support for Sharp CE-RH2 on Akita and CE-RH1 on C7x0.
+
+This patch is a bit ugly:
+- Device specific functions should be moved to platform infrastructure.
+- Maybe define generic *_scoopexp functions handling Akita x Spitz differences.
+
+Index: linux-2.6.24/drivers/input/keyboard/sharpsl_rc.c
+===================================================================
+--- linux-2.6.24.orig/drivers/input/keyboard/sharpsl_rc.c 2008-03-08 19:29:02.000000000 +0000
++++ linux-2.6.24/drivers/input/keyboard/sharpsl_rc.c 2008-03-08 22:23:35.000000000 +0000
+@@ -21,12 +21,10 @@
+ #include <linux/module.h>
+ #include <linux/slab.h>
+
+-#ifdef CONFIG_MACH_SPITZ
++#include <asm/mach-types.h>
+ #include <asm/arch/spitz.h>
+-#endif
+-#ifdef CONFIG_MACH_CORGI
++#include <asm/arch/akita.h>
+ #include <asm/arch/corgi.h>
+-#endif
+
+ #include <asm/arch/hardware.h>
+ #include <asm/arch/pxa-regs.h>
+@@ -42,12 +40,8 @@
+ unsigned char key;
+ };
+
+-#ifdef CONFIG_MACH_SPITZ
+-#define REMOTE_AKIN_PULLUP SPITZ_SCP2_AKIN_PULLUP
+-#define REMOTE_SCOOP_DEVICE spitzscoop2_device
+-#define REMOTE_GPIO_INT SPITZ_GPIO_AK_INT
+-#define REMOTE_IRQ_INT SPITZ_IRQ_GPIO_AK_INT
+-static struct remote_control_key remote_keys[] = {
++static struct remote_control_key remote_keys_spitz[] = {
++ /* CE-RH2 values */
+ { 25, 35, KEY_STOPCD},
+ { 55, 65, KEY_PLAYPAUSE},
+ { 85, 95, KEY_NEXTSONG},
+@@ -56,23 +50,15 @@
+ { 180, 190, KEY_MUTE},
+ { 215, 225, KEY_VOLUMEDOWN},
+ };
+-#endif
+-#ifdef CONFIG_MACH_CORGI
+-#define REMOTE_AKIN_PULLUP CORGI_SCP_AKIN_PULLUP
+-#define REMOTE_SCOOP_DEVICE corgiscoop_device
+-#define REMOTE_GPIO_INT CORGI_GPIO_AK_INT
+-#define REMOTE_IRQ_INT CORGI_IRQ_GPIO_AK_INT
+-static struct remote_control_key remote_keys[] = {
+- //These need to be fixed for the CE-RH1's values
+- { 25, 35, KEY_STOPCD},
+- { 55, 65, KEY_PLAYPAUSE},
+- { 85, 95, KEY_NEXTSONG},
+- { 115, 125, KEY_VOLUMEUP},
+- { 145, 155, KEY_PREVIOUSSONG},
+- { 180, 190, KEY_MUTE},
+- { 215, 225, KEY_VOLUMEDOWN},
++static struct remote_control_key remote_keys_corgi[] = {
++ /* CE-RH1 values */
++ { 27, 35, KEY_STOPCD},
++ { 7, 13, KEY_PLAYPAUSE},
++ { 77, 93, KEY_NEXTSONG},
++ { 115, 132, KEY_VOLUMEUP},
++ { 46, 58, KEY_PREVIOUSSONG},
++ { 170, 186, KEY_VOLUMEDOWN},
+ };
+-#endif
+
+ #define RELEASE_HI 230
+ #define MAX_EARPHONE 6
+@@ -98,9 +84,17 @@
+ static int get_remocon_raw(void)
+ {
+ int i, val;
++ struct remote_control_key *remote_keys;
++
++ if (machine_is_borzoi() || machine_is_spitz() || machine_is_akita())
++ remote_keys = remote_keys_spitz;
++ else
++ remote_keys = remote_keys_corgi;
+
+ val = sharpsl_pm_pxa_read_max1111(MAX1111_REMCOM);
+- for (i = 0; i < ARRAY_SIZE(remote_keys); ++i) {
++ for (i = 0; i < (machine_is_borzoi() || machine_is_spitz() || machine_is_akita() ?
++ ARRAY_SIZE(remote_keys_spitz) : ARRAY_SIZE(remote_keys_corgi));
++ ++i) {
+ if (val >= remote_keys[i].min
+ && val <= remote_keys[i].max) {
+ printk("get_remocon_raw: VAL=%i, KEY=%i\n", val, remote_keys[i].key);
+@@ -121,8 +115,12 @@
+ data->state = 0;
+ data->last_key = 0;
+
+- reset_scoop_gpio(&REMOTE_SCOOP_DEVICE.dev, REMOTE_AKIN_PULLUP);
+-
++ if (machine_is_borzoi() || machine_is_spitz())
++ reset_scoop_gpio(platform_scoop_config->devs[1].dev, SPITZ_SCP2_AKIN_PULLUP);
++ else if (machine_is_akita())
++ akita_reset_ioexp(&akitaioexp_device.dev, AKITA_IOEXP_AKIN_PULLUP);
++ else
++ reset_scoop_gpio(platform_scoop_config->devs[0].dev, CORGI_SCP_AKIN_PULLUP);
+ mod_timer(&data->rctimer, jiffies + msecs_to_jiffies(RC_POLL_MS));
+ }
+ return IRQ_HANDLED;
+@@ -182,7 +180,12 @@
+ if (timer) {
+ mod_timer(&data->rctimer, jiffies + msecs_to_jiffies(RC_POLL_MS));
+ } else {
+- set_scoop_gpio(&REMOTE_SCOOP_DEVICE.dev, REMOTE_AKIN_PULLUP);
++ if (machine_is_borzoi() || machine_is_spitz())
++ set_scoop_gpio(platform_scoop_config->devs[1].dev, SPITZ_SCP2_AKIN_PULLUP);
++ else if (machine_is_akita())
++ akita_set_ioexp(&akitaioexp_device.dev, AKITA_IOEXP_AKIN_PULLUP);
++ else
++ set_scoop_gpio(platform_scoop_config->devs[0].dev, CORGI_SCP_AKIN_PULLUP);
+ data->handling_press = 0;
+ }
+ }
+@@ -192,6 +195,7 @@
+ struct sharpsl_rc *sharpsl_rc;
+ struct input_dev *input_dev;
+ int i, ret;
++ struct remote_control_key *remote_keys;
+
+ dev_dbg(&pdev->dev, "sharpsl_rc_probe\n");
+
+@@ -225,17 +229,32 @@
+
+ input_dev->evbit[0] = BIT(EV_KEY);
+
+- for (i = 0; i <= ARRAY_SIZE(remote_keys); i++)
++ if (machine_is_borzoi() || machine_is_spitz() || machine_is_akita())
++ remote_keys = remote_keys_spitz;
++ else
++ remote_keys = remote_keys_corgi;
++ for (i = 0; i < (machine_is_borzoi() || machine_is_spitz() || machine_is_akita() ?
++ ARRAY_SIZE(remote_keys_spitz) : ARRAY_SIZE(remote_keys_corgi));
++ ++i)
+ set_bit(remote_keys[i].key, input_dev->keybit);
+
+ input_register_device(sharpsl_rc->input);
+
+- pxa_gpio_mode(REMOTE_GPIO_INT | GPIO_IN);
+- ret = request_irq(REMOTE_IRQ_INT,
+- sharpsl_rc_interrupt,
+- IRQF_DISABLED | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING | IRQF_SHARED,
+- "sharpsl_rc",
+- sharpsl_rc);
++ if (machine_is_borzoi() || machine_is_spitz() || machine_is_akita()) {
++ pxa_gpio_mode(SPITZ_GPIO_AK_INT | GPIO_IN);
++ ret = request_irq(SPITZ_IRQ_GPIO_AK_INT,
++ sharpsl_rc_interrupt,
++ IRQF_DISABLED | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING | IRQF_SHARED,
++ "sharpsl_rc",
++ sharpsl_rc);
++ } else {
++ pxa_gpio_mode(CORGI_GPIO_AK_INT | GPIO_IN);
++ ret = request_irq(CORGI_IRQ_GPIO_AK_INT,
++ sharpsl_rc_interrupt,
++ IRQF_DISABLED | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING | IRQF_SHARED,
++ "sharpsl_rc",
++ sharpsl_rc);
++ }
+ if (ret < 0) {
+ dev_dbg(&pdev->dev, "Can't get IRQ: %d!\n", i);
+ kfree(sharpsl_rc);
+@@ -252,7 +271,10 @@
+
+ dev_dbg(&pdev->dev, "sharpsl_rc_remove\n");
+
+- free_irq(REMOTE_IRQ_INT, sharpsl_rc);
++ if (machine_is_borzoi() || machine_is_spitz() || machine_is_akita())
++ free_irq(SPITZ_IRQ_GPIO_AK_INT, sharpsl_rc);
++ else
++ free_irq(CORGI_IRQ_GPIO_AK_INT, sharpsl_rc);
+ del_timer_sync(&sharpsl_rc->rctimer);
+ input_unregister_device(sharpsl_rc->input);
+ kfree(sharpsl_rc);
diff --git a/meta/packages/linux/linux-rp-2.6.24/spitz_h_rewrite.patch b/meta/packages/linux/linux-rp-2.6.24/spitz_h_rewrite.patch
new file mode 100644
index 000000000..df6d5f66c
--- /dev/null
+++ b/meta/packages/linux/linux-rp-2.6.24/spitz_h_rewrite.patch
@@ -0,0 +1,497 @@
+http://www.uwsg.indiana.edu/hypermail/linux/kernel/0802.1/3541.html
+
+Here is a rewrite of spitz.h, which includes comments documenting
+function of particular GPIO pins.
+
+spitz_h_rewrite.patch provides:
+- no changes in compiled code
+- partial spitz.h rewrite:
+ * organized by function
+ * describes complete GPIO pinout
+ * comments added
+ * removed defines cloning pxa-regs.h
+- prefer generic pxa-regs.h GPIO if available
+- use GPIO names instead of numbers
+
+Thanks to Trisoft for providing needed information.
+
+Index: linux-2.6.24/arch/arm/mach-pxa/spitz_pm.c
+===================================================================
+--- linux-2.6.24.orig/arch/arm/mach-pxa/spitz_pm.c 2008-01-24 22:58:37.000000000 +0000
++++ linux-2.6.24/arch/arm/mach-pxa/spitz_pm.c 2008-02-13 13:49:22.000000000 +0000
+@@ -110,9 +110,9 @@
+ pxa_gpio_mode(GPIO18_RDY|GPIO_OUT | GPIO_DFLT_HIGH);
+
+ PRER = GPIO_bit(SPITZ_GPIO_KEY_INT);
+- PFER = GPIO_bit(SPITZ_GPIO_KEY_INT) | GPIO_bit(SPITZ_GPIO_RESET);
+- PWER = GPIO_bit(SPITZ_GPIO_KEY_INT) | GPIO_bit(SPITZ_GPIO_RESET) | PWER_RTC;
+- PKWR = GPIO_bit(SPITZ_GPIO_SYNC) | GPIO_bit(SPITZ_GPIO_KEY_INT) | GPIO_bit(SPITZ_GPIO_RESET);
++ PFER = GPIO_bit(SPITZ_GPIO_KEY_INT) | GPIO_bit(GPIO1_RST);
++ PWER = GPIO_bit(SPITZ_GPIO_KEY_INT) | GPIO_bit(GPIO1_RST) | PWER_RTC;
++ PKWR = GPIO_bit(SPITZ_GPIO_SYNC) | GPIO_bit(SPITZ_GPIO_KEY_INT) | GPIO_bit(GPIO1_RST);
+ PKSR = 0xffffffff; // clear
+
+ /* nRESET_OUT Disable */
+@@ -128,7 +128,7 @@
+ static void spitz_postsuspend(void)
+ {
+ pxa_gpio_mode(GPIO18_RDY_MD);
+- pxa_gpio_mode(10 | GPIO_IN);
++ pxa_gpio_mode(SPITZ_GPIO_NC_10 | GPIO_IN);
+ }
+
+ static int spitz_should_wakeup(unsigned int resume_on_alarm)
+Index: linux-2.6.24/drivers/video/pxafb.c
+===================================================================
+--- linux-2.6.24.orig/drivers/video/pxafb.c 2008-02-13 13:49:04.000000000 +0000
++++ linux-2.6.24/drivers/video/pxafb.c 2008-02-13 13:49:57.000000000 +0000
+@@ -920,7 +920,7 @@
+ return;
+ }
+
+- for (gpio = 58; ldd_bits > 0; gpio++, ldd_bits--) {
++ for (gpio = GPIO58_LDD_0; ldd_bits > 0; gpio++, ldd_bits--) {
+ pxa_gpio_mode(gpio | GPIO_ALT_FN_2_OUT);
+ }
+ pxa_gpio_mode(GPIO74_LCD_FCLK_MD);
+Index: linux-2.6.24/include/asm-arm/arch-pxa/akita.h
+===================================================================
+--- linux-2.6.24.orig/include/asm-arm/arch-pxa/akita.h 2008-01-24 22:58:37.000000000 +0000
++++ linux-2.6.24/include/asm-arm/arch-pxa/akita.h 2008-02-13 13:49:22.000000000 +0000
+@@ -12,11 +12,11 @@
+ /* Akita IO Expander GPIOs */
+
+ #define AKITA_IOEXP_RESERVED_7 (1 << 7)
+-#define AKITA_IOEXP_IR_ON (1 << 6)
+-#define AKITA_IOEXP_AKIN_PULLUP (1 << 5)
+-#define AKITA_IOEXP_BACKLIGHT_CONT (1 << 4)
+-#define AKITA_IOEXP_BACKLIGHT_ON (1 << 3)
+-#define AKITA_IOEXP_MIC_BIAS (1 << 2)
++#define AKITA_IOEXP_IR_ON (1 << 6) /* IrDA On */
++#define AKITA_IOEXP_AKIN_PULLUP (1 << 5) /* Pull-Up for Remote */
++#define AKITA_IOEXP_BACKLIGHT_CONT (1 << 4) /* Backlight Control */
++#define AKITA_IOEXP_BACKLIGHT_ON (1 << 3) /* Backlight On */
++#define AKITA_IOEXP_MIC_BIAS (1 << 2) /* Mic Bias On */
+ #define AKITA_IOEXP_RESERVED_1 (1 << 1)
+ #define AKITA_IOEXP_RESERVED_0 (1 << 0)
+
+Index: linux-2.6.24/include/asm-arm/arch-pxa/pxa-regs.h
+===================================================================
+--- linux-2.6.24.orig/include/asm-arm/arch-pxa/pxa-regs.h 2008-02-13 13:49:07.000000000 +0000
++++ linux-2.6.24/include/asm-arm/arch-pxa/pxa-regs.h 2008-02-13 13:49:22.000000000 +0000
+@@ -1334,6 +1334,7 @@
+ #define GPIO85_nPCE_1 85 /* Card Enable for Card Space (PXA27x) */
+ #define GPIO92_MMCDAT0 92 /* MMC DAT0 (PXA27x) */
+ #define GPIO102_nPCE_1 102 /* PCMCIA (PXA27x) */
++#define GPIO104_pSKTSEL 104 /* PCMCIA Socket Select (PXA27x) */
+ #define GPIO109_MMCDAT1 109 /* MMC DAT1 (PXA27x) */
+ #define GPIO110_MMCDAT2 110 /* MMC DAT2 (PXA27x) */
+ #define GPIO110_MMCCS0 110 /* MMC Chip Select 0 (PXA27x) */
+Index: linux-2.6.24/include/asm-arm/arch-pxa/spitz.h
+===================================================================
+--- linux-2.6.24.orig/include/asm-arm/arch-pxa/spitz.h 2008-02-13 13:49:01.000000000 +0000
++++ linux-2.6.24/include/asm-arm/arch-pxa/spitz.h 2008-02-13 13:49:22.000000000 +0000
+@@ -1,8 +1,9 @@
+ /*
+- * Hardware specific definitions for SL-Cx000 series of PDAs
++ * Hardware specific definitions for SL-Cxx00 series of PDAs
+ *
+ * Copyright (c) 2005 Alexander Wykes
+ * Copyright (c) 2005 Richard Purdie
++ * Copyright (c) 2008 Stanislav Brabec
+ *
+ * Based on Sharp's 2.4 kernel patches
+ *
+@@ -13,140 +14,257 @@
+ */
+ #ifndef __ASM_ARCH_SPITZ_H
+ #define __ASM_ARCH_SPITZ_H 1
+-#endif
+
+-#include <linux/fb.h>
++#include <asm-arm/arch-pxa/irqs.h>
++#include <linux/platform_device.h>
+
+ /* Spitz/Akita GPIOs */
+
+-#define SPITZ_GPIO_KEY_INT (0) /* Key Interrupt */
+-#define SPITZ_GPIO_RESET (1)
+-#define SPITZ_GPIO_nSD_DETECT (9)
+-#define SPITZ_GPIO_TP_INT (11) /* Touch Panel interrupt */
+-#define SPITZ_GPIO_AK_INT (13) /* Remote Control */
+-#define SPITZ_GPIO_ADS7846_CS (14)
+-#define SPITZ_GPIO_SYNC (16)
+-#define SPITZ_GPIO_MAX1111_CS (20)
+-#define SPITZ_GPIO_FATAL_BAT (21)
+-#define SPITZ_GPIO_HSYNC (22)
+-#define SPITZ_GPIO_nSD_CLK (32)
+-#define SPITZ_GPIO_USB_DEVICE (35)
+-#define SPITZ_GPIO_USB_HOST (37)
+-#define SPITZ_GPIO_USB_CONNECT (41)
+-#define SPITZ_GPIO_LCDCON_CS (53)
+-#define SPITZ_GPIO_nPCE (54)
+-#define SPITZ_GPIO_nSD_WP (81)
+-#define SPITZ_GPIO_ON_RESET (89)
+-#define SPITZ_GPIO_BAT_COVER (90)
+-#define SPITZ_GPIO_CF_CD (94)
+-#define SPITZ_GPIO_ON_KEY (95)
+-#define SPITZ_GPIO_SWA (97)
+-#define SPITZ_GPIO_SWB (96)
+-#define SPITZ_GPIO_CHRG_FULL (101)
+-#define SPITZ_GPIO_CO (101)
+-#define SPITZ_GPIO_CF_IRQ (105)
+-#define SPITZ_GPIO_AC_IN (115)
+-#define SPITZ_GPIO_HP_IN (116)
++/* This list refers to all GPIO pins either in defines or in comments.
++ *
++ * GPIO pins not listed:
++ * GPIO2 SYS_EN: System Power Enable
++ * GPIO5-GPIO8 PWR_CAP0-PWR_CAP3: sleep DC-DC converter power capacitors
++ * GPIO40 not connected
++ */
+
+-/* Spitz Only GPIOs */
+
+-#define SPITZ_GPIO_CF2_IRQ (106) /* CF slot1 Ready */
+-#define SPITZ_GPIO_CF2_CD (93)
++/* Spitz/Akita System GPIO */
++
++#define SPITZ_GPIO_KEY_INT (0) /* Key Interrupt */
++#define SPITZ_GPIO_SYNC (16) /* IOPORT Wake Up (input) */
++#define SPITZ_GPIO_NAND_CS (79) /* NAND Flash Chip Select */
++#define SPITZ_GPIO_NC_10 (10) /* Not Connected (but used in kernel) */
++/* This GPIO pin is connected:
++ * GPIO1_RST
++ */
+
+
++/* Compact Flash Interface */
++
++/* Spitz/Akita Compact Flash Interface */
++#define SPITZ_GPIO_CF_CD (94) /* CF IRQ */
++#define SPITZ_GPIO_CF_IRQ (105) /* CF Ready */
++/* These GPIO pins are connected:
++ * GPIO48_nPOE
++ * GPIO49_nPWE
++ * GPIO50_nPIOR
++ * GPIO51_nPIOW
++ * GPIO54_nPCE_2
++ * GPIO55_nPREG
++ * GPIO56_nPWAIT
++ * GPIO57_nIOIS16
++ * GPIO80_nCS_4
++ * GPIO85_nPCE_1
++ * GPIO104_pSKTSEL
++ */
++
++/* Spitz only Compact Flash Interface */
++#define SPITZ_GPIO_CF2_CD (93) /* CF slot1 IRQ */
++#define SPITZ_GPIO_CF2_IRQ (106) /* CF slot1 Ready */
++/* This GPIO pin is connected:
++ * GPIO78_nCS_2
++ */
++
++
++/* Spitz/Akita Battery, Power and Service Connector */
++
++#define SPITZ_GPIO_FATAL_BAT (21) /* Fatal Battery */
++#define SPITZ_GPIO_BAT_COVER (90) /* Battery Cover switch */
++#define SPITZ_GPIO_BAT_COVER2 (15) /* Battery Cover switch, parallel pin */
++#define SPITZ_GPIO_CHRG_FULL (101) /* Battery Full */
++#define SPITZ_GPIO_AC_IN (115) /* External Power Supply is active */
++#define SPITZ_GPIO_ON_RESET (89) /* Software Reset */
++#define SPITZ_GPIO_SERVICE0 (83) /* Service Connector */
++#define SPITZ_GPIO_SERVICE1 (84) /* Service Connector */
++/* This GPIO pin is connected:
++ * GPIO18_RDY
++ */
++
++
++/* Spitz/Akita Display Controller */
++
++#define SPITZ_GPIO_HSYNC (22) /* Line Sync Feedback */
++/* These GPIO pins are connected:
++ * GPIO58_LDD_0-GPIO58_LDD_15
++ * GPIO74_LCD_FCLK
++ * GPIO75_LCD_LCLK
++ * GPIO76_LCD_PCLK
++ * GPIO77_LCD_ACBIAS
++ */
++
++
++/* Spitz/Akita SSP/SPI Bus and Devices */
++
++#define SPITZ_GPIO_SSP_CLK (19) /* SSP bus Clock */
++#define SPITZ_GPIO_SSP_RXD (86) /* SSP bus RxD */
++#define SPITZ_GPIO_SSP_TXD (87) /* SSP bus TxD */
++#define SPITZ_GPIO_TP_INT (11) /* Touch Panel IRQ */
++#define SPITZ_GPIO_ADS7846_CS (14) /* Touch Panel Controller Chip Select */
++#define SPITZ_GPIO_MAX1111_CS (20) /* Multi Channel ADC Chip Select */
++#define SPITZ_GPIO_LCDCON_CS (53) /* LCD Controller Chip Select */
++
++
++/* Spitz/Akita Supplementary USB OTG Pins */
++
++#define SPITZ_GPIO_USB_DEVICE (35) /* USB Client power is present */
++#define SPITZ_GPIO_USB_HOST (37) /* USB OTG 5V Host power supply control */
++#define SPITZ_GPIO_USB_CONNECT (41) /* USB Host Cable is connected */
++
++
++/* Spitz/Akita Audio */
++
++#define SPITZ_GPIO_HP_IN (116) /* CPU Headphone detect */
++#define SPITZ_GPIO_AK_INT (13) /* Remote Control detect */
++/* These GPIO AC97 pins are connected:
++ * GPIO28_BITCLK
++ * GPIO29_SDATA_IN
++ * GPIO30_SDATA_OUT
++ * GPIO31_SYNC
++ * GPIO113_AC97_RESET_N
++ */
++
++
++/* Spitz/Akita SD Slot */
++
++#define SPITZ_GPIO_nSD_DETECT (9) /* SD Card Presence */
++#define SPITZ_GPIO_nSD_WP (81) /* SD Write Protection */
++/* These GPIO pins are connected:
++ * GPIO32_MMCCLK
++ * GPIO92_MMCDAT0
++ * GPIO109_MMCDAT1
++ * GPIO110_MMCDAT2
++ * GPIO111_MMCDAT3
++ * GPIO112_MMCCMD
++ */
++
++/* Spitz/Akita I2C bus */
++#define SPITZ_GPIO_SCL (117) /* I2C SCL */
++#define SPITZ_GPIO_SDA (118) /* I2C SDA */
++#define SPITZ_GPIO_PWR_SCL (3) /* I2C SCL power */
++#define SPITZ_GPIO_PWR_SDA (4) /* I2C SDA power */
++
++/* audio codec pins */
++
++
++/* Spitz/Akita UART ports */
++
++/* Fully Featured UART - connected to IOPORT connector */
++#define SPITZ_GPIO_FFRXD (102) /* IOPORT has nRXD inverted levels */
++#define SPITZ_GPIO_FFTXD (99) /* IOPORT has nTXD inverted levels */
++#define SPITZ_GPIO_FFRTS (98)
++#define SPITZ_GPIO_FFCTS (100)
++#define SPITZ_GPIO_FFDTR (82)
++#define SPITZ_GPIO_FFDSR (33)
++
++/* These UART GPIO pins are connected to Bluetooth
++ * (only on Akita version with Bluetooth)
++ * GPIO42_BTRXD
++ * GPIO43_BTTXD
++ * GPIO44_BTCTS
++ * GPIO45_BTRTS
++ */
++
++/* These UART GPIO pins are connected to IrDA:
++ * GPIO46_STRXD
++ * GPIO47_STTXD
++ */
++
+ /* Spitz/Akita Keyboard Definitions */
+
+-#define SPITZ_KEY_STROBE_NUM (11)
+-#define SPITZ_KEY_SENSE_NUM (7)
+-#define SPITZ_GPIO_G0_STROBE_BIT 0x0f800000
+-#define SPITZ_GPIO_G1_STROBE_BIT 0x00100000
+-#define SPITZ_GPIO_G2_STROBE_BIT 0x01000000
+-#define SPITZ_GPIO_G3_STROBE_BIT 0x00041880
+-#define SPITZ_GPIO_G0_SENSE_BIT 0x00021000
+-#define SPITZ_GPIO_G1_SENSE_BIT 0x000000d4
+-#define SPITZ_GPIO_G2_SENSE_BIT 0x08000000
+-#define SPITZ_GPIO_G3_SENSE_BIT 0x00000000
+-
+-#define SPITZ_GPIO_KEY_STROBE0 88
+-#define SPITZ_GPIO_KEY_STROBE1 23
+-#define SPITZ_GPIO_KEY_STROBE2 24
+-#define SPITZ_GPIO_KEY_STROBE3 25
+-#define SPITZ_GPIO_KEY_STROBE4 26
+-#define SPITZ_GPIO_KEY_STROBE5 27
+-#define SPITZ_GPIO_KEY_STROBE6 52
+-#define SPITZ_GPIO_KEY_STROBE7 103
+-#define SPITZ_GPIO_KEY_STROBE8 107
+-#define SPITZ_GPIO_KEY_STROBE9 108
+-#define SPITZ_GPIO_KEY_STROBE10 114
+-
+-#define SPITZ_GPIO_KEY_SENSE0 12
+-#define SPITZ_GPIO_KEY_SENSE1 17
+-#define SPITZ_GPIO_KEY_SENSE2 91
+-#define SPITZ_GPIO_KEY_SENSE3 34
+-#define SPITZ_GPIO_KEY_SENSE4 36
+-#define SPITZ_GPIO_KEY_SENSE5 38
+-#define SPITZ_GPIO_KEY_SENSE6 39
++#define SPITZ_KEY_STROBE_NUM (11)
++#define SPITZ_KEY_SENSE_NUM (7)
++#define SPITZ_GPIO_G0_STROBE_BIT 0x0f800000
++#define SPITZ_GPIO_G1_STROBE_BIT 0x00100000
++#define SPITZ_GPIO_G2_STROBE_BIT 0x01000000
++#define SPITZ_GPIO_G3_STROBE_BIT 0x00041880
++#define SPITZ_GPIO_G0_SENSE_BIT 0x00021000
++#define SPITZ_GPIO_G1_SENSE_BIT 0x000000d4
++#define SPITZ_GPIO_G2_SENSE_BIT 0x08000000
++#define SPITZ_GPIO_G3_SENSE_BIT 0x00000000
++#define SPITZ_GPIO_KEY_STROBE0 (88)
++#define SPITZ_GPIO_KEY_STROBE1 (23)
++#define SPITZ_GPIO_KEY_STROBE2 (24)
++#define SPITZ_GPIO_KEY_STROBE3 (25)
++#define SPITZ_GPIO_KEY_STROBE4 (26)
++#define SPITZ_GPIO_KEY_STROBE5 (27)
++#define SPITZ_GPIO_KEY_STROBE6 (52)
++#define SPITZ_GPIO_KEY_STROBE7 (103)
++#define SPITZ_GPIO_KEY_STROBE8 (107)
++#define SPITZ_GPIO_KEY_STROBE9 (108)
++#define SPITZ_GPIO_KEY_STROBE10 (114)
++#define SPITZ_GPIO_KEY_SENSE0 (12)
++#define SPITZ_GPIO_KEY_SENSE1 (17)
++#define SPITZ_GPIO_KEY_SENSE2 (91)
++#define SPITZ_GPIO_KEY_SENSE3 (34)
++#define SPITZ_GPIO_KEY_SENSE4 (36)
++#define SPITZ_GPIO_KEY_SENSE5 (38)
++#define SPITZ_GPIO_KEY_SENSE6 (39)
++
++#define SPITZ_GPIO_SWA (97) /* Keyboard Interrupt A */
++#define SPITZ_GPIO_SWB (96) /* Keyboard Interrupt B */
++#define SPITZ_GPIO_ON_KEY (95) /* Power On Key */
+
+
+-/* Spitz Scoop Device (No. 1) GPIOs */
++/* Spitz/Akita Scoop Device (No. 1) GPIOs */
+ /* Suspend States in comments */
+-#define SPITZ_SCP_LED_GREEN SCOOP_GPCR_PA11 /* Keep */
+-#define SPITZ_SCP_JK_B SCOOP_GPCR_PA12 /* Keep */
+-#define SPITZ_SCP_CHRG_ON SCOOP_GPCR_PA13 /* Keep */
+-#define SPITZ_SCP_MUTE_L SCOOP_GPCR_PA14 /* Low */
+-#define SPITZ_SCP_MUTE_R SCOOP_GPCR_PA15 /* Low */
+-#define SPITZ_SCP_CF_POWER SCOOP_GPCR_PA16 /* Keep */
+-#define SPITZ_SCP_LED_ORANGE SCOOP_GPCR_PA17 /* Keep */
+-#define SPITZ_SCP_JK_A SCOOP_GPCR_PA18 /* Low */
+-#define SPITZ_SCP_ADC_TEMP_ON SCOOP_GPCR_PA19 /* Low */
++#define SPITZ_SCP_LED_GREEN SCOOP_GPCR_PA11 /* Green LED, Keep */
++#define SPITZ_SCP_JK_B SCOOP_GPCR_PA12 /* Fast Charge On, Keep */
++#define SPITZ_SCP_CHRG_ON SCOOP_GPCR_PA13 /* Charge On, Keep */
++#define SPITZ_SCP_MUTE_L SCOOP_GPCR_PA14 /* Extra Mute Left, Low */
++#define SPITZ_SCP_MUTE_R SCOOP_GPCR_PA15 /* Extra Mute Right, Low */
++#define SPITZ_SCP_CF_POWER SCOOP_GPCR_PA16 /* CF+SD Power Circuit, Keep */
++#define SPITZ_SCP_LED_ORANGE SCOOP_GPCR_PA17 /* Orange LED, Keep */
++#define SPITZ_SCP_JK_A SCOOP_GPCR_PA18 /* Dummy Load, Low */
++#define SPITZ_SCP_ADC_TEMP_ON SCOOP_GPCR_PA19 /* Battery Sensor On, Low */
+
+ #define SPITZ_SCP_IO_DIR (SPITZ_SCP_LED_GREEN | SPITZ_SCP_JK_B | SPITZ_SCP_CHRG_ON | \
+- SPITZ_SCP_MUTE_L | SPITZ_SCP_MUTE_R | SPITZ_SCP_LED_ORANGE | \
+- SPITZ_SCP_CF_POWER | SPITZ_SCP_JK_A | SPITZ_SCP_ADC_TEMP_ON)
++ SPITZ_SCP_MUTE_L | SPITZ_SCP_MUTE_R | SPITZ_SCP_LED_ORANGE | \
++ SPITZ_SCP_CF_POWER | SPITZ_SCP_JK_A | SPITZ_SCP_ADC_TEMP_ON)
+ #define SPITZ_SCP_IO_OUT (SPITZ_SCP_CHRG_ON | SPITZ_SCP_MUTE_L | SPITZ_SCP_MUTE_R)
+ #define SPITZ_SCP_SUS_CLR (SPITZ_SCP_MUTE_L | SPITZ_SCP_MUTE_R | SPITZ_SCP_JK_A | SPITZ_SCP_ADC_TEMP_ON)
+ #define SPITZ_SCP_SUS_SET 0
+
+ /* Spitz Scoop Device (No. 2) GPIOs */
+-/* Suspend States in comments */
+-#define SPITZ_SCP2_IR_ON SCOOP_GPCR_PA11 /* High */
+-#define SPITZ_SCP2_AKIN_PULLUP SCOOP_GPCR_PA12 /* Keep */
+-#define SPITZ_SCP2_RESERVED_1 SCOOP_GPCR_PA13 /* High */
+-#define SPITZ_SCP2_RESERVED_2 SCOOP_GPCR_PA14 /* Low */
+-#define SPITZ_SCP2_RESERVED_3 SCOOP_GPCR_PA15 /* Low */
+-#define SPITZ_SCP2_RESERVED_4 SCOOP_GPCR_PA16 /* Low */
+-#define SPITZ_SCP2_BACKLIGHT_CONT SCOOP_GPCR_PA17 /* Low */
+-#define SPITZ_SCP2_BACKLIGHT_ON SCOOP_GPCR_PA18 /* Low */
+-#define SPITZ_SCP2_MIC_BIAS SCOOP_GPCR_PA19 /* Low */
++/* Suspend States in comments
++ * Spitz only, Akita uses corresponding AKITA_IOEXP_ */
++#define SPITZ_SCP2_IR_ON SCOOP_GPCR_PA11 /* IrDA On, High */
++#define SPITZ_SCP2_AKIN_PULLUP SCOOP_GPCR_PA12 /* Pull-Up for Remote, Keep */
++#define SPITZ_SCP2_RESERVED_1 SCOOP_GPCR_PA13 /* High */
++#define SPITZ_SCP2_RESERVED_2 SCOOP_GPCR_PA14 /* Low */
++#define SPITZ_SCP2_RESERVED_3 SCOOP_GPCR_PA15 /* Low */
++#define SPITZ_SCP2_RESERVED_4 SCOOP_GPCR_PA16 /* Low */
++#define SPITZ_SCP2_BACKLIGHT_CONT SCOOP_GPCR_PA17 /* Backlight Control, Low */
++#define SPITZ_SCP2_BACKLIGHT_ON SCOOP_GPCR_PA18 /* Backlight On, Low */
++#define SPITZ_SCP2_MIC_BIAS SCOOP_GPCR_PA19 /* Mic Bias On, Low */
+
+ #define SPITZ_SCP2_IO_DIR (SPITZ_SCP2_IR_ON | SPITZ_SCP2_AKIN_PULLUP | SPITZ_SCP2_RESERVED_1 | \
+- SPITZ_SCP2_RESERVED_2 | SPITZ_SCP2_RESERVED_3 | SPITZ_SCP2_RESERVED_4 | \
+- SPITZ_SCP2_BACKLIGHT_CONT | SPITZ_SCP2_BACKLIGHT_ON | SPITZ_SCP2_MIC_BIAS)
++ SPITZ_SCP2_RESERVED_2 | SPITZ_SCP2_RESERVED_3 | SPITZ_SCP2_RESERVED_4 | \
++ SPITZ_SCP2_BACKLIGHT_CONT | SPITZ_SCP2_BACKLIGHT_ON | SPITZ_SCP2_MIC_BIAS)
+
+ #define SPITZ_SCP2_IO_OUT (SPITZ_SCP2_IR_ON | SPITZ_SCP2_AKIN_PULLUP | SPITZ_SCP2_RESERVED_1)
+ #define SPITZ_SCP2_SUS_CLR (SPITZ_SCP2_RESERVED_2 | SPITZ_SCP2_RESERVED_3 | SPITZ_SCP2_RESERVED_4 | \
+- SPITZ_SCP2_BACKLIGHT_CONT | SPITZ_SCP2_BACKLIGHT_ON | SPITZ_SCP2_MIC_BIAS)
++ SPITZ_SCP2_BACKLIGHT_CONT | SPITZ_SCP2_BACKLIGHT_ON | SPITZ_SCP2_MIC_BIAS)
+ #define SPITZ_SCP2_SUS_SET (SPITZ_SCP2_IR_ON | SPITZ_SCP2_RESERVED_1)
+
+
+-/* Spitz IRQ Definitions */
++/* Spitz/Akita IRQ Definitions */
+
+-#define SPITZ_IRQ_GPIO_KEY_INT IRQ_GPIO(SPITZ_GPIO_KEY_INT)
+-#define SPITZ_IRQ_GPIO_AC_IN IRQ_GPIO(SPITZ_GPIO_AC_IN)
+-#define SPITZ_IRQ_GPIO_AK_INT IRQ_GPIO(SPITZ_GPIO_AK_INT)
+-#define SPITZ_IRQ_GPIO_HP_IN IRQ_GPIO(SPITZ_GPIO_HP_IN)
+-#define SPITZ_IRQ_GPIO_TP_INT IRQ_GPIO(SPITZ_GPIO_TP_INT)
+-#define SPITZ_IRQ_GPIO_SYNC IRQ_GPIO(SPITZ_GPIO_SYNC)
+-#define SPITZ_IRQ_GPIO_ON_KEY IRQ_GPIO(SPITZ_GPIO_ON_KEY)
+-#define SPITZ_IRQ_GPIO_SWA IRQ_GPIO(SPITZ_GPIO_SWA)
+-#define SPITZ_IRQ_GPIO_SWB IRQ_GPIO(SPITZ_GPIO_SWB)
++#define SPITZ_IRQ_GPIO_KEY_INT IRQ_GPIO(SPITZ_GPIO_KEY_INT)
++#define SPITZ_IRQ_GPIO_AC_IN IRQ_GPIO(SPITZ_GPIO_AC_IN)
++#define SPITZ_IRQ_GPIO_AK_INT IRQ_GPIO(SPITZ_GPIO_AK_INT)
++#define SPITZ_IRQ_GPIO_HP_IN IRQ_GPIO(SPITZ_GPIO_HP_IN)
++#define SPITZ_IRQ_GPIO_TP_INT IRQ_GPIO(SPITZ_GPIO_TP_INT)
++#define SPITZ_IRQ_GPIO_SYNC IRQ_GPIO(SPITZ_GPIO_SYNC)
++#define SPITZ_IRQ_GPIO_ON_KEY IRQ_GPIO(SPITZ_GPIO_ON_KEY)
++#define SPITZ_IRQ_GPIO_SWA IRQ_GPIO(SPITZ_GPIO_SWA)
++#define SPITZ_IRQ_GPIO_SWB IRQ_GPIO(SPITZ_GPIO_SWB)
+ #define SPITZ_IRQ_GPIO_BAT_COVER IRQ_GPIO(SPITZ_GPIO_BAT_COVER)
+ #define SPITZ_IRQ_GPIO_FATAL_BAT IRQ_GPIO(SPITZ_GPIO_FATAL_BAT)
+-#define SPITZ_IRQ_GPIO_CO IRQ_GPIO(SPITZ_GPIO_CO)
+-#define SPITZ_IRQ_GPIO_CF_IRQ IRQ_GPIO(SPITZ_GPIO_CF_IRQ)
+-#define SPITZ_IRQ_GPIO_CF_CD IRQ_GPIO(SPITZ_GPIO_CF_CD)
+-#define SPITZ_IRQ_GPIO_CF2_IRQ IRQ_GPIO(SPITZ_GPIO_CF2_IRQ)
+-#define SPITZ_IRQ_GPIO_nSD_INT IRQ_GPIO(SPITZ_GPIO_nSD_INT)
++#define SPITZ_IRQ_GPIO_CF_IRQ IRQ_GPIO(SPITZ_GPIO_CF_IRQ)
++#define SPITZ_IRQ_GPIO_CF_CD IRQ_GPIO(SPITZ_GPIO_CF_CD)
++#define SPITZ_IRQ_GPIO_CF2_IRQ IRQ_GPIO(SPITZ_GPIO_CF2_IRQ)
++#define SPITZ_IRQ_GPIO_nSD_INT IRQ_GPIO(SPITZ_GPIO_nSD_INT)
+ #define SPITZ_IRQ_GPIO_nSD_DETECT IRQ_GPIO(SPITZ_GPIO_nSD_DETECT)
+
+ /*
+@@ -156,3 +274,5 @@
+ extern struct platform_device spitzscoop2_device;
+ extern struct platform_device spitzssp_device;
+ extern struct sharpsl_charger_machinfo spitz_pm_machinfo;
++
++#endif
+Index: linux-2.6.24/sound/arm/pxa2xx-ac97.c
+===================================================================
+--- linux-2.6.24.orig/sound/arm/pxa2xx-ac97.c 2008-01-24 22:58:37.000000000 +0000
++++ linux-2.6.24/sound/arm/pxa2xx-ac97.c 2008-02-13 13:49:22.000000000 +0000
+@@ -133,10 +133,10 @@
+ #ifdef CONFIG_PXA27x
+ /* warm reset broken on Bulverde,
+ so manually keep AC97 reset high */
+- pxa_gpio_mode(113 | GPIO_OUT | GPIO_DFLT_HIGH);
++ pxa_gpio_mode(GPIO113_AC97_RESET_N | GPIO_OUT | GPIO_DFLT_HIGH);
+ udelay(10);
+ GCR |= GCR_WARM_RST;
+- pxa_gpio_mode(113 | GPIO_ALT_FN_2_OUT);
++ pxa_gpio_mode(GPIO113_AC97_RESET_N_MD);
+ udelay(500);
+ #else
+ GCR |= GCR_WARM_RST|GCR_PRIRDY_IEN|GCR_SECRDY_IEN;
+@@ -335,7 +335,7 @@
+ pxa_gpio_mode(GPIO29_SDATA_IN_AC97_MD);
+ #ifdef CONFIG_PXA27x
+ /* Use GPIO 113 as AC97 Reset on Bulverde */
+- pxa_gpio_mode(113 | GPIO_ALT_FN_2_OUT);
++ pxa_gpio_mode(GPIO113_AC97_RESET_N_MD);
+ #endif
+ pxa_set_cken(CKEN_AC97, 1);
+