From 2d48aa69bd2e0164a22b253733564701ed3381a1 Mon Sep 17 00:00:00 2001
From: Kishon Vijay Abraham I <kishon@ti.com>
Date: Mon, 23 Feb 2015 18:40:23 +0530
Subject: [PATCH] usb: modify usb_gadget_handle_interrupts to take controller
 index

Since we support multiple dwc3 controllers to be existent at the same
time, in order to handle the interrupts of a particular dwc3 controller
usb_gadget_handle_interrutps should take controller index as an
argument.

Hence the API of usb_gadget_handle_interrupts is modified to take
controller index as an argument and made the corresponding changes to all
the usb_gadget_handle_interrupts calls.

Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
Reviewed-by: Lukasz Majewski <l.majewski@samsung.com>
---
 board/ti/am43xx/board.c             |  6 +++---
 board/ti/dra7xx/evm.c               |  6 +++---
 common/cmd_dfu.c                    |  2 +-
 common/cmd_fastboot.c               |  2 +-
 common/cmd_usb_mass_storage.c       |  2 +-
 drivers/usb/gadget/atmel_usba_udc.c |  2 +-
 drivers/usb/gadget/ci_udc.c         |  2 +-
 drivers/usb/gadget/ether.c          | 10 +++++-----
 drivers/usb/gadget/f_mass_storage.c |  2 +-
 drivers/usb/gadget/f_thor.c         |  6 +++---
 drivers/usb/gadget/fotg210.c        |  2 +-
 drivers/usb/gadget/pxa25x_udc.c     |  2 +-
 drivers/usb/gadget/s3c_udc_otg.c    |  2 +-
 drivers/usb/musb-new/musb_uboot.c   |  2 +-
 include/linux/usb/gadget.h          |  2 +-
 15 files changed, 25 insertions(+), 25 deletions(-)

diff --git a/board/ti/am43xx/board.c b/board/ti/am43xx/board.c
index 6c4fe48a38..ddf4c5fc13 100644
--- a/board/ti/am43xx/board.c
+++ b/board/ti/am43xx/board.c
@@ -732,13 +732,13 @@ int board_usb_cleanup(int index, enum usb_init_type init)
 	return 0;
 }
 
-int usb_gadget_handle_interrupts(void)
+int usb_gadget_handle_interrupts(int index)
 {
 	u32 status;
 
-	status = dwc3_omap_uboot_interrupt_status(0);
+	status = dwc3_omap_uboot_interrupt_status(index);
 	if (status)
-		dwc3_uboot_handle_interrupt(0);
+		dwc3_uboot_handle_interrupt(index);
 
 	return 0;
 }
diff --git a/board/ti/dra7xx/evm.c b/board/ti/dra7xx/evm.c
index 284775ca9f..3089fa2334 100644
--- a/board/ti/dra7xx/evm.c
+++ b/board/ti/dra7xx/evm.c
@@ -220,13 +220,13 @@ int board_usb_cleanup(int index, enum usb_init_type init)
 	return 0;
 }
 
-int usb_gadget_handle_interrupts(void)
+int usb_gadget_handle_interrupts(int index)
 {
 	u32 status;
 
-	status = dwc3_omap_uboot_interrupt_status(0);
+	status = dwc3_omap_uboot_interrupt_status(index);
 	if (status)
-		dwc3_uboot_handle_interrupt(0);
+		dwc3_uboot_handle_interrupt(index);
 
 	return 0;
 }
diff --git a/common/cmd_dfu.c b/common/cmd_dfu.c
index 161d38bf28..ec90998176 100644
--- a/common/cmd_dfu.c
+++ b/common/cmd_dfu.c
@@ -64,7 +64,7 @@ static int do_dfu(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 		if (ctrlc())
 			goto exit;
 
-		usb_gadget_handle_interrupts();
+		usb_gadget_handle_interrupts(controller_index);
 	}
 exit:
 	g_dnl_unregister();
diff --git a/common/cmd_fastboot.c b/common/cmd_fastboot.c
index 346ab80454..30bfc9b709 100644
--- a/common/cmd_fastboot.c
+++ b/common/cmd_fastboot.c
@@ -31,7 +31,7 @@ static int do_fastboot(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
 			break;
 		if (ctrlc())
 			break;
-		usb_gadget_handle_interrupts();
+		usb_gadget_handle_interrupts(0);
 	}
 
 	g_dnl_unregister();
