1bf182bcc6e726cce2f02b699bd0fba787734554fUwe Kleine-König/* 2bf182bcc6e726cce2f02b699bd0fba787734554fUwe Kleine-König * Copyright (C) 2009-2010 Pengutronix 3bf182bcc6e726cce2f02b699bd0fba787734554fUwe Kleine-König * Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de> 4bf182bcc6e726cce2f02b699bd0fba787734554fUwe Kleine-König * 5bf182bcc6e726cce2f02b699bd0fba787734554fUwe Kleine-König * This program is free software; you can redistribute it and/or modify it under 6bf182bcc6e726cce2f02b699bd0fba787734554fUwe Kleine-König * the terms of the GNU General Public License version 2 as published by the 7bf182bcc6e726cce2f02b699bd0fba787734554fUwe Kleine-König * Free Software Foundation. 8bf182bcc6e726cce2f02b699bd0fba787734554fUwe Kleine-König */ 9bf182bcc6e726cce2f02b699bd0fba787734554fUwe Kleine-König#include <mach/hardware.h> 10bf182bcc6e726cce2f02b699bd0fba787734554fUwe Kleine-König#include <mach/devices-common.h> 11bf182bcc6e726cce2f02b699bd0fba787734554fUwe Kleine-König 125f3d1092a949b33d01c95b7f5e5a83672629f131Uwe Kleine-König#define imx_mxc_pwm_data_entry_single(soc, _id, _hwid, _size) \ 13bf182bcc6e726cce2f02b699bd0fba787734554fUwe Kleine-König { \ 145f3d1092a949b33d01c95b7f5e5a83672629f131Uwe Kleine-König .id = _id, \ 155f3d1092a949b33d01c95b7f5e5a83672629f131Uwe Kleine-König .iobase = soc ## _PWM ## _hwid ## _BASE_ADDR, \ 165f3d1092a949b33d01c95b7f5e5a83672629f131Uwe Kleine-König .iosize = _size, \ 175f3d1092a949b33d01c95b7f5e5a83672629f131Uwe Kleine-König .irq = soc ## _INT_PWM ## _hwid, \ 18bf182bcc6e726cce2f02b699bd0fba787734554fUwe Kleine-König } 195f3d1092a949b33d01c95b7f5e5a83672629f131Uwe Kleine-König#define imx_mxc_pwm_data_entry(soc, _id, _hwid, _size) \ 205f3d1092a949b33d01c95b7f5e5a83672629f131Uwe Kleine-König [_id] = imx_mxc_pwm_data_entry_single(soc, _id, _hwid, _size) 21bf182bcc6e726cce2f02b699bd0fba787734554fUwe Kleine-König 22bf182bcc6e726cce2f02b699bd0fba787734554fUwe Kleine-König#ifdef CONFIG_SOC_IMX21 23bf182bcc6e726cce2f02b699bd0fba787734554fUwe Kleine-Königconst struct imx_mxc_pwm_data imx21_mxc_pwm_data __initconst = 245f3d1092a949b33d01c95b7f5e5a83672629f131Uwe Kleine-König imx_mxc_pwm_data_entry_single(MX21, 0, , SZ_4K); 25bf182bcc6e726cce2f02b699bd0fba787734554fUwe Kleine-König#endif /* ifdef CONFIG_SOC_IMX21 */ 26bf182bcc6e726cce2f02b699bd0fba787734554fUwe Kleine-König 27972cc48207450ce6aeed416ac176fe4d0482a4a3Uwe Kleine-König#ifdef CONFIG_SOC_IMX25 285f3d1092a949b33d01c95b7f5e5a83672629f131Uwe Kleine-Königconst struct imx_mxc_pwm_data imx25_mxc_pwm_data[] __initconst = { 295f3d1092a949b33d01c95b7f5e5a83672629f131Uwe Kleine-König#define imx25_mxc_pwm_data_entry(_id, _hwid) \ 305f3d1092a949b33d01c95b7f5e5a83672629f131Uwe Kleine-König imx_mxc_pwm_data_entry(MX25, _id, _hwid, SZ_16K) 315f3d1092a949b33d01c95b7f5e5a83672629f131Uwe Kleine-König imx25_mxc_pwm_data_entry(0, 1), 325f3d1092a949b33d01c95b7f5e5a83672629f131Uwe Kleine-König imx25_mxc_pwm_data_entry(1, 2), 335f3d1092a949b33d01c95b7f5e5a83672629f131Uwe Kleine-König imx25_mxc_pwm_data_entry(2, 3), 345f3d1092a949b33d01c95b7f5e5a83672629f131Uwe Kleine-König imx25_mxc_pwm_data_entry(3, 4), 355f3d1092a949b33d01c95b7f5e5a83672629f131Uwe Kleine-König}; 36972cc48207450ce6aeed416ac176fe4d0482a4a3Uwe Kleine-König#endif /* ifdef CONFIG_SOC_IMX25 */ 375f3d1092a949b33d01c95b7f5e5a83672629f131Uwe Kleine-König 38bf182bcc6e726cce2f02b699bd0fba787734554fUwe Kleine-König#ifdef CONFIG_SOC_IMX27 39bf182bcc6e726cce2f02b699bd0fba787734554fUwe Kleine-Königconst struct imx_mxc_pwm_data imx27_mxc_pwm_data __initconst = 405f3d1092a949b33d01c95b7f5e5a83672629f131Uwe Kleine-König imx_mxc_pwm_data_entry_single(MX27, 0, , SZ_4K); 41bf182bcc6e726cce2f02b699bd0fba787734554fUwe Kleine-König#endif /* ifdef CONFIG_SOC_IMX27 */ 42bf182bcc6e726cce2f02b699bd0fba787734554fUwe Kleine-König 43076762aa52de48688f6e1b6999fe58d736479f37Fabio Estevam#ifdef CONFIG_SOC_IMX51 44076762aa52de48688f6e1b6999fe58d736479f37Fabio Estevamconst struct imx_mxc_pwm_data imx51_mxc_pwm_data[] __initconst = { 45076762aa52de48688f6e1b6999fe58d736479f37Fabio Estevam#define imx51_mxc_pwm_data_entry(_id, _hwid) \ 46076762aa52de48688f6e1b6999fe58d736479f37Fabio Estevam imx_mxc_pwm_data_entry(MX51, _id, _hwid, SZ_16K) 47076762aa52de48688f6e1b6999fe58d736479f37Fabio Estevam imx51_mxc_pwm_data_entry(0, 1), 48076762aa52de48688f6e1b6999fe58d736479f37Fabio Estevam imx51_mxc_pwm_data_entry(1, 2), 49076762aa52de48688f6e1b6999fe58d736479f37Fabio Estevam}; 50076762aa52de48688f6e1b6999fe58d736479f37Fabio Estevam#endif /* ifdef CONFIG_SOC_IMX51 */ 51076762aa52de48688f6e1b6999fe58d736479f37Fabio Estevam 52bf182bcc6e726cce2f02b699bd0fba787734554fUwe Kleine-Königstruct platform_device *__init imx_add_mxc_pwm( 53bf182bcc6e726cce2f02b699bd0fba787734554fUwe Kleine-König const struct imx_mxc_pwm_data *data) 54bf182bcc6e726cce2f02b699bd0fba787734554fUwe Kleine-König{ 55bf182bcc6e726cce2f02b699bd0fba787734554fUwe Kleine-König struct resource res[] = { 56bf182bcc6e726cce2f02b699bd0fba787734554fUwe Kleine-König { 57bf182bcc6e726cce2f02b699bd0fba787734554fUwe Kleine-König .start = data->iobase, 585f3d1092a949b33d01c95b7f5e5a83672629f131Uwe Kleine-König .end = data->iobase + data->iosize - 1, 59bf182bcc6e726cce2f02b699bd0fba787734554fUwe Kleine-König .flags = IORESOURCE_MEM, 60bf182bcc6e726cce2f02b699bd0fba787734554fUwe Kleine-König }, { 61bf182bcc6e726cce2f02b699bd0fba787734554fUwe Kleine-König .start = data->irq, 62bf182bcc6e726cce2f02b699bd0fba787734554fUwe Kleine-König .end = data->irq, 63bf182bcc6e726cce2f02b699bd0fba787734554fUwe Kleine-König .flags = IORESOURCE_IRQ, 64bf182bcc6e726cce2f02b699bd0fba787734554fUwe Kleine-König }, 65bf182bcc6e726cce2f02b699bd0fba787734554fUwe Kleine-König }; 66bf182bcc6e726cce2f02b699bd0fba787734554fUwe Kleine-König 675f3d1092a949b33d01c95b7f5e5a83672629f131Uwe Kleine-König return imx_add_platform_device("mxc_pwm", data->id, 68bf182bcc6e726cce2f02b699bd0fba787734554fUwe Kleine-König res, ARRAY_SIZE(res), NULL, 0); 69bf182bcc6e726cce2f02b699bd0fba787734554fUwe Kleine-König} 70