Commit e5ff15be authored by Magnus Damm's avatar Magnus Damm Committed by Paul Mundt

usb: r8a66597-hdc disable interrupts fix

This patch improves disable_controller() in the r8a66597-hdc
driver to disable all interrupts and clear status flags. It
also makes sure that disable_controller() is called during
probe(). This fixes the relatively rare case of unexpected
pending interrupts after kexec reboot.
Signed-off-by: default avatarMagnus Damm <damm@opensource.se>
Acked-by: default avatarYoshihiro Shimoda <shimoda.yoshihiro@renesas.com>
Signed-off-by: default avatarPaul Mundt <lethal@linux-sh.org>
parent e8708ef7
...@@ -216,8 +216,17 @@ static void disable_controller(struct r8a66597 *r8a66597) ...@@ -216,8 +216,17 @@ static void disable_controller(struct r8a66597 *r8a66597)
{ {
int port; int port;
/* disable interrupts */
r8a66597_write(r8a66597, 0, INTENB0); r8a66597_write(r8a66597, 0, INTENB0);
r8a66597_write(r8a66597, 0, INTSTS0); r8a66597_write(r8a66597, 0, INTENB1);
r8a66597_write(r8a66597, 0, BRDYENB);
r8a66597_write(r8a66597, 0, BEMPENB);
r8a66597_write(r8a66597, 0, NRDYENB);
/* clear status */
r8a66597_write(r8a66597, 0, BRDYSTS);
r8a66597_write(r8a66597, 0, NRDYSTS);
r8a66597_write(r8a66597, 0, BEMPSTS);
for (port = 0; port < r8a66597->max_root_hub; port++) for (port = 0; port < r8a66597->max_root_hub; port++)
r8a66597_disable_port(r8a66597, port); r8a66597_disable_port(r8a66597, port);
...@@ -2466,6 +2475,12 @@ static int __devinit r8a66597_probe(struct platform_device *pdev) ...@@ -2466,6 +2475,12 @@ static int __devinit r8a66597_probe(struct platform_device *pdev)
r8a66597->rh_timer.data = (unsigned long)r8a66597; r8a66597->rh_timer.data = (unsigned long)r8a66597;
r8a66597->reg = (unsigned long)reg; r8a66597->reg = (unsigned long)reg;
/* make sure no interrupts are pending */
ret = r8a66597_clock_enable(r8a66597);
if (ret < 0)
goto clean_up3;
disable_controller(r8a66597);
for (i = 0; i < R8A66597_MAX_NUM_PIPE; i++) { for (i = 0; i < R8A66597_MAX_NUM_PIPE; i++) {
INIT_LIST_HEAD(&r8a66597->pipe_queue[i]); INIT_LIST_HEAD(&r8a66597->pipe_queue[i]);
init_timer(&r8a66597->td_timer[i]); init_timer(&r8a66597->td_timer[i]);
......
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