Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5f3d1092 authored by Uwe Kleine-König's avatar Uwe Kleine-König
Browse files

ARM: mx25: dynamically allocate mxc_pwm devices

parent 224b8c83
Loading
Loading
Loading
Loading
+0 −76
Original line number Diff line number Diff line
@@ -22,63 +22,6 @@
#include <mach/mx25.h>
#include <mach/irqs.h>

static struct resource mxc_pwm_resources0[] = {
	{
		.start	= 0x53fe0000,
		.end	= 0x53fe3fff,
		.flags	= IORESOURCE_MEM,
	}, {
		.start   = 26,
		.end     = 26,
		.flags   = IORESOURCE_IRQ,
	}
};

struct platform_device mxc_pwm_device0 = {
	.name = "mxc_pwm",
	.id = 0,
	.num_resources = ARRAY_SIZE(mxc_pwm_resources0),
	.resource = mxc_pwm_resources0,
};

static struct resource mxc_pwm_resources1[] = {
	{
		.start	= 0x53fa0000,
		.end	= 0x53fa3fff,
		.flags	= IORESOURCE_MEM,
	}, {
		.start   = 36,
		.end     = 36,
		.flags   = IORESOURCE_IRQ,
	}
};

struct platform_device mxc_pwm_device1 = {
	.name = "mxc_pwm",
	.id = 1,
	.num_resources = ARRAY_SIZE(mxc_pwm_resources1),
	.resource = mxc_pwm_resources1,
};

static struct resource mxc_pwm_resources2[] = {
	{
		.start	= 0x53fa8000,
		.end	= 0x53fabfff,
		.flags	= IORESOURCE_MEM,
	}, {
		.start   = 41,
		.end     = 41,
		.flags   = IORESOURCE_IRQ,
	}
};

struct platform_device mxc_pwm_device2 = {
	.name = "mxc_pwm",
	.id = 2,
	.num_resources = ARRAY_SIZE(mxc_pwm_resources2),
	.resource = mxc_pwm_resources2,
};

