From patchwork Fri Feb 6 08:48:03 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kishon Vijay Abraham I X-Patchwork-Id: 437118 X-Patchwork-Delegate: l.majewski@samsung.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from theia.denx.de (theia.denx.de [85.214.87.163]) by ozlabs.org (Postfix) with ESMTP id 3CED1140273 for ; Fri, 6 Feb 2015 19:56:56 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id AE55C4B86C; Fri, 6 Feb 2015 09:56:08 +0100 (CET) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id y8PAkZg6Vxwe; Fri, 6 Feb 2015 09:56:08 +0100 (CET) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 0FAC24B849; Fri, 6 Feb 2015 09:55:44 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id C8ED44B83E for ; Fri, 6 Feb 2015 09:55:40 +0100 (CET) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id bwf4UFMJmuGb for ; Fri, 6 Feb 2015 09:55:40 +0100 (CET) X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 (only DNSBL check requested) Received: from bear.ext.ti.com (bear.ext.ti.com [192.94.94.41]) by theia.denx.de (Postfix) with ESMTPS id 344CA4B847 for ; Fri, 6 Feb 2015 09:55:25 +0100 (CET) Received: from dflxv15.itg.ti.com ([128.247.5.124]) by bear.ext.ti.com (8.13.7/8.13.7) with ESMTP id t168nmja032227; Fri, 6 Feb 2015 02:49:48 -0600 Received: from DLEE71.ent.ti.com (dlee71.ent.ti.com [157.170.170.114]) by dflxv15.itg.ti.com (8.14.3/8.13.8) with ESMTP id t168nlPs021768; Fri, 6 Feb 2015 02:49:47 -0600 Received: from dlep32.itg.ti.com (157.170.170.100) by DLEE71.ent.ti.com (157.170.170.114) with Microsoft SMTP Server id 14.3.224.2; Fri, 6 Feb 2015 02:49:47 -0600 Received: from a0393678ub.india.ti.com (ileax41-snat.itg.ti.com [10.172.224.153]) by dlep32.itg.ti.com (8.14.3/8.13.8) with ESMTP id t168mN0p007034; Fri, 6 Feb 2015 02:49:44 -0600 From: Kishon Vijay Abraham I To: , , , , , , Date: Fri, 6 Feb 2015 14:18:03 +0530 Message-ID: <1423212497-11970-27-git-send-email-kishon@ti.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1423212497-11970-1-git-send-email-kishon@ti.com> References: <1423212497-11970-1-git-send-email-kishon@ti.com> MIME-Version: 1.0 Cc: nsekhar@ti.com, kishon@ti.com Subject: [U-Boot] [u-boot 26/40] usb: dwc3: dwc3-omap: change probe and remove to uboot init and uboot exit code X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.15 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" Removed probe and remove that are specific to linux and replaced it with uboot init and uboot exit. These functions will be invoked from boardfile. This will change once we have dwc3-omap driver adapted to use the uboot driver model. Signed-off-by: Kishon Vijay Abraham I Reviewed-by: Lukasz Majewski --- drivers/usb/dwc3/dwc3-omap.c | 128 +++++++++++++----------------------------- include/dwc3-omap-uboot.h | 3 + 2 files changed, 42 insertions(+), 89 deletions(-) diff --git a/drivers/usb/dwc3/dwc3-omap.c b/drivers/usb/dwc3/dwc3-omap.c index 31a2aa3..30d7210 100644 --- a/drivers/usb/dwc3/dwc3-omap.c +++ b/drivers/usb/dwc3/dwc3-omap.c @@ -17,6 +17,7 @@ #include #include #include +#include #include #include @@ -120,6 +121,8 @@ struct dwc3_omap { u32 dma_status:1; }; +struct dwc3_omap *omap; + static inline u32 dwc3_omap_readl(void __iomem *base, u32 offset) { return readl(base + offset); @@ -278,15 +281,6 @@ static irqreturn_t dwc3_omap_interrupt(int irq, void *_omap) return IRQ_HANDLED; } -static int dwc3_omap_remove_core(struct device *dev, void *c) -{ - struct platform_device *pdev = to_platform_device(dev); - - of_device_unregister(pdev); - - return 0; -} - static void dwc3_omap_enable_irqs(struct dwc3_omap *omap) { u32 reg; @@ -315,12 +309,8 @@ static void dwc3_omap_disable_irqs(struct dwc3_omap *omap) dwc3_omap_write_irq0_set(omap, 0x00); } -static u64 dwc3_omap_dma_mask = DMA_BIT_MASK(32); - static void dwc3_omap_map_offset(struct dwc3_omap *omap) { - struct device_node *node = omap->dev->of_node; - /* * Differentiate between OMAP5 and AM437x. * @@ -329,25 +319,21 @@ static void dwc3_omap_map_offset(struct dwc3_omap *omap) * * Using dt compatible to differentiate AM437x. */ - if (of_device_is_compatible(node, "ti,am437x-dwc3")) { - omap->irq_eoi_offset = USBOTGSS_EOI_OFFSET; - omap->irq0_offset = USBOTGSS_IRQ0_OFFSET; - omap->irqmisc_offset = USBOTGSS_IRQMISC_OFFSET; - omap->utmi_otg_offset = USBOTGSS_UTMI_OTG_OFFSET; - omap->debug_offset = USBOTGSS_DEBUG_OFFSET; - } +#ifdef CONFIG_AM43XX + omap->irq_eoi_offset = USBOTGSS_EOI_OFFSET; + omap->irq0_offset = USBOTGSS_IRQ0_OFFSET; + omap->irqmisc_offset = USBOTGSS_IRQMISC_OFFSET; + omap->utmi_otg_offset = USBOTGSS_UTMI_OTG_OFFSET; + omap->debug_offset = USBOTGSS_DEBUG_OFFSET; +#endif } -static void dwc3_omap_set_utmi_mode(struct dwc3_omap *omap) +static void dwc3_omap_set_utmi_mode(struct dwc3_omap *omap, int utmi_mode) { u32 reg; - struct device_node *node = omap->dev->of_node; - int utmi_mode = 0; reg = dwc3_omap_read_utmi_status(omap); - of_property_read_u32(node, "utmi-mode", &utmi_mode); - switch (utmi_mode) { case DWC3_OMAP_UTMI_MODE_SW: reg |= USBOTGSS_UTMI_OTG_STATUS_SW_MODE; @@ -362,95 +348,59 @@ static void dwc3_omap_set_utmi_mode(struct dwc3_omap *omap) dwc3_omap_write_utmi_status(omap, reg); } -static int dwc3_omap_probe(struct platform_device *pdev) +/** + * dwc3_omap_uboot_init - dwc3 omap uboot initialization code + * @dev: struct dwc3_omap_device containing initialization data + * + * Entry point for dwc3 omap driver (equivalent to dwc3_omap_probe in linux + * kernel driver). Pointer to dwc3_omap_device should be passed containing + * base address and other initialization data. Returns '0' on success and + * a negative value on failure. + * + * Generally called from board_usb_init() implemented in board file. + */ +int dwc3_omap_uboot_init(struct dwc3_omap_device *omap_dev) { - struct device_node *node = pdev->dev.of_node; - - struct dwc3_omap *omap; - struct resource *res; - struct device *dev = &pdev->dev; - - int ret; u32 reg; - - void __iomem *base; - - if (!node) { - dev_err(dev, "device node not found\n"); - return -EINVAL; - } + struct device *dev; omap = devm_kzalloc(dev, sizeof(*omap), GFP_KERNEL); if (!omap) return -ENOMEM; - platform_set_drvdata(pdev, omap); - - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - base = devm_ioremap_resource(dev, res); - if (IS_ERR(base)) - return PTR_ERR(base); - - omap->dev = dev; - omap->base = base; - dev->dma_mask = &dwc3_omap_dma_mask; + omap->base = omap_dev->base; dwc3_omap_map_offset(omap); - dwc3_omap_set_utmi_mode(omap); + dwc3_omap_set_utmi_mode(omap, omap_dev->utmi_mode); /* check the DMA Status */ reg = dwc3_omap_readl(omap->base, USBOTGSS_SYSCONFIG); omap->dma_status = !!(reg & USBOTGSS_SYSCONFIG_DMADISABLE); - dwc3_omap_enable_irqs(omap); + dwc3_omap_set_mailbox(omap, omap_dev->vbus_id_status); - ret = of_platform_populate(node, NULL, NULL, dev); - if (ret) { - dev_err(&pdev->dev, "failed to create dwc3 core\n"); - goto err1; - } + dwc3_omap_enable_irqs(omap); return 0; - -err1: - dwc3_omap_disable_irqs(omap); - -err0: - return ret; } -static int dwc3_omap_remove(struct platform_device *pdev) +/** + * dwc3_omap_uboot_exit - dwc3 omap uboot cleanup code + * @index: index of this controller + * + * Performs cleanup of memory allocated in dwc3_omap_uboot_init + * (equivalent to dwc3_omap_remove in linux). + * + * Generally called from board file. + */ +void dwc3_omap_uboot_exit(void) { - struct dwc3_omap *omap = platform_get_drvdata(pdev); - dwc3_omap_disable_irqs(omap); - device_for_each_child(&pdev->dev, NULL, dwc3_omap_remove_core); + kfree(omap); return 0; } -static const struct of_device_id of_dwc3_match[] = { - { - .compatible = "ti,dwc3" - }, - { - .compatible = "ti,am437x-dwc3" - }, - { }, -}; -MODULE_DEVICE_TABLE(of, of_dwc3_match); - -static struct platform_driver dwc3_omap_driver = { - .probe = dwc3_omap_probe, - .remove = dwc3_omap_remove, - .driver = { - .name = "omap-dwc3", - .of_match_table = of_dwc3_match, - }, -}; - -module_platform_driver(dwc3_omap_driver); - MODULE_ALIAS("platform:omap-dwc3"); MODULE_AUTHOR("Felipe Balbi "); MODULE_LICENSE("GPL v2"); diff --git a/include/dwc3-omap-uboot.h b/include/dwc3-omap-uboot.h index b313b64..99f8f38 100644 --- a/include/dwc3-omap-uboot.h +++ b/include/dwc3-omap-uboot.h @@ -24,4 +24,7 @@ struct dwc3_omap_device { enum dwc3_omap_utmi_mode utmi_mode; enum omap_dwc3_vbus_id_status vbus_id_status; }; + +int dwc3_omap_uboot_init(struct dwc3_omap_device *dev); +void dwc3_omap_uboot_exit(void); #endif /* __DWC3_OMAP_UBOOT_H_ */