2008-07-05 10:02:48 +02:00
/*
* Copyright 2006 - 2007 Freescale Semiconductor , Inc . All Rights Reserved .
* Copyright 2008 Sascha Hauer , 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
* as published by the Free Software Foundation ; either version 2
* of the License , or ( at your option ) any later version .
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
* Foundation , Inc . , 51 Franklin Street , Fifth Floor ,
* Boston , MA 02110 - 1301 , USA .
*/
2009-05-04 13:13:52 +02:00
# include <linux/dma-mapping.h>
2008-07-05 10:02:48 +02:00
# include <linux/module.h>
# include <linux/platform_device.h>
# include <linux/serial.h>
2008-07-05 10:02:49 +02:00
# include <linux/gpio.h>
2008-08-05 16:14:15 +01:00
# include <mach/hardware.h>
[ARM] fix AT91, davinci, h720x, ks8695, msm, mx2, mx3, netx, omap1, omap2, pxa, s3c
arch/arm/mach-at91/at91cap9.c:337: error: 'NR_AIC_IRQS' undeclared here (not in a function)
arch/arm/mach-at91/at91rm9200.c:301: error: 'NR_AIC_IRQS' undeclared here (not in a function)
arch/arm/mach-at91/at91sam9260.c:351: error: 'NR_AIC_IRQS' undeclared here (not in a function)
arch/arm/mach-at91/at91sam9261.c:287: error: 'NR_AIC_IRQS' undeclared here (not in a function)
arch/arm/mach-at91/at91sam9263.c:312: error: 'NR_AIC_IRQS' undeclared here (not in a function)
arch/arm/mach-at91/at91sam9rl.c:304: error: 'NR_AIC_IRQS' undeclared here (not in a function)
arch/arm/mach-h720x/h7202-eval.c:38: error: implicit declaration of function 'IRQ_CHAINED_GPIOB'
arch/arm/mach-ks8695/devices.c:46: error: 'KS8695_IRQ_WAN_RX_STATUS' undeclared here (not in a function)
arch/arm/mach-msm/devices.c:28: error: 'INT_UART1' undeclared here (not in a function)
arch/arm/mach-mx2/devices.c:233: error: 'MXC_GPIO_IRQ_START' undeclared here (not in a function)
arch/arm/mach-mx3/devices.c:128: error: 'MXC_GPIO_IRQ_START' undeclared here (not in a function)
arch/arm/mach-omap1/mcbsp.c:140: error: 'INT_730_McBSP1RX' undeclared here (not in a function)
arch/arm/mach-omap1/mcbsp.c:165: error: 'INT_McBSP1RX' undeclared here (not in a function)
arch/arm/mach-omap1/mcbsp.c:200: error: 'INT_McBSP1RX' undeclared here (not in a function)
arch/arm/mach-omap2/board-apollon.c:286: error: implicit declaration of function 'omap_set_gpio_direction'
arch/arm/mach-omap2/mcbsp.c:154: error: 'INT_24XX_MCBSP1_IRQ_RX' undeclared here (not in a function)
arch/arm/mach-omap2/mcbsp.c:181: error: 'INT_24XX_MCBSP1_IRQ_RX' undeclared here (not in a function)
arch/arm/mach-pxa/e350.c:36: error: 'IRQ_BOARD_START' undeclared here (not in a function)
arch/arm/plat-s3c/dev-i2c0.c:32: error: 'IRQ_IIC' undeclared here (not in a function)
...
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2009-01-08 10:01:47 +00:00
# include <mach/irqs.h>
2009-04-02 12:38:41 -03:00
# include <mach/common.h>
2009-05-07 11:51:42 +02:00
# include <mach/mx3_camera.h>
2008-07-05 10:02:48 +02:00
2009-01-29 16:00:23 +01:00
# include "devices.h"
2008-07-05 10:02:49 +02:00
/* GPIO port description */
static struct mxc_gpio_port imx_gpio_ports [ ] = {
2009-06-23 12:12:00 +02:00
{
2008-07-05 10:02:49 +02:00
. chip . label = " gpio-0 " ,
. base = IO_ADDRESS ( GPIO1_BASE_ADDR ) ,
. irq = MXC_INT_GPIO1 ,
2008-12-18 11:08:55 +01:00
. virtual_irq_start = MXC_GPIO_IRQ_START ,
2009-06-23 12:12:00 +02:00
} , {
2008-07-05 10:02:49 +02:00
. chip . label = " gpio-1 " ,
. base = IO_ADDRESS ( GPIO2_BASE_ADDR ) ,
. irq = MXC_INT_GPIO2 ,
2008-12-18 11:08:55 +01:00
. virtual_irq_start = MXC_GPIO_IRQ_START + 32 ,
2009-06-23 12:12:00 +02:00
} , {
2008-07-05 10:02:49 +02:00
. chip . label = " gpio-2 " ,
. base = IO_ADDRESS ( GPIO3_BASE_ADDR ) ,
. irq = MXC_INT_GPIO3 ,
2008-12-18 11:08:55 +01:00
. virtual_irq_start = MXC_GPIO_IRQ_START + 64 ,
2008-07-05 10:02:49 +02:00
}
} ;
2010-06-10 17:11:06 +02:00
int __init imx3x_register_gpios ( void )
2008-07-05 10:02:49 +02:00
{
return mxc_gpio_init ( imx_gpio_ports , ARRAY_SIZE ( imx_gpio_ports ) ) ;
}
2008-12-01 14:15:39 -08:00
static struct resource mxc_w1_master_resources [ ] = {
{
. start = OWIRE_BASE_ADDR ,
. end = OWIRE_BASE_ADDR + SZ_4K - 1 ,
. flags = IORESOURCE_MEM ,
} ,
} ;
struct platform_device mxc_w1_master_device = {
. name = " mxc_w1 " ,
. id = 0 ,
. num_resources = ARRAY_SIZE ( mxc_w1_master_resources ) ,
. resource = mxc_w1_master_resources ,
} ;
2008-11-11 15:15:39 +01:00
2008-12-19 14:32:06 +01:00
# ifdef CONFIG_ARCH_MX31
static struct resource mxcsdhc0_resources [ ] = {
{
2010-10-20 17:44:30 +02:00
. start = MX31_MMC_SDHC1_BASE_ADDR ,
. end = MX31_MMC_SDHC1_BASE_ADDR + SZ_16K - 1 ,
2008-12-19 14:32:06 +01:00
. flags = IORESOURCE_MEM ,
} , {
2010-10-20 17:44:30 +02:00
. start = MX31_INT_MMC_SDHC1 ,
. end = MX31_INT_MMC_SDHC1 ,
2008-12-19 14:32:06 +01:00
. flags = IORESOURCE_IRQ ,
} ,
} ;
static struct resource mxcsdhc1_resources [ ] = {
{
2010-10-20 17:44:30 +02:00
. start = MX31_MMC_SDHC2_BASE_ADDR ,
. end = MX31_MMC_SDHC2_BASE_ADDR + SZ_16K - 1 ,
2008-12-19 14:32:06 +01:00
. flags = IORESOURCE_MEM ,
} , {
2010-10-20 17:44:30 +02:00
. start = MX31_INT_MMC_SDHC2 ,
. end = MX31_INT_MMC_SDHC2 ,
2008-12-19 14:32:06 +01:00
. flags = IORESOURCE_IRQ ,
} ,
} ;
struct platform_device mxcsdhc_device0 = {
. name = " mxc-mmc " ,
. id = 0 ,
. num_resources = ARRAY_SIZE ( mxcsdhc0_resources ) ,
. resource = mxcsdhc0_resources ,
} ;
struct platform_device mxcsdhc_device1 = {
. name = " mxc-mmc " ,
. id = 1 ,
. num_resources = ARRAY_SIZE ( mxcsdhc1_resources ) ,
. resource = mxcsdhc1_resources ,
} ;
2009-04-02 12:38:41 -03:00
static struct resource rnga_resources [ ] = {
{
. start = RNGA_BASE_ADDR ,
. end = RNGA_BASE_ADDR + 0x28 ,
. flags = IORESOURCE_MEM ,
} ,
} ;
struct platform_device mxc_rnga_device = {
. name = " mxc_rnga " ,
. id = - 1 ,
. num_resources = 1 ,
. resource = rnga_resources ,
} ;
2008-12-19 14:32:06 +01:00
# endif /* CONFIG_ARCH_MX31 */
2009-02-16 12:47:52 +01:00
/* i.MX31 Image Processing Unit */
/* The resource order is important! */
static struct resource mx3_ipu_rsrc [ ] = {
{
. start = IPU_CTRL_BASE_ADDR ,
. end = IPU_CTRL_BASE_ADDR + 0x5F ,
. flags = IORESOURCE_MEM ,
} , {
. start = IPU_CTRL_BASE_ADDR + 0x88 ,
. end = IPU_CTRL_BASE_ADDR + 0xB3 ,
. flags = IORESOURCE_MEM ,
} , {
. start = MXC_INT_IPU_SYN ,
. end = MXC_INT_IPU_SYN ,
. flags = IORESOURCE_IRQ ,
} , {
. start = MXC_INT_IPU_ERR ,
. end = MXC_INT_IPU_ERR ,
. flags = IORESOURCE_IRQ ,
} ,
} ;
struct platform_device mx3_ipu = {
. name = " ipu-core " ,
. id = - 1 ,
. num_resources = ARRAY_SIZE ( mx3_ipu_rsrc ) ,
. resource = mx3_ipu_rsrc ,
} ;
static struct resource fb_resources [ ] = {
{
. start = IPU_CTRL_BASE_ADDR + 0xB4 ,
. end = IPU_CTRL_BASE_ADDR + 0x1BF ,
. flags = IORESOURCE_MEM ,
} ,
} ;
struct platform_device mx3_fb = {
. name = " mx3_sdc_fb " ,
. id = - 1 ,
. num_resources = ARRAY_SIZE ( fb_resources ) ,
. resource = fb_resources ,
. dev = {
2009-05-07 11:51:42 +02:00
. coherent_dma_mask = DMA_BIT_MASK ( 32 ) ,
2009-02-16 12:47:52 +01:00
} ,
} ;
2009-02-06 15:38:51 +01:00
2009-05-07 11:51:42 +02:00
static struct resource camera_resources [ ] = {
{
. start = IPU_CTRL_BASE_ADDR + 0x60 ,
. end = IPU_CTRL_BASE_ADDR + 0x87 ,
. flags = IORESOURCE_MEM ,
} ,
} ;
struct platform_device mx3_camera = {
. name = " mx3-camera " ,
. id = 0 ,
. num_resources = ARRAY_SIZE ( camera_resources ) ,
. resource = camera_resources ,
. dev = {
. coherent_dma_mask = DMA_BIT_MASK ( 32 ) ,
} ,
} ;
2009-05-04 13:13:52 +02:00
static struct resource otg_resources [ ] = {
{
2009-04-17 16:52:25 +02:00
. start = MX31_OTG_BASE_ADDR ,
. end = MX31_OTG_BASE_ADDR + 0x1ff ,
2009-05-04 13:13:52 +02:00
. flags = IORESOURCE_MEM ,
} , {
. start = MXC_INT_USB3 ,
. end = MXC_INT_USB3 ,
. flags = IORESOURCE_IRQ ,
} ,
} ;
static u64 otg_dmamask = DMA_BIT_MASK ( 32 ) ;
/* OTG gadget device */
struct platform_device mxc_otg_udc_device = {
. name = " fsl-usb2-udc " ,
. id = - 1 ,
. dev = {
. dma_mask = & otg_dmamask ,
. coherent_dma_mask = DMA_BIT_MASK ( 32 ) ,
} ,
. resource = otg_resources ,
. num_resources = ARRAY_SIZE ( otg_resources ) ,
} ;
2009-06-25 14:11:50 +02:00
/* OTG host */
struct platform_device mxc_otg_host = {
. name = " mxc-ehci " ,
. id = 0 ,
. dev = {
. coherent_dma_mask = 0xffffffff ,
. dma_mask = & otg_dmamask ,
} ,
. resource = otg_resources ,
. num_resources = ARRAY_SIZE ( otg_resources ) ,
} ;
/* USB host 1 */
static u64 usbh1_dmamask = ~ ( u32 ) 0 ;
static struct resource mxc_usbh1_resources [ ] = {
{
2009-04-17 16:52:25 +02:00
. start = MX31_OTG_BASE_ADDR + 0x200 ,
. end = MX31_OTG_BASE_ADDR + 0x3ff ,
2009-06-25 14:11:50 +02:00
. flags = IORESOURCE_MEM ,
} , {
. start = MXC_INT_USB1 ,
. end = MXC_INT_USB1 ,
. flags = IORESOURCE_IRQ ,
} ,
} ;
struct platform_device mxc_usbh1 = {
. name = " mxc-ehci " ,
. id = 1 ,
. dev = {
. coherent_dma_mask = 0xffffffff ,
. dma_mask = & usbh1_dmamask ,
} ,
. resource = mxc_usbh1_resources ,
. num_resources = ARRAY_SIZE ( mxc_usbh1_resources ) ,
} ;
/* USB host 2 */
static u64 usbh2_dmamask = ~ ( u32 ) 0 ;
static struct resource mxc_usbh2_resources [ ] = {
{
2009-04-17 16:52:25 +02:00
. start = MX31_OTG_BASE_ADDR + 0x400 ,
. end = MX31_OTG_BASE_ADDR + 0x5ff ,
2009-06-25 14:11:50 +02:00
. flags = IORESOURCE_MEM ,
} , {
. start = MXC_INT_USB2 ,
. end = MXC_INT_USB2 ,
. flags = IORESOURCE_IRQ ,
} ,
} ;
struct platform_device mxc_usbh2 = {
. name = " mxc-ehci " ,
. id = 2 ,
. dev = {
. coherent_dma_mask = 0xffffffff ,
. dma_mask = & usbh2_dmamask ,
} ,
. resource = mxc_usbh2_resources ,
. num_resources = ARRAY_SIZE ( mxc_usbh2_resources ) ,
} ;
2010-03-19 18:16:37 +03:00
static struct resource imx_wdt_resources [ ] = {
{
. flags = IORESOURCE_MEM ,
} ,
} ;
struct platform_device imx_wdt_device0 = {
2010-04-29 10:03:18 +02:00
. name = " imx2-wdt " ,
2010-03-19 18:16:37 +03:00
. id = 0 ,
. num_resources = ARRAY_SIZE ( imx_wdt_resources ) ,
. resource = imx_wdt_resources ,
} ;
2010-03-24 14:32:17 +03:00
static struct resource imx_rtc_resources [ ] = {
{
. start = MX31_RTC_BASE_ADDR ,
. end = MX31_RTC_BASE_ADDR + 0x3fff ,
. flags = IORESOURCE_MEM ,
} ,
{
. start = MX31_INT_RTC ,
. flags = IORESOURCE_IRQ ,
} ,
} ;
struct platform_device imx_rtc_device0 = {
. name = " mxc_rtc " ,
. id = - 1 ,
. num_resources = ARRAY_SIZE ( imx_rtc_resources ) ,
. resource = imx_rtc_resources ,
} ;
2010-05-19 11:33:43 +02:00
static struct resource imx_kpp_resources [ ] = {
{
. start = MX3x_KPP_BASE_ADDR ,
. end = MX3x_KPP_BASE_ADDR + 0xf ,
. flags = IORESOURCE_MEM
} , {
. start = MX3x_INT_KPP ,
. end = MX3x_INT_KPP ,
. flags = IORESOURCE_IRQ ,
} ,
} ;
struct platform_device imx_kpp_device = {
. name = " imx-keypad " ,
. id = - 1 ,
. num_resources = ARRAY_SIZE ( imx_kpp_resources ) ,
. resource = imx_kpp_resources ,
} ;
2010-03-19 18:16:37 +03:00
static int __init mx3_devices_init ( void )
2009-02-06 15:38:51 +01:00
{
2010-06-16 12:23:11 +02:00
# if defined(CONFIG_ARCH_MX31)
2009-02-06 15:38:51 +01:00
if ( cpu_is_mx31 ( ) ) {
2010-03-19 18:16:37 +03:00
imx_wdt_resources [ 0 ] . start = MX31_WDOG_BASE_ADDR ;
imx_wdt_resources [ 0 ] . end = MX31_WDOG_BASE_ADDR + 0x3fff ;
2009-04-02 12:38:41 -03:00
mxc_register_device ( & mxc_rnga_device , NULL ) ;
2009-02-06 15:38:51 +01:00
}
2010-06-16 12:23:11 +02:00
# endif
# if defined(CONFIG_ARCH_MX35)
2009-02-06 15:38:51 +01:00
if ( cpu_is_mx35 ( ) ) {
2009-04-17 16:52:25 +02:00
otg_resources [ 0 ] . start = MX35_OTG_BASE_ADDR ;
otg_resources [ 0 ] . end = MX35_OTG_BASE_ADDR + 0x1ff ;
otg_resources [ 1 ] . start = MXC_INT_USBOTG ;
otg_resources [ 1 ] . end = MXC_INT_USBOTG ;
mxc_usbh1_resources [ 0 ] . start = MX35_OTG_BASE_ADDR + 0x400 ;
mxc_usbh1_resources [ 0 ] . end = MX35_OTG_BASE_ADDR + 0x5ff ;
mxc_usbh1_resources [ 1 ] . start = MXC_INT_USBHS ;
mxc_usbh1_resources [ 1 ] . end = MXC_INT_USBHS ;
2010-03-19 18:16:37 +03:00
imx_wdt_resources [ 0 ] . start = MX35_WDOG_BASE_ADDR ;
imx_wdt_resources [ 0 ] . end = MX35_WDOG_BASE_ADDR + 0x3fff ;
2009-02-06 15:38:51 +01:00
}
2010-06-16 12:23:11 +02:00
# endif
2009-02-06 15:38:51 +01:00
return 0 ;
}
subsys_initcall ( mx3_devices_init ) ;