Merge "usb: gadget: Add support for multiple RmNET" into msm-3.0
diff --git a/arch/arm/mach-msm/board-9615.c b/arch/arm/mach-msm/board-9615.c
index 1e51a8a..e68d5cd 100644
--- a/arch/arm/mach-msm/board-9615.c
+++ b/arch/arm/mach-msm/board-9615.c
@@ -322,6 +322,46 @@
 		.desc_fifo_size = 0x100,
 	},
 #endif
+	[1][USB_TO_PEER_PERIPHERAL] = {
+		.src_phy_addr = USB_BAM_PHY_BASE,
+		.src_pipe_index = 13,
+		.dst_phy_addr = A2_BAM_PHY_BASE,
+		.dst_pipe_index = 2,
+		.data_fifo_base_offset = 0x2100,
+		.data_fifo_size = 0x600,
+		.desc_fifo_base_offset = 0x2700,
+		.desc_fifo_size = 0x300,
+	},
+	[1][PEER_PERIPHERAL_TO_USB] = {
+		.src_phy_addr = A2_BAM_PHY_BASE,
+		.src_pipe_index = 3,
+		.dst_phy_addr = USB_BAM_PHY_BASE,
+		.dst_pipe_index = 12,
+		.data_fifo_base_offset = 0x1a00,
+		.data_fifo_size = 0x600,
+		.desc_fifo_base_offset = 0x2000,
+		.desc_fifo_size = 0x100,
+	},
+	[2][USB_TO_PEER_PERIPHERAL] = {
+		.src_phy_addr = USB_BAM_PHY_BASE,
+		.src_pipe_index = 15,
+		.dst_phy_addr = A2_BAM_PHY_BASE,
+		.dst_pipe_index = 4,
+		.data_fifo_base_offset = 0x3100,
+		.data_fifo_size = 0x600,
+		.desc_fifo_base_offset = 0x3700,
+		.desc_fifo_size = 0x300,
+	},
+	[2][PEER_PERIPHERAL_TO_USB] = {
+		.src_phy_addr = A2_BAM_PHY_BASE,
+		.src_pipe_index = 5,
+		.dst_phy_addr = USB_BAM_PHY_BASE,
+		.dst_pipe_index = 14,
+		.data_fifo_base_offset = 0x2a00,
+		.data_fifo_size = 0x600,
+		.desc_fifo_base_offset = 0x3000,
+		.desc_fifo_size = 0x100,
+	}
 };
 
 static struct msm_usb_bam_platform_data msm_usb_bam_pdata = {
diff --git a/drivers/usb/gadget/f_rmnet.c b/drivers/usb/gadget/f_rmnet.c
index 86f8a25..d846c4e 100644
--- a/drivers/usb/gadget/f_rmnet.c
+++ b/drivers/usb/gadget/f_rmnet.c
@@ -61,7 +61,7 @@
 	unsigned long			cpkts_len;
 };
 
-#define NR_RMNET_PORTS	1
+#define NR_RMNET_PORTS	3
 static unsigned int nr_rmnet_ports;
 static unsigned int no_ctrl_smd_ports;
 static unsigned int no_ctrl_hsic_ports;
@@ -334,10 +334,8 @@
 	switch (dxport) {
 	case USB_GADGET_XPORT_BAM:
 	case USB_GADGET_XPORT_BAM2BAM:
-		/* currently only one connection (idx 0)
-		   is supported */
 		ret = gbam_connect(&dev->port, port_num,
-						   dxport, 0);
+						   dxport, port_num);
 		if (ret) {
 			pr_err("%s: gbam_connect failed: err:%d\n",
 					__func__, ret);
diff --git a/drivers/usb/gadget/u_bam.c b/drivers/usb/gadget/u_bam.c
index 30f30cf..6299cdd 100644
--- a/drivers/usb/gadget/u_bam.c
+++ b/drivers/usb/gadget/u_bam.c
@@ -29,7 +29,7 @@
 #include "u_rmnet.h"
 
 #define BAM_N_PORTS	1
-#define BAM2BAM_N_PORTS	1
+#define BAM2BAM_N_PORTS	3
 
 static struct workqueue_struct *gbam_wq;
 static int n_bam_ports;
diff --git a/drivers/usb/gadget/u_rmnet_ctrl_smd.c b/drivers/usb/gadget/u_rmnet_ctrl_smd.c
index a55fc77..8671669 100644
--- a/drivers/usb/gadget/u_rmnet_ctrl_smd.c
+++ b/drivers/usb/gadget/u_rmnet_ctrl_smd.c
@@ -24,9 +24,9 @@
 
 #include "u_rmnet.h"
 
-#define NR_CTRL_SMD_PORTS	1
+#define NR_CTRL_SMD_PORTS	3
 static int n_rmnet_ctrl_ports;
-static char *rmnet_ctrl_names[] = { "DATA40_CNTL" };
+static char *rmnet_ctrl_names[] = {"DATA40_CNTL", "DATA39_CNTL", "DATA38_CNTL"};
 static struct workqueue_struct *grmnet_ctrl_wq;
 
 #define SMD_CH_MAX_LEN	20