1/* 2 * Copyright (C) 2010 Pengutronix, Marc Kleine-Budde <kernel@pengutronix.de> 3 * 4 * This program is free software; you can redistribute it and/or modify it under 5 * the terms of the GNU General Public License version 2 as published by the 6 * Free Software Foundation. 7 */ 8#include "../hardware.h" 9#include "devices-common.h" 10 11#define imx_flexcan_data_entry_single(soc, _id, _hwid, _size) \ 12 { \ 13 .id = _id, \ 14 .iobase = soc ## _CAN ## _hwid ## _BASE_ADDR, \ 15 .iosize = _size, \ 16 .irq = soc ## _INT_CAN ## _hwid, \ 17 } 18 19#define imx_flexcan_data_entry(soc, _id, _hwid, _size) \ 20 [_id] = imx_flexcan_data_entry_single(soc, _id, _hwid, _size) 21 22#ifdef CONFIG_SOC_IMX25 23const struct imx_flexcan_data imx25_flexcan_data[] __initconst = { 24#define imx25_flexcan_data_entry(_id, _hwid) \ 25 imx_flexcan_data_entry(MX25, _id, _hwid, SZ_16K) 26 imx25_flexcan_data_entry(0, 1), 27 imx25_flexcan_data_entry(1, 2), 28}; 29#endif /* ifdef CONFIG_SOC_IMX25 */ 30 31#ifdef CONFIG_SOC_IMX35 32const struct imx_flexcan_data imx35_flexcan_data[] __initconst = { 33#define imx35_flexcan_data_entry(_id, _hwid) \ 34 imx_flexcan_data_entry(MX35, _id, _hwid, SZ_16K) 35 imx35_flexcan_data_entry(0, 1), 36 imx35_flexcan_data_entry(1, 2), 37}; 38#endif /* ifdef CONFIG_SOC_IMX35 */ 39 40struct platform_device *__init imx_add_flexcan( 41 const struct imx_flexcan_data *data) 42{ 43 struct resource res[] = { 44 { 45 .start = data->iobase, 46 .end = data->iobase + data->iosize - 1, 47 .flags = IORESOURCE_MEM, 48 }, { 49 .start = data->irq, 50 .end = data->irq, 51 .flags = IORESOURCE_IRQ, 52 }, 53 }; 54 55 return imx_add_platform_device("flexcan", data->id, 56 res, ARRAY_SIZE(res), NULL, 0); 57} 58