MIPS: Alchemy: Clean up GPIO registers and accessors
[linux-2.6.git] / arch / mips / alchemy / devboards / pb1500 / board_setup.c
index 035771c..3b4fa32 100644 (file)
  *  675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
-#include <linux/init.h>
 #include <linux/delay.h>
+#include <linux/gpio.h>
+#include <linux/init.h>
+#include <linux/interrupt.h>
 
 #include <asm/mach-au1x00/au1000.h>
-#include <asm/mach-pb1x00/pb1500.h>
+#include <asm/mach-db1x00/bcsr.h>
+
+#include <prom.h>
+
 
-void board_reset(void)
+char irq_tab_alchemy[][5] __initdata = {
+       [12] = { -1, AU1500_PCI_INTA, 0xff, 0xff, 0xff },   /* IDSEL 12 - HPT370        */
+       [13] = { -1, AU1500_PCI_INTA, AU1500_PCI_INTB, AU1500_PCI_INTC, AU1500_PCI_INTD },   /* IDSEL 13 - PCI slot */
+};
+
+
+const char *get_system_type(void)
 {
-       /* Hit BCSR.RST_VDDI[SOFT_RESET] */
-       au_writel(0x00000000, PB1500_RST_VDDI);
+       return "Alchemy Pb1500";
 }
 
 void __init board_setup(void)
@@ -40,17 +50,21 @@ void __init board_setup(void)
        u32 pin_func;
        u32 sys_freqctrl, sys_clksrc;
 
+       bcsr_init(DB1000_BCSR_PHYS_ADDR,
+                 DB1000_BCSR_PHYS_ADDR + DB1000_BCSR_HEXLED_OFS);
+
        sys_clksrc = sys_freqctrl = pin_func = 0;
        /* Set AUX clock to 12 MHz * 8 = 96 MHz */
        au_writel(8, SYS_AUXPLL);
-       au_writel(0, SYS_PINSTATERD);
+       alchemy_gpio1_input_enable();
        udelay(100);
 
-#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE)
-
        /* GPIO201 is input for PCMCIA card detect */
        /* GPIO203 is input for PCMCIA interrupt request */
-       au_writel(au_readl(GPIO2_DIR) & ~((1 << 1) | (1 << 3)), GPIO2_DIR);
+       alchemy_gpio_direction_input(201);
+       alchemy_gpio_direction_input(203);
+
+#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE)
 
        /* Zero and disable FREQ2 */
        sys_freqctrl = au_readl(SYS_FREQCTRL0);
@@ -117,3 +131,18 @@ void __init board_setup(void)
                au_sync();
        }
 }
+
+static int __init pb1500_init_irq(void)
+{
+       irq_set_irq_type(AU1500_GPIO9_INT, IRQF_TRIGGER_LOW);   /* CD0# */
+       irq_set_irq_type(AU1500_GPIO10_INT, IRQF_TRIGGER_LOW);  /* CARD0 */
+       irq_set_irq_type(AU1500_GPIO11_INT, IRQF_TRIGGER_LOW);  /* STSCHG0# */
+       irq_set_irq_type(AU1500_GPIO204_INT, IRQF_TRIGGER_HIGH);
+       irq_set_irq_type(AU1500_GPIO201_INT, IRQF_TRIGGER_LOW);
+       irq_set_irq_type(AU1500_GPIO202_INT, IRQF_TRIGGER_LOW);
+       irq_set_irq_type(AU1500_GPIO203_INT, IRQF_TRIGGER_LOW);
+       irq_set_irq_type(AU1500_GPIO205_INT, IRQF_TRIGGER_LOW);
+
+       return 0;
+}
+arch_initcall(pb1500_init_irq);