diff --git a/common/cmd_usb_mass_storage.c b/common/cmd_usb_mass_storage.c
index 51c3fffb46..6cfee47a34 100644
--- a/common/cmd_usb_mass_storage.c
+++ b/common/cmd_usb_mass_storage.c
@@ -137,7 +137,7 @@ int do_usb_mass_storage(cmd_tbl_t *cmdtp, int flag,
 	}
 
 	while (1) {
-		usb_gadget_handle_interrupts();
+		usb_gadget_handle_interrupts(controller_index);
 
 		rc = fsg_main_thread(NULL);
 		if (rc) {
diff --git a/drivers/usb/gadget/atmel_usba_udc.c b/drivers/usb/gadget/atmel_usba_udc.c
index fbc74f3bed..1e23d09c77 100644
--- a/drivers/usb/gadget/atmel_usba_udc.c
+++ b/drivers/usb/gadget/atmel_usba_udc.c
@@ -1199,7 +1199,7 @@ static struct usba_udc controller = {
 	},
 };
 
-int usb_gadget_handle_interrupts(void)
+int usb_gadget_handle_interrupts(int index)
 {
 	struct usba_udc *udc = &controller;
 
diff --git a/drivers/usb/gadget/ci_udc.c b/drivers/usb/gadget/ci_udc.c
index a231abfa75..3b7024c498 100644
--- a/drivers/usb/gadget/ci_udc.c
+++ b/drivers/usb/gadget/ci_udc.c
@@ -741,7 +741,7 @@ void udc_irq(void)
 	}
 }
 
-int usb_gadget_handle_interrupts(void)
+int usb_gadget_handle_interrupts(int index)
 {
 	u32 value;
 	struct ci_udc *udc = (struct ci_udc *)controller.ctrl->hcor;
diff --git a/drivers/usb/gadget/ether.c b/drivers/usb/gadget/ether.c
index 1b0e766a94..7e3b3ed859 100644
--- a/drivers/usb/gadget/ether.c
+++ b/drivers/usb/gadget/ether.c
@@ -1907,7 +1907,7 @@ static int eth_stop(struct eth_dev *dev)
 		/* Wait until host receives OID_GEN_MEDIA_CONNECT_STATUS */
 		ts = get_timer(0);
 		while (get_timer(ts) < timeout)
-			usb_gadget_handle_interrupts();
+			usb_gadget_handle_interrupts(0);
 #endif
 
 		rndis_uninit(dev->rndis_config);
@@ -2358,7 +2358,7 @@ static int usb_eth_init(struct eth_device *netdev, bd_t *bd)
 			error("The remote end did not respond in time.");
 			goto fail;
 		}
-		usb_gadget_handle_interrupts();
+		usb_gadget_handle_interrupts(0);
 	}
 
 	packet_received = 0;
@@ -2426,7 +2426,7 @@ static int usb_eth_send(struct eth_device *netdev, void *packet, int length)
 			printf("timeout sending packets to usb ethernet\n");
 			return -1;
 		}
-		usb_gadget_handle_interrupts();
+		usb_gadget_handle_interrupts(0);
 	}
 	if (rndis_pkt)
 		free(rndis_pkt);
@@ -2441,7 +2441,7 @@ static int usb_eth_recv(struct eth_device *netdev)
 {
 	struct eth_dev *dev = &l_ethdev;
 
-	usb_gadget_handle_interrupts();
+	usb_gadget_handle_interrupts(0);
 
 	if (packet_received) {
 		debug("%s: packet received\n", __func__);
@@ -2486,7 +2486,7 @@ void usb_eth_halt(struct eth_device *netdev)
 
 	/* Clear pending interrupt */
 	if (dev->network_started) {
-		usb_gadget_handle_interrupts();
+		usb_gadget_handle_interrupts(0);
 		dev->network_started = 0;
 	}
 
diff --git a/drivers/usb/gadget/f_mass_storage.c b/drivers/usb/gadget/f_mass_storage.c
index 71fd49db7f..d1bc5efa9b 100644
--- a/drivers/usb/gadget/f_mass_storage.c
+++ b/drivers/usb/gadget/f_mass_storage.c
@@ -689,7 +689,7 @@ static int sleep_thread(struct fsg_common *common)
 			k = 0;
 		}
 
-		usb_gadget_handle_interrupts();
+		usb_gadget_handle_interrupts(0);
 	}
 	common->thread_wakeup_needed = 0;
 	return rc;
