Re: [PATCH 2/2] usb: chipidea: otg: use usb autosuspend to suspend bus for HNP

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Dec 15, 2015 at 06:26:07PM +0800, Li Jun wrote:
> Directly manipulate the controller regsiter to suspend the usb bus
> for HNP is not the proper way, this should be done through the usbcore
> by usb autosuspend. So to start HNP, autosuspend support should be
> added for OTG devices interface driver if it's not enabled.
>
> Signed-off-by: Li Jun <jun.li@xxxxxxxxxxxxx>
> ---
>  drivers/usb/chipidea/otg_fsm.c | 26 ++++++++++++++++++--------
>  1 file changed, 18 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/usb/chipidea/otg_fsm.c b/drivers/usb/chipidea/otg_fsm.c
> index 00ab59d..ba90dc6 100644
> --- a/drivers/usb/chipidea/otg_fsm.c
> +++ b/drivers/usb/chipidea/otg_fsm.c
> @@ -485,20 +485,30 @@ static void ci_otg_loc_conn(struct otg_fsm *fsm, int on)
>
>  /*
>   * Generate SOF by host.
> - * This is controlled through suspend/resume the port.
>   * In host mode, controller will automatically send SOF.
>   * Suspend will block the data on the port.
> + *
> + * This is controlled through usbcore by usb autosuspend,
> + * so the usb device class driver need support autosuspend,
> + * otherwise the bus suspend will not happen.
>   */
>  static void ci_otg_loc_sof(struct otg_fsm *fsm, int on)
>  {
> - struct ci_hdrc *ci = container_of(fsm, struct ci_hdrc, fsm);
> + struct usb_device *udev;
>
> - if (on)
> - hw_write(ci, OP_PORTSC, PORTSC_W1C_BITS | PORTSC_FPR,
> - PORTSC_FPR);
> - else
> - hw_write(ci, OP_PORTSC, PORTSC_W1C_BITS | PORTSC_SUSP,
> - PORTSC_SUSP);
> + if (!fsm->otg->host)
> + return;
> +
> + udev = usb_hub_find_child(fsm->otg->host->root_hub, 1);
> + if (!udev)
> + return;
> +
> + if (on) {
> + usb_disable_autosuspend(udev);
> + } else {
> + pm_runtime_set_autosuspend_delay(&udev->dev, 0);
> + usb_enable_autosuspend(udev);
> + }
>  }
>
>  /*

I am ok with these two, will queue them.

-- 

Best Regards,
Peter Chen
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux