On Mon, 5 Feb 2007, Li Yang wrote:

> Freescale high-speed USB SOC can be found on some Freescale processors
> among different architectures.  It supports both host and device functions.
> This driver adds its device support for Linux USB Gadget layer.
> It is tested for MPC834x DR module, but should work on other platforms
> with minor tweaks.  The driver passed USBCV 1.3 compliance tests.
>
> Signed-off-by: Li Yang <[EMAIL PROTECTED]>
> Signed-off-by: Jiang Bo <[EMAIL PROTECTED]>
> Signed-off-by: Bruce Schmid <[EMAIL PROTECTED]>
>
> ---
> The latest udc driver after massive enhancement and cleanup.
>
> drivers/usb/gadget/Kconfig        |   21 +
> drivers/usb/gadget/Makefile       |    1 +
> drivers/usb/gadget/fsl_usb2_udc.c | 2489 +++++++++++++++++++++++++++++++++++++
> drivers/usb/gadget/fsl_usb2_udc.h |  577 +++++++++
> drivers/usb/gadget/gadget_chips.h |    8 +
> 5 files changed, 3096 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/usb/gadget/Kconfig b/drivers/usb/gadget/Kconfig
> index 4097a86..601e8d1 100644
> --- a/drivers/usb/gadget/Kconfig
> +++ b/drivers/usb/gadget/Kconfig
> @@ -68,6 +68,27 @@ choice
>          Many controller drivers are platform-specific; these
>          often need board-specific hooks.
>
> +config USB_GADGET_FSL_USB2
> +     boolean "Freescale MPC834x DR"
> +     depends on MPC834x

The same controller exists on MPC831x, this should be made more generic. 
We have the host support as MPC83xx.  This is a general comment for the 
rest of the code.

