提交 4d4d99af 编写于 作者: A Artur Petrosyan 提交者: Greg Kroah-Hartman

usb: dwc2: Add part. power down exit from dwc2_conn_id_status_change().

Before changing to connector B exiting from Partial
Power Down is required.

- Added exiting from Partial Power Down mode when
  connector ID status changes to "connId B".
  Because if connector ID status changed to B connector
  while core was in partial power down mode, HANG would
  accrue from a soft reset.
Acked-by: NMinas Harutyunyan <Minas.Harutyunyan@synopsys.com>
Signed-off-by: NArtur Petrosyan <Arthur.Petrosyan@synopsys.com>
Link: https://lore.kernel.org/r/20210408094534.4AA7AA022E@mailhost.synopsys.comSigned-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
上级 e97570f7
...@@ -3206,6 +3206,15 @@ static void dwc2_conn_id_status_change(struct work_struct *work) ...@@ -3206,6 +3206,15 @@ static void dwc2_conn_id_status_change(struct work_struct *work)
if (count > 250) if (count > 250)
dev_err(hsotg->dev, dev_err(hsotg->dev,
"Connection id status change timed out\n"); "Connection id status change timed out\n");
/*
* Exit Partial Power Down without restoring registers.
* No need to check the return value as registers
* are not being restored.
*/
if (hsotg->in_ppd && hsotg->lx_state == DWC2_L2)
dwc2_exit_partial_power_down(hsotg, 0, false);
hsotg->op_state = OTG_STATE_B_PERIPHERAL; hsotg->op_state = OTG_STATE_B_PERIPHERAL;
dwc2_core_init(hsotg, false); dwc2_core_init(hsotg, false);
dwc2_enable_global_interrupts(hsotg); dwc2_enable_global_interrupts(hsotg);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册