X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=arch%2Fsparc%2Fkernel%2Fauxio.c;h=d3b3648362c09c33aee079aa799f5f78921793d1;hb=6a77f38946aaee1cd85eeec6cf4229b204c15071;hp=44b6dd75ec58cc724e270cccb484c06ef43c6249;hpb=87fc8d1bb10cd459024a742c6a10961fefcef18f;p=linux-2.6.git diff --git a/arch/sparc/kernel/auxio.c b/arch/sparc/kernel/auxio.c index 44b6dd75e..d3b364836 100644 --- a/arch/sparc/kernel/auxio.c +++ b/arch/sparc/kernel/auxio.c @@ -17,8 +17,8 @@ /* auxio_register is not static because it is referenced * in entry.S::floppy_tdone */ -unsigned long auxio_register = 0UL; -static spinlock_t auxio_lock = SPIN_LOCK_UNLOCKED; +void __iomem *auxio_register = NULL; +static DEFINE_SPINLOCK(auxio_lock); void __init auxio_probe(void) { @@ -53,7 +53,8 @@ void __init auxio_probe(void) #endif } } - prom_getproperty(auxio_nd, "reg", (char *) auxregs, sizeof(auxregs)); + if(prom_getproperty(auxio_nd, "reg", (char *) auxregs, sizeof(auxregs)) <= 0) + return; prom_apply_obio_ranges(auxregs, 0x1); /* Map the register both read and write */ r.flags = auxregs[0].which_io & 0xF; @@ -63,7 +64,7 @@ void __init auxio_probe(void) /* Fix the address on sun4m and sun4c. */ if((((unsigned long) auxregs[0].phys_addr) & 3) == 3 || sparc_cpu_model == sun4c) - auxio_register |= 3; + auxio_register += (3 - ((unsigned long)auxio_register & 3)); set_auxio(AUXIO_LED, 0); } @@ -121,7 +122,8 @@ void __init auxio_power_probe(void) return; /* Map the power control register. */ - prom_getproperty(node, "reg", (char *)®s, sizeof(regs)); + if (prom_getproperty(node, "reg", (char *)®s, sizeof(regs)) <= 0) + return; prom_apply_obio_ranges(®s, 1); memset(&r, 0, sizeof(r)); r.flags = regs.which_io & 0xF;