--- a/arch/arm/mach-bcm2708/bcm2708.c	2013-01-13 14:42:35.245626559 +0100
+++ b/arch/arm/mach-bcm2708/bcm2708.c	2013-01-13 18:30:55.078977954 +0100
@@ -54,6 +54,14 @@
 #include <mach/vcio.h>
 #include <mach/system.h>
 
+#include <linux/spi/ads7846.h>
+#include <linux/gpio.h>
+#include <linux/irq.h>
+
+/* http://lnxpps.de/rpie/
+ * also see arch/arm/mach-omap1/board-nokia770.c */
+#define ADS7846_PENINT_GPIO_PIN	25
+
 #include "bcm2708.h"
 #include "armctrl.h"
 #include "clock.h"
@@ -580,14 +588,46 @@
 	.resource = bcm2708_spi_resources,
 };
 
+#define HSD043I9W1_A \
+	.x_plate_ohms		= 750, /* hand-measured */ \
+	.y_plate_ohms		= 220, /* hand-measured */ \
+	.x_min			= 150, \
+	.x_max			= 3890, \
+	.y_min			= 240, \
+	.y_max			= 3820,
+
+static struct ads7846_platform_data ads7846_info = {
+	/* .vref_delay_usecs	= 100, */
+	.model			= 7846, /* equivalent to TSC2046 */
+	.vref_mv		= 3300, /* VREF is connected to VCC @ 3.3 V */
+	.debounce_max		= 10,
+	.debounce_tol		= 3,
+	.debounce_rep		= 1,
+	.gpio_pendown		= ADS7846_PENINT_GPIO_PIN,
+	HSD043I9W1_A
+};
+
 static struct spi_board_info bcm2708_spi_devices[] = {
+#if 1
+	{
+		.modalias	= "ads7846",
+		.max_speed_hz	= 2500000,
+		.bus_num	= 0,
+		.chip_select	= 0,
+		.mode		= SPI_MODE_0,
+		/* .irq		= unknown, defined later through bcm2708_ads7846_init */
+		.platform_data	= &ads7846_info,
+	},
+#else
 	{
 		.modalias = "spidev",
 		.max_speed_hz = 500000,
 		.bus_num = 0,
 		.chip_select = 0,
 		.mode = SPI_MODE_0,
-	}, {
+	},
+#endif
+	{
 		.modalias = "spidev",
 		.max_speed_hz = 500000,
 		.bus_num = 0,
@@ -596,6 +636,14 @@
 	}
 };
 
+static void __init bcm2708_ads7846_init(void)
+{
+	bcm2708_spi_devices[0].irq = gpio_to_irq(ADS7846_PENINT_GPIO_PIN);
+	printk(KERN_INFO "BCM2708 ads7846_init: got IRQ %d for PENDOWN INT\n",
+		bcm2708_spi_devices[0].irq);
+}
+
+
 static struct resource bcm2708_bsc0_resources[] = {
 	{
 		.start = BSC0_BASE,
@@ -722,6 +770,7 @@
 	system_serial_low = serial;
 
 #ifdef CONFIG_SPI
+	bcm2708_ads7846_init();
 	spi_register_board_info(bcm2708_spi_devices,
 			ARRAY_SIZE(bcm2708_spi_devices));
 #endif
