[PATCH 06/11] MXS: Add small registration glue for ci13xxx_udc
Chen Peter-B29397
B29397 at freescale.com
Sun Apr 22 21:46:12 EDT 2012
>
> +config USB_CI13XXX_MXS
> + tristate "MIPS USB CI13xxx for i.MX23/28"
> + depends on ARCH_MXS
> + select USB_GADGET_DUALSPEED
> + select USB_IMX_COMPOSITE
> + help
> + i.MX SoC has chipidea USB controller. This driver uses
> + ci13xxx_udc core.
> + This driver depends on OTG driver for PHY initialization,
> + clock management, powering up VBUS, and power management.
> + This driver is not supported on boards like trout which
> + has an external PHY.
> +
> + Say "y" to link the driver statically, or "m" to build a
> + dynamically linked module called "ci13xxx_msm" and force all
> + gadget drivers to also be dynamically linked.
> +
cil3xxx_msm????? should be cil3xxx_mxs?
> #
> # LAST -- dummy/emulated controller
> #
> diff --git a/drivers/usb/gadget/Makefile b/drivers/usb/gadget/Makefile
> index b7f6eef..1f159a9 100644
> --- a/drivers/usb/gadget/Makefile
> +++ b/drivers/usb/gadget/Makefile
> @@ -30,6 +30,7 @@ obj-$(CONFIG_USB_EG20T) += pch_udc.o
> obj-$(CONFIG_USB_MV_UDC) += mv_udc.o
> mv_udc-y := mv_udc_core.o
> obj-$(CONFIG_USB_CI13XXX_MSM) += ci13xxx_msm.o
> +obj-$(CONFIG_USB_CI13XXX_MXS) += ci13xxx_mxs.o
> obj-$(CONFIG_USB_FUSB300) += fusb300_udc.o
>
> #
> diff --git a/drivers/usb/gadget/ci13xxx_mxs.c
> b/drivers/usb/gadget/ci13xxx_mxs.c
> new file mode 100644
> index 0000000..35a3dd4
> --- /dev/null
> +++ b/drivers/usb/gadget/ci13xxx_mxs.c
> @@ -0,0 +1,67 @@
> +/* Copyright (c) 2010, Code Aurora Forum. All rights reserved.
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 and
> + * only version 2 as published by the Free Software Foundation.
> + */
> +
> +#include <linux/module.h>
> +#include <linux/platform_device.h>
> +#include <linux/pm_runtime.h>
> +#include <linux/usb/ulpi.h>
> +#include <linux/fsl/mxs-usb.h>
> +
> +#include "ci13xxx_udc.c"
> +
> +#define MSM_USB_BASE (udc->regs)
> +
> +static irqreturn_t mxs_udc_irq(int irq, void *data)
> +{
> + return udc_irq();
> +}
> +
> +static struct ci13xxx_udc_driver ci13xxx_mxs_udc_driver = {
> + .name = "ci13xxx-mxs",
> + .flags = CI13XXX_REQUIRE_TRANSCEIVER |
> + CI13XXX_DISABLE_STREAMING |
> + CI13XXX_DONT_REGISTER_GADGET,
> +};
> +
> +static int ci13xxx_mxs_probe(struct platform_device *pdev)
> +{
> + struct imx_usb *data = pdev->dev.platform_data;
> + int ret;
> +
> + ret = devm_request_irq(&pdev->dev, data->irq, mxs_udc_irq,
> + IRQF_SHARED, pdev->name, pdev);
> + if (ret < 0) {
> + dev_err(&pdev->dev, "Failed to request IRQ!\n");
> + return ret;
> + }
> +
> + ret = udc_probe(&ci13xxx_mxs_udc_driver, &pdev->dev, data->mem);
> + if (ret < 0)
> + dev_err(&pdev->dev, "Failed to probe CI13xxx-mxs!\n");
> +
> + pm_runtime_no_callbacks(&pdev->dev);
> + pm_runtime_enable(&pdev->dev);
> +
> + return ret;
> +}
> +
> +static struct platform_driver ci13xxx_mxs_driver = {
> + .probe = ci13xxx_mxs_probe,
> + .driver = {
> + .name = "ci13xxx-mxs",
> + },
> +};
> +
> +static int __init ci13xxx_mxs_init(void)
> +{
> + return platform_driver_register(&ci13xxx_mxs_driver);
> +}
> +
> +module_init(ci13xxx_mxs_init);
> +
> +MODULE_LICENSE("GPL v2");
> +MODULE_ALIAS("platform:ci13xxx-mxs");
> --
> 1.7.9.5
>
More information about the linux-arm-kernel
mailing list