static struct resource mxc_keypad_resources[] = {
	{
		.start	= 0x43fa8000,
@@ -98,25 +41,6 @@ struct platform_device mxc_keypad_device = {
	.resource = mxc_keypad_resources,
};

static struct resource mxc_pwm_resources3[] = {
	{
		.start	= 0x53fc8000,
		.end	= 0x53fcbfff,
		.flags	= IORESOURCE_MEM,
	}, {
		.start   = 42,
		.end     = 42,
		.flags   = IORESOURCE_IRQ,
	}
};

struct platform_device mxc_pwm_device3 = {
	.name = "mxc_pwm",
	.id = 3,
	.num_resources = ARRAY_SIZE(mxc_pwm_resources3),
	.resource = mxc_pwm_resources3,
};

static struct mxc_gpio_port imx_gpio_ports[] = {
	{
		.chip.label = "gpio-0",
+0 −4
Original line number Diff line number Diff line
extern struct platform_device mxc_pwm_device0;
extern struct platform_device mxc_pwm_device1;
extern struct platform_device mxc_pwm_device2;
extern struct platform_device mxc_pwm_device3;
extern struct platform_device mxc_keypad_device;
extern struct platform_device mx25_rtc_device;
extern struct platform_device mx25_fb_device;
+22 −7
Original line number Diff line number Diff line
@@ -9,20 +9,35 @@
#include <mach/hardware.h>
#include <mach/devices-common.h>

#define imx_mxc_pwm_data_entry_single(soc)				\
#define imx_mxc_pwm_data_entry_single(soc, _id, _hwid, _size)		\
	{								\
		.iobase = soc ## _PWM_BASE_ADDR,			\
		.irq = soc ## _INT_PWM,					\
		.id = _id,						\
		.iobase = soc ## _PWM ## _hwid ## _BASE_ADDR,		\
		.iosize = _size,					\
		.irq = soc ## _INT_PWM ## _hwid,			\
	}
#define imx_mxc_pwm_data_entry(soc, _id, _hwid, _size)			\
	[_id] = imx_mxc_pwm_data_entry_single(soc, _id, _hwid, _size)

#ifdef CONFIG_SOC_IMX21
const struct imx_mxc_pwm_data imx21_mxc_pwm_data __initconst =
	imx_mxc_pwm_data_entry_single(MX21);
	imx_mxc_pwm_data_entry_single(MX21, 0, , SZ_4K);
#endif /* ifdef CONFIG_SOC_IMX21 */

#ifdef CONFIG_ARCH_MX25
const struct imx_mxc_pwm_data imx25_mxc_pwm_data[] __initconst = {
#define imx25_mxc_pwm_data_entry(_id, _hwid)				\
	imx_mxc_pwm_data_entry(MX25, _id, _hwid, SZ_16K)
	imx25_mxc_pwm_data_entry(0, 1),
	imx25_mxc_pwm_data_entry(1, 2),
	imx25_mxc_pwm_data_entry(2, 3),
	imx25_mxc_pwm_data_entry(3, 4),
};
#endif

#ifdef CONFIG_SOC_IMX27
const struct imx_mxc_pwm_data imx27_mxc_pwm_data __initconst =
	imx_mxc_pwm_data_entry_single(MX27);
	imx_mxc_pwm_data_entry_single(MX27, 0, , SZ_4K);
#endif /* ifdef CONFIG_SOC_IMX27 */

struct platform_device *__init imx_add_mxc_pwm(
@@ -31,7 +46,7 @@ struct platform_device *__init imx_add_mxc_pwm(
	struct resource res[] = {
		{
			.start = data->iobase,
			.end = data->iobase + SZ_4K - 1,
			.end = data->iobase + data->iosize - 1,
			.flags = IORESOURCE_MEM,
		}, {
			.start = data->irq,
@@ -40,6 +55,6 @@ struct platform_device *__init imx_add_mxc_pwm(
		},
	};

	return imx_add_platform_device("mxc_pwm", 0,
	return imx_add_platform_device("mxc_pwm", data->id,
			res, ARRAY_SIZE(res), NULL, 0);
}
+2 −0
Original line number Diff line number Diff line
@@ -217,7 +217,9 @@ struct platform_device *__init imx_add_mxc_nand(
		const struct mxc_nand_platform_data *pdata);

struct imx_mxc_pwm_data {
	int id;
	resource_size_t iobase;
	resource_size_t iosize;
	resource_size_t irq;
};
struct platform_device *__init imx_add_mxc_pwm(
+8 −0
Original line number Diff line number Diff line
@@ -19,10 +19,14 @@
#define MX25_CRM_BASE_ADDR		(MX25_AIPS2_BASE_ADDR + 0x80000)
#define MX25_GPT1_BASE_ADDR		(MX25_AIPS2_BASE_ADDR + 0x90000)
#define MX25_GPIO4_BASE_ADDR		(MX25_AIPS2_BASE_ADDR + 0x9c000)
#define MX25_PWM2_BASE_ADDR		(MX25_AIPS2_BASE_ADDR + 0xa0000)
#define MX25_GPIO3_BASE_ADDR		(MX25_AIPS2_BASE_ADDR + 0xa4000)
#define MX25_PWM3_BASE_ADDR		(MX25_AIPS2_BASE_ADDR + 0xa8000)
#define MX25_PWM4_BASE_ADDR		(MX25_AIPS2_BASE_ADDR + 0xc8000)
#define MX25_GPIO1_BASE_ADDR		(MX25_AIPS2_BASE_ADDR + 0xcc000)
#define MX25_GPIO2_BASE_ADDR		(MX25_AIPS2_BASE_ADDR + 0xd0000)
#define MX25_WDOG_BASE_ADDR		(MX25_AIPS2_BASE_ADDR + 0xdc000)
#define MX25_PWM1_BASE_ADDR		(MX25_AIPS2_BASE_ADDR + 0xe0000)

#define MX25_UART1_BASE_ADDR		0x43f90000
#define MX25_UART2_BASE_ADDR		0x43f94000
@@ -66,13 +70,17 @@
#define MX25_INT_UART3		18
#define MX25_INT_KPP		24
#define MX25_INT_DRYICE		25
#define MX25_INT_PWM1		26
#define MX25_INT_UART2		32
#define MX25_INT_NFC		33
#define MX25_INT_SDMA		34
#define MX25_INT_USB_HS		35
#define MX25_INT_PWM2		36
#define MX25_INT_USB_OTG	37
#define MX25_INT_LCDC		39
#define MX25_INT_UART5		40
#define MX25_INT_PWM3		41
#define MX25_INT_PWM4		42
#define MX25_INT_CAN1		43
#define MX25_INT_CAN2		44
#define MX25_INT_UART1		45