2005-04-17 02:20:36 +04:00
/*
2006-10-04 01:01:26 +04:00
* arch / arm / mach - ixp4xx / coyote - pci . c
2005-04-17 02:20:36 +04:00
*
* PCI setup routines for ADI Engineering Coyote platform
*
* Copyright ( C ) 2002 Jungo Software Technologies .
* Copyright ( C ) 2003 MontaVista Softwrae , Inc .
*
* Maintainer : Deepak Saxena < dsaxena @ mvista . com >
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation .
*
*/
# include <linux/kernel.h>
# include <linux/pci.h>
# include <linux/init.h>
2006-07-02 02:01:49 +04:00
# include <linux/irq.h>
2005-04-17 02:20:36 +04:00
# include <asm/mach-types.h>
2008-08-05 19:14:15 +04:00
# include <mach/hardware.h>
2005-04-17 02:20:36 +04:00
# include <asm/irq.h>
# include <asm/mach/pci.h>
2009-11-17 20:48:23 +03:00
# define SLOT0_DEVID 14
# define SLOT1_DEVID 15
2009-11-16 17:57:41 +03:00
/* PCI controller GPIO to IRQ pin mappings */
2009-11-17 20:48:23 +03:00
# define SLOT0_INTA 6
# define SLOT1_INTA 11
2009-11-16 17:57:41 +03:00
2005-04-17 02:20:36 +04:00
void __init coyote_pci_preinit ( void )
{
2011-03-24 15:25:22 +03:00
irq_set_irq_type ( IXP4XX_GPIO_IRQ ( SLOT0_INTA ) , IRQ_TYPE_LEVEL_LOW ) ;
irq_set_irq_type ( IXP4XX_GPIO_IRQ ( SLOT1_INTA ) , IRQ_TYPE_LEVEL_LOW ) ;
2005-04-17 02:20:36 +04:00
ixp4xx_pci_preinit ( ) ;
}
2011-06-10 18:30:21 +04:00
static int __init coyote_map_irq ( const struct pci_dev * dev , u8 slot , u8 pin )
2005-04-17 02:20:36 +04:00
{
2009-11-17 20:48:23 +03:00
if ( slot = = SLOT0_DEVID )
return IXP4XX_GPIO_IRQ ( SLOT0_INTA ) ;
else if ( slot = = SLOT1_DEVID )
return IXP4XX_GPIO_IRQ ( SLOT1_INTA ) ;
2005-04-17 02:20:36 +04:00
else return - 1 ;
}
struct hw_pci coyote_pci __initdata = {
. nr_controllers = 1 ,
. preinit = coyote_pci_preinit ,
. swizzle = pci_std_swizzle ,
. setup = ixp4xx_setup ,
. scan = ixp4xx_scan_bus ,
. map_irq = coyote_map_irq ,
} ;
int __init coyote_pci_init ( void )
{
if ( machine_is_adi_coyote ( ) )
pci_common_init ( & coyote_pci ) ;
return 0 ;
}
subsys_initcall ( coyote_pci_init ) ;