2010-09-29 19:46:32 +05:30
/*
* Copyright ( C ) ST - Ericsson SA 2010
*
* Author : Rabin Vincent < rabin . vincent @ stericsson . com > for ST - Ericsson
* License terms : GNU General Public License ( GPL ) , version 2.
*/
# include <linux/kernel.h>
# include <linux/dma-mapping.h>
# include <linux/err.h>
# include <linux/irq.h>
# include <linux/slab.h>
# include <linux/platform_device.h>
# include <linux/amba/bus.h>
2011-08-22 08:33:30 +01:00
# include <plat/gpio-nomadik.h>
2010-12-08 11:07:55 +05:30
2010-09-29 19:46:32 +05:30
# include <mach/hardware.h>
# include "devices-common.h"
struct amba_device *
2012-02-06 11:22:21 -08:00
dbx500_add_amba_device ( struct device * parent , const char * name ,
resource_size_t base , int irq , void * pdata ,
unsigned int periphid )
2010-09-29 19:46:32 +05:30
{
struct amba_device * dev ;
int ret ;
2011-12-18 11:16:59 +00:00
dev = amba_device_alloc ( name , base , SZ_4K ) ;
2010-09-29 19:46:32 +05:30
if ( ! dev )
return ERR_PTR ( - ENOMEM ) ;
dev - > dma_mask = DMA_BIT_MASK ( 32 ) ;
dev - > dev . coherent_dma_mask = DMA_BIT_MASK ( 32 ) ;
dev - > irq [ 0 ] = irq ;
dev - > periphid = periphid ;
dev - > dev . platform_data = pdata ;
2012-02-06 11:22:25 -08:00
dev - > dev . parent = parent ;
2011-12-18 11:16:59 +00:00
ret = amba_device_add ( dev , & iomem_resource ) ;
2010-09-29 19:46:32 +05:30
if ( ret ) {
2011-12-18 11:16:59 +00:00
amba_device_put ( dev ) ;
2010-09-29 19:46:32 +05:30
return ERR_PTR ( ret ) ;
}
return dev ;
}
2010-12-08 11:07:55 +05:30
static struct platform_device *
2012-02-06 11:22:21 -08:00
dbx500_add_gpio ( struct device * parent , int id , resource_size_t addr , int irq ,
2010-12-08 11:07:55 +05:30
struct nmk_gpio_platform_data * pdata )
{
struct resource resources [ ] = {
{
. start = addr ,
. end = addr + 127 ,
. flags = IORESOURCE_MEM ,
} ,
{
. start = irq ,
. end = irq ,
. flags = IORESOURCE_IRQ ,
}
} ;
2012-02-06 11:22:25 -08:00
return platform_device_register_resndata (
parent ,
" gpio " ,
id ,
resources ,
ARRAY_SIZE ( resources ) ,
pdata ,
sizeof ( * pdata ) ) ;
2010-12-08 11:07:55 +05:30
}
2012-02-06 11:22:21 -08:00
void dbx500_add_gpios ( struct device * parent , resource_size_t * base , int num ,
int irq , struct nmk_gpio_platform_data * pdata )
2010-12-08 11:07:55 +05:30
{
int first = 0 ;
int i ;
for ( i = 0 ; i < num ; i + + , first + = 32 , irq + + ) {
pdata - > first_gpio = first ;
pdata - > first_irq = NOMADIK_GPIO_TO_IRQ ( first ) ;
2010-03-18 12:35:22 +05:30
pdata - > num_gpio = 32 ;
2010-12-08 11:07:55 +05:30
2012-02-06 11:22:21 -08:00
dbx500_add_gpio ( parent , i , base [ i ] , irq , pdata ) ;
2010-12-08 11:07:55 +05:30
}
}