|
@@ -200,3 +200,109 @@ __initcall(db88f5281_7seg_init);
|
|
|
|
|
|
/*****************************************************************************
|
|
|
* PCI
|
|
|
+ ****************************************************************************/
|
|
|
+
|
|
|
+void __init db88f5281_pci_preinit(void)
|
|
|
+{
|
|
|
+ int pin;
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Configure PCI GPIO IRQ pins
|
|
|
+ */
|
|
|
+ pin = DB88F5281_PCI_SLOT0_IRQ_PIN;
|
|
|
+ if (gpio_request(pin, "PCI Int1") == 0) {
|
|
|
+ if (gpio_direction_input(pin) == 0) {
|
|
|
+ irq_set_irq_type(gpio_to_irq(pin), IRQ_TYPE_LEVEL_LOW);
|
|
|
+ } else {
|
|
|
+ printk(KERN_ERR "db88f5281_pci_preinit failed to "
|
|
|
+ "set_irq_type pin %d\n", pin);
|
|
|
+ gpio_free(pin);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ printk(KERN_ERR "db88f5281_pci_preinit failed to gpio_request %d\n", pin);
|
|
|
+ }
|
|
|
+
|
|
|
+ pin = DB88F5281_PCI_SLOT1_SLOT2_IRQ_PIN;
|
|
|
+ if (gpio_request(pin, "PCI Int2") == 0) {
|
|
|
+ if (gpio_direction_input(pin) == 0) {
|
|
|
+ irq_set_irq_type(gpio_to_irq(pin), IRQ_TYPE_LEVEL_LOW);
|
|
|
+ } else {
|
|
|
+ printk(KERN_ERR "db88f5281_pci_preinit failed "
|
|
|
+ "to set_irq_type pin %d\n", pin);
|
|
|
+ gpio_free(pin);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ printk(KERN_ERR "db88f5281_pci_preinit failed to gpio_request %d\n", pin);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+static int __init db88f5281_pci_map_irq(const struct pci_dev *dev, u8 slot,
|
|
|
+ u8 pin)
|
|
|
+{
|
|
|
+ int irq;
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Check for devices with hard-wired IRQs.
|
|
|
+ */
|
|
|
+ irq = orion5x_pci_map_irq(dev, slot, pin);
|
|
|
+ if (irq != -1)
|
|
|
+ return irq;
|
|
|
+
|
|
|
+ /*
|
|
|
+ * PCI IRQs are connected via GPIOs.
|
|
|
+ */
|
|
|
+ switch (slot - DB88F5281_PCI_SLOT0_OFFS) {
|
|
|
+ case 0:
|
|
|
+ return gpio_to_irq(DB88F5281_PCI_SLOT0_IRQ_PIN);
|
|
|
+ case 1:
|
|
|
+ case 2:
|
|
|
+ return gpio_to_irq(DB88F5281_PCI_SLOT1_SLOT2_IRQ_PIN);
|
|
|
+ default:
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+static struct hw_pci db88f5281_pci __initdata = {
|
|
|
+ .nr_controllers = 2,
|
|
|
+ .preinit = db88f5281_pci_preinit,
|
|
|
+ .setup = orion5x_pci_sys_setup,
|
|
|
+ .scan = orion5x_pci_sys_scan_bus,
|
|
|
+ .map_irq = db88f5281_pci_map_irq,
|
|
|
+};
|
|
|
+
|
|
|
+static int __init db88f5281_pci_init(void)
|
|
|
+{
|
|
|
+ if (machine_is_db88f5281())
|
|
|
+ pci_common_init(&db88f5281_pci);
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+subsys_initcall(db88f5281_pci_init);
|
|
|
+
|
|
|
+/*****************************************************************************
|
|
|
+ * Ethernet
|
|
|
+ ****************************************************************************/
|
|
|
+static struct mv643xx_eth_platform_data db88f5281_eth_data = {
|
|
|
+ .phy_addr = MV643XX_ETH_PHY_ADDR(8),
|
|
|
+};
|
|
|
+
|
|
|
+/*****************************************************************************
|
|
|
+ * RTC DS1339 on I2C bus
|
|
|
+ ****************************************************************************/
|
|
|
+static struct i2c_board_info __initdata db88f5281_i2c_rtc = {
|
|
|
+ I2C_BOARD_INFO("ds1339", 0x68),
|
|
|
+};
|
|
|
+
|
|
|
+/*****************************************************************************
|
|
|
+ * General Setup
|
|
|
+ ****************************************************************************/
|
|
|
+static unsigned int db88f5281_mpp_modes[] __initdata = {
|
|
|
+ MPP0_GPIO, /* USB Over Current */
|
|
|
+ MPP1_GPIO, /* USB Vbat input */
|
|
|
+ MPP2_PCI_ARB, /* PCI_REQn[2] */
|
|
|
+ MPP3_PCI_ARB, /* PCI_GNTn[2] */
|
|
|
+ MPP4_PCI_ARB, /* PCI_REQn[3] */
|
|
|
+ MPP5_PCI_ARB, /* PCI_GNTn[3] */
|
|
|
+ MPP6_GPIO, /* JP0, CON17.2 */
|
|
|
+ MPP7_GPIO, /* JP1, CON17.1 */
|