/* Select device by chipnr:
* first dev is @ 900
* second dev is @ 980
- *
+ *
* There are only two devices on MPC5200 */
/* initialize internal address storage */
continue;
}
-
+
if (mpc5200_init_device_node(candev->chip[chipnr], dn))
return -ENODEV;
/* free all chips memorey space - using internal address storage */
for (i = 0; i < candev->nr_all_chips; i++)
iounmap((void*)chips_addr[i]);
-
+
+ kfree(chips_addr);
+
return 0;
}
int mpc5200_reset(struct candevice_t *candev)
{
- int i;
+ int i;
DEBUGMSG("Resetting MSCAN chips ...\n");
for (i = 0; i < candev->nr_all_chips; i++)
return 0;
}
-int mpc5200_init_hw_data(struct candevice_t *candev)
+int mpc5200_init_hw_data(struct candevice_t *candev)
{
/* candev->res_addr = RESET_ADDR; */
candev->nr_82527_chips = NR_82527;
return 0;
}
+
+/* special function for midam board */
+int mpc5200_midam_init_hw_data(struct candevice_t *candev)
+{
+ /* use same init routine */
+ mpc5200_init_hw_data(candev);
+
+ /* modify chip count */
+ candev->nr_all_chips = NR_ALL_MIDAM;
+
+ return 0;
+}
+
int mpc5200_init_chip_data(struct candevice_t *candev, int chipnr)
{
mscan_fill_chipspecops(candev->chip[chipnr]);
int mpc5200_program_irq(struct candevice_t *candev)
{
- /* we don't use programmable interrupt on MPC5200 */
+ /* we don't use programmable interrupt on MPC5200 */
return 0;
}
return 0;
}
+int mpc5200_midam_register(struct hwspecops_t *hwspecops)
+{
+ /* use same register routine for MIDAM board */
+ mpc5200_register(hwspecops);
+
+ /* use specific init_hw_data */
+ hwspecops->init_hw_data = mpc5200_midam_init_hw_data;
+
+ return 0;
+}
int mpc5200_init_device_node(struct canchip_t * chip, struct device_node * devnode)
{
}
DEBUGMSG("Bound to io-addr: 0x%08x IRQ: %d\n", (unsigned int)chip->chip_base_addr, chip->chip_irq);
-
+
return 0;
}