diff options
Diffstat (limited to 'arch/powerpc/platforms/embedded6xx/ls_uart.c')
-rw-r--r-- | arch/powerpc/platforms/embedded6xx/ls_uart.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/arch/powerpc/platforms/embedded6xx/ls_uart.c b/arch/powerpc/platforms/embedded6xx/ls_uart.c index 9d891bd5df5a..6c1dbf8ae718 100644 --- a/arch/powerpc/platforms/embedded6xx/ls_uart.c +++ b/arch/powerpc/platforms/embedded6xx/ls_uart.c @@ -14,8 +14,9 @@ #include <linux/delay.h> #include <linux/serial_reg.h> #include <linux/serial_8250.h> +#include <linux/of.h> +#include <linux/of_address.h> #include <asm/io.h> -#include <asm/prom.h> #include <asm/termbits.h> #include "mpc10x.h" @@ -114,20 +115,24 @@ static void __init ls_uart_init(void) static int __init ls_uarts_init(void) { struct device_node *avr; - phys_addr_t phys_addr; - int len; + struct resource res; + int len, ret; avr = of_find_node_by_path("/soc10x/serial@80004500"); if (!avr) return -EINVAL; avr_clock = *(u32*)of_get_property(avr, "clock-frequency", &len); - phys_addr = ((u32*)of_get_property(avr, "reg", &len))[0]; - - if (!avr_clock || !phys_addr) + if (!avr_clock) return -EINVAL; - avr_addr = ioremap(phys_addr, 32); + ret = of_address_to_resource(avr, 0, &res); + if (ret) + return ret; + + of_node_put(avr); + + avr_addr = ioremap(res.start, 32); if (!avr_addr) return -EFAULT; |