Index: linux-2.6.16/arch/arm/mach-pxa/poodle.c
===================================================================
--- linux-2.6.16.orig/arch/arm/mach-pxa/poodle.c	2006-04-02 11:06:53.000000000 +0100
+++ linux-2.6.16/arch/arm/mach-pxa/poodle.c	2006-04-02 11:08:09.000000000 +0100
@@ -35,6 +35,8 @@
 #include <asm/arch/irda.h>
 #include <asm/arch/poodle.h>
 #include <asm/arch/pxafb.h>
+#include <asm/arch/sharpsl.h>
+#include <asm/arch/ssp.h>
 
 #include <asm/hardware/scoop.h>
 #include <asm/hardware/locomo.h>
@@ -125,6 +127,108 @@
 	.resource	= locomo_resources,
 };
 
+/*
+ * Temp hacks
+ */
+static struct ssp_dev corgi_ssp_dev;
+
+unsigned long corgi_get_hsync_len(void)
+{
+	return 0;
+}
+
+void corgi_put_hsync(void)
+{
+}
+
+void corgi_wait_hsync(void)
+{
+}
+
+unsigned long corgi_ssp_ads7846_putget(ulong data)
+{
+	unsigned long ret,flag;
+
+	ssp_write_word(&corgi_ssp_dev,data);
+	ret = ssp_read_word(&corgi_ssp_dev);
+
+	return ret;
+}
+
+/*
+ * NOTE: These functions should always be called in interrupt context
+ * and use the _lock and _unlock functions. They are very time sensitive.
+ */
+void corgi_ssp_ads7846_lock(void)
+{
+}
+
+void corgi_ssp_ads7846_unlock(void)
+{
+}
+
+void corgi_ssp_ads7846_put(ulong data)
+{
+	ssp_write_word(&corgi_ssp_dev, data);
+}
+
+unsigned long corgi_ssp_ads7846_get(void)
+{
+	return ssp_read_word(&corgi_ssp_dev);
+}
+
+EXPORT_SYMBOL(corgi_ssp_ads7846_putget);
+EXPORT_SYMBOL(corgi_ssp_ads7846_lock);
+EXPORT_SYMBOL(corgi_ssp_ads7846_unlock);
+EXPORT_SYMBOL(corgi_ssp_ads7846_put);
+EXPORT_SYMBOL(corgi_ssp_ads7846_get);
+
+static int __init poodle_ssp_init(void)
+{
+	int ret;
+
+	ret = ssp_init(&corgi_ssp_dev, 1, 0);
+
+	if (ret)
+		printk(KERN_ERR "Unable to register SSP handler!\n");
+	else {
+		ssp_disable(&corgi_ssp_dev);
+		ssp_config(&corgi_ssp_dev, (SSCR0_National | (SSCR0_DSS & 0x0b )), 0, 0, SSCR0_SerClkDiv(2));
+		SSCR0_P(1) = 0x11ab;
+		ssp_enable(&corgi_ssp_dev);
+	}
+
+	return ret;
+}
+
+
+/*
+ * Poodle Touch Screen Device
+ */
+static struct resource poodlets_resources[] = {
+	[0] = {
+		.start		= POODLE_IRQ_GPIO_TP_INT,
+		.end		= POODLE_IRQ_GPIO_TP_INT,
+		.flags		= IORESOURCE_IRQ,
+	},
+};
+
+static struct corgits_machinfo  poodle_ts_machinfo = {
+	.get_hsync_len   = corgi_get_hsync_len,
+	.put_hsync       = corgi_put_hsync,
+	.wait_hsync      = corgi_wait_hsync,
+};
+
+static struct platform_device poodlets_device = {
+	.name		= "corgi-ts",
+	.dev		= {
+		.platform_data	= &poodle_ts_machinfo,
+	},
+	.id		= -1,
+	.num_resources	= ARRAY_SIZE(poodlets_resources),
+	.resource	= poodlets_resources,
+};
+
 
 /*
  * MMC/SD Device
@@ -246,6 +350,7 @@
 static struct platform_device *devices[] __initdata = {
 	&locomo_device,
 	&poodle_scoop_device,
+	&poodlets_device,
 };
 
 static void __init poodle_init(void)
@@ -302,6 +407,7 @@
 	if (ret) {
 		printk(KERN_WARNING "poodle: Unable to register LoCoMo device\n");
 	}
+	poodle_ssp_init();
 }
 
 static void __init fixup_poodle(struct machine_desc *desc,
Index: linux-2.6.16/arch/arm/mach-pxa/Kconfig
===================================================================
--- linux-2.6.16.orig/arch/arm/mach-pxa/Kconfig	2006-04-02 11:06:20.000000000 +0100
+++ linux-2.6.16/arch/arm/mach-pxa/Kconfig	2006-04-02 11:07:00.000000000 +0100
@@ -65,6 +65,7 @@
 	bool "Enable Sharp SL-5600 (Poodle) Support"
 	depends PXA_SHARPSL_25x
 	select SHARP_LOCOMO
+	select PXA_SSP
 
 config MACH_CORGI
 	bool "Enable Sharp SL-C700 (Corgi) Support"
