Revert "msm: ipc: Trigger loading only the default subsystem"

This reverts commit 0424710ca8fa552977b82454607bb3c04a70cf66 to
resolve 8064 Liquid Bootup issue temporarily.

Signed-off-by: Karthikeyan Ramasubramanian <kramasub@codeaurora.org>
diff --git a/arch/arm/mach-msm/ipc_socket.c b/arch/arm/mach-msm/ipc_socket.c
index d1ed538..6e8c99e 100644
--- a/arch/arm/mach-msm/ipc_socket.c
+++ b/arch/arm/mach-msm/ipc_socket.c
@@ -26,15 +26,58 @@
 
 #include <net/sock.h>
 
+#include <mach/peripheral-loader.h>
+#include <mach/socinfo.h>
+
 #include "ipc_router.h"
 
 #define msm_ipc_sk(sk) ((struct msm_ipc_sock *)(sk))
 #define msm_ipc_sk_port(sk) ((struct msm_ipc_port *)(msm_ipc_sk(sk)->port))
+#define MODEM_LOAD_TIMEOUT (10 * HZ)
 
 static int sockets_enabled;
 static struct proto msm_ipc_proto;
 static const struct proto_ops msm_ipc_proto_ops;
 
+static void msm_ipc_router_unload_modem(void *pil)
+{
+	if (pil)
+		pil_put(pil);
+}
+
+static void *msm_ipc_router_load_modem(void)
+{
+	void *pil = NULL;
+	int rc;
+
+	/* Load GNSS for Standalone 8064 but not for Fusion 3 */
+	if (cpu_is_apq8064()) {
+		if (socinfo_get_platform_subtype() == 0x0)
+			pil = pil_get("gss");
+	} else {
+		pil = pil_get("modem");
+	}
+
+	if (IS_ERR(pil) || !pil) {
+		pr_debug("%s: modem load failed\n", __func__);
+		pil = NULL;
+	} else {
+		rc = wait_for_completion_interruptible_timeout(
+						&msm_ipc_remote_router_up,
+						MODEM_LOAD_TIMEOUT);
+		if (!rc)
+			rc = -ETIMEDOUT;
+		if (rc < 0) {
+			pr_err("%s: wait for remote router failed %d\n",
+				__func__, rc);
+			msm_ipc_router_unload_modem(pil);
+			pil = NULL;
+		}
+	}
+
+	return pil;
+}
+
 static struct sk_buff_head *msm_ipc_router_build_msg(unsigned int num_sect,
 					  struct iovec const *msg_sect,
 					  size_t total_len)
@@ -201,9 +244,9 @@
 	sock_init_data(sock, sk);
 	sk->sk_rcvtimeo = DEFAULT_RCV_TIMEO;
 
-	pil = msm_ipc_load_default_node();
+	pil = msm_ipc_router_load_modem();
 	msm_ipc_sk(sk)->port = port_ptr;
-	msm_ipc_sk(sk)->default_pil = pil;
+	msm_ipc_sk(sk)->modem_pil = pil;
 
 	return 0;
 }
@@ -452,12 +495,12 @@
 {
 	struct sock *sk = sock->sk;
 	struct msm_ipc_port *port_ptr = msm_ipc_sk_port(sk);
-	void *pil = msm_ipc_sk(sk)->default_pil;
+	void *pil = msm_ipc_sk(sk)->modem_pil;
 	int ret;
 
 	lock_sock(sk);
 	ret = msm_ipc_router_close_port(port_ptr);
-	msm_ipc_unload_default_node(pil);
+	msm_ipc_router_unload_modem(pil);
 	release_sock(sk);
 	sock_put(sk);
 	sock->sk = NULL;