Allow frequency stats when cpuidle is not enabled

Powertop fails to display frequency stats when cpuidle subsystem
is not enabled. Fix it.

Signed-off-by: Rajagopal Venkat <rajagopal.venkat@linaro.org>
diff --git a/src/cpu/cpu.h b/src/cpu/cpu.h
index 4480b11..781e33c 100644
--- a/src/cpu/cpu.h
+++ b/src/cpu/cpu.h
@@ -159,7 +159,12 @@
 class cpu_linux: public abstract_cpu
 {
 
-	void		account_freq(uint64_t frequency, uint64_t duration);
+	void	account_freq(uint64_t frequency, uint64_t duration);
+	void 	parse_pstates_start(void);
+	void 	parse_cstates_start(void);
+	void 	parse_pstates_end(void);
+	void 	parse_cstates_end(void);
+
 public:
 	virtual void	measurement_start(void);
 	virtual void	measurement_end(void);
diff --git a/src/cpu/cpu_linux.cpp b/src/cpu/cpu_linux.cpp
index d6caf45..e7a3d37 100644
--- a/src/cpu/cpu_linux.cpp
+++ b/src/cpu/cpu_linux.cpp
@@ -47,17 +47,13 @@
 	return 1;
 }
 
-void cpu_linux::measurement_start(void)
+void cpu_linux::parse_cstates_start(void)
 {
 	ifstream file;
-
 	DIR *dir;
 	struct dirent *entry;
 	char filename[256];
 	int len;
-	unsigned int i;
-
-	abstract_cpu::measurement_start();
 
 	len = sprintf(filename, "/sys/devices/system/cpu/cpu%i/cpuidle", number);
 
@@ -111,9 +107,16 @@
 
 	}
 	closedir(dir);
+}
+
+
+void cpu_linux::parse_pstates_start(void)
+{
+	ifstream file;
+	char filename[256];
+	unsigned int i;
 
 	last_stamp = 0;
-
 	for (i = 0; i < children.size(); i++)
 		if (children[i])
 			children[i]->wiggle();
@@ -136,8 +139,14 @@
 	account_freq(0, 0);
 }
 
+void cpu_linux::measurement_start(void)
+{
+	abstract_cpu::measurement_start();
+	parse_cstates_start();
+	parse_pstates_start();
+}
 
-void cpu_linux::measurement_end(void)
+void cpu_linux::parse_cstates_end(void)
 {
 	DIR *dir;
 	struct dirent *entry;
@@ -187,6 +196,12 @@
 
 	}
 	closedir(dir);
+}
+
+void cpu_linux::parse_pstates_end(void)
+{
+	char filename[256];
+	ifstream file;
 
 	sprintf(filename, "/sys/devices/system/cpu/cpu%i/cpufreq/stats/time_in_state", number);
 
@@ -216,11 +231,14 @@
 		}
 		file.close();
 	}
-
-
-	abstract_cpu::measurement_end();
 }
 
+void cpu_linux::measurement_end(void)
+{
+	parse_cstates_end();
+	parse_pstates_end();
+	abstract_cpu::measurement_end();
+}
 
 char * cpu_linux::fill_cstate_line(int line_nr, char *buffer, const char *separator)
 {