MIPS: RB532: Move dev3 init code to devices.c
[safe/jmp/linux-2.6] / arch / mips / rb532 / devices.c
index 3c74561..1a0209e 100644 (file)
 
 extern unsigned int idt_cpu_freq;
 
+static struct mpmc_device dev3;
+
+void set_latch_u5(unsigned char or_mask, unsigned char nand_mask)
+{
+       unsigned long flags;
+
+       spin_lock_irqsave(&dev3.lock, flags);
+
+       dev3.state = (dev3.state | or_mask) & ~nand_mask;
+       writeb(dev3.state, dev3.base);
+
+       spin_unlock_irqrestore(&dev3.lock, flags);
+}
+EXPORT_SYMBOL(set_latch_u5);
+
+unsigned char get_latch_u5(void)
+{
+       return dev3.state;
+}
+EXPORT_SYMBOL(get_latch_u5);
+
+static struct resource rb532_dev3_ctl_res[] = {
+       {
+               .name   = "dev3_ctl",
+               .flags  = IORESOURCE_MEM,
+       }
+};
+
 static struct resource korina_dev0_res[] = {
        {
                .name = "korina_regs",
@@ -314,6 +342,17 @@ static int __init plat_setup_devices(void)
        nand_slot0_res[0].start = readl(IDT434_REG_BASE + DEV2BASE);
        nand_slot0_res[0].end = nand_slot0_res[0].start + 0x1000;
 
+       /* Read the third (multi purpose) resources from the DC */
+       rb532_dev3_ctl_res[0].start = readl(IDT434_REG_BASE + DEV3BASE);
+       rb532_dev3_ctl_res[0].end = rb532_dev3_ctl_res[0].start + 0x1000;
+
+       dev3.base = ioremap_nocache(rb532_dev3_ctl_res[0].start, 0x1000);
+
+       if (!dev3.base) {
+               printk(KERN_ERR "rb532: cannot remap device controller 3\n");
+               return -ENXIO;
+       }
+
        /* Initialise the NAND device */
        rb532_nand_setup();