usb: r8a66597-hdc disable interrupts fix
PATCH 1/1 usb: r8a66597-hdc disable interrupts fix
From: Magnus Damm <[email protected]>
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.
---
drivers/usb/host/r8a66597-hcd.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-)
drivers/usb/host/r8a66597-hcd.c +16 -1
@@ -216,8 +216,17 @@ static void disable_controller(struct r8 {int port; +/* disable interrupts */ 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++)r8a66597_disable_port (r8a66597, port);
@@ -2466,6 +2475,12 @@ static int __devinit r8a66597_probe(stru r8a66597->rh_timer.data = (unsigned long )r8a66597; 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++) {INIT_LIST_HEAD (&r8a66597->pipe_queue[i]);init_timer (&r8a66597->td_timer[i]);
Quoted 7 lines · Magnus Damm
From: Magnus Damm <[email protected]>
This patch improves
disable_controller()in the r8a66597-hdc driver to disable all interrupts and clear status flags. It also makes sure thatdisable_controller()is called duringprobe(). This fixes the relatively rare case of unexpected pending interrupts after kexec reboot.
Thank you very much for your patch.
Thanks,
Yoshihiro Shimoda
Paul Mundt
AppliedQuoted 9 lines · Yoshihiro Shimoda
Quoted 7 lines · Magnus Damm
From: Magnus Damm <[email protected]>
This patch improves
disable_controller()in the r8a66597-hdc driver to disable all interrupts and clear status flags. It also makes sure thatdisable_controller()is called duringprobe(). This fixes the relatively rare case of unexpected pending interrupts after kexec reboot.
Quoted 4 lines
Thank you very much for your patch.
Queued for 2.6.33, thanks.