Hello. Kevin Hickey wrote:
Adds support for USB 2.0 on the Au1300 SOC. Signed-off-by: Kevin Hickey <khickey@xxxxxxxxxxx>
[...]
diff --git a/drivers/usb/Kconfig b/drivers/usb/Kconfig index 83babb0..a50d053 100644 --- a/drivers/usb/Kconfig +++ b/drivers/usb/Kconfig @@ -55,6 +55,7 @@ config USB_ARCH_HAS_EHCI boolean default y if PPC_83xx default y if SOC_AU1200 + default y if SOC_AU13XX
Why not: default y if SOC_AU1200 || SOC_AU13XX
diff --git a/drivers/usb/host/ehci-au13xx.c b/drivers/usb/host/ehci-au13xx.c new file mode 100644 index 0000000..fe03667 --- /dev/null +++ b/drivers/usb/host/ehci-au13xx.c @@ -0,0 +1,213 @@ +/* + * Copyright 2008 RMI Corporation + * Author: Kevin Hickey <khickey@xxxxxxxxxxx> + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 675 Mass Ave, Cambridge, MA 02139, USA. + * + * Based on ehci-au1xxx.c. + */ + +#include <linux/platform_device.h> +#include <asm/mach-au1x00/au1000.h> + + +extern int usb_disabled(void); + +static void au13xx_start_ehc(void) +{ + AU13XX_USB* au13xx_usb = (AU13XX_USB*)(KSEG1 | USB_BASE_PHYS_ADDR);
Your coding style is not acceptable -- run your patched thru scruipts/checkpatch.pl please.
+ /* + * Enable clocks. + */ + AU_SET_BITS_32(USB_DWC_CTRL3_EHC_CLKEN, &au13xx_usb->dwc_ctrl3); + + /* + * Take the host controller block out of reset + */ + AU_SET_BITS_32(USB_DWC_CTRL1_HSTRS, &au13xx_usb->dwc_ctrl1); + + /* + * Enable all of the PHYs + */ + AU_SET_BITS_32(USB_DWC_CTRL2_PHYRS | USB_DWC_CTRL2_PHY0RS | USB_DWC_CTRL2_PH1RS, + &au13xx_usb->dwc_ctrl2); + + /* + * Enable interrupts + */ + AU_SET_BITS_32(USB_INTR_EHCI, &au13xx_usb->intr_enable); + + /* + * This bit enables coherent DMA. + */ + AU_SET_BITS_32(USB_SBUS_CTRL_SBCA, &au13xx_usb->sbus_ctrl); + asm("sync");
Don't we have au_sync()?
+static int ehci_hcd_au13xx_drv_probe(struct platform_device *pdev) +{
[...]
+ au13xx_start_ehc(); + + ehci = hcd_to_ehci(hcd); + ehci->caps = hcd->regs; + ehci->regs = hcd->regs + HC_LENGTH(readl(&ehci->caps->hc_capbase)); + printk("ehci->regs = %p\n", ehci->regs);
printk() should have KERN_* facility.
+static struct platform_driver ehci_hcd_au13xx_driver = { + .probe = ehci_hcd_au13xx_drv_probe, + .remove = ehci_hcd_au13xx_drv_remove, + .shutdown = usb_hcd_platform_shutdown, + .suspend = NULL, + .resume = NULL,
No dire need to explicitly initializer these two... WBR, Sergei