> +     select USB_GADGET_DUALSPEED
> +     help
> +        Some of Freescale PowerPC processors have a High Speed
> +        Dual-Role(DR) USB controller, which support device mode
> +        with 5 programmable endpoints. This driver supports the
> +        controller in the MPC834x, and should work with DR module
> +        in other Freescale processors too, given minor tweaks.
> +
> +        Say "y" to link the driver statically, or "m" to build a
> +        dynamically linked module called "fsl_usb2_udc" and force
> +        all gadget drivers to also be dynamically linked.
> +
> +config USB_FSL_USB2
> +     tristate
> +     depends on USB_GADGET_FSL_USB2
> +     default USB_GADGET
> +     select USB_GADGET_SELECTED
> +
> config USB_GADGET_NET2280
>       boolean "NetChip 228x"
>       depends on PCI
> diff --git a/drivers/usb/gadget/Makefile b/drivers/usb/gadget/Makefile
> index e71e086..5db1939 100644
> --- a/drivers/usb/gadget/Makefile
> +++ b/drivers/usb/gadget/Makefile
> @@ -8,6 +8,7 @@ obj-$(CONFIG_USB_GOKU)                += goku_udc.o
> obj-$(CONFIG_USB_OMAP)                += omap_udc.o
> obj-$(CONFIG_USB_LH7A40X)     += lh7a40x_udc.o
> obj-$(CONFIG_USB_AT91)                += at91_udc.o
> +obj-$(CONFIG_USB_FSL_USB2)   += fsl_usb2_udc.o
>
> #
> # USB gadget drivers
> diff --git a/drivers/usb/gadget/fsl_usb2_udc.c 
> b/drivers/usb/gadget/fsl_usb2_udc.c
> new file mode 100644
> index 0000000..db3fabc
> --- /dev/null
> +++ b/drivers/usb/gadget/fsl_usb2_udc.c
> @@ -0,0 +1,2489 @@
> +/*
> + * Copyright (C) 2004-2007 Freescale Semicondutor, Inc. All rights reserved.
> + *
> + * Author: Li Yang <[EMAIL PROTECTED]>
> + *         Jiang Bo <[EMAIL PROTECTED]>
> + *
> + * Description:
> + * Freescale high-speed USB SOC DR module device controller driver.
> + * This SOC can be found on MPC8349E cpu.  The driver is previously named
> + * as mpc_udc.  Based on bare board code from Dave Liu and Shlomi Gridish.
> + *
> + * Note: The driver will not work with old gadget drivers, as the API
> + * parameter endian has changed.
> + *
> + * Changelog:
> + * Aug 1, 2005
> + * - initial release
> + * Jul 13, 2006 Li Yang
> + * - adopted to powerpc arch and gadget drivers in latest kernel
> + * - add otg support, and minor style fixes
> + * Feb 5, 2007 Li Yang
> + * - massive enhancement and cleanup
> + * - verified through USBCV tests
> + *
> + * 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.
> + */
> +
> +#undef DEBUG
> +#undef VERBOSE
> +
> +#include <linux/module.h>
> +#include <linux/kernel.h>
> +#include <linux/ioport.h>
> +#include <linux/types.h>
> +#include <linux/errno.h>
> +#include <linux/delay.h>
> +#include <linux/sched.h>
> +#include <linux/slab.h>
> +#include <linux/init.h>
> +#include <linux/timer.h>
> +#include <linux/list.h>
> +#include <linux/interrupt.h>
> +#include <linux/proc_fs.h>
> +#include <linux/mm.h>
> +#include <linux/moduleparam.h>
> +#include <linux/device.h>
> +#include <linux/usb_ch9.h>
> +#include <linux/usb_gadget.h>
> +#include <linux/usb/otg.h>
> +#include <linux/dma-mapping.h>
> +#include <linux/platform_device.h>
> +#include <linux/fsl_devices.h>
> +#include <linux/dmapool.h>
> +
> +#include <asm/byteorder.h>
> +#include <asm/io.h>
> +#include <asm/irq.h>
> +#include <asm/system.h>
> +#include <asm/unaligned.h>
> +#include <asm/dma.h>
> +#include <asm/cacheflush.h>
> +
> +#include "fsl_usb2_udc.h"
> +
> +#define      DRIVER_DESC     "Freescale High-Speed USB SOC Device Controller 
> driver"
> +#define      DRIVER_AUTHOR   "Li Yang/Jiang Bo"
> +#define      DRIVER_VERSION  "Feb 5, 2007"
> +
> +#define      DMA_ADDR_INVALID        (~(dma_addr_t)0)
> +
> +static const char driver_name[] = "fsl-usb2-udc";
> +static const char driver_desc[] = DRIVER_DESC;
> +
> +volatile static struct usb_dr_device *dr_regs = NULL;
> +volatile static struct usb_sys_interface *usb_sys_regs = NULL;
> +
> +/* it is initialized in probe()  */
> +static struct fsl_udc *udc_controller = NULL;
> +
> +/*ep name should comply to the convention of ep_match()*/
> +static const char *const ep_name[] = {
> +     "ep0-control", NULL,    /* everyone has ep0 */
> +     /* 5 IN eps and 5 OUT eps */
> +     "ep1out",
> +     "ep1in",
> +     "ep2out",
> +     "ep2in",
> +     "ep3out",
> +     "ep3in",
> +     "ep4out",
> +     "ep4in",
> +     "ep5out",
> +     "ep5in"
> +};
> +static struct usb_endpoint_descriptor
> +fsl_ep0_desc = {
> +     .bLength =              USB_DT_ENDPOINT_SIZE,
> +     .bDescriptorType =      USB_DT_ENDPOINT,
> +     .bEndpointAddress =     0,
> +     .bmAttributes =         USB_ENDPOINT_XFER_CONTROL,
> +     .wMaxPacketSize =       USB_MAX_CTRL_PAYLOAD,
> +};
> +
> +static int fsl_udc_suspend(struct platform_device *pdev, pm_message_t state);
> +static int fsl_udc_resume(struct platform_device *pdev);
> +static void fsl_ep_fifo_flush(struct usb_ep *_ep);
> +
> +#ifdef CONFIG_PPC32

Any reason we need to protect these with CONFIG_PPC32?

> +#undef       NO_SNOOPING
> +#define fsl_readl(addr)              in_le32(addr)
> +#define fsl_writel(addr, val32) out_le32(val32, addr)
> +#endif

[snip]

- k

-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier.
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
linux-usb-devel@lists.sourceforge.net
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to