From patchwork Tue Nov 29 07:09:25 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Chen X-Patchwork-Id: 128229 Return-Path: X-Original-To: incoming-imx@patchwork.ozlabs.org Delivered-To: patchwork-incoming-imx@bilbo.ozlabs.org Received: from merlin.infradead.org (merlin.infradead.org [IPv6:2001:4978:20e::2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 304131007D1 for ; Tue, 29 Nov 2011 18:14:02 +1100 (EST) Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.76 #1 (Red Hat Linux)) id 1RVHqQ-000630-DY; Tue, 29 Nov 2011 07:11:10 +0000 Received: from am1ehsobe002.messaging.microsoft.com ([213.199.154.205] helo=AM1EHSOBE002.bigfish.com) by merlin.infradead.org with esmtps (Exim 4.76 #1 (Red Hat Linux)) id 1RVHqM-00062K-0N for linux-arm-kernel@lists.infradead.org; Tue, 29 Nov 2011 07:11:07 +0000 Received: from mail94-am1-R.bigfish.com (10.3.201.251) by AM1EHSOBE002.bigfish.com (10.3.204.22) with Microsoft SMTP Server id 14.1.225.22; Tue, 29 Nov 2011 07:10:08 +0000 Received: from mail94-am1 (localhost [127.0.0.1]) by mail94-am1-R.bigfish.com (Postfix) with ESMTP id 57D834002E7; Tue, 29 Nov 2011 07:10:13 +0000 (UTC) X-SpamScore: 13 X-BigFish: VS13(za62pzb922lzz1202hzz8275bhz2dh2a8h668h839hb79i) X-Forefront-Antispam-Report: CIP:70.37.183.190; KIP:(null); UIP:(null); IPV:NLI; H:mail.freescale.net; RD:none; EFVD:NLI X-FB-SS: 13, Received: from mail94-am1 (localhost.localdomain [127.0.0.1]) by mail94-am1 (MessageSwitch) id 1322550558679280_15737; Tue, 29 Nov 2011 07:09:18 +0000 (UTC) Received: from AM1EHSMHS020.bigfish.com (unknown [10.3.201.247]) by mail94-am1.bigfish.com (Postfix) with ESMTP id 38E5E3001E2; Tue, 29 Nov 2011 07:08:55 +0000 (UTC) Received: from mail.freescale.net (70.37.183.190) by AM1EHSMHS020.bigfish.com (10.3.206.23) with Microsoft SMTP Server (TLS) id 14.1.225.22; Tue, 29 Nov 2011 07:08:49 +0000 Received: from az33smr02.freescale.net (10.64.34.200) by 039-SN1MMR1-002.039d.mgd.msft.net (10.84.1.15) with Microsoft SMTP Server id 14.1.339.2; Tue, 29 Nov 2011 01:09:35 -0600 Received: from localhost.localdomain (nchen-desktop.ap.freescale.net [10.192.242.40]) by az33smr02.freescale.net (8.13.1/8.13.0) with ESMTP id pAT79VXp020001; Tue, 29 Nov 2011 01:09:31 -0600 (CST) From: Peter Chen To: , , Subject: [PATCH] USB: ehci-mxc: get rid of the uses of cpu_is_mx() Date: Tue, 29 Nov 2011 15:09:25 +0800 Message-ID: <1322550565-29162-1-git-send-email-peter.chen@freescale.com> X-Mailer: git-send-email 1.6.3.3 MIME-Version: 1.0 X-OriginatorOrg: freescale.com X-Spam-Note: CRM114 invocation failed X-Spam-Score: -2.6 (--) X-Spam-Report: SpamAssassin version 3.3.2 on merlin.infradead.org summary: Content analysis details: (-2.6 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/, low trust [213.199.154.205 listed in list.dnswl.org] -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] Cc: amit.kucheria@canonical.com, linux-usb@vger.kernel.org, linux-arm-kernel@lists.infradead.org, u.kleine-koenig@pengutronix.de X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.14 Precedence: list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: linux-arm-kernel-bounces@lists.infradead.org Errors-To: linux-arm-kernel-bounces+incoming-imx=patchwork.ozlabs.org@lists.infradead.org List-Id: linux-imx-kernel.lists.patchwork.ozlabs.org The patch removes all the uses of cpu_is_mx(). Instead, it utilizes platform_device_id to distinguish the ehci differences among SoCs. It can be useful to imx ehci submission and device tree support later. Signed-off-by: Peter Chen --- arch/arm/mach-imx/clock-imx25.c | 6 +- arch/arm/mach-imx/clock-imx27.c | 12 +- arch/arm/mach-imx/clock-imx31.c | 12 +- arch/arm/mach-imx/clock-imx35.c | 6 +- arch/arm/mach-mx5/clock-mx51-mx53.c | 14 ++-- arch/arm/plat-mxc/devices/platform-mxc-ehci.c | 40 +++++--- arch/arm/plat-mxc/include/mach/devices-common.h | 1 + drivers/usb/host/ehci-mxc.c | 118 ++++++++++++++++++++++- 8 files changed, 166 insertions(+), 43 deletions(-) diff --git a/arch/arm/mach-imx/clock-imx25.c b/arch/arm/mach-imx/clock-imx25.c index b0fec74..8288b6e 100644 --- a/arch/arm/mach-imx/clock-imx25.c +++ b/arch/arm/mach-imx/clock-imx25.c @@ -279,9 +279,9 @@ static struct clk_lookup lookups[] = { _REGISTER_CLOCK("imx21-uart.2", NULL, uart3_clk) _REGISTER_CLOCK("imx21-uart.3", NULL, uart4_clk) _REGISTER_CLOCK("imx21-uart.4", NULL, uart5_clk) - _REGISTER_CLOCK("mxc-ehci.0", "usb", usbotg_clk) - _REGISTER_CLOCK("mxc-ehci.1", "usb", usbotg_clk) - _REGISTER_CLOCK("mxc-ehci.2", "usb", usbotg_clk) + _REGISTER_CLOCK("ehci-imx25.0", "usb", usbotg_clk) + _REGISTER_CLOCK("ehci-imx25.1", "usb", usbotg_clk) + _REGISTER_CLOCK("ehci-imx25.2", "usb", usbotg_clk) _REGISTER_CLOCK("fsl-usb2-udc", "usb", usbotg_clk) _REGISTER_CLOCK("mxc_nand.0", NULL, nfc_clk) /* i.mx25 has the i.mx35 type cspi */ diff --git a/arch/arm/mach-imx/clock-imx27.c b/arch/arm/mach-imx/clock-imx27.c index 88fe00a..fcbf0ec 100644 --- a/arch/arm/mach-imx/clock-imx27.c +++ b/arch/arm/mach-imx/clock-imx27.c @@ -648,12 +648,12 @@ static struct clk_lookup lookups[] = { _REGISTER_CLOCK("mx2-camera.0", NULL, csi_clk) _REGISTER_CLOCK("fsl-usb2-udc", "usb", usb_clk) _REGISTER_CLOCK("fsl-usb2-udc", "usb_ahb", usb_clk1) - _REGISTER_CLOCK("mxc-ehci.0", "usb", usb_clk) - _REGISTER_CLOCK("mxc-ehci.0", "usb_ahb", usb_clk1) - _REGISTER_CLOCK("mxc-ehci.1", "usb", usb_clk) - _REGISTER_CLOCK("mxc-ehci.1", "usb_ahb", usb_clk1) - _REGISTER_CLOCK("mxc-ehci.2", "usb", usb_clk) - _REGISTER_CLOCK("mxc-ehci.2", "usb_ahb", usb_clk1) + _REGISTER_CLOCK("ehci-imx27.0", "usb", usb_clk) + _REGISTER_CLOCK("ehci-imx27.0", "usb_ahb", usb_clk1) + _REGISTER_CLOCK("ehci-imx27.1", "usb", usb_clk) + _REGISTER_CLOCK("ehci-imx27.1", "usb_ahb", usb_clk1) + _REGISTER_CLOCK("ehci-imx27.2", "usb", usb_clk) + _REGISTER_CLOCK("ehci-imx27.2", "usb_ahb", usb_clk1) _REGISTER_CLOCK("imx-ssi.0", NULL, ssi1_clk) _REGISTER_CLOCK("imx-ssi.1", NULL, ssi2_clk) _REGISTER_CLOCK("mxc_nand.0", NULL, nfc_clk) diff --git a/arch/arm/mach-imx/clock-imx31.c b/arch/arm/mach-imx/clock-imx31.c index 988a281..cae39b1 100644 --- a/arch/arm/mach-imx/clock-imx31.c +++ b/arch/arm/mach-imx/clock-imx31.c @@ -538,12 +538,12 @@ static struct clk_lookup lookups[] = { _REGISTER_CLOCK("ipu-core", NULL, ipu_clk) _REGISTER_CLOCK("mx3_sdc_fb", NULL, ipu_clk) _REGISTER_CLOCK(NULL, "kpp", kpp_clk) - _REGISTER_CLOCK("mxc-ehci.0", "usb", usb_clk1) - _REGISTER_CLOCK("mxc-ehci.0", "usb_ahb", usb_clk2) - _REGISTER_CLOCK("mxc-ehci.1", "usb", usb_clk1) - _REGISTER_CLOCK("mxc-ehci.1", "usb_ahb", usb_clk2) - _REGISTER_CLOCK("mxc-ehci.2", "usb", usb_clk1) - _REGISTER_CLOCK("mxc-ehci.2", "usb_ahb", usb_clk2) + _REGISTER_CLOCK("ehci-imx31.0", "usb", usb_clk1) + _REGISTER_CLOCK("ehci-imx31.0", "usb_ahb", usb_clk2) + _REGISTER_CLOCK("ehci-imx31.1", "usb", usb_clk1) + _REGISTER_CLOCK("ehci-imx31.1", "usb_ahb", usb_clk2) + _REGISTER_CLOCK("ehci-imx31.2", "usb", usb_clk1) + _REGISTER_CLOCK("ehci-imx31.2", "usb_ahb", usb_clk2) _REGISTER_CLOCK("fsl-usb2-udc", "usb", usb_clk1) _REGISTER_CLOCK("fsl-usb2-udc", "usb_ahb", usb_clk2) _REGISTER_CLOCK("mx3-camera.0", NULL, csi_clk) diff --git a/arch/arm/mach-imx/clock-imx35.c b/arch/arm/mach-imx/clock-imx35.c index 8116f11..661b884 100644 --- a/arch/arm/mach-imx/clock-imx35.c +++ b/arch/arm/mach-imx/clock-imx35.c @@ -491,9 +491,9 @@ static struct clk_lookup lookups[] = { _REGISTER_CLOCK("imx21-uart.0", NULL, uart1_clk) _REGISTER_CLOCK("imx21-uart.1", NULL, uart2_clk) _REGISTER_CLOCK("imx21-uart.2", NULL, uart3_clk) - _REGISTER_CLOCK("mxc-ehci.0", "usb", usbotg_clk) - _REGISTER_CLOCK("mxc-ehci.1", "usb", usbotg_clk) - _REGISTER_CLOCK("mxc-ehci.2", "usb", usbotg_clk) + _REGISTER_CLOCK("ehci-imx35.0", "usb", usbotg_clk) + _REGISTER_CLOCK("ehci-imx35.1", "usb", usbotg_clk) + _REGISTER_CLOCK("ehci-imx35.2", "usb", usbotg_clk) _REGISTER_CLOCK("fsl-usb2-udc", "usb", usbotg_clk) _REGISTER_CLOCK("fsl-usb2-udc", "usb_ahb", usbahb_clk) _REGISTER_CLOCK("imx2-wdt.0", NULL, wdog_clk) diff --git a/arch/arm/mach-mx5/clock-mx51-mx53.c b/arch/arm/mach-mx5/clock-mx51-mx53.c index 4cb2769..56dc34b 100644 --- a/arch/arm/mach-mx5/clock-mx51-mx53.c +++ b/arch/arm/mach-mx5/clock-mx51-mx53.c @@ -1459,13 +1459,13 @@ static struct clk_lookup mx51_lookups[] = { _REGISTER_CLOCK("imx-i2c.0", NULL, i2c1_clk) _REGISTER_CLOCK("imx-i2c.1", NULL, i2c2_clk) _REGISTER_CLOCK("imx-i2c.2", NULL, hsi2c_clk) - _REGISTER_CLOCK("mxc-ehci.0", "usb", usboh3_clk) - _REGISTER_CLOCK("mxc-ehci.0", "usb_ahb", usb_ahb_clk) - _REGISTER_CLOCK("mxc-ehci.0", "usb_phy1", usb_phy1_clk) - _REGISTER_CLOCK("mxc-ehci.1", "usb", usboh3_clk) - _REGISTER_CLOCK("mxc-ehci.1", "usb_ahb", usb_ahb_clk) - _REGISTER_CLOCK("mxc-ehci.2", "usb", usboh3_clk) - _REGISTER_CLOCK("mxc-ehci.2", "usb_ahb", usb_ahb_clk) + _REGISTER_CLOCK("ehci-imx51.0", "usb", usboh3_clk) + _REGISTER_CLOCK("ehci-imx51.0", "usb_ahb", usb_ahb_clk) + _REGISTER_CLOCK("ehci-imx51.0", "usb_phy1", usb_phy1_clk) + _REGISTER_CLOCK("ehci-imx51.1", "usb", usboh3_clk) + _REGISTER_CLOCK("ehci-imx51.1", "usb_ahb", usb_ahb_clk) + _REGISTER_CLOCK("ehci-imx51.2", "usb", usboh3_clk) + _REGISTER_CLOCK("ehci-imx51.2", "usb_ahb", usb_ahb_clk) _REGISTER_CLOCK("fsl-usb2-udc", "usb", usboh3_clk) _REGISTER_CLOCK("fsl-usb2-udc", "usb_ahb", ahb_clk) _REGISTER_CLOCK("imx-keypad", NULL, dummy_clk) diff --git a/arch/arm/plat-mxc/devices/platform-mxc-ehci.c b/arch/arm/plat-mxc/devices/platform-mxc-ehci.c index 35851d8..d339887 100644 --- a/arch/arm/plat-mxc/devices/platform-mxc-ehci.c +++ b/arch/arm/plat-mxc/devices/platform-mxc-ehci.c @@ -10,51 +10,61 @@ #include #include -#define imx_mxc_ehci_data_entry_single(soc, _id, hs) \ +#define imx_mxc_ehci_data_entry_single(soc, _devid, _id, hs) \ { \ + .devid = _devid, \ .id = _id, \ .iobase = soc ## _USB_ ## hs ## _BASE_ADDR, \ .irq = soc ## _INT_USB_ ## hs, \ } +#define imx_mxc_ehci_data_entry(soc, devid, id, hs) \ + [id - 1] = imx_mxc_ehci_data_entry_single(soc, devid, id, hs) + #ifdef CONFIG_SOC_IMX25 const struct imx_mxc_ehci_data imx25_mxc_ehci_otg_data __initconst = - imx_mxc_ehci_data_entry_single(MX25, 0, OTG); + imx_mxc_ehci_data_entry_single(MX25, "ehci-imx25", 0, OTG); const struct imx_mxc_ehci_data imx25_mxc_ehci_hs_data __initconst = - imx_mxc_ehci_data_entry_single(MX25, 1, HS); + imx_mxc_ehci_data_entry_single(MX25, "ehci-imx25", 1, HS); #endif /* ifdef CONFIG_SOC_IMX25 */ #ifdef CONFIG_SOC_IMX27 const struct imx_mxc_ehci_data imx27_mxc_ehci_otg_data __initconst = - imx_mxc_ehci_data_entry_single(MX27, 0, OTG); + imx_mxc_ehci_data_entry_single(MX27, "ehci-imx27", 0, OTG); const struct imx_mxc_ehci_data imx27_mxc_ehci_hs_data[] __initconst = { - imx_mxc_ehci_data_entry_single(MX27, 1, HS1), - imx_mxc_ehci_data_entry_single(MX27, 2, HS2), +#define imx27_imx_mxc_ehci_data_entry(soc, _id, hs) \ + imx_mxc_ehci_data_entry(soc, "ehci-imx27", _id, hs) + imx27_imx_mxc_ehci_data_entry(MX27, 1, HS1), + imx27_imx_mxc_ehci_data_entry(MX27, 2, HS2), }; #endif /* ifdef CONFIG_SOC_IMX27 */ #ifdef CONFIG_SOC_IMX31 const struct imx_mxc_ehci_data imx31_mxc_ehci_otg_data __initconst = - imx_mxc_ehci_data_entry_single(MX31, 0, OTG); + imx_mxc_ehci_data_entry_single(MX31, "ehci-imx31", 0, OTG); const struct imx_mxc_ehci_data imx31_mxc_ehci_hs_data[] __initconst = { - imx_mxc_ehci_data_entry_single(MX31, 1, HS1), - imx_mxc_ehci_data_entry_single(MX31, 2, HS2), +#define imx31_imx_mxc_ehci_data_entry(soc, _id, hs) \ + imx_mxc_ehci_data_entry(soc, "ehci-imx31", _id, hs) + imx31_imx_mxc_ehci_data_entry(MX31, 1, HS1), + imx31_imx_mxc_ehci_data_entry(MX31, 2, HS2), }; #endif /* ifdef CONFIG_SOC_IMX31 */ #ifdef CONFIG_SOC_IMX35 const struct imx_mxc_ehci_data imx35_mxc_ehci_otg_data __initconst = - imx_mxc_ehci_data_entry_single(MX35, 0, OTG); + imx_mxc_ehci_data_entry_single(MX35, "ehci-imx35", 0, OTG); const struct imx_mxc_ehci_data imx35_mxc_ehci_hs_data __initconst = - imx_mxc_ehci_data_entry_single(MX35, 1, HS); + imx_mxc_ehci_data_entry_single(MX35, "ehci-imx35", 1, HS); #endif /* ifdef CONFIG_SOC_IMX35 */ #ifdef CONFIG_SOC_IMX51 const struct imx_mxc_ehci_data imx51_mxc_ehci_otg_data __initconst = - imx_mxc_ehci_data_entry_single(MX51, 0, OTG); + imx_mxc_ehci_data_entry_single(MX51, "ehci-imx51", 0, OTG); const struct imx_mxc_ehci_data imx51_mxc_ehci_hs_data[] __initconst = { - imx_mxc_ehci_data_entry_single(MX51, 1, HS1), - imx_mxc_ehci_data_entry_single(MX51, 2, HS2), +#define imx51_imx_mxc_ehci_data_entry(soc, _id, hs) \ + imx_mxc_ehci_data_entry(soc, "ehci-imx51", _id, hs) + imx51_imx_mxc_ehci_data_entry(MX51, 1, HS1), + imx51_imx_mxc_ehci_data_entry(MX51, 2, HS2), }; #endif /* ifdef CONFIG_SOC_IMX51 */ @@ -73,7 +83,7 @@ struct platform_device *__init imx_add_mxc_ehci( .flags = IORESOURCE_IRQ, }, }; - return imx_add_platform_device_dmamask("mxc-ehci", data->id, + return imx_add_platform_device_dmamask(data->devid, data->id, res, ARRAY_SIZE(res), pdata, sizeof(*pdata), DMA_BIT_MASK(32)); } diff --git a/arch/arm/plat-mxc/include/mach/devices-common.h b/arch/arm/plat-mxc/include/mach/devices-common.h index def9ba5..15b68e8 100644 --- a/arch/arm/plat-mxc/include/mach/devices-common.h +++ b/arch/arm/plat-mxc/include/mach/devices-common.h @@ -226,6 +226,7 @@ struct platform_device *__init imx_add_mx2_camera( #include struct imx_mxc_ehci_data { + const char *devid; int id; resource_size_t iobase; resource_size_t irq; diff --git a/drivers/usb/host/ehci-mxc.c b/drivers/usb/host/ehci-mxc.c index 55978fc..6f6b00a 100644 --- a/drivers/usb/host/ehci-mxc.c +++ b/drivers/usb/host/ehci-mxc.c @@ -23,6 +23,7 @@ #include #include #include +#include #include #include @@ -31,10 +32,116 @@ #define ULPI_VIEWPORT_OFFSET 0x170 +enum mxc_ehci_type { + IMX23_EHCI, + IMX25_EHCI, + IMX28_EHCI, + IMX31_EHCI, + IMX35_EHCI, + IMX50_EHCI, + IMX51_EHCI, + IMX53_EHCI, + IMX6Q_EHCI, +}; + struct ehci_mxc_priv { struct clk *usbclk, *ahbclk, *phy1clk; struct usb_hcd *hcd; + enum mxc_ehci_type devtype; +}; + +static struct platform_device_id mxc_ehci_devtype[] = { + { + .name = "ehci-imx23", + .driver_data = IMX25_EHCI, + }, { + .name = "ehci-imx25", + .driver_data = IMX35_EHCI, + }, { + .name = "ehci-imx28", + .driver_data = IMX35_EHCI, + }, { + .name = "ehci-imx31", + .driver_data = IMX35_EHCI, + }, { + .name = "ehci-imx35", + .driver_data = IMX35_EHCI, + }, { + .name = "ehci-imx50", + .driver_data = IMX51_EHCI, + }, { + .name = "ehci-imx51", + .driver_data = IMX51_EHCI, + }, { + .name = "ehci-imx53", + .driver_data = IMX53_EHCI, + }, { + .name = "ehci-imx6q", + .driver_data = IMX6Q_EHCI, + }, { + /* sentinel */ + } }; +MODULE_DEVICE_TABLE(platform, mxc_ehci_devtype); + +static const struct of_device_id imx_ehci_dt_ids[] = { + { .compatible = "fsl,imx23-ehci", .data = &mxc_ehci_devtype[IMX23_EHCI], }, + { .compatible = "fsl,imx25-ehci", .data = &mxc_ehci_devtype[IMX25_EHCI], }, + { .compatible = "fsl,imx28-ehci", .data = &mxc_ehci_devtype[IMX28_EHCI], }, + { .compatible = "fsl,imx31-ehci", .data = &mxc_ehci_devtype[IMX31_EHCI], }, + { .compatible = "fsl,imx35-ehci", .data = &mxc_ehci_devtype[IMX35_EHCI], }, + { .compatible = "fsl,imx50-ehci", .data = &mxc_ehci_devtype[IMX50_EHCI], }, + { .compatible = "fsl,imx51-ehci", .data = &mxc_ehci_devtype[IMX51_EHCI], }, + { .compatible = "fsl,imx53-ehci", .data = &mxc_ehci_devtype[IMX53_EHCI], }, + { .compatible = "fsl,imx6q-ehci", .data = &mxc_ehci_devtype[IMX6Q_EHCI], }, + { /* sentinel */ } +}; +MODULE_DEVICE_TABLE(of, imx_ehci_dt_ids); + +static inline int is_imx23_ehci(struct ehci_mxc_priv *data) +{ + return data->devtype == IMX23_EHCI; +} + +static inline int is_imx25_ehci(struct ehci_mxc_priv *data) +{ + return data->devtype == IMX25_EHCI; +} + +static inline int is_imx28_ehci(struct ehci_mxc_priv *data) +{ + return data->devtype == IMX28_EHCI; +} + +static inline int is_imx31_ehci(struct ehci_mxc_priv *data) +{ + return data->devtype == IMX31_EHCI; +} + +static inline int is_imx35_ehci(struct ehci_mxc_priv *data) +{ + return data->devtype == IMX35_EHCI; +} + +static inline int is_imx50_ehci(struct ehci_mxc_priv *data) +{ + return data->devtype == IMX50_EHCI; +} + +static inline int is_imx51_ehci(struct ehci_mxc_priv *data) +{ + return data->devtype == IMX51_EHCI; +} + +static inline int is_imx53_ehci(struct ehci_mxc_priv *data) +{ + return data->devtype == IMX53_EHCI; +} + +static inline int is_imx6q_ehci(struct ehci_mxc_priv *data) +{ + return data->devtype == IMX6Q_EHCI; +} /* called during probe() after chip reset completes */ static int ehci_mxc_setup(struct usb_hcd *hcd) @@ -122,6 +229,8 @@ static int ehci_mxc_drv_probe(struct platform_device *pdev) struct ehci_mxc_priv *priv; struct device *dev = &pdev->dev; struct ehci_hcd *ehci; + const struct of_device_id *of_id = + of_match_device(imx_ehci_dt_ids, &pdev->dev); dev_info(&pdev->dev, "initializing i.MX USB Controller\n"); @@ -141,6 +250,9 @@ static int ehci_mxc_drv_probe(struct platform_device *pdev) ret = -ENOMEM; goto err_alloc; } + if (of_id) + pdev->id_entry = of_id->data; + priv->devtype = pdev->id_entry->driver_data; res = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!res) { @@ -173,7 +285,7 @@ static int ehci_mxc_drv_probe(struct platform_device *pdev) } clk_enable(priv->usbclk); - if (!cpu_is_mx35() && !cpu_is_mx25()) { + if (!is_imx35_ehci(priv) && !is_imx25_ehci(priv)) { priv->ahbclk = clk_get(dev, "usb_ahb"); if (IS_ERR(priv->ahbclk)) { ret = PTR_ERR(priv->ahbclk); @@ -183,7 +295,7 @@ static int ehci_mxc_drv_probe(struct platform_device *pdev) } /* "dr" device has its own clock on i.MX51 */ - if (cpu_is_mx51() && (pdev->id == 0)) { + if (is_imx51_ehci(priv) && (pdev->id == 0)) { priv->phy1clk = clk_get(dev, "usb_phy1"); if (IS_ERR(priv->phy1clk)) { ret = PTR_ERR(priv->phy1clk); @@ -192,7 +304,6 @@ static int ehci_mxc_drv_probe(struct platform_device *pdev) clk_enable(priv->phy1clk); } - /* call platform specific init function */ if (pdata->init) { ret = pdata->init(pdev); @@ -336,6 +447,7 @@ static struct platform_driver ehci_mxc_driver = { .probe = ehci_mxc_drv_probe, .remove = __exit_p(ehci_mxc_drv_remove), .shutdown = ehci_mxc_drv_shutdown, + .id_table = mxc_ehci_devtype, .driver = { .name = "mxc-ehci", },