summaryrefslogtreecommitdiff
path: root/arch/mips/rb532/devices.c
diff options
context:
space:
mode:
authorPhil Sutter <n0-1@freewrt.org>2009-01-20 01:42:52 +0300
committerRalf Baechle <ralf@linux-mips.org>2009-01-31 00:33:00 +0300
commit36f2db4b9c01689b1311d57a6297022d82000185 (patch)
tree209deaa3c9dba38e633ba4e8ac7875749c54c490 /arch/mips/rb532/devices.c
parent7060886fb745b705bcf189131eb49c50485ba233 (diff)
downloadlinux-36f2db4b9c01689b1311d57a6297022d82000185.tar.xz
MIPS: RB532: Move dev3 init code to devices.c
This code doesn't belong to gpio.c, as it's completely unrelated to GPIO. As dev1 and dev2 init code is in devices.c, it seems to be a more adequate place. Signed-off-by: Phil Sutter <n0-1@freewrt.org> Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'arch/mips/rb532/devices.c')
-rw-r--r--arch/mips/rb532/devices.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/arch/mips/rb532/devices.c b/arch/mips/rb532/devices.c
index 3c74561b4ee5..1a0209eca789 100644
--- a/arch/mips/rb532/devices.c
+++ b/arch/mips/rb532/devices.c
@@ -42,6 +42,34 @@
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();