]> git.karo-electronics.de Git - linux-beck.git/commitdiff
[ARM] orion5x: ts78xx make more bulletproof the RTC load/unload code
authorAlexander Clouter <alex@digriz.org.uk>
Mon, 23 Feb 2009 22:37:36 +0000 (22:37 +0000)
committerNicolas Pitre <nico@cam.org>
Wed, 25 Feb 2009 04:59:33 +0000 (23:59 -0500)
Added checks to the platform_device_(register|add) calls so that if
a device failed to load it would then not later be unloaded; also
added the hooks so that it would not try to unload when the RTC
driver support is compiled out.

Signed-off-by: Alexander Clouter <alex@digriz.org.uk>
Signed-off-by: Nicolas Pitre <nico@cam.org>
arch/arm/mach-orion5x/ts78xx-setup.c

index baa25d0fd5c948f492718f9121bc1274e0280d47..778b11860ee660fecd2f730db16e2835407dd2b5 100644 (file)
@@ -117,6 +117,7 @@ static struct platform_device ts78xx_ts_rtc_device = {
  */
 static int ts78xx_ts_rtc_load(void)
 {
+       int rc;
        unsigned char tmp_rtc0, tmp_rtc1;
 
        tmp_rtc0 = ts78xx_ts_rtc_readbyte(126);
@@ -130,16 +131,18 @@ static int ts78xx_ts_rtc_load(void)
                                && ts78xx_ts_rtc_readbyte(126) == 0x00) {
                        ts78xx_ts_rtc_writebyte(tmp_rtc0, 126);
                        ts78xx_ts_rtc_writebyte(tmp_rtc1, 127);
+
                        if (ts78xx_fpga.supports.ts_rtc.init == 0) {
-                               ts78xx_fpga.supports.ts_rtc.init = 1;
-                               platform_device_register(&ts78xx_ts_rtc_device);
+                               rc = platform_device_register(&ts78xx_ts_rtc_device);
+                               if (!rc)
+                                       ts78xx_fpga.supports.ts_rtc.init = 1;
                        } else
-                               platform_device_add(&ts78xx_ts_rtc_device);
-                       return 0;
+                               rc = platform_device_add(&ts78xx_ts_rtc_device);
+
+                       return rc;
                }
        }
 
-       ts78xx_fpga.supports.ts_rtc.present = 0;
        return -ENODEV;
 };
 
@@ -150,7 +153,7 @@ static void ts78xx_ts_rtc_unload(void)
 #else
 static int ts78xx_ts_rtc_load(void)
 {
-       return 0;
+       return -ENODEV;
 }
 
 static void ts78xx_ts_rtc_unload(void)
@@ -184,8 +187,11 @@ static int ts78xx_fpga_load_devices(void)
 
        if (ts78xx_fpga.supports.ts_rtc.present == 1) {
                tmp = ts78xx_ts_rtc_load();
-               if (tmp)
-                       printk(KERN_INFO "TS-78xx RTC not detected or enabled\n");
+               if (tmp) {
+                       printk(KERN_INFO "TS-78xx RTC"
+                                       " not detected or enabled\n");
+                       ts78xx_fpga.supports.ts_rtc.present = 0;
+               }
                ret |= tmp;
        }