All of lore.kernel.org
 help / color / mirror / Atom feed
* [Xenomai-core] [PATCH] rtcan: mscan: fix build problems with recent kernel versions
@ 2009-05-25  7:42 Wolfgang Grandegger
  0 siblings, 0 replies; only message in thread
From: Wolfgang Grandegger @ 2009-05-25  7:42 UTC (permalink / raw)
  To: xenomai-core

This patch fixes build problems with recent kernel version due
to changes of the OpenFirmware device compatibility names.
Furthermore, it introduces a Kconfig option to leave the CAN
pin routing as-is (normally pre-configured by the boot-loader).

Signed-off-by: Wolfgang Grandegger <wg@domain.hid>
---
 ksrc/drivers/can/mscan/Kconfig            |    5 ++++-
 ksrc/drivers/can/mscan/rtcan_mscan.c      |   18 ++++++++++++++----
 ksrc/drivers/can/mscan/rtcan_mscan_regs.h |   12 +++++++++---
 3 files changed, 27 insertions(+), 8 deletions(-)

Index: xenomai-2.4/ksrc/drivers/can/mscan/rtcan_mscan.c
===================================================================
--- xenomai-2.4.orig/ksrc/drivers/can/mscan/rtcan_mscan.c	2009-05-25 08:25:44.478719020 +0200
+++ xenomai-2.4/ksrc/drivers/can/mscan/rtcan_mscan.c	2009-05-25 08:25:48.287395053 +0200
@@ -703,9 +703,11 @@
 static inline void __init mscan_gpio_config(void)
 {
     struct mpc5xxx_gpio *gpio = (struct mpc5xxx_gpio *)MPC5xxx_GPIO;
-    int can_to_psc2 = 0;
+    int can_to_psc2 = -1;
 
-#ifdef CONFIG_XENO_DRIVERS_CAN_MSCAN_PSC2
+#if defined(CONFIG_XENO_DRIVERS_CAN_MSCAN_ALT)
+    can_to_psc2 = 0;
+#elif defined(CONFIG_XENO_DRIVERS_CAN_MSCAN_PSC2)
     can_to_psc2 = 1;
 #endif
 
@@ -723,6 +725,12 @@
 		   "Please use PSC2 or I2C1/TMR01.\n", mscan_pins);	    
 	}
     }
+
+    if (!gpio || can_to_psc2 < 0) {
+	printk("%s: use pre-configure CAN routing\n", RTCAN_DRV_NAME);
+	return;
+    }
+
     if (can_to_psc2) {
 	gpio->port_config &= ~0x10000070;
 	gpio->port_config |= 0x00000010;
@@ -737,7 +745,7 @@
 static inline int mscan_get_config(unsigned long *addr,
 				   unsigned int *irq)
 {
-#ifdef CONFIG_PPC_MERGE
+#if defined(CONFIG_PPC_MERGE) || LINUX_VERSION_CODE > KERNEL_VERSION(2,6,27)
     /* Use Open Firmware device tree */
     struct device_node *np = NULL;
     unsigned int i;
@@ -746,7 +754,9 @@
     for (i = 0; i < RTCAN_MSCAN_DEVS; i++) {
 	struct resource r[2] = {};
 
-	np = of_find_compatible_node(np, "mscan", "mpc5200-mscan");
+	np = of_find_compatible_node(np, NULL, "fsl,mpc5200-mscan");
+	if (np == NULL)
+	    np = of_find_compatible_node(np, NULL, "mpc5200-mscan");
 	if (np == NULL)
 	    break;
 	ret = of_address_to_resource(np, 0, &r[0]);
Index: xenomai-2.4/ksrc/drivers/can/mscan/rtcan_mscan_regs.h
===================================================================
--- xenomai-2.4.orig/ksrc/drivers/can/mscan/rtcan_mscan_regs.h	2009-05-25 08:25:44.478719020 +0200
+++ xenomai-2.4/ksrc/drivers/can/mscan/rtcan_mscan_regs.h	2009-05-25 08:25:48.287718842 +0200
@@ -27,17 +27,23 @@
 
 #if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,20)
 #include <sysdev/fsl_soc.h>
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,22)
+#include <linux/of_platform.h>
+#else
 #include <asm/of_platform.h>
+#endif
 #include <asm/mpc52xx.h>
 #if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,24)
-static inline void __iomem *mpc52xx_find_and_map(const char *compatible)
+static inline void __iomem *mpc5xxx_gpio_find_and_map(void)
 {
 	struct device_node *ofn;
-	ofn = of_find_compatible_node(NULL, NULL, compatible);
+	ofn = of_find_compatible_node(NULL, NULL, "mpc5200-gpio");
+	if (!ofn)
+	    ofn = of_find_compatible_node(NULL, NULL, "fsl,mpc5200-gpio");
 	return ofn ? of_iomap(ofn, 0) : NULL;
 }
 #endif
-#define MPC5xxx_GPIO    mpc52xx_find_and_map("mpc5200-gpio")
+#define MPC5xxx_GPIO    mpc5xxx_gpio_find_and_map()
 #define mpc5xxx_gpio	mpc52xx_gpio
 #elif LINUX_VERSION_CODE < KERNEL_VERSION(2,6,10)
 #include <asm/mpc5xxx.h>
Index: xenomai-2.4/ksrc/drivers/can/mscan/Kconfig
===================================================================
--- xenomai-2.4.orig/ksrc/drivers/can/mscan/Kconfig	2009-05-25 08:25:44.478719020 +0200
+++ xenomai-2.4/ksrc/drivers/can/mscan/Kconfig	2009-05-25 08:25:48.290720662 +0200
@@ -27,9 +27,12 @@
 choice
 	depends on XENO_DRIVERS_CAN_MSCAN
 	prompt "Pin Configuration"
-	default I2C1/TMR01
+	default XENO_DRIVERS_CAN_MSCAN_PRE
 	help
 
+config XENO_DRIVERS_CAN_MSCAN_PRE
+	bool "Use pre-configured CAN routing"
+
 config XENO_DRIVERS_CAN_MSCAN_ALT
 	bool "CAN 1 on I2C1 pins, CAN 2 on TMR01 pins"
 


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2009-05-25  7:42 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-05-25  7:42 [Xenomai-core] [PATCH] rtcan: mscan: fix build problems with recent kernel versions Wolfgang Grandegger

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.