zte's code,first commit

Change-Id: I9a04da59e459a9bc0d67f101f700d9d7dc8d681b
diff --git a/ap/os/linux/linux-3.4.x/drivers/cpps_init2/Kconfig b/ap/os/linux/linux-3.4.x/drivers/cpps_init2/Kconfig
new file mode 100755
index 0000000..ad36c4d
--- /dev/null
+++ b/ap/os/linux/linux-3.4.x/drivers/cpps_init2/Kconfig
@@ -0,0 +1,6 @@
+# cpps_init2 for cp drivers
+config CPPS_INIT2
+	bool "enable second init for cp drivers"
+	default y
+	---help---
+	  seconde init for cp drivers
diff --git a/ap/os/linux/linux-3.4.x/drivers/cpps_init2/Makefile b/ap/os/linux/linux-3.4.x/drivers/cpps_init2/Makefile
new file mode 100755
index 0000000..acf3908
--- /dev/null
+++ b/ap/os/linux/linux-3.4.x/drivers/cpps_init2/Makefile
@@ -0,0 +1 @@
+obj-y  += cpps_init2.o
diff --git a/ap/os/linux/linux-3.4.x/drivers/cpps_init2/cpps_init2.c b/ap/os/linux/linux-3.4.x/drivers/cpps_init2/cpps_init2.c
new file mode 100755
index 0000000..5df8d58
--- /dev/null
+++ b/ap/os/linux/linux-3.4.x/drivers/cpps_init2/cpps_init2.c
@@ -0,0 +1,43 @@
+#ifdef CONFIG_SINGLECORE
+
+#include <linux/module.h>
+#include <linux/errno.h>
+
+#define CPPS_INIT2_FUNC_MAX  10
+static int (*cpps_init2_funcs[CPPS_INIT2_FUNC_MAX]) (void);
+
+int cpps_init2_register(int (*function) (void))
+{
+	int i;
+
+	for (i = 0; i < CPPS_INIT2_FUNC_MAX; i++) {
+		if (cpps_init2_funcs[i] == 0) {
+			cpps_init2_funcs[i] = function;
+			return 0;
+		}
+	}
+
+	return -ENOMEM;
+}
+
+EXPORT_SYMBOL(cpps_init2_register);
+
+void cpps_init2(void)
+{
+	int i;
+	int ret = 0;
+
+	for (i = 0; i < CPPS_INIT2_FUNC_MAX; i++) {
+		if (cpps_init2_funcs[i] != 0) {
+			ret = cpps_init2_funcs[i] ();
+			if (ret != 0) {
+				printk(KERN_ERR "init2_func: init failed\n");
+				panic("cpps_init2 failed");
+			}
+		}
+	}
+}
+
+EXPORT_SYMBOL(cpps_init2);
+
+#endif