linux/arch/arm/mach-ixp4xx/coyote-pci.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 * arch/arm/mach-ixp4xx/coyote-pci.c
   4 *
   5 * PCI setup routines for ADI Engineering Coyote platform
   6 *
   7 * Copyright (C) 2002 Jungo Software Technologies.
   8 * Copyright (C) 2003 MontaVista Softwrae, Inc.
   9 *
  10 * Maintainer: Deepak Saxena <dsaxena@mvista.com>
  11 */
  12
  13#include <linux/kernel.h>
  14#include <linux/pci.h>
  15#include <linux/init.h>
  16#include <linux/irq.h>
  17#include <asm/mach-types.h>
  18#include <mach/hardware.h>
  19#include <asm/irq.h>
  20#include <asm/mach/pci.h>
  21
  22#include "irqs.h"
  23
  24#define SLOT0_DEVID     14
  25#define SLOT1_DEVID     15
  26
  27/* PCI controller GPIO to IRQ pin mappings */
  28#define SLOT0_INTA      6
  29#define SLOT1_INTA      11
  30
  31void __init coyote_pci_preinit(void)
  32{
  33        irq_set_irq_type(IXP4XX_GPIO_IRQ(SLOT0_INTA), IRQ_TYPE_LEVEL_LOW);
  34        irq_set_irq_type(IXP4XX_GPIO_IRQ(SLOT1_INTA), IRQ_TYPE_LEVEL_LOW);
  35        ixp4xx_pci_preinit();
  36}
  37
  38static int __init coyote_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
  39{
  40        if (slot == SLOT0_DEVID)
  41                return IXP4XX_GPIO_IRQ(SLOT0_INTA);
  42        else if (slot == SLOT1_DEVID)
  43                return IXP4XX_GPIO_IRQ(SLOT1_INTA);
  44        else return -1;
  45}
  46
  47struct hw_pci coyote_pci __initdata = {
  48        .nr_controllers = 1,
  49        .ops            = &ixp4xx_ops,
  50        .preinit =        coyote_pci_preinit,
  51        .setup =          ixp4xx_setup,
  52        .map_irq =        coyote_map_irq,
  53};
  54
  55int __init coyote_pci_init(void)
  56{
  57        if (machine_is_adi_coyote())
  58                pci_common_init(&coyote_pci);
  59        return 0;
  60}
  61
  62subsys_initcall(coyote_pci_init);
  63