fix segfault when no clock is available

When there is no clock available, we even register the display ops.
The 'enter' callbakc is set but not data is available int the row
private data which leads to a segfaults.

This patch fix this problem by not registering the ops if the pm
subsystem was not correctly initialized.

In the meantime, we have to erase the window when we are switching
from one window to another. We can say it is the "default" display
callback.

Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Reported-by: Milo (Woogyom) Kim <woogyom.kim@gmail.com>
diff --git a/clocks.c b/clocks.c
index 0bd0a0e..20a245c 100644
--- a/clocks.c
+++ b/clocks.c
@@ -405,9 +405,6 @@
 {
 	char clk_dir_path[PATH_MAX];
 
-	if (display_register(CLOCK, &clock_ops))
-		return -1;
-
 	if (locate_debugfs(clk_dir_path))
 		return -1;
 
@@ -420,5 +417,8 @@
 	if (!clock_tree)
 		return -1;
 
-	return fill_clock_tree();
+	if (fill_clock_tree())
+		return -1;
+
+	return display_register(CLOCK, &clock_ops);
 }
diff --git a/display.c b/display.c
index 0cfbf94..ebc4de6 100644
--- a/display.c
+++ b/display.c
@@ -120,7 +120,10 @@
 	if (windata[win].ops && windata[win].ops->display)
 		return windata[win].ops->display(read);
 
-	return 0;
+	if (werase(main_win))
+		return -1;
+
+	return wrefresh(main_win);
 }
 
 int display_refresh_pad(int win)
diff --git a/regulator.c b/regulator.c
index 849f906..e9b01bb 100644
--- a/regulator.c
+++ b/regulator.c
@@ -236,12 +236,12 @@
 
 int regulator_init(void)
 {
-	if (display_register(REGULATOR, &regulator_ops))
-		return -1;
-
 	reg_tree = tree_load(SYSFS_REGULATOR, regulator_filter_cb);
 	if (!reg_tree)
 		return -1;
 
-	return fill_regulator_tree();
+	if (fill_regulator_tree())
+		return -1;
+
+	return display_register(REGULATOR, &regulator_ops);
 }
diff --git a/sensor.c b/sensor.c
index d63510e..e172f88 100644
--- a/sensor.c
+++ b/sensor.c
@@ -271,12 +271,12 @@
 
 int sensor_init(void)
 {
-	if (display_register(SENSOR, &sensor_ops))
-		return -1;
-
 	sensor_tree = tree_load(SYSFS_SENSOR, sensor_filter_cb);
 	if (!sensor_tree)
 		return -1;
 
-	return fill_sensor_tree();
+	if (fill_sensor_tree())
+		return -1;
+
+	return display_register(SENSOR, &sensor_ops);
 }