From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from co202.xi-lite.net ([149.6.83.202]:41983 "EHLO co202.xi-lite.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752153Ab0KINwN (ORCPT ); Tue, 9 Nov 2010 08:52:13 -0500 Message-ID: <4CD95209.7010202@parrot.com> Date: Tue, 9 Nov 2010 14:52:09 +0100 From: Matthieu CASTET MIME-Version: 1.0 Subject: Re: [PATCH v2] USB: Add MSM USB Device Controller driver References: <1289301494-26150-1-git-send-email-pkondeti@codeaurora.org> <1289301494-26150-2-git-send-email-pkondeti@codeaurora.org> In-Reply-To: <1289301494-26150-2-git-send-email-pkondeti@codeaurora.org> Content-Type: text/plain; charset="ISO-8859-1"; format=flowed Content-Transfer-Encoding: 8bit Sender: linux-arm-msm-owner@vger.kernel.org List-ID: To: Pavankumar Kondeti Cc: "greg@kroah.com" , "linux-usb@vger.kernel.org" , "linux-arm-msm@vger.kernel.org" , Mike Lockwood , Brian Swetland Hi, Pavankumar Kondeti a écrit : > diff --git a/drivers/usb/gadget/msm72k_udc.c b/drivers/usb/gadget/msm72k_udc.c > new file mode 100644 > index 0000000..3fa4192 > --- /dev/null > +++ b/drivers/usb/gadget/msm72k_udc.c > + > +static unsigned ulpi_read(struct usb_info *ui, unsigned reg) > +{ > + unsigned timeout = 100000; > + > + /* initiate read operation */ > + writel(ULPI_RUN | ULPI_READ | ULPI_ADDR(reg), > + USB_ULPI_VIEWPORT); > + > + /* wait for completion */ > + while ((readl(USB_ULPI_VIEWPORT) & ULPI_RUN) && (--timeout)) > + ; > + > + if (timeout == 0) { > + dev_err(&ui->pdev->dev, "ulpi_read: timeout %08x\n", > + readl(USB_ULPI_VIEWPORT)); > + return 0xffffffff; > + } > + return ULPI_DATA_READ(readl(USB_ULPI_VIEWPORT)); > +} > + > +static int ulpi_write(struct usb_info *ui, unsigned val, unsigned reg) > +{ > + unsigned timeout = 10000; > + > + /* initiate write operation */ > + writel(ULPI_RUN | ULPI_WRITE | > + ULPI_ADDR(reg) | ULPI_DATA(val), > + USB_ULPI_VIEWPORT); > + > + /* wait for completion */ > + while ((readl(USB_ULPI_VIEWPORT) & ULPI_RUN) && (--timeout)) > + ; > + > + if (timeout == 0) { > + dev_err(&ui->pdev->dev, "ulpi_write: timeout\n"); > + return -1; > + } > + > + return 0; > +} > + > +static void ulpi_init(struct usb_info *ui) > +{ > + int *seq = ui->phy_init_seq; > + > + if (!seq) > + return; > + > + while (seq[0] >= 0) { > + dev_vdbg(&ui->pdev->dev, "ulpi: write 0x%02x to 0x%02x\n", > + seq[0], seq[1]); > + ulpi_write(ui, seq[0], seq[1]); > + seq += 2; > + } > +} > + --- /dev/null +++ b/drivers/usb/otg/msm72k_otg.c + +#define ULPI_IO_TIMEOUT_USEC (10 * 1000) +static int ulpi_read(struct otg_transceiver *otg, u32 reg) +{ + int cnt = 0; + + /* initiate read operation */ + writel(ULPI_RUN | ULPI_READ | ULPI_ADDR(reg), + USB_ULPI_VIEWPORT); + + /* wait for completion */ + while (cnt < ULPI_IO_TIMEOUT_USEC) { + if (!(readl(USB_ULPI_VIEWPORT) & ULPI_RUN)) + break; + udelay(1); + cnt++; + } + + if (cnt >= ULPI_IO_TIMEOUT_USEC) { + dev_err(otg->dev, "ulpi_read: timeout %08x\n", + readl(USB_ULPI_VIEWPORT)); + return -ETIMEDOUT; + } + return ULPI_DATA_READ(readl(USB_ULPI_VIEWPORT)); +} + +static int ulpi_write(struct otg_transceiver *otg, u32 val, u32 reg) +{ + int cnt = 0; + + /* initiate write operation */ + writel(ULPI_RUN | ULPI_WRITE | + ULPI_ADDR(reg) | ULPI_DATA(val), + USB_ULPI_VIEWPORT); + + /* wait for completion */ + while (cnt < ULPI_IO_TIMEOUT_USEC) { + if (!(readl(USB_ULPI_VIEWPORT) & ULPI_RUN)) + break; + udelay(1); + cnt++; + } + + if (cnt >= ULPI_IO_TIMEOUT_USEC) { + dev_err(otg->dev, "ulpi_write: timeout\n"); + return -ETIMEDOUT; + } + return 0; +} + +static struct otg_io_access_ops msm_otg_io_ops = { + .read = ulpi_read, + .write = ulpi_write, +}; + +static void ulpi_init(struct msm_otg *motg) +{ + struct msm_otg_platform_data *pdata = motg->pdata; + int *seq = pdata->phy_init_seq; + + if (!seq) + return; + + while (seq[0] >= 0) { + dev_vdbg(motg->otg.dev, "ulpi: write 0x%02x to 0x%02x\n", + seq[0], seq[1]); + ulpi_write(&motg->otg, seq[0], seq[1]); + seq += 2; + } +} can't you share the ulpi fonctions from udc and otg ?