diff --git a/drivers/usb/gadget/f_thor.c b/drivers/usb/gadget/f_thor.c
index 2d0410d795..1fd41ff790 100644
--- a/drivers/usb/gadget/f_thor.c
+++ b/drivers/usb/gadget/f_thor.c
@@ -543,7 +543,7 @@ static int thor_rx_data(void)
 		}
 
 		while (!dev->rxdata) {
-			usb_gadget_handle_interrupts();
+			usb_gadget_handle_interrupts(0);
 			if (ctrlc())
 				return -1;
 		}
@@ -577,7 +577,7 @@ static void thor_tx_data(unsigned char *data, int len)
 
 	/* Wait until tx interrupt received */
 	while (!dev->txdata)
-		usb_gadget_handle_interrupts();
+		usb_gadget_handle_interrupts(0);
 
 	dev->txdata = 0;
 }
@@ -694,7 +694,7 @@ int thor_init(void)
 	/* Wait for a device enumeration and configuration settings */
 	debug("THOR enumeration/configuration setting....\n");
 	while (!dev->configuration_done)
-		usb_gadget_handle_interrupts();
+		usb_gadget_handle_interrupts(0);
 
 	thor_set_dma(thor_rx_data_buf, strlen("THOR"));
 	/* detect the download request from Host PC */
diff --git a/drivers/usb/gadget/fotg210.c b/drivers/usb/gadget/fotg210.c
index 3acf6a1f41..1d8f58fd72 100644
--- a/drivers/usb/gadget/fotg210.c
+++ b/drivers/usb/gadget/fotg210.c
@@ -832,7 +832,7 @@ static struct fotg210_chip controller = {
 	},
 };
 
-int usb_gadget_handle_interrupts(void)
+int usb_gadget_handle_interrupts(int index)
 {
 	struct fotg210_chip *chip = &controller;
 	struct fotg210_regs *regs = chip->regs;
diff --git a/drivers/usb/gadget/pxa25x_udc.c b/drivers/usb/gadget/pxa25x_udc.c
index d4460b2dc7..6a8949da34 100644
--- a/drivers/usb/gadget/pxa25x_udc.c
+++ b/drivers/usb/gadget/pxa25x_udc.c
@@ -2041,7 +2041,7 @@ extern void udc_disconnect(void)
 /*-------------------------------------------------------------------------*/
 
 extern int
-usb_gadget_handle_interrupts(void)
+usb_gadget_handle_interrupts(int index)
 {
 	return pxa25x_udc_irq();
 }
diff --git a/drivers/usb/gadget/s3c_udc_otg.c b/drivers/usb/gadget/s3c_udc_otg.c
index 7653f03949..7a2d1e7d88 100644
--- a/drivers/usb/gadget/s3c_udc_otg.c
+++ b/drivers/usb/gadget/s3c_udc_otg.c
@@ -833,7 +833,7 @@ int s3c_udc_probe(struct s3c_plat_otg_data *pdata)
 	return retval;
 }
 
-int usb_gadget_handle_interrupts()
+int usb_gadget_handle_interrupts(int index)
 {
 	u32 intr_status = readl(&reg->gintsts);
 	u32 gintmsk = readl(&reg->gintmsk);
diff --git a/drivers/usb/musb-new/musb_uboot.c b/drivers/usb/musb-new/musb_uboot.c
index 51fb3fd7e2..053d94560d 100644
--- a/drivers/usb/musb-new/musb_uboot.c
+++ b/drivers/usb/musb-new/musb_uboot.c
@@ -252,7 +252,7 @@ int usb_lowlevel_stop(int index)
 #ifdef CONFIG_MUSB_GADGET
 static struct musb *gadget;
 
-int usb_gadget_handle_interrupts(void)
+int usb_gadget_handle_interrupts(int index)
 {
 	WATCHDOG_RESET();
 	if (!gadget || !gadget->isr)
diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h
index 93a5ffc4f4..230f47d67e 100644
--- a/include/linux/usb/gadget.h
+++ b/include/linux/usb/gadget.h
@@ -937,6 +937,6 @@ extern struct usb_ep *usb_ep_autoconfig(struct usb_gadget *,
 
 extern void usb_ep_autoconfig_reset(struct usb_gadget *);
 
-extern int usb_gadget_handle_interrupts(void);
+extern int usb_gadget_handle_interrupts(int index);
 
 #endif	/* __LINUX_USB_GADGET_H */
-- 
2.39.5