Message ID | 1567675074-3331-1-git-send-email-external.veeraiyan.c@de.adit-jv.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Geert Uytterhoeven |
Headers | show |
Series | [v3] usb: gadget: udc: renesas_usb3: add suspend event support | expand |
Hi Veeraiyan, > From: Veeraiyan Chidambaram, Sent: Thursday, September 5, 2019 6:18 PM > > In R-Car Gen3 USB 3.0 Function, if host is detached an interrupt > will be generated and Suspended state bit is set in interrupt status > register. Interrupt handler will call driver->suspend(composite_suspend) > if suspended state bit is set. composite_suspend will call > ffs_func_suspend which will post FUNCTIONFS_SUSPEND and will be consumed > by user space application via /dev/ep0. > > To be able to detect the host detach, USB_INT_1_B2_SPND to cover the > Suspended bit of the B2_SPND_OUT[9] from the USB Status Register > (USB_STA) register and perform appropriate action in the > usb3_irq_epc_int_1 function. > > Without this commit, disconnection of the phone from R-Car H3 ES2.0 > Salvator-X CN11 port is not recognized and reverse role switch does > not happen. If phone is connected again it does not enumerate. > > With this commit, disconnection will be recognized and reverse role > switch will happen by a user space application. If phone is connected > again it will enumerate properly and will become visible in the > output of 'lsusb'. > > Signed-off-by: Veeraiyan Chidambaram <veeraiyan.chidambaram@in.bosch.com> Thank you for the patch! Reviewed-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> And, I tested this patch on my environment [1] and works correctly. So, Tested-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> [1] - Two R-Car Gen3 boards. -- with minor customized this driver for switching b_device role. - Connected a usb cable to each CN11. -- Use g_mass_storage.ko. Best regards, Yoshihiro Shimoda
Hello Shimoda-san, On Thu, Sep 05, 2019 at 11:07:02AM +0000, Yoshihiro Shimoda wrote: > Hi Veeraiyan, > > > From: Veeraiyan Chidambaram, Sent: Thursday, September 5, 2019 6:18 PM > > > > In R-Car Gen3 USB 3.0 Function, if host is detached an interrupt > > will be generated and Suspended state bit is set in interrupt status > > register. Interrupt handler will call driver->suspend(composite_suspend) > > if suspended state bit is set. composite_suspend will call > > ffs_func_suspend which will post FUNCTIONFS_SUSPEND and will be consumed > > by user space application via /dev/ep0. > > > > To be able to detect the host detach, USB_INT_1_B2_SPND to cover the > > Suspended bit of the B2_SPND_OUT[9] from the USB Status Register > > (USB_STA) register and perform appropriate action in the > > usb3_irq_epc_int_1 function. > > > > Without this commit, disconnection of the phone from R-Car H3 ES2.0 > > Salvator-X CN11 port is not recognized and reverse role switch does > > not happen. If phone is connected again it does not enumerate. > > > > With this commit, disconnection will be recognized and reverse role > > switch will happen by a user space application. If phone is connected > > again it will enumerate properly and will become visible in the > > output of 'lsusb'. > > > > Signed-off-by: Veeraiyan Chidambaram <veeraiyan.chidambaram@in.bosch.com> > > Thank you for the patch! > > Reviewed-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> > > And, I tested this patch on my environment [1] and works correctly. So, > > Tested-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> I guess there are strong similarities between this patch and [3]. Would you like to pick [1-3], as they still apply cleanly to vanilla? [1] https://patchwork.kernel.org/patch/10581479/ ("[1/3] usb: renesas_usbhs: simplify usbhs_status_get_device_state()") [2] https://patchwork.kernel.org/patch/10581485/ ("[2/3] usb: renesas_usbhs: enable DVSE interrupt") [3] https://patchwork.kernel.org/patch/10581489/ ("usb: renesas_usbhs: add suspend event support in gadget mode") PS: Apologize for long silence in [3].
Hello Eugeniu-san, > From: Eugeniu Rosca, Sent: Friday, September 6, 2019 4:07 AM <snip> > > I guess there are strong similarities between this patch and [3]. > Would you like to pick [1-3], as they still apply cleanly to vanilla? Thank you for your comment! I completely forgot that you had submitted these [1-3] patches though, I'm thinking renesas_usbhs driver also should have this similar feature. I checked the [3] again and the commit log and the conditions should be fixed like this patch. Would you submit v2 patch series for renesas_usbhs driver? Or, May I submit it? Anything is OK to me. > [1] https://patchwork.kernel.org/patch/10581479/ > ("[1/3] usb: renesas_usbhs: simplify usbhs_status_get_device_state()") > [2] https://patchwork.kernel.org/patch/10581485/ > ("[2/3] usb: renesas_usbhs: enable DVSE interrupt") > [3] https://patchwork.kernel.org/patch/10581489/ > ("usb: renesas_usbhs: add suspend event support in gadget mode") > > PS: Apologize for long silence in [3]. No worries! Best regards, Yoshihiro Shimoda
Hi Shimoda-san, On Fri, Sep 06, 2019 at 04:41:50AM +0000, Yoshihiro Shimoda wrote: > Hello Eugeniu-san, > > > From: Eugeniu Rosca, Sent: Friday, September 6, 2019 4:07 AM > <snip> > > > > I guess there are strong similarities between this patch and [3]. > > Would you like to pick [1-3], as they still apply cleanly to vanilla? > > Thank you for your comment! I completely forgot that you had submitted > these [1-3] patches though, I'm thinking renesas_usbhs driver also should > have this similar feature. I checked the [3] again and the commit log > and the conditions should be fixed like this patch. Would you submit > v2 patch series for renesas_usbhs driver? Or, May I submit it? > Anything is OK to me. Thank your for the prompt reply. It is very appreciated. We'll make sure to submit the v2 of [1-3], as per your request. > > > [1] https://patchwork.kernel.org/patch/10581479/ > > ("[1/3] usb: renesas_usbhs: simplify usbhs_status_get_device_state()") > > [2] https://patchwork.kernel.org/patch/10581485/ > > ("[2/3] usb: renesas_usbhs: enable DVSE interrupt") > > [3] https://patchwork.kernel.org/patch/10581489/ > > ("usb: renesas_usbhs: add suspend event support in gadget mode")
diff --git a/drivers/usb/gadget/udc/renesas_usb3.c b/drivers/usb/gadget/udc/renesas_usb3.c index eaa3339b30a2..39dbd644c770 100644 --- a/drivers/usb/gadget/udc/renesas_usb3.c +++ b/drivers/usb/gadget/udc/renesas_usb3.c @@ -767,6 +767,18 @@ static void usb3_irq_epc_int_1_resume(struct renesas_usb3 *usb3) usb3_transition_to_default_state(usb3, false); } +static void usb3_irq_epc_int_1_suspend(struct renesas_usb3 *usb3) +{ + usb3_disable_irq_1(usb3, USB_INT_1_B2_SPND); + + if (usb3->gadget.speed != USB_SPEED_UNKNOWN && + usb3->gadget.state != USB_STATE_NOTATTACHED) { + if (usb3->driver && usb3->driver->suspend) + usb3->driver->suspend(&usb3->gadget); + usb_gadget_set_state(&usb3->gadget, USB_STATE_SUSPENDED); + } +} + static void usb3_irq_epc_int_1_disable(struct renesas_usb3 *usb3) { usb3_stop_usb3_connection(usb3); @@ -852,6 +864,9 @@ static void usb3_irq_epc_int_1(struct renesas_usb3 *usb3, u32 int_sta_1) if (int_sta_1 & USB_INT_1_B2_RSUM) usb3_irq_epc_int_1_resume(usb3); + if (int_sta_1 & USB_INT_1_B2_SPND) + usb3_irq_epc_int_1_suspend(usb3); + if (int_sta_1 & USB_INT_1_SPEED) usb3_irq_epc_int_1_speed(usb3);