2008-09-11 01:00:53 +04:00
/* linux/arch/arm/mach-msm/devices.c
*
* Copyright ( C ) 2008 Google , Inc .
*
* This software is licensed under the terms of the GNU General Public
* License version 2 , as published by the Free Software Foundation , and
* may be copied , distributed , and modified under those terms .
*
* 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 .
*
*/
# include <linux/kernel.h>
# include <linux/platform_device.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 13:01:47 +03:00
# include <mach/irqs.h>
2008-09-11 01:00:53 +04:00
# include <mach/msm_iomap.h>
# include "devices.h"
# include <asm/mach/flash.h>
# include <linux/mtd/nand.h>
# include <linux/mtd/partitions.h>
2008-11-11 03:30:27 +03:00
# include <mach/mmc.h>
2008-09-11 01:00:53 +04:00
static struct resource resources_uart1 [ ] = {
{
. start = INT_UART1 ,
. end = INT_UART1 ,
. flags = IORESOURCE_IRQ ,
} ,
{
. start = MSM_UART1_PHYS ,
. end = MSM_UART1_PHYS + MSM_UART1_SIZE - 1 ,
. flags = IORESOURCE_MEM ,
} ,
} ;
static struct resource resources_uart2 [ ] = {
{
. start = INT_UART2 ,
. end = INT_UART2 ,
. flags = IORESOURCE_IRQ ,
} ,
{
. start = MSM_UART2_PHYS ,
. end = MSM_UART2_PHYS + MSM_UART2_SIZE - 1 ,
. flags = IORESOURCE_MEM ,
} ,
} ;
static struct resource resources_uart3 [ ] = {
{
. start = INT_UART3 ,
. end = INT_UART3 ,
. flags = IORESOURCE_IRQ ,
} ,
{
. start = MSM_UART3_PHYS ,
. end = MSM_UART3_PHYS + MSM_UART3_SIZE - 1 ,
. flags = IORESOURCE_MEM ,
} ,
} ;
struct platform_device msm_device_uart1 = {
. name = " msm_serial " ,
. id = 0 ,
. num_resources = ARRAY_SIZE ( resources_uart1 ) ,
. resource = resources_uart1 ,
} ;
struct platform_device msm_device_uart2 = {
. name = " msm_serial " ,
. id = 1 ,
. num_resources = ARRAY_SIZE ( resources_uart2 ) ,
. resource = resources_uart2 ,
} ;
struct platform_device msm_device_uart3 = {
. name = " msm_serial " ,
. id = 2 ,
. num_resources = ARRAY_SIZE ( resources_uart3 ) ,
. resource = resources_uart3 ,
} ;
static struct resource resources_i2c [ ] = {
{
. start = MSM_I2C_PHYS ,
. end = MSM_I2C_PHYS + MSM_I2C_SIZE - 1 ,
. flags = IORESOURCE_MEM ,
} ,
{
. start = INT_PWB_I2C ,
. end = INT_PWB_I2C ,
. flags = IORESOURCE_IRQ ,
} ,
} ;
struct platform_device msm_device_i2c = {
. name = " msm_i2c " ,
. id = 0 ,
. num_resources = ARRAY_SIZE ( resources_i2c ) ,
. resource = resources_i2c ,
} ;
static struct resource resources_hsusb [ ] = {
{
. start = MSM_HSUSB_PHYS ,
. end = MSM_HSUSB_PHYS + MSM_HSUSB_SIZE ,
. flags = IORESOURCE_MEM ,
} ,
{
. start = INT_USB_HS ,
. end = INT_USB_HS ,
. flags = IORESOURCE_IRQ ,
} ,
} ;
struct platform_device msm_device_hsusb = {
. name = " msm_hsusb " ,
. id = - 1 ,
. num_resources = ARRAY_SIZE ( resources_hsusb ) ,
. resource = resources_hsusb ,
. dev = {
. coherent_dma_mask = 0xffffffff ,
} ,
} ;
struct flash_platform_data msm_nand_data = {
. parts = NULL ,
. nr_parts = 0 ,
} ;
static struct resource resources_nand [ ] = {
[ 0 ] = {
. start = 7 ,
. end = 7 ,
. flags = IORESOURCE_DMA ,
} ,
} ;
struct platform_device msm_device_nand = {
. name = " msm_nand " ,
. id = - 1 ,
. num_resources = ARRAY_SIZE ( resources_nand ) ,
. resource = resources_nand ,
. dev = {
. platform_data = & msm_nand_data ,
} ,
} ;
struct platform_device msm_device_smd = {
. name = " msm_smd " ,
. id = - 1 ,
} ;
static struct resource resources_sdc1 [ ] = {
{
. start = MSM_SDC1_PHYS ,
. end = MSM_SDC1_PHYS + MSM_SDC1_SIZE - 1 ,
. flags = IORESOURCE_MEM ,
} ,
{
. start = INT_SDC1_0 ,
2009-05-23 07:21:50 +04:00
. end = INT_SDC1_0 ,
. flags = IORESOURCE_IRQ ,
. name = " cmd_irq " ,
} ,
{
. start = INT_SDC1_1 ,
2008-09-11 01:00:53 +04:00
. end = INT_SDC1_1 ,
. flags = IORESOURCE_IRQ ,
2009-05-23 07:21:50 +04:00
. name = " pio_irq " ,
} ,
{
. flags = IORESOURCE_IRQ | IORESOURCE_DISABLED ,
. name = " status_irq "
2008-09-11 01:00:53 +04:00
} ,
{
. start = 8 ,
. end = 8 ,
. flags = IORESOURCE_DMA ,
} ,
} ;
static struct resource resources_sdc2 [ ] = {
{
. start = MSM_SDC2_PHYS ,
. end = MSM_SDC2_PHYS + MSM_SDC2_SIZE - 1 ,
. flags = IORESOURCE_MEM ,
} ,
{
. start = INT_SDC2_0 ,
2009-05-23 07:21:50 +04:00
. end = INT_SDC2_0 ,
. flags = IORESOURCE_IRQ ,
. name = " cmd_irq " ,
} ,
{
. start = INT_SDC2_1 ,
2008-09-11 01:00:53 +04:00
. end = INT_SDC2_1 ,
. flags = IORESOURCE_IRQ ,
2009-05-23 07:21:50 +04:00
. name = " pio_irq " ,
} ,
{
. flags = IORESOURCE_IRQ | IORESOURCE_DISABLED ,
. name = " status_irq "
2008-09-11 01:00:53 +04:00
} ,
{
. start = 8 ,
. end = 8 ,
. flags = IORESOURCE_DMA ,
} ,
} ;
static struct resource resources_sdc3 [ ] = {
{
. start = MSM_SDC3_PHYS ,
. end = MSM_SDC3_PHYS + MSM_SDC3_SIZE - 1 ,
. flags = IORESOURCE_MEM ,
} ,
{
. start = INT_SDC3_0 ,
2009-05-23 07:21:50 +04:00
. end = INT_SDC3_0 ,
. flags = IORESOURCE_IRQ ,
. name = " cmd_irq " ,
} ,
{
. start = INT_SDC3_1 ,
2008-09-11 01:00:53 +04:00
. end = INT_SDC3_1 ,
. flags = IORESOURCE_IRQ ,
2009-05-23 07:21:50 +04:00
. name = " pio_irq " ,
} ,
{
. flags = IORESOURCE_IRQ | IORESOURCE_DISABLED ,
. name = " status_irq "
2008-09-11 01:00:53 +04:00
} ,
{
. start = 8 ,
. end = 8 ,
. flags = IORESOURCE_DMA ,
} ,
} ;
static struct resource resources_sdc4 [ ] = {
{
. start = MSM_SDC4_PHYS ,
. end = MSM_SDC4_PHYS + MSM_SDC4_SIZE - 1 ,
. flags = IORESOURCE_MEM ,
} ,
{
. start = INT_SDC4_0 ,
2009-05-23 07:21:50 +04:00
. end = INT_SDC4_0 ,
. flags = IORESOURCE_IRQ ,
. name = " cmd_irq " ,
} ,
{
. start = INT_SDC4_1 ,
2008-09-11 01:00:53 +04:00
. end = INT_SDC4_1 ,
. flags = IORESOURCE_IRQ ,
2009-05-23 07:21:50 +04:00
. name = " pio_irq " ,
} ,
{
. flags = IORESOURCE_IRQ | IORESOURCE_DISABLED ,
. name = " status_irq "
2008-09-11 01:00:53 +04:00
} ,
{
. start = 8 ,
. end = 8 ,
. flags = IORESOURCE_DMA ,
} ,
} ;
struct platform_device msm_device_sdc1 = {
. name = " msm_sdcc " ,
. id = 1 ,
. num_resources = ARRAY_SIZE ( resources_sdc1 ) ,
. resource = resources_sdc1 ,
. dev = {
. coherent_dma_mask = 0xffffffff ,
} ,
} ;
struct platform_device msm_device_sdc2 = {
. name = " msm_sdcc " ,
. id = 2 ,
. num_resources = ARRAY_SIZE ( resources_sdc2 ) ,
. resource = resources_sdc2 ,
. dev = {
. coherent_dma_mask = 0xffffffff ,
} ,
} ;
struct platform_device msm_device_sdc3 = {
. name = " msm_sdcc " ,
. id = 3 ,
. num_resources = ARRAY_SIZE ( resources_sdc3 ) ,
. resource = resources_sdc3 ,
. dev = {
. coherent_dma_mask = 0xffffffff ,
} ,
} ;
struct platform_device msm_device_sdc4 = {
. name = " msm_sdcc " ,
. id = 4 ,
. num_resources = ARRAY_SIZE ( resources_sdc4 ) ,
. resource = resources_sdc4 ,
. dev = {
. coherent_dma_mask = 0xffffffff ,
} ,
} ;
2008-11-11 03:30:27 +03:00
static struct platform_device * msm_sdcc_devices [ ] __initdata = {
& msm_device_sdc1 ,
& msm_device_sdc2 ,
& msm_device_sdc3 ,
& msm_device_sdc4 ,
} ;
2009-05-23 07:21:50 +04:00
int __init msm_add_sdcc ( unsigned int controller , struct mmc_platform_data * plat ,
unsigned int stat_irq , unsigned long stat_irq_flags )
2008-11-11 03:30:27 +03:00
{
struct platform_device * pdev ;
2009-05-23 07:21:50 +04:00
struct resource * res ;
2008-11-11 03:30:27 +03:00
if ( controller < 1 | | controller > 4 )
return - EINVAL ;
pdev = msm_sdcc_devices [ controller - 1 ] ;
pdev - > dev . platform_data = plat ;
2009-05-23 07:21:50 +04:00
res = platform_get_resource_byname ( pdev , IORESOURCE_IRQ , " status_irq " ) ;
if ( ! res )
return - EINVAL ;
else if ( stat_irq ) {
res - > start = res - > end = stat_irq ;
res - > flags & = ~ IORESOURCE_DISABLED ;
res - > flags | = stat_irq_flags ;
}
2008-11-11 03:30:27 +03:00
return platform_device_register ( pdev ) ;
}