Merge branch 'x86-spinlocks-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[pandora-kernel.git] / arch / m68k / mac / misc.c
index e023fc6..eb91555 100644 (file)
@@ -304,35 +304,41 @@ static void via_write_pram(int offset, __u8 data)
 static long via_read_time(void)
 {
        union {
-               __u8  cdata[4];
-               long  idata;
+               __u8 cdata[4];
+               long idata;
        } result, last_result;
-       int     ct;
+       int count = 1;
+
+       via_pram_command(0x81, &last_result.cdata[3]);
+       via_pram_command(0x85, &last_result.cdata[2]);
+       via_pram_command(0x89, &last_result.cdata[1]);
+       via_pram_command(0x8D, &last_result.cdata[0]);
 
        /*
         * The NetBSD guys say to loop until you get the same reading
         * twice in a row.
         */
 
-       ct = 0;
-       do {
-               if (++ct > 10) {
-                       printk("via_read_time: couldn't get valid time, "
-                              "last read = 0x%08lx and 0x%08lx\n",
-                              last_result.idata, result.idata);
-                       break;
-               }
-
-               last_result.idata = result.idata;
-               result.idata = 0;
-
+       while (1) {
                via_pram_command(0x81, &result.cdata[3]);
                via_pram_command(0x85, &result.cdata[2]);
                via_pram_command(0x89, &result.cdata[1]);
                via_pram_command(0x8D, &result.cdata[0]);
-       } while (result.idata != last_result.idata);
 
-       return result.idata - RTC_OFFSET;
+               if (result.idata == last_result.idata)
+                       return result.idata - RTC_OFFSET;
+
+               if (++count > 10)
+                       break;
+
+               last_result.idata = result.idata;
+       }
+
+       pr_err("via_read_time: failed to read a stable value; "
+              "got 0x%08lx then 0x%08lx\n",
+              last_result.idata, result.idata);
+
+       return 0;
 }
 
 /*