IXP4xx: unneeded #include platform-specific include files?

Krzysztof Halasa khc at pm.waw.pl
Tue Nov 17 16:53:38 EST 2009


"Imre Kaloz" <kaloz at openwrt.org> writes:

> Ok, I should be completely missing the point here, but could someone enlighten
> me why would the following make sense? (nslu2 example)
>
> #define NSLU2_PCI_INTA_PIN	11
> #define NSLU2_PCI_INTB_PIN	10
> #define NSLU2_PCI_INTC_PIN	9
> #define NSLU2_PCI_INTD_PIN	8
>
> #define        IRQ_NSLU2_PCI_INTA      IRQ_IXP4XX_GPIO11
> #define        IRQ_NSLU2_PCI_INTB      IRQ_IXP4XX_GPIO10
> #define        IRQ_NSLU2_PCI_INTC      IRQ_IXP4XX_GPIO9

Well, this isn't something I really like because it duplicates the
assignments.

> Then do all the "fun" in the setup code, instead of simply using
> The already defined (and hardware wise more logical) IRQ_IXP4XX_GPIOx values like
> I do in arch/arch/mach-ixp4xx/wg302v2-pci.c for example?

void __init wg302v2_pci_preinit(void)
{
        set_irq_type(IRQ_IXP4XX_GPIO8, IRQ_TYPE_LEVEL_LOW);
        set_irq_type(IRQ_IXP4XX_GPIO9, IRQ_TYPE_LEVEL_LOW);

        ixp4xx_pci_preinit();
}

static int __init wg302v2_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
{
        if (slot == 1)
                return IRQ_IXP4XX_GPIO8;
        else if (slot == 2)
                return IRQ_IXP4XX_GPIO9;
        else return -1;
}

Not very different from what other platforms have, except that you have
to remember the assignment. When the code gets more complicated you
really don't want to remember that INTA is GPIO8, INTB is GPIO9, INTC,
INTD, IDE_IRQ, USB_IRQ etc. And this gets even more complicated when the
platform code supports more than one version of hw.
-- 
Krzysztof Halasa



More information about the linux-arm-kernel mailing list