157c8cb8fSJohn Crispin /* 257c8cb8fSJohn Crispin * This program is free software; you can redistribute it and/or modify it 357c8cb8fSJohn Crispin * under the terms of the GNU General Public License version 2 as published 457c8cb8fSJohn Crispin * by the Free Software Foundation. 557c8cb8fSJohn Crispin * 657c8cb8fSJohn Crispin * Copyright (C) 2012 John Crispin <blogic@openwrt.org> 757c8cb8fSJohn Crispin */ 857c8cb8fSJohn Crispin 957c8cb8fSJohn Crispin #include <linux/of_irq.h> 1057c8cb8fSJohn Crispin #include <linux/of_pci.h> 1157c8cb8fSJohn Crispin 1257c8cb8fSJohn Crispin int (*ltq_pci_plat_arch_init)(struct pci_dev *dev) = NULL; 1357c8cb8fSJohn Crispin int (*ltq_pci_plat_dev_init)(struct pci_dev *dev) = NULL; 1457c8cb8fSJohn Crispin 1557c8cb8fSJohn Crispin int pcibios_plat_dev_init(struct pci_dev *dev) 1657c8cb8fSJohn Crispin { 1757c8cb8fSJohn Crispin if (ltq_pci_plat_arch_init) 1857c8cb8fSJohn Crispin return ltq_pci_plat_arch_init(dev); 1957c8cb8fSJohn Crispin 2057c8cb8fSJohn Crispin if (ltq_pci_plat_dev_init) 2157c8cb8fSJohn Crispin return ltq_pci_plat_dev_init(dev); 2257c8cb8fSJohn Crispin 2357c8cb8fSJohn Crispin return 0; 2457c8cb8fSJohn Crispin } 2557c8cb8fSJohn Crispin 2657c8cb8fSJohn Crispin int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) 2757c8cb8fSJohn Crispin { 2857c8cb8fSJohn Crispin struct of_irq dev_irq; 2957c8cb8fSJohn Crispin int irq; 3057c8cb8fSJohn Crispin 3157c8cb8fSJohn Crispin if (of_irq_map_pci(dev, &dev_irq)) { 3257c8cb8fSJohn Crispin dev_err(&dev->dev, "trying to map irq for unknown slot:%d pin:%d\n", 3357c8cb8fSJohn Crispin slot, pin); 3457c8cb8fSJohn Crispin return 0; 3557c8cb8fSJohn Crispin } 3657c8cb8fSJohn Crispin irq = irq_create_of_mapping(dev_irq.controller, dev_irq.specifier, 3757c8cb8fSJohn Crispin dev_irq.size); 3857c8cb8fSJohn Crispin dev_info(&dev->dev, "SLOT:%d PIN:%d IRQ:%d\n", slot, pin, irq); 3957c8cb8fSJohn Crispin return irq; 4057c8cb8fSJohn Crispin } 41