@@ -49,7 +49,7 @@
/* CAN controller SJA1000 (unsupported yet) */
#define PCM027_CAN_IRQ_GPIO 114
#define PCM027_CAN_IRQ IRQ_GPIO(PCM027_CAN_IRQ_GPIO)
-#define PCM027_CAN_IRQ_EDGE IRQ_TYPE_EDGE_FALLING
+#define PCM027_CAN_IRQ_EDGE IORESOURCE_IRQ_LOWEDGE
#define PCM027_CAN_PHYS 0x22000000
#define PCM027_CAN_SIZE 0x100
@@ -26,6 +26,7 @@
#include <linux/spi/spi.h>
#include <linux/spi/max7301.h>
#include <linux/leds.h>
+#include <linux/can/platform/sja1000.h>
#include <asm/mach-types.h>
#include <asm/mach/arch.h>
@@ -204,13 +205,50 @@ static struct platform_device pcm027_led_dev = {
#endif /* CONFIG_LEDS_GPIO */
/*
+ * SJA1000 CAN controller
+ */
+#if defined(CONFIG_CAN_SJA1000_PLATFORM) || defined(CONFIG_CAN_SJA1000_PLATFORM_MODULE)
+static struct resource pcm027_sja1000_resources[] = {
+ [0] = {
+ .start = PCM027_CAN_PHYS,
+ .end = PCM027_CAN_PHYS + PCM027_CAN_SIZE - 1,
+ .flags = IORESOURCE_MEM,
+ },
+ [1] = {
+ .start = PCM027_CAN_IRQ,
+ .end = PCM027_CAN_IRQ,
+ .flags = IORESOURCE_IRQ | PCM027_CAN_IRQ_EDGE,
+ },
+};
+
+static struct sja1000_platform_data pcm027_sja1000_platform_data = {
+ .osc_freq = 16000000,
+ .ocr = OCR_TX1_PULLDOWN | OCR_TX0_PUSHPULL,
+ .cdr = CDR_CBP,
+};
+
+static struct platform_device pcm027_sja1000_device = {
+ .name = "sja1000_platform",
+ .dev = {
+ .platform_data = &pcm027_sja1000_platform_data,
+ },
+ .num_resources = ARRAY_SIZE(pcm027_sja1000_resources),
+ .resource = pcm027_sja1000_resources,
+};
+#endif /* CONFIG_CAN_SJA1000_PLATFORM || CONFIG_CAN_SJA1000_PLATFORM_MODULE */
+
+
+/*
* declare the available device resources on this board
*/
static struct platform_device *devices[] __initdata = {
&smc91x_device,
&pcm027_flash,
#ifdef CONFIG_LEDS_GPIO
- &pcm027_led_dev
+ &pcm027_led_dev,
+#endif
+#if defined(CONFIG_CAN_SJA1000_PLATFORM) || defined(CONFIG_CAN_SJA1000_PLATFORM_MODULE)
+ &pcm027_sja1000_device,
#endif
};