usb: musb: Perform only write access on MUSB_INTRRXE
[firefly-linux-kernel-4.4.55.git] / drivers / usb / musb / musb_core.c
index d156fe8bebfaffd4488b63e75835bce4442f2993..7ff1986e5e529a621d2f713d241e5a8c8d1a2e35 100644 (file)
@@ -725,7 +725,8 @@ static irqreturn_t musb_stage0_irq(struct musb *musb, u8 int_usb,
                        /* REVISIT HNP; just force disconnect */
                }
                musb_writew(musb->mregs, MUSB_INTRTXE, musb->epmask);
-               musb_writew(musb->mregs, MUSB_INTRRXE, musb->epmask & 0xfffe);
+               musb->intrrxe = musb->epmask & 0xfffe;
+               musb_writew(musb->mregs, MUSB_INTRRXE, musb->intrrxe);
                musb_writeb(musb->mregs, MUSB_INTRUSBE, 0xf7);
                musb->port1_status &= ~(USB_PORT_STAT_LOW_SPEED
                                        |USB_PORT_STAT_HIGH_SPEED
@@ -947,7 +948,8 @@ void musb_start(struct musb *musb)
 
        /*  Set INT enable registers, enable interrupts */
        musb_writew(regs, MUSB_INTRTXE, musb->epmask);
-       musb_writew(regs, MUSB_INTRRXE, musb->epmask & 0xfffe);
+       musb->intrrxe = musb->epmask & 0xfffe;
+       musb_writew(regs, MUSB_INTRRXE, musb->intrrxe);
        musb_writeb(regs, MUSB_INTRUSBE, 0xf7);
 
        musb_writeb(regs, MUSB_TESTMODE, 0);
@@ -986,6 +988,7 @@ static void musb_generic_disable(struct musb *musb)
        /* disable interrupts */
        musb_writeb(mbase, MUSB_INTRUSBE, 0);
        musb_writew(mbase, MUSB_INTRTXE, 0);
+       musb->intrrxe = 0;
        musb_writew(mbase, MUSB_INTRRXE, 0);
 
        /* off */
@@ -2122,7 +2125,6 @@ static void musb_save_context(struct musb *musb)
        musb->context.busctl = musb_read_ulpi_buscontrol(musb->mregs);
        musb->context.power = musb_readb(musb_base, MUSB_POWER);
        musb->context.intrtxe = musb_readw(musb_base, MUSB_INTRTXE);
-       musb->context.intrrxe = musb_readw(musb_base, MUSB_INTRRXE);
        musb->context.intrusbe = musb_readb(musb_base, MUSB_INTRUSBE);
        musb->context.index = musb_readb(musb_base, MUSB_INDEX);
        musb->context.devctl = musb_readb(musb_base, MUSB_DEVCTL);
@@ -2196,7 +2198,7 @@ static void musb_restore_context(struct musb *musb)
        musb_write_ulpi_buscontrol(musb->mregs, musb->context.busctl);
        musb_writeb(musb_base, MUSB_POWER, musb->context.power);
        musb_writew(musb_base, MUSB_INTRTXE, musb->context.intrtxe);
-       musb_writew(musb_base, MUSB_INTRRXE, musb->context.intrrxe);
+       musb_writew(musb_base, MUSB_INTRRXE, musb->intrrxe);
        musb_writeb(musb_base, MUSB_INTRUSBE, musb->context.intrusbe);
        musb_writeb(musb_base, MUSB_DEVCTL, musb->context.devctl);