diff -Nurd a/arch/arm/mach-omap2/board-overo.c b/arch/arm/mach-omap2/board-overo.c
--- a/arch/arm/mach-omap2/board-overo.c	2009-09-26 13:06:18.000000000 +0200
+++ b/arch/arm/mach-omap2/board-overo.c	2009-09-30 16:43:57.000000000 +0200
@@ -56,6 +56,7 @@
 #define OVERO_GPIO_BT_XGATE	15
 #define OVERO_GPIO_W2W_NRESET	16
 #define OVERO_GPIO_PENDOWN	114
+#define OVERO_GPIO_CAN_INT	114
 #define OVERO_GPIO_BT_NRESET	164
 #define OVERO_GPIO_USBH_CPEN	168
 #define OVERO_GPIO_USBH_NRESET	183
@@ -95,7 +96,7 @@
 };
 
 static void __init overo_ads7846_init(void)
-{
+{/*
 	if ((gpio_request(OVERO_GPIO_PENDOWN, "ADS7846_PENDOWN") == 0) &&
 	    (gpio_direction_input(OVERO_GPIO_PENDOWN) == 0)) {
 		gpio_export(OVERO_GPIO_PENDOWN, 0);
@@ -103,12 +104,72 @@
 		printk(KERN_ERR "could not obtain gpio for ADS7846_PENDOWN\n");
 		return;
 	}
-}
+*/}
 
 #else
 static inline void __init overo_ads7846_init(void) { return; }
 #endif
 
+/* CAN mcp251x SPI driver
+   Added by Erik Calissendorff 2009-09-06 */
+
+#include <linux/spi/mcp251x.h>
+
+static struct omap2_mcspi_device_config mcp251x_mcspi_config = {
+	.turbo_mode	= 0,
+	.single_channel	= 1,	/* 0: slave, 1: master */
+};
+
+#define MCP251X_INSTRUCTION_RESET		0xC0
+/* MPC251x registers */
+#define MCP251X_CANSTAT	      0x0e
+#define MCP251X_CANCTRL	      0x0f
+
+static int mcp251x_setup(struct spi_device *spi)
+{
+	u8 spi_tx = MCP251X_INSTRUCTION_RESET;
+	int ret;
+
+	printk(KERN_INFO "Running: mcp251x_setup");
+	gpio_set_value(174, 1);
+	msleep(5);
+	gpio_set_value(174, 0);
+	msleep(5);
+
+	ret=spi_write(spi, &spi_tx, 1);	
+
+	msleep(5);
+	gpio_set_value(174, 1);
+
+	msleep(5);
+	gpio_set_value(174, 0);
+
+	return 0;
+}
+
+static struct mcp251x_platform_data mcp251x_config = {
+	.oscillator_frequency = 20000000,
+	.board_specific_setup = &mcp251x_setup,
+	.model = CAN_MCP251X_MCP2515, 
+	.power_enable = NULL,
+	.transceiver_enable = NULL,
+};
+
+static void __init overo_mcp251x_init(void)
+{
+printk(KERN_INFO "Running: overo_mcp251x_init\n"); 
+	if ((gpio_request(OVERO_GPIO_CAN_INT, "MCP251X_INTERRUPT") == 0) &&
+	    (gpio_direction_input(OVERO_GPIO_CAN_INT) == 0)) {
+		gpio_export(OVERO_GPIO_CAN_INT, 0);
+	} else {
+		printk(KERN_ERR "could not obtain gpio for MCP251X_INTERRUPT\n");
+		return;
+	}
+}
+
+/* End of CAN mcp251x SPI driver */
+
+
 #if defined(CONFIG_SMSC911X) || defined(CONFIG_SMSC911X_MODULE)
 
 #include <linux/smsc911x.h>
@@ -510,6 +571,7 @@
 }
 
 static struct spi_board_info overo_spi_board_info[] __initdata = {
+/*
 #if defined(CONFIG_TOUCHSCREEN_ADS7846) || \
 	defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE)
 	{
@@ -533,11 +595,25 @@
 		.mode			= SPI_MODE_3,
 	},
 #endif
+*/
+	{
+		.modalias		= "mcp251x",
+		.bus_num		= 1,
+		.chip_select		= 0,
+		// this can be increased to 10MHz with 15 part
+		// SPI clock is divided down 13MHz, so granularity is not too good
+		// 13MHz, 6.5MHz, 4.33MHz, 3.25MHz, 2.6MHz, 2.1666MHz etc.
+		.max_speed_hz = 6500000,
+		.controller_data	= &mcp251x_mcspi_config,
+		.irq			= OMAP_GPIO_IRQ(OVERO_GPIO_CAN_INT),
+		.platform_data		= &mcp251x_config,
+	},
 };
 
 static int __init overo_spi_init(void)
 {
-	overo_ads7846_init();
+//	overo_ads7846_init();
+	overo_mcp251x_init();
 	spi_register_board_info(overo_spi_board_info,
 			ARRAY_SIZE(overo_spi_board_info));
 	return 0;
diff -Nurd a/include/linux/spi/mcp251x.h b/include/linux/spi/mcp251x.h
--- a/include/linux/spi/mcp251x.h	1970-01-01 01:00:00.000000000 +0100
+++ b/include/linux/spi/mcp251x.h	2009-09-26 13:41:00.000000000 +0200
@@ -0,0 +1,34 @@
+#ifndef __CAN_PLATFORM_MCP251X_H__
+#define __CAN_PLATFORM_MCP251X_H__
+
+/*
+ *
+ * CAN bus driver for Microchip 251x CAN Controller with SPI Interface
+ *
+ */
+
+/**
+ * struct mcp251x_platform_data - MCP251X SPI CAN controller platform data
+ * @oscillator_frequency:       - oscillator frequency in Hz
+ * @model:                      - actual type of chip
+ * @board_specific_setup:       - called before probing the chip (power,reset)
+ * @transceiver_enable:         - called to power on/off the transceiver
+ * @power_enable:               - called to power on/off the mcp *and* the
+ *                                transceiver
+ *
+ * Please note that you should define power_enable or transceiver_enable or
+ * none of them. Defining both of them is no use.
+ *
+ */
+
+struct mcp251x_platform_data {
+	unsigned long oscillator_frequency;
+	int model;
+#define CAN_MCP251X_MCP2510 0
+#define CAN_MCP251X_MCP2515 1
+	int (*board_specific_setup)(struct spi_device *spi);
+	int (*transceiver_enable)(int enable);
+	int (*power_enable) (int enable);
+};
+
+#endif /* __CAN_PLATFORM_MCP251X_H__ */
