Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f5273fa3 authored by Alexander Clouter's avatar Alexander Clouter Committed by Nicolas Pitre
Browse files

[ARM] orion5x: ts78xx make more bulletproof the RTC load/unload code



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: default avatarAlexander Clouter <alex@digriz.org.uk>
Signed-off-by: default avatarNicolas Pitre <nico@cam.org>
parent f1f54657
Loading
Loading
Loading
Loading
+14 −8
Original line number Diff line number Diff line
@@ -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) {
				rc = platform_device_register(&ts78xx_ts_rtc_device);
				if (!rc)
					ts78xx_fpga.supports.ts_rtc.init = 1;
				platform_device_register(&ts78xx_ts_rtc_device);
			} 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;
	}