From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marek Vasut Date: Fri, 18 Mar 2016 15:21:54 +0100 Subject: [U-Boot] [PATCH v4 3/4] drivers: musb-new: Add USB DRC driver for Microchip PIC32 OTG controller. In-Reply-To: <1458309016-27459-4-git-send-email-purna.mandal@microchip.com> References: <1458309016-27459-1-git-send-email-purna.mandal@microchip.com> <1458309016-27459-4-git-send-email-purna.mandal@microchip.com> Message-ID: <56EC0F02.5080503@denx.de> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de On 03/18/2016 02:50 PM, Purna Chandra Mandal wrote: > This driver adds support of PIC32 MUSB OTG controller as dual role device. > It implements platform specific glue to reuse musb core. > > Signed-off-by: Cristian Birsan > Signed-off-by: Purna Chandra Mandal > > --- > > Changes in v4: > - add support to handle multiple MUSB controllers. > - remove unaligned buffer handling in musb_read_fifo > - update comment and error prints Nice, thanks. > Changes in v3: None > Changes in v2: None > > drivers/usb/musb-new/Kconfig | 7 + > drivers/usb/musb-new/Makefile | 1 + > drivers/usb/musb-new/musb_core.c | 2 +- > drivers/usb/musb-new/pic32.c | 288 +++++++++++++++++++++++++++++++++++++++ > 4 files changed, 297 insertions(+), 1 deletion(-) > create mode 100644 drivers/usb/musb-new/pic32.c [...] > +static irqreturn_t pic32_interrupt(int irq, void *hci) > +{ > + struct musb *musb = hci; > + irqreturn_t ret = IRQ_NONE; > + u32 epintr, usbintr; > + > + /* ack usb core interrupts */ > + musb->int_usb = musb_readb(musb->mregs, MUSB_INTRUSB); > + if (musb->int_usb) > + musb_writeb(musb->mregs, MUSB_INTRUSB, musb->int_usb); > + > + /* ack endpoint interrupts */ > + musb->int_rx = musb_readw(musb->mregs, MUSB_INTRRX) & PIC32_RX_EP_MASK; > + if (musb->int_rx) > + musb_writew(musb->mregs, MUSB_INTRRX, musb->int_rx); > + > + musb->int_tx = musb_readw(musb->mregs, MUSB_INTRTX) & PIC32_TX_EP_MASK; > + if (musb->int_tx) > + musb_writew(musb->mregs, MUSB_INTRTX, musb->int_tx); > + > + /* drop spurious RX and TX if device is disconnected */ > + if (musb->int_usb & MUSB_INTR_DISCONNECT) { > + musb->int_tx = 0; > + musb->int_rx = 0; > + } > + > + if (musb->int_tx || musb->int_rx || musb->int_usb) > + ret |= musb_interrupt(musb); Use ret = , don't ORR the return value as that's wrong and can produce completely mangled return value. > + return ret; > +} [...] The rest is good, thanks for persevering :) Please drop me a V5 so I can apply the series. -- Best regards, Marek Vasut