diff --git a/arch/arm/mach-orion5x/ts78xx-setup.c b/arch/arm/mach-orion5x/ts78xx-setup.c index baa25d0fd5c948f492718f9121bc1274e0280d47..778b11860ee660fecd2f730db16e2835407dd2b5 100644 --- a/arch/arm/mach-orion5x/ts78xx-setup.c +++ b/arch/arm/mach-orion5x/ts78xx-setup.c @@ -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; }