From patchwork Tue Sep 11 15:06:08 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 10595793 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id D341115E2 for ; Tue, 11 Sep 2018 15:06:06 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C3A82296BA for ; Tue, 11 Sep 2018 15:06:06 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B7B4229762; Tue, 11 Sep 2018 15:06:06 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 63809296BA for ; Tue, 11 Sep 2018 15:06:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726989AbeIKUFq (ORCPT ); Tue, 11 Sep 2018 16:05:46 -0400 Received: from perceval.ideasonboard.com ([213.167.242.64]:39734 "EHLO perceval.ideasonboard.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726909AbeIKUFq (ORCPT ); Tue, 11 Sep 2018 16:05:46 -0400 Received: from avalon.bb.dnainternet.fi (dfj612ybrt5fhg77mgycy-3.rev.dnainternet.fi [IPv6:2001:14ba:21f5:5b00:2e86:4862:ef6a:2804]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 664741A91; Tue, 11 Sep 2018 17:06:02 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1536678362; bh=ALeSwjFGcmLDO8ZCQ4m95V2yiFz+vAZ7B5JxM75TxW0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=DE778KloubfzjPMWp9iR+Etha7V/+B0B9ESKaSYYZfyq+CUh+aDVlwqed9ya7VcRr C/D1oF91Xxz6oPFREiNO8ZLcbuk2N4PwKelT9LgkxUKeKs96qwlwJhgsURjVcxg9Lc 83AJcG+BRYVvGvl0TpC6qmpul0vC7qc/C8Lc4qWU= From: Laurent Pinchart To: linux-usb@vger.kernel.org, linux-omap@vger.kernel.org Cc: Tony Lindgren , Roger Quadros , Lee Jones , Tomi Valkeinen Subject: [PATCH 1/3] mfd: omap-usb-host: Use regular platform device probe mechanism Date: Tue, 11 Sep 2018 18:06:08 +0300 Message-Id: <20180911150610.27510-2-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 2.16.4 In-Reply-To: <20180911150610.27510-1-laurent.pinchart@ideasonboard.com> References: <20180911150610.27510-1-laurent.pinchart@ideasonboard.com> Sender: linux-omap-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-omap@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP The omap-usb-host driver uses platform_driver_probe() in the fs initcall level to ensure that the devices get probed before the EHCI and OHCI drivers arer probed. The EHCI and OHCI devices are created and registered by the omap-usb-host driver, and if no driver is present yet to handle them they will patiently wait for they turn without any adverse effect. This mechanism is thus not needed, remove it. This fixes a bug that prevents EHCI and OHCI devices from being probed on the Pandaboard since commit 84badc5ec5fc ("ARM: dts: omap4: Move l4 child devices to probe them with ti-sysc"), as then omap-usb-host devices are now registered after the omap-usb-host driver initializes, and thus fail to probe due to platform_driver_probe() not finding any device. Fixes: 84badc5ec5fc ("ARM: dts: omap4: Move l4 child devices to probe them with ti-sysc") Signed-off-by: Laurent Pinchart --- drivers/mfd/omap-usb-host.c | 24 ++++-------------------- 1 file changed, 4 insertions(+), 20 deletions(-) diff --git a/drivers/mfd/omap-usb-host.c b/drivers/mfd/omap-usb-host.c index e11ab12fbdf2..b731026541f5 100644 --- a/drivers/mfd/omap-usb-host.c +++ b/drivers/mfd/omap-usb-host.c @@ -548,6 +548,7 @@ static int usbhs_omap_probe(struct platform_device *pdev) int i; bool need_logic_fck; + dev_info(&pdev->dev, "%s\n", __func__); if (dev->of_node) { /* For DT boot we populate platform data from OF node */ pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL); @@ -855,31 +856,14 @@ static struct platform_driver usbhs_omap_driver = { .pm = &usbhsomap_dev_pm_ops, .of_match_table = usbhs_omap_dt_ids, }, + .probe = usbhs_omap_probe, .remove = usbhs_omap_remove, }; +module_platform_driver(usbhs_omap_driver); + MODULE_AUTHOR("Keshava Munegowda "); MODULE_AUTHOR("Roger Quadros "); MODULE_ALIAS("platform:" USBHS_DRIVER_NAME); MODULE_LICENSE("GPL v2"); MODULE_DESCRIPTION("usb host common core driver for omap EHCI and OHCI"); - -static int __init omap_usbhs_drvinit(void) -{ - return platform_driver_probe(&usbhs_omap_driver, usbhs_omap_probe); -} - -/* - * init before ehci and ohci drivers; - * The usbhs core driver should be initialized much before - * the omap ehci and ohci probe functions are called. - * This usbhs core driver should be initialized after - * usb tll driver - */ -fs_initcall_sync(omap_usbhs_drvinit); - -static void __exit omap_usbhs_drvexit(void) -{ - platform_driver_unregister(&usbhs_omap_driver); -} -module_exit(omap_usbhs_drvexit); From patchwork Tue Sep 11 15:06:09 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 10595795 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id E0E3014F9 for ; Tue, 11 Sep 2018 15:06:07 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id CF9302945B for ; Tue, 11 Sep 2018 15:06:07 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C3D812974C; Tue, 11 Sep 2018 15:06:07 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 34DB12945B for ; Tue, 11 Sep 2018 15:06:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727047AbeIKUFs (ORCPT ); Tue, 11 Sep 2018 16:05:48 -0400 Received: from perceval.ideasonboard.com ([213.167.242.64]:39742 "EHLO perceval.ideasonboard.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726622AbeIKUFs (ORCPT ); Tue, 11 Sep 2018 16:05:48 -0400 Received: from avalon.bb.dnainternet.fi (dfj612ybrt5fhg77mgycy-3.rev.dnainternet.fi [IPv6:2001:14ba:21f5:5b00:2e86:4862:ef6a:2804]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id F241F1A94; Tue, 11 Sep 2018 17:06:02 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1536678363; bh=ekjMFWscHpLuHygyhUH4NDyeg/pChm199R8y/AvOT3w=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=bL1AMi+9V9uPgvNrz54n/cCFbntnGmkep/aLnobl3L3evpAvCZvYH5T5caAqtN4Km KVRwR3OvhyeSX0yFgZHwjvofWt4Tmi8HsUqrt81jqIdjPE18LgSQeRd0PRoSPvtVvn OrOIfVats4oYYPZNyPZUqmVwjdsCnyA3AO89LqKw= From: Laurent Pinchart To: linux-usb@vger.kernel.org, linux-omap@vger.kernel.org Cc: Tony Lindgren , Roger Quadros , Lee Jones , Tomi Valkeinen Subject: [PATCH 2/3] ARM: OMAP2+: Remove legacy USB initialization code Date: Tue, 11 Sep 2018 18:06:09 +0300 Message-Id: <20180911150610.27510-3-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 2.16.4 In-Reply-To: <20180911150610.27510-1-laurent.pinchart@ideasonboard.com> References: <20180911150610.27510-1-laurent.pinchart@ideasonboard.com> Sender: linux-omap-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-omap@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Several legacy USB-related functions, structures and macros are not used anymore after conversion to DT. Remove them. Signed-off-by: Laurent Pinchart Acked-by: Roger Quadros --- arch/arm/mach-omap2/common.h | 2 - arch/arm/mach-omap2/omap_phy_internal.c | 96 +-------------------------------- arch/arm/mach-omap2/usb.h | 71 ------------------------ 3 files changed, 2 insertions(+), 167 deletions(-) delete mode 100644 arch/arm/mach-omap2/usb.h diff --git a/arch/arm/mach-omap2/common.h b/arch/arm/mach-omap2/common.h index 129455e822e4..7b561e07571e 100644 --- a/arch/arm/mach-omap2/common.h +++ b/arch/arm/mach-omap2/common.h @@ -40,8 +40,6 @@ #include "i2c.h" #include "serial.h" -#include "usb.h" - #define OMAP_INTC_START NR_IRQS extern int (*omap_pm_soc_init)(void); diff --git a/arch/arm/mach-omap2/omap_phy_internal.c b/arch/arm/mach-omap2/omap_phy_internal.c index 8e903564ede2..456a883bbbda 100644 --- a/arch/arm/mach-omap2/omap_phy_internal.c +++ b/arch/arm/mach-omap2/omap_phy_internal.c @@ -23,17 +23,11 @@ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt -#include -#include -#include -#include #include -#include -#include +#include +#include #include "soc.h" -#include "control.h" -#include "usb.h" #define CONTROL_DEV_CONF 0x300 #define PHY_PD 0x1 @@ -66,89 +60,3 @@ static int __init omap4430_phy_power_down(void) return 0; } omap_early_initcall(omap4430_phy_power_down); - -void am35x_musb_reset(void) -{ - u32 regval; - - /* Reset the musb interface */ - regval = omap_ctrl_readl(AM35XX_CONTROL_IP_SW_RESET); - - regval |= AM35XX_USBOTGSS_SW_RST; - omap_ctrl_writel(regval, AM35XX_CONTROL_IP_SW_RESET); - - regval &= ~AM35XX_USBOTGSS_SW_RST; - omap_ctrl_writel(regval, AM35XX_CONTROL_IP_SW_RESET); - - regval = omap_ctrl_readl(AM35XX_CONTROL_IP_SW_RESET); -} - -void am35x_musb_phy_power(u8 on) -{ - unsigned long timeout = jiffies + msecs_to_jiffies(100); - u32 devconf2; - - if (on) { - /* - * Start the on-chip PHY and its PLL. - */ - devconf2 = omap_ctrl_readl(AM35XX_CONTROL_DEVCONF2); - - devconf2 &= ~(CONF2_RESET | CONF2_PHYPWRDN | CONF2_OTGPWRDN); - devconf2 |= CONF2_PHY_PLLON; - - omap_ctrl_writel(devconf2, AM35XX_CONTROL_DEVCONF2); - - pr_info("Waiting for PHY clock good...\n"); - while (!(omap_ctrl_readl(AM35XX_CONTROL_DEVCONF2) - & CONF2_PHYCLKGD)) { - cpu_relax(); - - if (time_after(jiffies, timeout)) { - pr_err("musb PHY clock good timed out\n"); - break; - } - } - } else { - /* - * Power down the on-chip PHY. - */ - devconf2 = omap_ctrl_readl(AM35XX_CONTROL_DEVCONF2); - - devconf2 &= ~CONF2_PHY_PLLON; - devconf2 |= CONF2_PHYPWRDN | CONF2_OTGPWRDN; - omap_ctrl_writel(devconf2, AM35XX_CONTROL_DEVCONF2); - } -} - -void am35x_musb_clear_irq(void) -{ - u32 regval; - - regval = omap_ctrl_readl(AM35XX_CONTROL_LVL_INTR_CLEAR); - regval |= AM35XX_USBOTGSS_INT_CLR; - omap_ctrl_writel(regval, AM35XX_CONTROL_LVL_INTR_CLEAR); - regval = omap_ctrl_readl(AM35XX_CONTROL_LVL_INTR_CLEAR); -} - -void am35x_set_mode(u8 musb_mode) -{ - u32 devconf2 = omap_ctrl_readl(AM35XX_CONTROL_DEVCONF2); - - devconf2 &= ~CONF2_OTGMODE; - switch (musb_mode) { - case MUSB_HOST: /* Force VBUS valid, ID = 0 */ - devconf2 |= CONF2_FORCE_HOST; - break; - case MUSB_PERIPHERAL: /* Force VBUS valid, ID = 1 */ - devconf2 |= CONF2_FORCE_DEVICE; - break; - case MUSB_OTG: /* Don't override the VBUS/ID comparators */ - devconf2 |= CONF2_NO_OVERRIDE; - break; - default: - pr_info("Unsupported mode %u\n", musb_mode); - } - - omap_ctrl_writel(devconf2, AM35XX_CONTROL_DEVCONF2); -} diff --git a/arch/arm/mach-omap2/usb.h b/arch/arm/mach-omap2/usb.h deleted file mode 100644 index 740a499befce..000000000000 --- a/arch/arm/mach-omap2/usb.h +++ /dev/null @@ -1,71 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ -#include - -/* AM35x */ -/* USB 2.0 PHY Control */ -#define CONF2_PHY_GPIOMODE (1 << 23) -#define CONF2_OTGMODE (3 << 14) -#define CONF2_NO_OVERRIDE (0 << 14) -#define CONF2_FORCE_HOST (1 << 14) -#define CONF2_FORCE_DEVICE (2 << 14) -#define CONF2_FORCE_HOST_VBUS_LOW (3 << 14) -#define CONF2_SESENDEN (1 << 13) -#define CONF2_VBDTCTEN (1 << 12) -#define CONF2_REFFREQ_24MHZ (2 << 8) -#define CONF2_REFFREQ_26MHZ (7 << 8) -#define CONF2_REFFREQ_13MHZ (6 << 8) -#define CONF2_REFFREQ (0xf << 8) -#define CONF2_PHYCLKGD (1 << 7) -#define CONF2_VBUSSENSE (1 << 6) -#define CONF2_PHY_PLLON (1 << 5) -#define CONF2_RESET (1 << 4) -#define CONF2_PHYPWRDN (1 << 3) -#define CONF2_OTGPWRDN (1 << 2) -#define CONF2_DATPOL (1 << 1) - -/* TI81XX specific definitions */ -#define USBCTRL0 0x620 -#define USBSTAT0 0x624 - -/* TI816X PHY controls bits */ -#define TI816X_USBPHY0_NORMAL_MODE (1 << 0) -#define TI816X_USBPHY_REFCLK_OSC (1 << 8) - -/* TI814X PHY controls bits */ -#define USBPHY_CM_PWRDN (1 << 0) -#define USBPHY_OTG_PWRDN (1 << 1) -#define USBPHY_CHGDET_DIS (1 << 2) -#define USBPHY_CHGDET_RSTRT (1 << 3) -#define USBPHY_SRCONDM (1 << 4) -#define USBPHY_SINKONDP (1 << 5) -#define USBPHY_CHGISINK_EN (1 << 6) -#define USBPHY_CHGVSRC_EN (1 << 7) -#define USBPHY_DMPULLUP (1 << 8) -#define USBPHY_DPPULLUP (1 << 9) -#define USBPHY_CDET_EXTCTL (1 << 10) -#define USBPHY_GPIO_MODE (1 << 12) -#define USBPHY_DPOPBUFCTL (1 << 13) -#define USBPHY_DMOPBUFCTL (1 << 14) -#define USBPHY_DPINPUT (1 << 15) -#define USBPHY_DMINPUT (1 << 16) -#define USBPHY_DPGPIO_PD (1 << 17) -#define USBPHY_DMGPIO_PD (1 << 18) -#define USBPHY_OTGVDET_EN (1 << 19) -#define USBPHY_OTGSESSEND_EN (1 << 20) -#define USBPHY_DATA_POLARITY (1 << 23) - -struct usbhs_phy_data { - int port; /* 1 indexed port number */ - int reset_gpio; - int vcc_gpio; - bool vcc_polarity; /* 1 active high, 0 active low */ -}; - -extern void usb_musb_init(struct omap_musb_board_data *board_data); -extern void usbhs_init(struct usbhs_omap_platform_data *pdata); -extern int usbhs_init_phys(struct usbhs_phy_data *phy, int num_phys); - -extern void am35x_musb_reset(void); -extern void am35x_musb_phy_power(u8 on); -extern void am35x_musb_clear_irq(void); -extern void am35x_set_mode(u8 musb_mode); From patchwork Tue Sep 11 15:06:10 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 10595799 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id B018913B8 for ; Tue, 11 Sep 2018 15:06:08 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A01AF296BF for ; Tue, 11 Sep 2018 15:06:08 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 943FA2974C; Tue, 11 Sep 2018 15:06:08 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 156862945B for ; Tue, 11 Sep 2018 15:06:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726622AbeIKUFt (ORCPT ); Tue, 11 Sep 2018 16:05:49 -0400 Received: from perceval.ideasonboard.com ([213.167.242.64]:39744 "EHLO perceval.ideasonboard.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726909AbeIKUFs (ORCPT ); Tue, 11 Sep 2018 16:05:48 -0400 Received: from avalon.bb.dnainternet.fi (dfj612ybrt5fhg77mgycy-3.rev.dnainternet.fi [IPv6:2001:14ba:21f5:5b00:2e86:4862:ef6a:2804]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 8AD721A99; Tue, 11 Sep 2018 17:06:03 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1536678363; bh=Y/cnrJdQeA4qMNW53i4Mz7JBP2oarNjmx9FnB0kQ7yo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=QLNa40P7wOiJgWzrI/TdqH00ER/FfVPIKU2ZRrW2hI6EQ5f9T9vpUrgHYTwuTysYN MikZfpi2nBT3s6IH6l7fc8HnRg0WiVy4Uh5a1ies6osJStF5YI5oTr/IpBPr0oNjyk 3Oyv0cao+CXZ/cju7F0zCf8ijZ80/Yy1giVULJvs= From: Laurent Pinchart To: linux-usb@vger.kernel.org, linux-omap@vger.kernel.org Cc: Tony Lindgren , Roger Quadros , Lee Jones , Tomi Valkeinen Subject: [PATCH 3/3] mfd: omap-usb-host: Drop support for non-DT probe Date: Tue, 11 Sep 2018 18:06:10 +0300 Message-Id: <20180911150610.27510-4-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 2.16.4 In-Reply-To: <20180911150610.27510-1-laurent.pinchart@ideasonboard.com> References: <20180911150610.27510-1-laurent.pinchart@ideasonboard.com> Sender: linux-omap-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-omap@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Now that all platforms using OMAP USB host devices have been converted to DT, drop support for legacy non-DT probe from the driver. Signed-off-by: Laurent Pinchart Acked-by: Roger Quadros --- drivers/mfd/omap-usb-host.c | 153 +++------------------------------ include/linux/platform_data/usb-omap.h | 4 - 2 files changed, 13 insertions(+), 144 deletions(-) diff --git a/drivers/mfd/omap-usb-host.c b/drivers/mfd/omap-usb-host.c index b731026541f5..ce28e0fda55e 100644 --- a/drivers/mfd/omap-usb-host.c +++ b/drivers/mfd/omap-usb-host.c @@ -23,7 +23,6 @@ #include #include #include -#include #include #include #include @@ -35,8 +34,6 @@ #include "omap-usb.h" #define USBHS_DRIVER_NAME "usbhs_omap" -#define OMAP_EHCI_DEVICE "ehci-omap" -#define OMAP_OHCI_DEVICE "ohci-omap3" /* OMAP USBHOST Register addresses */ @@ -115,7 +112,6 @@ struct usbhs_hcd_omap { /*-------------------------------------------------------------------------*/ static const char usbhs_driver_name[] = USBHS_DRIVER_NAME; -static u64 usbhs_dmamask = DMA_BIT_MASK(32); /*-------------------------------------------------------------------------*/ @@ -153,119 +149,6 @@ static const char * const port_modes[] = { [OMAP_OHCI_PORT_MODE_TLL_2PIN_DPDM] = "ohci-tll-2pin-dpdm", }; -static struct platform_device *omap_usbhs_alloc_child(const char *name, - struct resource *res, int num_resources, void *pdata, - size_t pdata_size, struct device *dev) -{ - struct platform_device *child; - int ret; - - child = platform_device_alloc(name, 0); - - if (!child) { - dev_err(dev, "platform_device_alloc %s failed\n", name); - goto err_end; - } - - ret = platform_device_add_resources(child, res, num_resources); - if (ret) { - dev_err(dev, "platform_device_add_resources failed\n"); - goto err_alloc; - } - - ret = platform_device_add_data(child, pdata, pdata_size); - if (ret) { - dev_err(dev, "platform_device_add_data failed\n"); - goto err_alloc; - } - - child->dev.dma_mask = &usbhs_dmamask; - dma_set_coherent_mask(&child->dev, DMA_BIT_MASK(32)); - child->dev.parent = dev; - - ret = platform_device_add(child); - if (ret) { - dev_err(dev, "platform_device_add failed\n"); - goto err_alloc; - } - - return child; - -err_alloc: - platform_device_put(child); - -err_end: - return NULL; -} - -static int omap_usbhs_alloc_children(struct platform_device *pdev) -{ - struct device *dev = &pdev->dev; - struct usbhs_omap_platform_data *pdata = dev_get_platdata(dev); - struct platform_device *ehci; - struct platform_device *ohci; - struct resource *res; - struct resource resources[2]; - int ret; - - res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "ehci"); - if (!res) { - dev_err(dev, "EHCI get resource IORESOURCE_MEM failed\n"); - ret = -ENODEV; - goto err_end; - } - resources[0] = *res; - - res = platform_get_resource_byname(pdev, IORESOURCE_IRQ, "ehci-irq"); - if (!res) { - dev_err(dev, " EHCI get resource IORESOURCE_IRQ failed\n"); - ret = -ENODEV; - goto err_end; - } - resources[1] = *res; - - ehci = omap_usbhs_alloc_child(OMAP_EHCI_DEVICE, resources, 2, pdata, - sizeof(*pdata), dev); - - if (!ehci) { - dev_err(dev, "omap_usbhs_alloc_child failed\n"); - ret = -ENOMEM; - goto err_end; - } - - res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "ohci"); - if (!res) { - dev_err(dev, "OHCI get resource IORESOURCE_MEM failed\n"); - ret = -ENODEV; - goto err_ehci; - } - resources[0] = *res; - - res = platform_get_resource_byname(pdev, IORESOURCE_IRQ, "ohci-irq"); - if (!res) { - dev_err(dev, "OHCI get resource IORESOURCE_IRQ failed\n"); - ret = -ENODEV; - goto err_ehci; - } - resources[1] = *res; - - ohci = omap_usbhs_alloc_child(OMAP_OHCI_DEVICE, resources, 2, pdata, - sizeof(*pdata), dev); - if (!ohci) { - dev_err(dev, "omap_usbhs_alloc_child failed\n"); - ret = -ENOMEM; - goto err_ehci; - } - - return 0; - -err_ehci: - platform_device_unregister(ehci); - -err_end: - return ret; -} - static bool is_ohci_port(enum usbhs_omap_port_mode pmode) { switch (pmode) { @@ -541,31 +424,28 @@ static const struct of_device_id usbhs_child_match_table[] = { static int usbhs_omap_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; - struct usbhs_omap_platform_data *pdata = dev_get_platdata(dev); + struct usbhs_omap_platform_data *pdata; struct usbhs_hcd_omap *omap; struct resource *res; int ret = 0; int i; bool need_logic_fck; - dev_info(&pdev->dev, "%s\n", __func__); - if (dev->of_node) { - /* For DT boot we populate platform data from OF node */ - pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL); - if (!pdata) - return -ENOMEM; + /* Populate platform data from OF node */ + if (!dev->of_node) { + dev_err(dev, "Missing OF node\n"); + return -ENODEV; + } - ret = usbhs_omap_get_dt_pdata(dev, pdata); - if (ret) - return ret; + pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL); + if (!pdata) + return -ENOMEM; - dev->platform_data = pdata; - } + ret = usbhs_omap_get_dt_pdata(dev, pdata); + if (ret) + return ret; - if (!pdata) { - dev_err(dev, "Missing platform data\n"); - return -ENODEV; - } + dev->platform_data = pdata; if (pdata->nports > OMAP3_HS_USB_PORTS) { dev_info(dev, "Too many num_ports <%d> in platform_data. Max %d\n", @@ -798,13 +678,6 @@ static int usbhs_omap_probe(struct platform_device *pdev) goto err_mem; } - } else { - ret = omap_usbhs_alloc_children(pdev); - if (ret) { - dev_err(dev, "omap_usbhs_alloc_children failed: %d\n", - ret); - goto err_mem; - } } return 0; diff --git a/include/linux/platform_data/usb-omap.h b/include/linux/platform_data/usb-omap.h index fa579b4c666b..c051da514dc5 100644 --- a/include/linux/platform_data/usb-omap.h +++ b/include/linux/platform_data/usb-omap.h @@ -38,10 +38,6 @@ enum usbhs_omap_port_mode { OMAP_OHCI_PORT_MODE_TLL_2PIN_DPDM }; -struct usbtll_omap_platform_data { - enum usbhs_omap_port_mode port_mode[OMAP3_HS_USB_PORTS]; -}; - struct ehci_hcd_omap_platform_data { enum usbhs_omap_port_mode port_mode[OMAP3_HS_USB_PORTS]; int reset_gpio_port[OMAP3_HS_USB_PORTS];