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>
diff --git a/board/ti/am43xx/board.c b/board/ti/am43xx/board.c
index 6c4fe48..ddf4c5f 100644
--- a/board/ti/am43xx/board.c
+++ b/board/ti/am43xx/board.c
@@ -732,13 +732,13 @@
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 284775c..3089fa2 100644
--- a/board/ti/dra7xx/evm.c
+++ b/board/ti/dra7xx/evm.c
@@ -220,13 +220,13 @@
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 161d38b..ec90998 100644
--- a/common/cmd_dfu.c
+++ b/common/cmd_dfu.c
@@ -64,7 +64,7 @@
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 346ab80..30bfc9b 100644
--- a/common/cmd_fastboot.c
+++ b/common/cmd_fastboot.c
@@ -31,7 +31,7 @@
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 51c3fff..6cfee47 100644
--- a/common/cmd_usb_mass_storage.c
+++ b/common/cmd_usb_mass_storage.c
@@ -137,7 +137,7 @@
}
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 fbc74f3..1e23d09 100644
--- a/drivers/usb/gadget/atmel_usba_udc.c
+++ b/drivers/usb/gadget/atmel_usba_udc.c
@@ -1199,7 +1199,7 @@
},
};
-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 a231abfa..3b7024c 100644
--- a/drivers/usb/gadget/ci_udc.c
+++ b/drivers/usb/gadget/ci_udc.c
@@ -741,7 +741,7 @@
}
}
-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 1b0e766..7e3b3ed 100644
--- a/drivers/usb/gadget/ether.c
+++ b/drivers/usb/gadget/ether.c
@@ -1907,7 +1907,7 @@
/* 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 @@
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 @@
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 @@
{
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 @@
/* 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 71fd49d..d1bc5ef 100644
--- a/drivers/usb/gadget/f_mass_storage.c
+++ b/drivers/usb/gadget/f_mass_storage.c
@@ -689,7 +689,7 @@
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 2d0410d..1fd41ff 100644
--- a/drivers/usb/gadget/f_thor.c
+++ b/drivers/usb/gadget/f_thor.c
@@ -543,7 +543,7 @@
}
while (!dev->rxdata) {
- usb_gadget_handle_interrupts();
+ usb_gadget_handle_interrupts(0);
if (ctrlc())
return -1;
}
@@ -577,7 +577,7 @@
/* Wait until tx interrupt received */
while (!dev->txdata)
- usb_gadget_handle_interrupts();
+ usb_gadget_handle_interrupts(0);
dev->txdata = 0;
}
@@ -694,7 +694,7 @@
/* 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 3acf6a1..1d8f58f 100644
--- a/drivers/usb/gadget/fotg210.c
+++ b/drivers/usb/gadget/fotg210.c
@@ -832,7 +832,7 @@
},
};
-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 d4460b2..6a8949d 100644
--- a/drivers/usb/gadget/pxa25x_udc.c
+++ b/drivers/usb/gadget/pxa25x_udc.c
@@ -2041,7 +2041,7 @@
/*-------------------------------------------------------------------------*/
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 7653f03..7a2d1e7 100644
--- a/drivers/usb/gadget/s3c_udc_otg.c
+++ b/drivers/usb/gadget/s3c_udc_otg.c
@@ -833,7 +833,7 @@
return retval;
}
-int usb_gadget_handle_interrupts()
+int usb_gadget_handle_interrupts(int index)
{
u32 intr_status = readl(®->gintsts);
u32 gintmsk = readl(®->gintmsk);
diff --git a/drivers/usb/musb-new/musb_uboot.c b/drivers/usb/musb-new/musb_uboot.c
index 51fb3fd..053d945 100644
--- a/drivers/usb/musb-new/musb_uboot.c
+++ b/drivers/usb/musb-new/musb_uboot.c
@@ -252,7 +252,7 @@
#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 93a5ffc..230f47d 100644
--- a/include/linux/usb/gadget.h
+++ b/include/linux/usb/gadget.h
@@ -937,6 +937,6 @@
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 */