Loading arch/arm/mach-ixp4xx/avila-pci.c +20 −30 Original line number Diff line number Diff line Loading @@ -27,49 +27,40 @@ #include <mach/hardware.h> #include <asm/mach-types.h> #define AVILA_PCI_MAX_DEV 4 #define LOFT_PCI_MAX_DEV 6 #define AVILA_PCI_IRQ_LINES 4 #define AVILA_MAX_DEV 4 #define LOFT_MAX_DEV 6 #define IRQ_LINES 4 /* PCI controller GPIO to IRQ pin mappings */ #define AVILA_PCI_INTA_PIN 11 #define AVILA_PCI_INTB_PIN 10 #define AVILA_PCI_INTC_PIN 9 #define AVILA_PCI_INTD_PIN 8 #define IRQ_AVILA_PCI_INTA IRQ_IXP4XX_GPIO11 #define IRQ_AVILA_PCI_INTB IRQ_IXP4XX_GPIO10 #define IRQ_AVILA_PCI_INTC IRQ_IXP4XX_GPIO9 #define IRQ_AVILA_PCI_INTD IRQ_IXP4XX_GPIO8 #define INTA 11 #define INTB 10 #define INTC 9 #define INTD 8 void __init avila_pci_preinit(void) { set_irq_type(IRQ_AVILA_PCI_INTA, IRQ_TYPE_LEVEL_LOW); set_irq_type(IRQ_AVILA_PCI_INTB, IRQ_TYPE_LEVEL_LOW); set_irq_type(IRQ_AVILA_PCI_INTC, IRQ_TYPE_LEVEL_LOW); set_irq_type(IRQ_AVILA_PCI_INTD, IRQ_TYPE_LEVEL_LOW); set_irq_type(IXP4XX_GPIO_IRQ(INTA), IRQ_TYPE_LEVEL_LOW); set_irq_type(IXP4XX_GPIO_IRQ(INTB), IRQ_TYPE_LEVEL_LOW); set_irq_type(IXP4XX_GPIO_IRQ(INTC), IRQ_TYPE_LEVEL_LOW); set_irq_type(IXP4XX_GPIO_IRQ(INTD), IRQ_TYPE_LEVEL_LOW); ixp4xx_pci_preinit(); } static int __init avila_map_irq(struct pci_dev *dev, u8 slot, u8 pin) { static int pci_irq_table[AVILA_PCI_IRQ_LINES] = { IRQ_AVILA_PCI_INTA, IRQ_AVILA_PCI_INTB, IRQ_AVILA_PCI_INTC, IRQ_AVILA_PCI_INTD static int pci_irq_table[IRQ_LINES] = { IXP4XX_GPIO_IRQ(INTA), IXP4XX_GPIO_IRQ(INTB), IXP4XX_GPIO_IRQ(INTC), IXP4XX_GPIO_IRQ(INTD) }; int irq = -1; if (slot >= 1 && slot <= (machine_is_loft() ? LOFT_PCI_MAX_DEV : AVILA_PCI_MAX_DEV) && pin >= 1 && pin <= AVILA_PCI_IRQ_LINES) { irq = pci_irq_table[(slot + pin - 2) % 4]; } slot <= (machine_is_loft() ? LOFT_MAX_DEV : AVILA_MAX_DEV) && pin >= 1 && pin <= IRQ_LINES) return pci_irq_table[(slot + pin - 2) % 4]; return irq; return -1; } struct hw_pci avila_pci __initdata = { Loading @@ -89,4 +80,3 @@ int __init avila_pci_init(void) } subsys_initcall(avila_pci_init); arch/arm/mach-ixp4xx/coyote-pci.c +10 −14 Original line number Diff line number Diff line Loading @@ -23,30 +23,26 @@ #include <asm/irq.h> #include <asm/mach/pci.h> #define COYOTE_PCI_SLOT0_DEVID 14 #define COYOTE_PCI_SLOT1_DEVID 15 #define SLOT0_DEVID 14 #define SLOT1_DEVID 15 /* PCI controller GPIO to IRQ pin mappings */ #define COYOTE_PCI_SLOT0_PIN 6 #define COYOTE_PCI_SLOT1_PIN 11 #define IRQ_COYOTE_PCI_SLOT0 IRQ_IXP4XX_GPIO6 #define IRQ_COYOTE_PCI_SLOT1 IRQ_IXP4XX_GPIO11 #define SLOT0_INTA 6 #define SLOT1_INTA 11 void __init coyote_pci_preinit(void) { set_irq_type(IRQ_COYOTE_PCI_SLOT0, IRQ_TYPE_LEVEL_LOW); set_irq_type(IRQ_COYOTE_PCI_SLOT1, IRQ_TYPE_LEVEL_LOW); set_irq_type(IXP4XX_GPIO_IRQ(SLOT0_INTA), IRQ_TYPE_LEVEL_LOW); set_irq_type(IXP4XX_GPIO_IRQ(SLOT1_INTA), IRQ_TYPE_LEVEL_LOW); ixp4xx_pci_preinit(); } static int __init coyote_map_irq(struct pci_dev *dev, u8 slot, u8 pin) { if (slot == COYOTE_PCI_SLOT0_DEVID) return IRQ_COYOTE_PCI_SLOT0; else if (slot == COYOTE_PCI_SLOT1_DEVID) return IRQ_COYOTE_PCI_SLOT1; if (slot == SLOT0_DEVID) return IXP4XX_GPIO_IRQ(SLOT0_INTA); else if (slot == SLOT1_DEVID) return IXP4XX_GPIO_IRQ(SLOT1_INTA); else return -1; } Loading arch/arm/mach-ixp4xx/dsmg600-pci.c +23 −34 Original line number Diff line number Diff line Loading @@ -22,53 +22,42 @@ #include <asm/mach/pci.h> #include <asm/mach-types.h> #define DSMG600_PCI_MAX_DEV 4 #define DSMG600_PCI_IRQ_LINES 3 #define MAX_DEV 4 #define IRQ_LINES 3 /* PCI controller GPIO to IRQ pin mappings */ #define DSMG600_PCI_INTA_PIN 11 #define DSMG600_PCI_INTB_PIN 10 #define DSMG600_PCI_INTC_PIN 9 #define DSMG600_PCI_INTD_PIN 8 #define DSMG600_PCI_INTE_PIN 7 #define DSMG600_PCI_INTF_PIN 6 #define IRQ_DSMG600_PCI_INTA IRQ_IXP4XX_GPIO11 #define IRQ_DSMG600_PCI_INTB IRQ_IXP4XX_GPIO10 #define IRQ_DSMG600_PCI_INTC IRQ_IXP4XX_GPIO9 #define IRQ_DSMG600_PCI_INTD IRQ_IXP4XX_GPIO8 #define IRQ_DSMG600_PCI_INTE IRQ_IXP4XX_GPIO7 #define IRQ_DSMG600_PCI_INTF IRQ_IXP4XX_GPIO6 #define INTA 11 #define INTB 10 #define INTC 9 #define INTD 8 #define INTE 7 #define INTF 6 void __init dsmg600_pci_preinit(void) { set_irq_type(IRQ_DSMG600_PCI_INTA, IRQ_TYPE_LEVEL_LOW); set_irq_type(IRQ_DSMG600_PCI_INTB, IRQ_TYPE_LEVEL_LOW); set_irq_type(IRQ_DSMG600_PCI_INTC, IRQ_TYPE_LEVEL_LOW); set_irq_type(IRQ_DSMG600_PCI_INTD, IRQ_TYPE_LEVEL_LOW); set_irq_type(IRQ_DSMG600_PCI_INTE, IRQ_TYPE_LEVEL_LOW); set_irq_type(IRQ_DSMG600_PCI_INTF, IRQ_TYPE_LEVEL_LOW); set_irq_type(IXP4XX_GPIO_IRQ(INTA), IRQ_TYPE_LEVEL_LOW); set_irq_type(IXP4XX_GPIO_IRQ(INTB), IRQ_TYPE_LEVEL_LOW); set_irq_type(IXP4XX_GPIO_IRQ(INTC), IRQ_TYPE_LEVEL_LOW); set_irq_type(IXP4XX_GPIO_IRQ(INTD), IRQ_TYPE_LEVEL_LOW); set_irq_type(IXP4XX_GPIO_IRQ(INTE), IRQ_TYPE_LEVEL_LOW); set_irq_type(IXP4XX_GPIO_IRQ(INTF), IRQ_TYPE_LEVEL_LOW); ixp4xx_pci_preinit(); } static int __init dsmg600_map_irq(struct pci_dev *dev, u8 slot, u8 pin) { static int pci_irq_table[DSMG600_PCI_MAX_DEV][DSMG600_PCI_IRQ_LINES] = { { IRQ_DSMG600_PCI_INTE, -1, -1 }, { IRQ_DSMG600_PCI_INTA, -1, -1 }, { IRQ_DSMG600_PCI_INTB, IRQ_DSMG600_PCI_INTC, IRQ_DSMG600_PCI_INTD }, { IRQ_DSMG600_PCI_INTF, -1, -1 }, static int pci_irq_table[MAX_DEV][IRQ_LINES] = { { IXP4XX_GPIO_IRQ(INTE), -1, -1 }, { IXP4XX_GPIO_IRQ(INTA), -1, -1 }, { IXP4XX_GPIO_IRQ(INTB), IXP4XX_GPIO_IRQ(INTC), IXP4XX_GPIO_IRQ(INTD) }, { IXP4XX_GPIO_IRQ(INTF), -1, -1 }, }; int irq = -1; if (slot >= 1 && slot <= DSMG600_PCI_MAX_DEV && pin >= 1 && pin <= DSMG600_PCI_IRQ_LINES) irq = pci_irq_table[slot-1][pin-1]; if (slot >= 1 && slot <= MAX_DEV && pin >= 1 && pin <= IRQ_LINES) return pci_irq_table[slot - 1][pin - 1]; return irq; return -1; } struct hw_pci __initdata dsmg600_pci = { Loading arch/arm/mach-ixp4xx/fsg-pci.c +15 −20 Original line number Diff line number Diff line Loading @@ -22,40 +22,35 @@ #include <asm/mach/pci.h> #include <asm/mach-types.h> #define FSG_PCI_MAX_DEV 3 #define FSG_PCI_IRQ_LINES 3 #define MAX_DEV 3 #define IRQ_LINES 3 /* PCI controller GPIO to IRQ pin mappings */ #define FSG_PCI_INTA_PIN 6 #define FSG_PCI_INTB_PIN 7 #define FSG_PCI_INTC_PIN 5 #define IRQ_FSG_PCI_INTA IRQ_IXP4XX_GPIO6 #define IRQ_FSG_PCI_INTB IRQ_IXP4XX_GPIO7 #define IRQ_FSG_PCI_INTC IRQ_IXP4XX_GPIO5 #define INTA 6 #define INTB 7 #define INTC 5 void __init fsg_pci_preinit(void) { set_irq_type(IRQ_FSG_PCI_INTA, IRQ_TYPE_LEVEL_LOW); set_irq_type(IRQ_FSG_PCI_INTB, IRQ_TYPE_LEVEL_LOW); set_irq_type(IRQ_FSG_PCI_INTC, IRQ_TYPE_LEVEL_LOW); set_irq_type(IXP4XX_GPIO_IRQ(INTA), IRQ_TYPE_LEVEL_LOW); set_irq_type(IXP4XX_GPIO_IRQ(INTB), IRQ_TYPE_LEVEL_LOW); set_irq_type(IXP4XX_GPIO_IRQ(INTC), IRQ_TYPE_LEVEL_LOW); ixp4xx_pci_preinit(); } static int __init fsg_map_irq(struct pci_dev *dev, u8 slot, u8 pin) { static int pci_irq_table[FSG_PCI_IRQ_LINES] = { IRQ_FSG_PCI_INTC, IRQ_FSG_PCI_INTB, IRQ_FSG_PCI_INTA, static int pci_irq_table[IRQ_LINES] = { IXP4XX_GPIO_IRQ(INTC), IXP4XX_GPIO_IRQ(INTB), IXP4XX_GPIO_IRQ(INTA), }; int irq = -1; slot = slot - 11; slot -= 11; if (slot >= 1 && slot <= FSG_PCI_MAX_DEV && pin >= 1 && pin <= FSG_PCI_IRQ_LINES) irq = pci_irq_table[(slot - 1)]; if (slot >= 1 && slot <= MAX_DEV && pin >= 1 && pin <= IRQ_LINES) irq = pci_irq_table[slot - 1]; printk(KERN_INFO "%s: Mapped slot %d pin %d to IRQ %d\n", __func__, slot, pin, irq); Loading arch/arm/mach-ixp4xx/goramo_mlr.c +22 −23 Original line number Diff line number Diff line Loading @@ -17,29 +17,28 @@ #include <asm/mach/flash.h> #include <asm/mach/pci.h> #define xgpio_irq(n) (IRQ_IXP4XX_GPIO ## n) #define gpio_irq(n) xgpio_irq(n) #define SLOT_ETHA 0x0B /* IDSEL = AD21 */ #define SLOT_ETHB 0x0C /* IDSEL = AD20 */ #define SLOT_MPCI 0x0D /* IDSEL = AD19 */ #define SLOT_NEC 0x0E /* IDSEL = AD18 */ #define IRQ_ETHA IRQ_IXP4XX_GPIO4 #define IRQ_ETHB IRQ_IXP4XX_GPIO5 #define IRQ_NEC IRQ_IXP4XX_GPIO3 #define IRQ_MPCI IRQ_IXP4XX_GPIO12 /* GPIO lines */ #define GPIO_SCL 0 #define GPIO_SDA 1 #define GPIO_STR 2 #define GPIO_IRQ_NEC 3 #define GPIO_IRQ_ETHA 4 #define GPIO_IRQ_ETHB 5 #define GPIO_HSS0_DCD_N 6 #define GPIO_HSS1_DCD_N 7 #define GPIO_UART0_DCD 8 #define GPIO_UART1_DCD 9 #define GPIO_HSS0_CTS_N 10 #define GPIO_HSS1_CTS_N 11 #define GPIO_IRQ_MPCI 12 #define GPIO_HSS1_RTS_N 13 #define GPIO_HSS0_RTS_N 14 /* GPIO15 is not connected */ /* Control outputs from 74HC4094 */ #define CONTROL_HSS0_CLK_INT 0 Loading Loading @@ -152,7 +151,7 @@ static int hss_set_clock(int port, unsigned int clock_type) static irqreturn_t hss_dcd_irq(int irq, void *pdev) { int i, port = (irq == gpio_irq(GPIO_HSS1_DCD_N)); int i, port = (irq == IXP4XX_GPIO_IRQ(GPIO_HSS1_DCD_N)); gpio_line_get(port ? GPIO_HSS1_DCD_N : GPIO_HSS0_DCD_N, &i); set_carrier_cb_tab[port](pdev, !i); return IRQ_HANDLED; Loading @@ -165,9 +164,9 @@ static int hss_open(int port, void *pdev, int i, irq; if (!port) irq = gpio_irq(GPIO_HSS0_DCD_N); irq = IXP4XX_GPIO_IRQ(GPIO_HSS0_DCD_N); else irq = gpio_irq(GPIO_HSS1_DCD_N); irq = IXP4XX_GPIO_IRQ(GPIO_HSS1_DCD_N); gpio_line_get(port ? GPIO_HSS1_DCD_N : GPIO_HSS0_DCD_N, &i); set_carrier_cb(pdev, !i); Loading @@ -188,8 +187,8 @@ static int hss_open(int port, void *pdev, static void hss_close(int port, void *pdev) { free_irq(port ? gpio_irq(GPIO_HSS1_DCD_N) : gpio_irq(GPIO_HSS0_DCD_N), pdev); free_irq(port ? IXP4XX_GPIO_IRQ(GPIO_HSS1_DCD_N) : IXP4XX_GPIO_IRQ(GPIO_HSS0_DCD_N), pdev); set_carrier_cb_tab[!!port] = NULL; /* catch bugs */ set_control(port ? CONTROL_HSS1_DTR_N : CONTROL_HSS0_DTR_N, 1); Loading Loading @@ -421,8 +420,8 @@ static void __init gmlr_init(void) gpio_line_config(GPIO_HSS1_RTS_N, IXP4XX_GPIO_OUT); gpio_line_config(GPIO_HSS0_DCD_N, IXP4XX_GPIO_IN); gpio_line_config(GPIO_HSS1_DCD_N, IXP4XX_GPIO_IN); set_irq_type(gpio_irq(GPIO_HSS0_DCD_N), IRQ_TYPE_EDGE_BOTH); set_irq_type(gpio_irq(GPIO_HSS1_DCD_N), IRQ_TYPE_EDGE_BOTH); set_irq_type(IXP4XX_GPIO_IRQ(GPIO_HSS0_DCD_N), IRQ_TYPE_EDGE_BOTH); set_irq_type(IXP4XX_GPIO_IRQ(GPIO_HSS1_DCD_N), IRQ_TYPE_EDGE_BOTH); set_control(CONTROL_HSS0_DTR_N, 1); set_control(CONTROL_HSS1_DTR_N, 1); Loading @@ -442,10 +441,10 @@ static void __init gmlr_init(void) #ifdef CONFIG_PCI static void __init gmlr_pci_preinit(void) { set_irq_type(IRQ_ETHA, IRQ_TYPE_LEVEL_LOW); set_irq_type(IRQ_ETHB, IRQ_TYPE_LEVEL_LOW); set_irq_type(IRQ_NEC, IRQ_TYPE_LEVEL_LOW); set_irq_type(IRQ_MPCI, IRQ_TYPE_LEVEL_LOW); set_irq_type(IXP4XX_GPIO_IRQ(GPIO_IRQ_ETHA), IRQ_TYPE_LEVEL_LOW); set_irq_type(IXP4XX_GPIO_IRQ(GPIO_IRQ_ETHB), IRQ_TYPE_LEVEL_LOW); set_irq_type(IXP4XX_GPIO_IRQ(GPIO_IRQ_NEC), IRQ_TYPE_LEVEL_LOW); set_irq_type(IXP4XX_GPIO_IRQ(GPIO_IRQ_MPCI), IRQ_TYPE_LEVEL_LOW); ixp4xx_pci_preinit(); } Loading @@ -466,10 +465,10 @@ static void __init gmlr_pci_postinit(void) static int __init gmlr_map_irq(struct pci_dev *dev, u8 slot, u8 pin) { switch(slot) { case SLOT_ETHA: return IRQ_ETHA; case SLOT_ETHB: return IRQ_ETHB; case SLOT_NEC: return IRQ_NEC; default: return IRQ_MPCI; case SLOT_ETHA: return IXP4XX_GPIO_IRQ(GPIO_IRQ_ETHA); case SLOT_ETHB: return IXP4XX_GPIO_IRQ(GPIO_IRQ_ETHB); case SLOT_NEC: return IXP4XX_GPIO_IRQ(GPIO_IRQ_NEC); default: return IXP4XX_GPIO_IRQ(GPIO_IRQ_MPCI); } } Loading Loading
arch/arm/mach-ixp4xx/avila-pci.c +20 −30 Original line number Diff line number Diff line Loading @@ -27,49 +27,40 @@ #include <mach/hardware.h> #include <asm/mach-types.h> #define AVILA_PCI_MAX_DEV 4 #define LOFT_PCI_MAX_DEV 6 #define AVILA_PCI_IRQ_LINES 4 #define AVILA_MAX_DEV 4 #define LOFT_MAX_DEV 6 #define IRQ_LINES 4 /* PCI controller GPIO to IRQ pin mappings */ #define AVILA_PCI_INTA_PIN 11 #define AVILA_PCI_INTB_PIN 10 #define AVILA_PCI_INTC_PIN 9 #define AVILA_PCI_INTD_PIN 8 #define IRQ_AVILA_PCI_INTA IRQ_IXP4XX_GPIO11 #define IRQ_AVILA_PCI_INTB IRQ_IXP4XX_GPIO10 #define IRQ_AVILA_PCI_INTC IRQ_IXP4XX_GPIO9 #define IRQ_AVILA_PCI_INTD IRQ_IXP4XX_GPIO8 #define INTA 11 #define INTB 10 #define INTC 9 #define INTD 8 void __init avila_pci_preinit(void) { set_irq_type(IRQ_AVILA_PCI_INTA, IRQ_TYPE_LEVEL_LOW); set_irq_type(IRQ_AVILA_PCI_INTB, IRQ_TYPE_LEVEL_LOW); set_irq_type(IRQ_AVILA_PCI_INTC, IRQ_TYPE_LEVEL_LOW); set_irq_type(IRQ_AVILA_PCI_INTD, IRQ_TYPE_LEVEL_LOW); set_irq_type(IXP4XX_GPIO_IRQ(INTA), IRQ_TYPE_LEVEL_LOW); set_irq_type(IXP4XX_GPIO_IRQ(INTB), IRQ_TYPE_LEVEL_LOW); set_irq_type(IXP4XX_GPIO_IRQ(INTC), IRQ_TYPE_LEVEL_LOW); set_irq_type(IXP4XX_GPIO_IRQ(INTD), IRQ_TYPE_LEVEL_LOW); ixp4xx_pci_preinit(); } static int __init avila_map_irq(struct pci_dev *dev, u8 slot, u8 pin) { static int pci_irq_table[AVILA_PCI_IRQ_LINES] = { IRQ_AVILA_PCI_INTA, IRQ_AVILA_PCI_INTB, IRQ_AVILA_PCI_INTC, IRQ_AVILA_PCI_INTD static int pci_irq_table[IRQ_LINES] = { IXP4XX_GPIO_IRQ(INTA), IXP4XX_GPIO_IRQ(INTB), IXP4XX_GPIO_IRQ(INTC), IXP4XX_GPIO_IRQ(INTD) }; int irq = -1; if (slot >= 1 && slot <= (machine_is_loft() ? LOFT_PCI_MAX_DEV : AVILA_PCI_MAX_DEV) && pin >= 1 && pin <= AVILA_PCI_IRQ_LINES) { irq = pci_irq_table[(slot + pin - 2) % 4]; } slot <= (machine_is_loft() ? LOFT_MAX_DEV : AVILA_MAX_DEV) && pin >= 1 && pin <= IRQ_LINES) return pci_irq_table[(slot + pin - 2) % 4]; return irq; return -1; } struct hw_pci avila_pci __initdata = { Loading @@ -89,4 +80,3 @@ int __init avila_pci_init(void) } subsys_initcall(avila_pci_init);
arch/arm/mach-ixp4xx/coyote-pci.c +10 −14 Original line number Diff line number Diff line Loading @@ -23,30 +23,26 @@ #include <asm/irq.h> #include <asm/mach/pci.h> #define COYOTE_PCI_SLOT0_DEVID 14 #define COYOTE_PCI_SLOT1_DEVID 15 #define SLOT0_DEVID 14 #define SLOT1_DEVID 15 /* PCI controller GPIO to IRQ pin mappings */ #define COYOTE_PCI_SLOT0_PIN 6 #define COYOTE_PCI_SLOT1_PIN 11 #define IRQ_COYOTE_PCI_SLOT0 IRQ_IXP4XX_GPIO6 #define IRQ_COYOTE_PCI_SLOT1 IRQ_IXP4XX_GPIO11 #define SLOT0_INTA 6 #define SLOT1_INTA 11 void __init coyote_pci_preinit(void) { set_irq_type(IRQ_COYOTE_PCI_SLOT0, IRQ_TYPE_LEVEL_LOW); set_irq_type(IRQ_COYOTE_PCI_SLOT1, IRQ_TYPE_LEVEL_LOW); set_irq_type(IXP4XX_GPIO_IRQ(SLOT0_INTA), IRQ_TYPE_LEVEL_LOW); set_irq_type(IXP4XX_GPIO_IRQ(SLOT1_INTA), IRQ_TYPE_LEVEL_LOW); ixp4xx_pci_preinit(); } static int __init coyote_map_irq(struct pci_dev *dev, u8 slot, u8 pin) { if (slot == COYOTE_PCI_SLOT0_DEVID) return IRQ_COYOTE_PCI_SLOT0; else if (slot == COYOTE_PCI_SLOT1_DEVID) return IRQ_COYOTE_PCI_SLOT1; if (slot == SLOT0_DEVID) return IXP4XX_GPIO_IRQ(SLOT0_INTA); else if (slot == SLOT1_DEVID) return IXP4XX_GPIO_IRQ(SLOT1_INTA); else return -1; } Loading
arch/arm/mach-ixp4xx/dsmg600-pci.c +23 −34 Original line number Diff line number Diff line Loading @@ -22,53 +22,42 @@ #include <asm/mach/pci.h> #include <asm/mach-types.h> #define DSMG600_PCI_MAX_DEV 4 #define DSMG600_PCI_IRQ_LINES 3 #define MAX_DEV 4 #define IRQ_LINES 3 /* PCI controller GPIO to IRQ pin mappings */ #define DSMG600_PCI_INTA_PIN 11 #define DSMG600_PCI_INTB_PIN 10 #define DSMG600_PCI_INTC_PIN 9 #define DSMG600_PCI_INTD_PIN 8 #define DSMG600_PCI_INTE_PIN 7 #define DSMG600_PCI_INTF_PIN 6 #define IRQ_DSMG600_PCI_INTA IRQ_IXP4XX_GPIO11 #define IRQ_DSMG600_PCI_INTB IRQ_IXP4XX_GPIO10 #define IRQ_DSMG600_PCI_INTC IRQ_IXP4XX_GPIO9 #define IRQ_DSMG600_PCI_INTD IRQ_IXP4XX_GPIO8 #define IRQ_DSMG600_PCI_INTE IRQ_IXP4XX_GPIO7 #define IRQ_DSMG600_PCI_INTF IRQ_IXP4XX_GPIO6 #define INTA 11 #define INTB 10 #define INTC 9 #define INTD 8 #define INTE 7 #define INTF 6 void __init dsmg600_pci_preinit(void) { set_irq_type(IRQ_DSMG600_PCI_INTA, IRQ_TYPE_LEVEL_LOW); set_irq_type(IRQ_DSMG600_PCI_INTB, IRQ_TYPE_LEVEL_LOW); set_irq_type(IRQ_DSMG600_PCI_INTC, IRQ_TYPE_LEVEL_LOW); set_irq_type(IRQ_DSMG600_PCI_INTD, IRQ_TYPE_LEVEL_LOW); set_irq_type(IRQ_DSMG600_PCI_INTE, IRQ_TYPE_LEVEL_LOW); set_irq_type(IRQ_DSMG600_PCI_INTF, IRQ_TYPE_LEVEL_LOW); set_irq_type(IXP4XX_GPIO_IRQ(INTA), IRQ_TYPE_LEVEL_LOW); set_irq_type(IXP4XX_GPIO_IRQ(INTB), IRQ_TYPE_LEVEL_LOW); set_irq_type(IXP4XX_GPIO_IRQ(INTC), IRQ_TYPE_LEVEL_LOW); set_irq_type(IXP4XX_GPIO_IRQ(INTD), IRQ_TYPE_LEVEL_LOW); set_irq_type(IXP4XX_GPIO_IRQ(INTE), IRQ_TYPE_LEVEL_LOW); set_irq_type(IXP4XX_GPIO_IRQ(INTF), IRQ_TYPE_LEVEL_LOW); ixp4xx_pci_preinit(); } static int __init dsmg600_map_irq(struct pci_dev *dev, u8 slot, u8 pin) { static int pci_irq_table[DSMG600_PCI_MAX_DEV][DSMG600_PCI_IRQ_LINES] = { { IRQ_DSMG600_PCI_INTE, -1, -1 }, { IRQ_DSMG600_PCI_INTA, -1, -1 }, { IRQ_DSMG600_PCI_INTB, IRQ_DSMG600_PCI_INTC, IRQ_DSMG600_PCI_INTD }, { IRQ_DSMG600_PCI_INTF, -1, -1 }, static int pci_irq_table[MAX_DEV][IRQ_LINES] = { { IXP4XX_GPIO_IRQ(INTE), -1, -1 }, { IXP4XX_GPIO_IRQ(INTA), -1, -1 }, { IXP4XX_GPIO_IRQ(INTB), IXP4XX_GPIO_IRQ(INTC), IXP4XX_GPIO_IRQ(INTD) }, { IXP4XX_GPIO_IRQ(INTF), -1, -1 }, }; int irq = -1; if (slot >= 1 && slot <= DSMG600_PCI_MAX_DEV && pin >= 1 && pin <= DSMG600_PCI_IRQ_LINES) irq = pci_irq_table[slot-1][pin-1]; if (slot >= 1 && slot <= MAX_DEV && pin >= 1 && pin <= IRQ_LINES) return pci_irq_table[slot - 1][pin - 1]; return irq; return -1; } struct hw_pci __initdata dsmg600_pci = { Loading
arch/arm/mach-ixp4xx/fsg-pci.c +15 −20 Original line number Diff line number Diff line Loading @@ -22,40 +22,35 @@ #include <asm/mach/pci.h> #include <asm/mach-types.h> #define FSG_PCI_MAX_DEV 3 #define FSG_PCI_IRQ_LINES 3 #define MAX_DEV 3 #define IRQ_LINES 3 /* PCI controller GPIO to IRQ pin mappings */ #define FSG_PCI_INTA_PIN 6 #define FSG_PCI_INTB_PIN 7 #define FSG_PCI_INTC_PIN 5 #define IRQ_FSG_PCI_INTA IRQ_IXP4XX_GPIO6 #define IRQ_FSG_PCI_INTB IRQ_IXP4XX_GPIO7 #define IRQ_FSG_PCI_INTC IRQ_IXP4XX_GPIO5 #define INTA 6 #define INTB 7 #define INTC 5 void __init fsg_pci_preinit(void) { set_irq_type(IRQ_FSG_PCI_INTA, IRQ_TYPE_LEVEL_LOW); set_irq_type(IRQ_FSG_PCI_INTB, IRQ_TYPE_LEVEL_LOW); set_irq_type(IRQ_FSG_PCI_INTC, IRQ_TYPE_LEVEL_LOW); set_irq_type(IXP4XX_GPIO_IRQ(INTA), IRQ_TYPE_LEVEL_LOW); set_irq_type(IXP4XX_GPIO_IRQ(INTB), IRQ_TYPE_LEVEL_LOW); set_irq_type(IXP4XX_GPIO_IRQ(INTC), IRQ_TYPE_LEVEL_LOW); ixp4xx_pci_preinit(); } static int __init fsg_map_irq(struct pci_dev *dev, u8 slot, u8 pin) { static int pci_irq_table[FSG_PCI_IRQ_LINES] = { IRQ_FSG_PCI_INTC, IRQ_FSG_PCI_INTB, IRQ_FSG_PCI_INTA, static int pci_irq_table[IRQ_LINES] = { IXP4XX_GPIO_IRQ(INTC), IXP4XX_GPIO_IRQ(INTB), IXP4XX_GPIO_IRQ(INTA), }; int irq = -1; slot = slot - 11; slot -= 11; if (slot >= 1 && slot <= FSG_PCI_MAX_DEV && pin >= 1 && pin <= FSG_PCI_IRQ_LINES) irq = pci_irq_table[(slot - 1)]; if (slot >= 1 && slot <= MAX_DEV && pin >= 1 && pin <= IRQ_LINES) irq = pci_irq_table[slot - 1]; printk(KERN_INFO "%s: Mapped slot %d pin %d to IRQ %d\n", __func__, slot, pin, irq); Loading
arch/arm/mach-ixp4xx/goramo_mlr.c +22 −23 Original line number Diff line number Diff line Loading @@ -17,29 +17,28 @@ #include <asm/mach/flash.h> #include <asm/mach/pci.h> #define xgpio_irq(n) (IRQ_IXP4XX_GPIO ## n) #define gpio_irq(n) xgpio_irq(n) #define SLOT_ETHA 0x0B /* IDSEL = AD21 */ #define SLOT_ETHB 0x0C /* IDSEL = AD20 */ #define SLOT_MPCI 0x0D /* IDSEL = AD19 */ #define SLOT_NEC 0x0E /* IDSEL = AD18 */ #define IRQ_ETHA IRQ_IXP4XX_GPIO4 #define IRQ_ETHB IRQ_IXP4XX_GPIO5 #define IRQ_NEC IRQ_IXP4XX_GPIO3 #define IRQ_MPCI IRQ_IXP4XX_GPIO12 /* GPIO lines */ #define GPIO_SCL 0 #define GPIO_SDA 1 #define GPIO_STR 2 #define GPIO_IRQ_NEC 3 #define GPIO_IRQ_ETHA 4 #define GPIO_IRQ_ETHB 5 #define GPIO_HSS0_DCD_N 6 #define GPIO_HSS1_DCD_N 7 #define GPIO_UART0_DCD 8 #define GPIO_UART1_DCD 9 #define GPIO_HSS0_CTS_N 10 #define GPIO_HSS1_CTS_N 11 #define GPIO_IRQ_MPCI 12 #define GPIO_HSS1_RTS_N 13 #define GPIO_HSS0_RTS_N 14 /* GPIO15 is not connected */ /* Control outputs from 74HC4094 */ #define CONTROL_HSS0_CLK_INT 0 Loading Loading @@ -152,7 +151,7 @@ static int hss_set_clock(int port, unsigned int clock_type) static irqreturn_t hss_dcd_irq(int irq, void *pdev) { int i, port = (irq == gpio_irq(GPIO_HSS1_DCD_N)); int i, port = (irq == IXP4XX_GPIO_IRQ(GPIO_HSS1_DCD_N)); gpio_line_get(port ? GPIO_HSS1_DCD_N : GPIO_HSS0_DCD_N, &i); set_carrier_cb_tab[port](pdev, !i); return IRQ_HANDLED; Loading @@ -165,9 +164,9 @@ static int hss_open(int port, void *pdev, int i, irq; if (!port) irq = gpio_irq(GPIO_HSS0_DCD_N); irq = IXP4XX_GPIO_IRQ(GPIO_HSS0_DCD_N); else irq = gpio_irq(GPIO_HSS1_DCD_N); irq = IXP4XX_GPIO_IRQ(GPIO_HSS1_DCD_N); gpio_line_get(port ? GPIO_HSS1_DCD_N : GPIO_HSS0_DCD_N, &i); set_carrier_cb(pdev, !i); Loading @@ -188,8 +187,8 @@ static int hss_open(int port, void *pdev, static void hss_close(int port, void *pdev) { free_irq(port ? gpio_irq(GPIO_HSS1_DCD_N) : gpio_irq(GPIO_HSS0_DCD_N), pdev); free_irq(port ? IXP4XX_GPIO_IRQ(GPIO_HSS1_DCD_N) : IXP4XX_GPIO_IRQ(GPIO_HSS0_DCD_N), pdev); set_carrier_cb_tab[!!port] = NULL; /* catch bugs */ set_control(port ? CONTROL_HSS1_DTR_N : CONTROL_HSS0_DTR_N, 1); Loading Loading @@ -421,8 +420,8 @@ static void __init gmlr_init(void) gpio_line_config(GPIO_HSS1_RTS_N, IXP4XX_GPIO_OUT); gpio_line_config(GPIO_HSS0_DCD_N, IXP4XX_GPIO_IN); gpio_line_config(GPIO_HSS1_DCD_N, IXP4XX_GPIO_IN); set_irq_type(gpio_irq(GPIO_HSS0_DCD_N), IRQ_TYPE_EDGE_BOTH); set_irq_type(gpio_irq(GPIO_HSS1_DCD_N), IRQ_TYPE_EDGE_BOTH); set_irq_type(IXP4XX_GPIO_IRQ(GPIO_HSS0_DCD_N), IRQ_TYPE_EDGE_BOTH); set_irq_type(IXP4XX_GPIO_IRQ(GPIO_HSS1_DCD_N), IRQ_TYPE_EDGE_BOTH); set_control(CONTROL_HSS0_DTR_N, 1); set_control(CONTROL_HSS1_DTR_N, 1); Loading @@ -442,10 +441,10 @@ static void __init gmlr_init(void) #ifdef CONFIG_PCI static void __init gmlr_pci_preinit(void) { set_irq_type(IRQ_ETHA, IRQ_TYPE_LEVEL_LOW); set_irq_type(IRQ_ETHB, IRQ_TYPE_LEVEL_LOW); set_irq_type(IRQ_NEC, IRQ_TYPE_LEVEL_LOW); set_irq_type(IRQ_MPCI, IRQ_TYPE_LEVEL_LOW); set_irq_type(IXP4XX_GPIO_IRQ(GPIO_IRQ_ETHA), IRQ_TYPE_LEVEL_LOW); set_irq_type(IXP4XX_GPIO_IRQ(GPIO_IRQ_ETHB), IRQ_TYPE_LEVEL_LOW); set_irq_type(IXP4XX_GPIO_IRQ(GPIO_IRQ_NEC), IRQ_TYPE_LEVEL_LOW); set_irq_type(IXP4XX_GPIO_IRQ(GPIO_IRQ_MPCI), IRQ_TYPE_LEVEL_LOW); ixp4xx_pci_preinit(); } Loading @@ -466,10 +465,10 @@ static void __init gmlr_pci_postinit(void) static int __init gmlr_map_irq(struct pci_dev *dev, u8 slot, u8 pin) { switch(slot) { case SLOT_ETHA: return IRQ_ETHA; case SLOT_ETHB: return IRQ_ETHB; case SLOT_NEC: return IRQ_NEC; default: return IRQ_MPCI; case SLOT_ETHA: return IXP4XX_GPIO_IRQ(GPIO_IRQ_ETHA); case SLOT_ETHB: return IXP4XX_GPIO_IRQ(GPIO_IRQ_ETHB); case SLOT_NEC: return IXP4XX_GPIO_IRQ(GPIO_IRQ_NEC); default: return IXP4XX_GPIO_IRQ(GPIO_IRQ_MPCI); } } Loading