]> code.ossystems Code Review - openembedded-core.git/commitdiff
linux-rp-2.6.24: Add patches from OE.dev
authorRichard Purdie <richard@openedhand.com>
Sun, 1 Jun 2008 22:58:34 +0000 (22:58 +0000)
committerRichard Purdie <richard@openedhand.com>
Sun, 1 Jun 2008 22:58:34 +0000 (22:58 +0000)
git-svn-id: https://svn.o-hand.com/repos/poky/trunk@4570 311d38ba-8fff-0310-9ca6-ca027cbcb966

meta/packages/linux/linux-rp-2.6.24/htcuni.patch
meta/packages/linux/linux-rp-2.6.24/pxa27x-resume.patch [new file with mode: 0644]
meta/packages/linux/linux-rp-2.6.24/pxa2xx_udc-clock.patch [new file with mode: 0644]
meta/packages/linux/linux-rp-2.6.24/sharpsl-rc-r1.patch [new file with mode: 0644]
meta/packages/linux/linux-rp-2.6.24/sharpsl-rc-r2.patch [new file with mode: 0644]
meta/packages/linux/linux-rp-2.6.24/spitz_h_rewrite.patch [new file with mode: 0644]

index f462650566070111d22964945f22234be56c2a4a..8448c4ec061e7b8c93827dcc1b7d7e318b7a5a92 100644 (file)
  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 (file)
index 0000000..6447a0b
--- /dev/null
@@ -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 (file)
index 0000000..14c496a
--- /dev/null
@@ -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 (file)
index 0000000..bed41c5
--- /dev/null
@@ -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 (file)
index 0000000..6fb34ec
--- /dev/null
@@ -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 (file)
index 0000000..df6d5f6
--- /dev/null
@@ -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);