- if (!can_request_io_region(candev->io_addr, candev->nr_all_chips * IO_RANGE, DEVICE_NAME)) {
- CANMSG("Unable to open port: 0x%lx\n",candev->io_addr);
- return -ENODEV;
+ int chipnr;
+ struct device_node * dn;
+ const char * of_devname = "can";
+
+ /* Workaround for OpenFormware */
+
+ /* Select device by chipnr:
+ * first dev is @ 900
+ * second dev is @ 980
+ *
+ * There are only two devices on MPC5200 */
+
+ /* initialize internal address storage */
+ chips_addr = (unsigned long*)kmalloc(candev->nr_all_chips * sizeof(unsigned long), GFP_KERNEL);
+
+ /* DEBUGMSG("Looking for device node '%s'\n", of_devname); */
+
+ chipnr = 0;
+ for_each_node_by_name(dn, of_devname)
+ {
+ /* DEBUGMSG(" got OF node (%s)...\n", of_devname); */
+
+ if (!of_device_is_available(dn))
+ {
+ DEBUGMSG("\tdevice not available\n");
+ continue;
+ }
+
+
+ if (mpc5200_init_device_node(candev->chip[chipnr], dn))
+ return -ENODEV;
+
+ /* fill received address to internal storage */
+ chips_addr[chipnr] = (unsigned long)candev->chip[chipnr]->chip_base_addr;
+
+ /* original MIDAM Shark board use only one CAN chip - this handles similar cases */
+ if (++chipnr >= candev->nr_all_chips)
+ break;