From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sergei Shtylyov Date: Tue, 10 Aug 2010 14:26:28 +0400 Subject: [U-Boot] [PATCH] usb: musb: only write CLRDATATOG when appropriate In-Reply-To: <1281380304-23544-1-git-send-email-vapier@gentoo.org> References: <1281380304-23544-1-git-send-email-vapier@gentoo.org> Message-ID: <4C612954.2060207@mvista.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hello. Mike Frysinger wrote: > From: Bryan Wu > This is a change similar to what is already in the Linux driver. We > should only program the CLRDATATOG bit when the current mode indicates > that it is needed. > Signed-off-by: Bryan Wu > Signed-off-by: Cliff Cai > Signed-off-by: Mike Frysinger > --- > Note: can someone give this a spin on a non-Blackfin platform to make > sure this doesn't break things ? > drivers/usb/musb/musb_hcd.c | 23 ++++++++++++++++------- > 1 files changed, 16 insertions(+), 7 deletions(-) > diff --git a/drivers/usb/musb/musb_hcd.c b/drivers/usb/musb/musb_hcd.c > index dd2aa7f..dd66275 100644 > --- a/drivers/usb/musb/musb_hcd.c > +++ b/drivers/usb/musb/musb_hcd.c > @@ -144,19 +144,28 @@ static void write_toggle(struct usb_device *dev, u8 ep, u8 dir_out) > u16 csr; > > if (dir_out) { > - if (!toggle) > - writew(MUSB_TXCSR_CLRDATATOG, &musbr->txcsr); > - else { > - csr = readw(&musbr->txcsr); > + csr = readw(&musbr->txcsr); > + if (!toggle) { > + if (csr & MUSB_TXCSR_MODE) > + csr = MUSB_TXCSR_CLRDATATOG; > + else > + csr = 0; > + writew(csr, &musbr->txcsr); > + } else { > csr |= MUSB_TXCSR_H_WR_DATATOGGLE; > writew(csr, &musbr->txcsr); > csr |= (toggle << MUSB_TXCSR_H_DATATOGGLE_SHIFT); > writew(csr, &musbr->txcsr); > } > } else { > - if (!toggle) > - writew(MUSB_RXCSR_CLRDATATOG, &musbr->rxcsr); > - else { > + if (!toggle) { > + csr = readw(&musbr->txcsr); > + if (csr & MUSB_TXCSR_MODE) > + csr = MUSB_RXCSR_CLRDATATOG; Clearing RXCSR when FIFO is in TX mode? > + else > + csr = 0; > + writew(csr, &musbr->rxcsr); > + } else { > csr = readw(&musbr->rxcsr); > csr |= MUSB_RXCSR_H_WR_DATATOGGLE; > writew(csr, &musbr->rxcsr); WBR, Sergei