]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/serial/of_serial.c
fat: document additional vfat mount options
[linux-2.6-omap-h63xx.git] / drivers / serial / of_serial.c
index 8aacfb78deabe03e08ca8d8b4df0e6235eff35ee..8fa0ff561e9fbd901acb46787bff587b035ddd79 100644 (file)
@@ -13,8 +13,8 @@
 #include <linux/module.h>
 #include <linux/serial_core.h>
 #include <linux/serial_8250.h>
+#include <linux/of_platform.h>
 
-#include <asm/of_platform.h>
 #include <asm/prom.h>
 
 struct of_serial_info {
@@ -31,7 +31,8 @@ static int __devinit of_platform_serial_setup(struct of_device *ofdev,
        struct resource resource;
        struct device_node *np = ofdev->node;
        const unsigned int *clk, *spd;
-       int ret;
+       const u32 *prop;
+       int ret, prop_size;
 
        memset(port, 0, sizeof *port);
        spd = of_get_property(np, "current-speed", NULL);
@@ -49,6 +50,17 @@ static int __devinit of_platform_serial_setup(struct of_device *ofdev,
 
        spin_lock_init(&port->lock);
        port->mapbase = resource.start;
+
+       /* Check for shifted address mapping */
+       prop = of_get_property(np, "reg-offset", &prop_size);
+       if (prop && (prop_size == sizeof(u32)))
+               port->mapbase += *prop;
+
+       /* Check for registers offset within the devices address range */
+       prop = of_get_property(np, "reg-shift", &prop_size);
+       if (prop && (prop_size == sizeof(u32)))
+               port->regshift = *prop;
+
        port->irq = irq_of_parse_and_map(np, 0);
        port->iotype = UPIO_MEM;
        port->type = type;