Skip to content

Commit

Permalink
imx: dynamically register flexcan devices for mx25 and mx35
Browse files Browse the repository at this point in the history
In order to make this patch compile, even if the flexcan driver with
it's header defining the platform data isn't merged yet, two ifdefs have
been added. They effect that the "imx_add_flexcan" function results in a
no-op function if the driver hasn't been activated.

These ifdefs can be removed after the flexcan driver has been merged.

Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
  • Loading branch information
Marc Kleine-Budde authored and Sascha Hauer committed Jul 26, 2010
1 parent a7d945a commit 61c6850
Show file tree
Hide file tree
Showing 6 changed files with 66 additions and 0 deletions.
5 changes: 5 additions & 0 deletions arch/arm/mach-mx25/devices-imx25.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,11 @@
#include <mach/mx25.h>
#include <mach/devices-common.h>

#define imx25_add_flexcan0(pdata) \
imx_add_flexcan(0, MX25_CAN1_BASE_ADDR, SZ_16K, MX25_INT_CAN1, pdata)
#define imx25_add_flexcan1(pdata) \
imx_add_flexcan(1, MX25_CAN2_BASE_ADDR, SZ_16K, MX25_INT_CAN2, pdata)

#define imx25_add_imx_i2c0(pdata) \
imx_add_imx_i2c(0, MX25_I2C1_BASE_ADDR, SZ_16K, MX25_INT_I2C1, pdata)
#define imx25_add_imx_i2c1(pdata) \
Expand Down
5 changes: 5 additions & 0 deletions arch/arm/mach-mx3/devices-imx35.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,11 @@
#include <mach/mx35.h>
#include <mach/devices-common.h>

#define imx35_add_flexcan0(pdata) \
imx_add_flexcan(0, MX35_CAN1_BASE_ADDR, SZ_16K, MX35_INT_CAN1, pdata)
#define imx35_add_flexcan1(pdata) \
imx_add_flexcan(1, MX35_CAN2_BASE_ADDR, SZ_16K, MX35_INT_CAN2, pdata)

#define imx35_add_imx_i2c0(pdata) \
imx_add_imx_i2c(0, MX35_I2C1_BASE_ADDR, SZ_4K, MX35_INT_I2C1, pdata)
#define imx35_add_imx_i2c1(pdata) \
Expand Down
4 changes: 4 additions & 0 deletions arch/arm/plat-mxc/devices/Kconfig
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
config IMX_HAVE_PLATFORM_FLEXCAN
select HAVE_CAN_FLEXCAN
bool

config IMX_HAVE_PLATFORM_IMX_I2C
bool

Expand Down
4 changes: 4 additions & 0 deletions arch/arm/plat-mxc/devices/Makefile
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
ifdef CONFIG_CAN_FLEXCAN
# the ifdef can be removed once the flexcan driver has been merged
obj-$(CONFIG_IMX_HAVE_PLATFORM_FLEXCAN) += platform-flexcan.o
endif
obj-$(CONFIG_IMX_HAVE_PLATFORM_IMX_I2C) += platform-imx-i2c.o
obj-$(CONFIG_IMX_HAVE_PLATFORM_IMX_UART) += platform-imx-uart.o
obj-$(CONFIG_IMX_HAVE_PLATFORM_MXC_NAND) += platform-mxc_nand.o
Expand Down
30 changes: 30 additions & 0 deletions arch/arm/plat-mxc/devices/platform-flexcan.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/*
* Copyright (C) 2010 Pengutronix, Marc Kleine-Budde <kernel@pengutronix.de>
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License version 2 as published by the
* Free Software Foundation.
*/

#include <mach/devices-common.h>

struct platform_device *__init imx_add_flexcan(int id,
resource_size_t iobase, resource_size_t iosize,
resource_size_t irq,
const struct flexcan_platform_data *pdata)
{
struct resource res[] = {
{
.start = iobase,
.end = iobase + iosize - 1,
.flags = IORESOURCE_MEM,
}, {
.start = irq,
.end = irq,
.flags = IORESOURCE_IRQ,
},
};

return imx_add_platform_device("flexcan", id, res, ARRAY_SIZE(res),
pdata, sizeof(*pdata));
}
18 changes: 18 additions & 0 deletions arch/arm/plat-mxc/include/mach/devices-common.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,24 @@ struct platform_device *imx_add_platform_device(const char *name, int id,
const struct resource *res, unsigned int num_resources,
const void *data, size_t size_data);

#if defined (CONFIG_CAN_FLEXCAN) || defined (CONFIG_CAN_FLEXCAN_MODULE)
#include <linux/can/platform/flexcan.h>
struct platform_device *__init imx_add_flexcan(int id,
resource_size_t iobase, resource_size_t iosize,
resource_size_t irq,
const struct flexcan_platform_data *pdata);
#else
/* the ifdef can be removed once the flexcan driver has been merged */
struct flexcan_platform_data;
static inline struct platform_device *__init imx_add_flexcan(int id,
resource_size_t iobase, resource_size_t iosize,
resource_size_t irq,
const struct flexcan_platform_data *pdata)
{
return NULL;
}
#endif

#include <mach/i2c.h>
struct platform_device *__init imx_add_imx_i2c(int id,
resource_size_t iobase, resource_size_t iosize, int irq,
Expand Down

0 comments on commit 61c6850

Please sign in to comment.