Commit 5799aecd authored by Minas Harutyunyan's avatar Minas Harutyunyan Committed by Felipe Balbi

usb: dwc2: Fix channel disable flow

Channel disabling/halting should performed for enabled only channels
to avoid warnings "Unable to clear enable on channel N" which seen
if host works in Slave mode.
Signed-off-by: default avatarMinas Harutyunyan <hminas@synopsys.com>
Signed-off-by: default avatarFelipe Balbi <felipe.balbi@linux.intel.com>
parent c8006f67
...@@ -2247,15 +2247,18 @@ static void dwc2_core_host_init(struct dwc2_hsotg *hsotg) ...@@ -2247,15 +2247,18 @@ static void dwc2_core_host_init(struct dwc2_hsotg *hsotg)
num_channels = hsotg->params.host_channels; num_channels = hsotg->params.host_channels;
for (i = 0; i < num_channels; i++) { for (i = 0; i < num_channels; i++) {
hcchar = dwc2_readl(hsotg, HCCHAR(i)); hcchar = dwc2_readl(hsotg, HCCHAR(i));
if (hcchar & HCCHAR_CHENA) {
hcchar &= ~HCCHAR_CHENA; hcchar &= ~HCCHAR_CHENA;
hcchar |= HCCHAR_CHDIS; hcchar |= HCCHAR_CHDIS;
hcchar &= ~HCCHAR_EPDIR; hcchar &= ~HCCHAR_EPDIR;
dwc2_writel(hsotg, hcchar, HCCHAR(i)); dwc2_writel(hsotg, hcchar, HCCHAR(i));
} }
}
/* Halt all channels to put them into a known state */ /* Halt all channels to put them into a known state */
for (i = 0; i < num_channels; i++) { for (i = 0; i < num_channels; i++) {
hcchar = dwc2_readl(hsotg, HCCHAR(i)); hcchar = dwc2_readl(hsotg, HCCHAR(i));
if (hcchar & HCCHAR_CHENA) {
hcchar |= HCCHAR_CHENA | HCCHAR_CHDIS; hcchar |= HCCHAR_CHENA | HCCHAR_CHDIS;
hcchar &= ~HCCHAR_EPDIR; hcchar &= ~HCCHAR_EPDIR;
dwc2_writel(hsotg, hcchar, HCCHAR(i)); dwc2_writel(hsotg, hcchar, HCCHAR(i));
...@@ -2263,12 +2266,15 @@ static void dwc2_core_host_init(struct dwc2_hsotg *hsotg) ...@@ -2263,12 +2266,15 @@ static void dwc2_core_host_init(struct dwc2_hsotg *hsotg)
__func__, i); __func__, i);
if (dwc2_hsotg_wait_bit_clear(hsotg, HCCHAR(i), if (dwc2_hsotg_wait_bit_clear(hsotg, HCCHAR(i),
HCCHAR_CHENA, 1000)) { HCCHAR_CHENA,
dev_warn(hsotg->dev, "Unable to clear enable on channel %d\n", 1000)) {
dev_warn(hsotg->dev,
"Unable to clear enable on channel %d\n",
i); i);
} }
} }
} }
}
/* Enable ACG feature in host mode, if supported */ /* Enable ACG feature in host mode, if supported */
dwc2_enable_acg(hsotg); dwc2_enable_acg(hsotg);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment