From mboxrd@z Thu Jan 1 00:00:00 1970 From: Martin Blumenstingl Subject: [PATCH usb-next v9 6/8] usb: host: ehci-platform: remove custom USB PHY handling Date: Sun, 11 Feb 2018 22:06:49 +0100 Message-ID: <20180211210651.2046-7-martin.blumenstingl@googlemail.com> References: <20180211210651.2046-1-martin.blumenstingl@googlemail.com> Return-path: In-Reply-To: <20180211210651.2046-1-martin.blumenstingl-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org> Sender: linux-tegra-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org To: linux-usb-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, mathias.nyman-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org, arnd-r2nGTMty4D4@public.gmane.org, gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org, felipe.balbi-VuQAYsv1563Yd54FQh9/CA@public.gmane.org Cc: linux-omap-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-mediatek-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org, devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, jonathanh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org, thierry.reding-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, stern-nwvwT67g6+6dFdvTe/nMLpVzexx5G7lz@public.gmane.org, linux-ci5G2KO2hbZ+pU9mqzGVBQ@public.gmane.org, Peter.Chen-3arQi8VN3Tc@public.gmane.org, matthias.bgg-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org, mark.rutland-5wv7dgnIgG8@public.gmane.org, robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org, narmstrong-rdvid1DuHRBWk0Htik3J/w@public.gmane.org, linux-amlogic-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org, yixun.lan-LpR1jeaWuhtBDgjK7y7TUQ@public.gmane.org, Martin Blumenstingl List-Id: linux-tegra@vger.kernel.org The new PHY wrapper is now wired up in the core HCD code. This means that PHYs are now controlled (initialized, enabled, disabled, exited) without requiring any host-driver specific code. Remove the custom USB PHY handling from the ehci-platform driver as the core HCD code now handles this. Signed-off-by: Martin Blumenstingl Acked-by: Alan Stern --- drivers/usb/host/ehci-platform.c | 55 +++------------------------------------- 1 file changed, 4 insertions(+), 51 deletions(-) diff --git a/drivers/usb/host/ehci-platform.c b/drivers/usb/host/ehci-platform.c index 40fbc4925378..4c306fb6b069 100644 --- a/drivers/usb/host/ehci-platform.c +++ b/drivers/usb/host/ehci-platform.c @@ -27,7 +27,6 @@ #include #include #include -#include #include #include #include @@ -44,8 +43,6 @@ struct ehci_platform_priv { struct clk *clks[EHCI_MAX_CLKS]; struct reset_control *rsts; - struct phy **phys; - int num_phys; bool reset_on_resume; }; @@ -80,7 +77,7 @@ static int ehci_platform_power_on(struct platform_device *dev) { struct usb_hcd *hcd = platform_get_drvdata(dev); struct ehci_platform_priv *priv = hcd_to_ehci_priv(hcd); - int clk, ret, phy_num; + int clk, ret; for (clk = 0; clk < EHCI_MAX_CLKS && priv->clks[clk]; clk++) { ret = clk_prepare_enable(priv->clks[clk]); @@ -88,24 +85,8 @@ static int ehci_platform_power_on(struct platform_device *dev) goto err_disable_clks; } - for (phy_num = 0; phy_num < priv->num_phys; phy_num++) { - ret = phy_init(priv->phys[phy_num]); - if (ret) - goto err_exit_phy; - ret = phy_power_on(priv->phys[phy_num]); - if (ret) { - phy_exit(priv->phys[phy_num]); - goto err_exit_phy; - } - } - return 0; -err_exit_phy: - while (--phy_num >= 0) { - phy_power_off(priv->phys[phy_num]); - phy_exit(priv->phys[phy_num]); - } err_disable_clks: while (--clk >= 0) clk_disable_unprepare(priv->clks[clk]); @@ -117,12 +98,7 @@ static void ehci_platform_power_off(struct platform_device *dev) { struct usb_hcd *hcd = platform_get_drvdata(dev); struct ehci_platform_priv *priv = hcd_to_ehci_priv(hcd); - int clk, phy_num; - - for (phy_num = 0; phy_num < priv->num_phys; phy_num++) { - phy_power_off(priv->phys[phy_num]); - phy_exit(priv->phys[phy_num]); - } + int clk; for (clk = EHCI_MAX_CLKS - 1; clk >= 0; clk--) if (priv->clks[clk]) @@ -149,7 +125,7 @@ static int ehci_platform_probe(struct platform_device *dev) struct usb_ehci_pdata *pdata = dev_get_platdata(&dev->dev); struct ehci_platform_priv *priv; struct ehci_hcd *ehci; - int err, irq, phy_num, clk = 0; + int err, irq, clk = 0; if (usb_disabled()) return -ENODEV; @@ -202,29 +178,6 @@ static int ehci_platform_probe(struct platform_device *dev) "has-transaction-translator")) hcd->has_tt = 1; - priv->num_phys = of_count_phandle_with_args(dev->dev.of_node, - "phys", "#phy-cells"); - - if (priv->num_phys > 0) { - priv->phys = devm_kcalloc(&dev->dev, priv->num_phys, - sizeof(struct phy *), GFP_KERNEL); - if (!priv->phys) - return -ENOMEM; - } else - priv->num_phys = 0; - - for (phy_num = 0; phy_num < priv->num_phys; phy_num++) { - priv->phys[phy_num] = devm_of_phy_get_by_index( - &dev->dev, dev->dev.of_node, phy_num); - if (IS_ERR(priv->phys[phy_num])) { - err = PTR_ERR(priv->phys[phy_num]); - goto err_put_hcd; - } else { - /* Avoiding phy_get() in usb_add_hcd() */ - hcd->skip_phy_initialization = true; - } - } - for (clk = 0; clk < EHCI_MAX_CLKS; clk++) { priv->clks[clk] = of_clk_get(dev->dev.of_node, clk); if (IS_ERR(priv->clks[clk])) { @@ -306,7 +259,7 @@ static int ehci_platform_probe(struct platform_device *dev) err_put_clks: while (--clk >= 0) clk_put(priv->clks[clk]); -err_put_hcd: + if (pdata == &ehci_platform_defaults) dev->dev.platform_data = NULL; -- 2.16.1 From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [usb-next,v9,6/8] usb: host: ehci-platform: remove custom USB PHY handling From: Martin Blumenstingl Message-Id: <20180211210651.2046-7-martin.blumenstingl@googlemail.com> Date: Sun, 11 Feb 2018 22:06:49 +0100 To: linux-usb@vger.kernel.org, mathias.nyman@intel.com, arnd@arndb.de, gregkh@linuxfoundation.org, felipe.balbi@linux.intel.com Cc: linux-omap@vger.kernel.org, linux-tegra@vger.kernel.org, linux-mediatek@lists.infradead.org, linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, jonathanh@nvidia.com, thierry.reding@gmail.com, stern@rowland.harvard.edu, linux@prisktech.co.nz, Peter.Chen@nxp.com, matthias.bgg@gmail.com, mark.rutland@arm.com, robh+dt@kernel.org, narmstrong@baylibre.com, linux-amlogic@lists.infradead.org, yixun.lan@amlogic.com, Martin Blumenstingl List-ID: VGhlIG5ldyBQSFkgd3JhcHBlciBpcyBub3cgd2lyZWQgdXAgaW4gdGhlIGNvcmUgSENEIGNvZGUu IFRoaXMgbWVhbnMKdGhhdCBQSFlzIGFyZSBub3cgY29udHJvbGxlZCAoaW5pdGlhbGl6ZWQsIGVu YWJsZWQsIGRpc2FibGVkLCBleGl0ZWQpCndpdGhvdXQgcmVxdWlyaW5nIGFueSBob3N0LWRyaXZl ciBzcGVjaWZpYyBjb2RlLgpSZW1vdmUgdGhlIGN1c3RvbSBVU0IgUEhZIGhhbmRsaW5nIGZyb20g dGhlIGVoY2ktcGxhdGZvcm0gZHJpdmVyIGFzIHRoZQpjb3JlIEhDRCBjb2RlIG5vdyBoYW5kbGVz IHRoaXMuCgpTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gQmx1bWVuc3RpbmdsIDxtYXJ0aW4uYmx1bWVu c3RpbmdsQGdvb2dsZW1haWwuY29tPgpBY2tlZC1ieTogQWxhbiBTdGVybiA8c3Rlcm5Acm93bGFu ZC5oYXJ2YXJkLmVkdT4KLS0tCiBkcml2ZXJzL3VzYi9ob3N0L2VoY2ktcGxhdGZvcm0uYyB8IDU1 ICsrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2Vk LCA0IGluc2VydGlvbnMoKyksIDUxIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMv dXNiL2hvc3QvZWhjaS1wbGF0Zm9ybS5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXBsYXRmb3Jt LmMKaW5kZXggNDBmYmM0OTI1Mzc4Li40YzMwNmZiNmIwNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv dXNiL2hvc3QvZWhjaS1wbGF0Zm9ybS5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wbGF0 Zm9ybS5jCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRl IDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgotI2luY2x1ZGUgPGxpbnV4 L3BoeS9waHkuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRl IDxsaW51eC9yZXNldC5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgpAQCAtNDQsOCArNDMsNiBA QAogc3RydWN0IGVoY2lfcGxhdGZvcm1fcHJpdiB7CiAJc3RydWN0IGNsayAqY2xrc1tFSENJX01B WF9DTEtTXTsKIAlzdHJ1Y3QgcmVzZXRfY29udHJvbCAqcnN0czsKLQlzdHJ1Y3QgcGh5ICoqcGh5 czsKLQlpbnQgbnVtX3BoeXM7CiAJYm9vbCByZXNldF9vbl9yZXN1bWU7CiB9OwogCkBAIC04MCw3 ICs3Nyw3IEBAIHN0YXRpYyBpbnQgZWhjaV9wbGF0Zm9ybV9wb3dlcl9vbihzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHVzYl9oY2QgKmhjZCA9IHBsYXRmb3JtX2dldF9k cnZkYXRhKGRldik7CiAJc3RydWN0IGVoY2lfcGxhdGZvcm1fcHJpdiAqcHJpdiA9IGhjZF90b19l aGNpX3ByaXYoaGNkKTsKLQlpbnQgY2xrLCByZXQsIHBoeV9udW07CisJaW50IGNsaywgcmV0Owog CiAJZm9yIChjbGsgPSAwOyBjbGsgPCBFSENJX01BWF9DTEtTICYmIHByaXYtPmNsa3NbY2xrXTsg Y2xrKyspIHsKIAkJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHByaXYtPmNsa3NbY2xrXSk7CkBA IC04OCwyNCArODUsOCBAQCBzdGF0aWMgaW50IGVoY2lfcGxhdGZvcm1fcG93ZXJfb24oc3RydWN0 IHBsYXRmb3JtX2RldmljZSAqZGV2KQogCQkJZ290byBlcnJfZGlzYWJsZV9jbGtzOwogCX0KIAot CWZvciAocGh5X251bSA9IDA7IHBoeV9udW0gPCBwcml2LT5udW1fcGh5czsgcGh5X251bSsrKSB7 Ci0JCXJldCA9IHBoeV9pbml0KHByaXYtPnBoeXNbcGh5X251bV0pOwotCQlpZiAocmV0KQotCQkJ Z290byBlcnJfZXhpdF9waHk7Ci0JCXJldCA9IHBoeV9wb3dlcl9vbihwcml2LT5waHlzW3BoeV9u dW1dKTsKLQkJaWYgKHJldCkgewotCQkJcGh5X2V4aXQocHJpdi0+cGh5c1twaHlfbnVtXSk7Ci0J CQlnb3RvIGVycl9leGl0X3BoeTsKLQkJfQotCX0KLQogCXJldHVybiAwOwogCi1lcnJfZXhpdF9w aHk6Ci0Jd2hpbGUgKC0tcGh5X251bSA+PSAwKSB7Ci0JCXBoeV9wb3dlcl9vZmYocHJpdi0+cGh5 c1twaHlfbnVtXSk7Ci0JCXBoeV9leGl0KHByaXYtPnBoeXNbcGh5X251bV0pOwotCX0KIGVycl9k aXNhYmxlX2Nsa3M6CiAJd2hpbGUgKC0tY2xrID49IDApCiAJCWNsa19kaXNhYmxlX3VucHJlcGFy ZShwcml2LT5jbGtzW2Nsa10pOwpAQCAtMTE3LDEyICs5OCw3IEBAIHN0YXRpYyB2b2lkIGVoY2lf cGxhdGZvcm1fcG93ZXJfb2ZmKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1 Y3QgdXNiX2hjZCAqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgZWhj aV9wbGF0Zm9ybV9wcml2ICpwcml2ID0gaGNkX3RvX2VoY2lfcHJpdihoY2QpOwotCWludCBjbGss IHBoeV9udW07Ci0KLQlmb3IgKHBoeV9udW0gPSAwOyBwaHlfbnVtIDwgcHJpdi0+bnVtX3BoeXM7 IHBoeV9udW0rKykgewotCQlwaHlfcG93ZXJfb2ZmKHByaXYtPnBoeXNbcGh5X251bV0pOwotCQlw aHlfZXhpdChwcml2LT5waHlzW3BoeV9udW1dKTsKLQl9CisJaW50IGNsazsKIAogCWZvciAoY2xr ID0gRUhDSV9NQVhfQ0xLUyAtIDE7IGNsayA+PSAwOyBjbGstLSkKIAkJaWYgKHByaXYtPmNsa3Nb Y2xrXSkKQEAgLTE0OSw3ICsxMjUsNyBAQCBzdGF0aWMgaW50IGVoY2lfcGxhdGZvcm1fcHJvYmUo c3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogCXN0cnVjdCB1c2JfZWhjaV9wZGF0YSAqcGRh dGEgPSBkZXZfZ2V0X3BsYXRkYXRhKCZkZXYtPmRldik7CiAJc3RydWN0IGVoY2lfcGxhdGZvcm1f cHJpdiAqcHJpdjsKIAlzdHJ1Y3QgZWhjaV9oY2QgKmVoY2k7Ci0JaW50IGVyciwgaXJxLCBwaHlf bnVtLCBjbGsgPSAwOworCWludCBlcnIsIGlycSwgY2xrID0gMDsKIAogCWlmICh1c2JfZGlzYWJs ZWQoKSkKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC0yMDIsMjkgKzE3OCw2IEBAIHN0YXRpYyBpbnQg ZWhjaV9wbGF0Zm9ybV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiAJCQkJCSAg Imhhcy10cmFuc2FjdGlvbi10cmFuc2xhdG9yIikpCiAJCQloY2QtPmhhc190dCA9IDE7CiAKLQkJ cHJpdi0+bnVtX3BoeXMgPSBvZl9jb3VudF9waGFuZGxlX3dpdGhfYXJncyhkZXYtPmRldi5vZl9u b2RlLAotCQkJCSJwaHlzIiwgIiNwaHktY2VsbHMiKTsKLQotCQlpZiAocHJpdi0+bnVtX3BoeXMg PiAwKSB7Ci0JCQlwcml2LT5waHlzID0gZGV2bV9rY2FsbG9jKCZkZXYtPmRldiwgcHJpdi0+bnVt X3BoeXMsCi0JCQkJCSAgICBzaXplb2Yoc3RydWN0IHBoeSAqKSwgR0ZQX0tFUk5FTCk7Ci0JCQlp ZiAoIXByaXYtPnBoeXMpCi0JCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0gZWxzZQotCQkJcHJpdi0+ bnVtX3BoeXMgPSAwOwotCi0JCWZvciAocGh5X251bSA9IDA7IHBoeV9udW0gPCBwcml2LT5udW1f cGh5czsgcGh5X251bSsrKSB7Ci0JCQlwcml2LT5waHlzW3BoeV9udW1dID0gZGV2bV9vZl9waHlf Z2V0X2J5X2luZGV4KAotCQkJCQkmZGV2LT5kZXYsIGRldi0+ZGV2Lm9mX25vZGUsIHBoeV9udW0p OwotCQkJaWYgKElTX0VSUihwcml2LT5waHlzW3BoeV9udW1dKSkgewotCQkJCWVyciA9IFBUUl9F UlIocHJpdi0+cGh5c1twaHlfbnVtXSk7Ci0JCQkJCWdvdG8gZXJyX3B1dF9oY2Q7Ci0JCQl9IGVs c2UgewotCQkJCS8qIEF2b2lkaW5nIHBoeV9nZXQoKSBpbiB1c2JfYWRkX2hjZCgpICovCi0JCQkJ aGNkLT5za2lwX3BoeV9pbml0aWFsaXphdGlvbiA9IHRydWU7Ci0JCQl9Ci0JCX0KLQogCQlmb3Ig KGNsayA9IDA7IGNsayA8IEVIQ0lfTUFYX0NMS1M7IGNsaysrKSB7CiAJCQlwcml2LT5jbGtzW2Ns a10gPSBvZl9jbGtfZ2V0KGRldi0+ZGV2Lm9mX25vZGUsIGNsayk7CiAJCQlpZiAoSVNfRVJSKHBy aXYtPmNsa3NbY2xrXSkpIHsKQEAgLTMwNiw3ICsyNTksNyBAQCBzdGF0aWMgaW50IGVoY2lfcGxh dGZvcm1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogZXJyX3B1dF9jbGtzOgog CXdoaWxlICgtLWNsayA+PSAwKQogCQljbGtfcHV0KHByaXYtPmNsa3NbY2xrXSk7Ci1lcnJfcHV0 X2hjZDoKKwogCWlmIChwZGF0YSA9PSAmZWhjaV9wbGF0Zm9ybV9kZWZhdWx0cykKIAkJZGV2LT5k ZXYucGxhdGZvcm1fZGF0YSA9IE5VTEw7CiAK From mboxrd@z Thu Jan 1 00:00:00 1970 From: martin.blumenstingl@googlemail.com (Martin Blumenstingl) Date: Sun, 11 Feb 2018 22:06:49 +0100 Subject: [PATCH usb-next v9 6/8] usb: host: ehci-platform: remove custom USB PHY handling In-Reply-To: <20180211210651.2046-1-martin.blumenstingl@googlemail.com> References: <20180211210651.2046-1-martin.blumenstingl@googlemail.com> Message-ID: <20180211210651.2046-7-martin.blumenstingl@googlemail.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org The new PHY wrapper is now wired up in the core HCD code. This means that PHYs are now controlled (initialized, enabled, disabled, exited) without requiring any host-driver specific code. Remove the custom USB PHY handling from the ehci-platform driver as the core HCD code now handles this. Signed-off-by: Martin Blumenstingl Acked-by: Alan Stern --- drivers/usb/host/ehci-platform.c | 55 +++------------------------------------- 1 file changed, 4 insertions(+), 51 deletions(-) diff --git a/drivers/usb/host/ehci-platform.c b/drivers/usb/host/ehci-platform.c index 40fbc4925378..4c306fb6b069 100644 --- a/drivers/usb/host/ehci-platform.c +++ b/drivers/usb/host/ehci-platform.c @@ -27,7 +27,6 @@ #include #include #include -#include #include #include #include @@ -44,8 +43,6 @@ struct ehci_platform_priv { struct clk *clks[EHCI_MAX_CLKS]; struct reset_control *rsts; - struct phy **phys; - int num_phys; bool reset_on_resume; }; @@ -80,7 +77,7 @@ static int ehci_platform_power_on(struct platform_device *dev) { struct usb_hcd *hcd = platform_get_drvdata(dev); struct ehci_platform_priv *priv = hcd_to_ehci_priv(hcd); - int clk, ret, phy_num; + int clk, ret; for (clk = 0; clk < EHCI_MAX_CLKS && priv->clks[clk]; clk++) { ret = clk_prepare_enable(priv->clks[clk]); @@ -88,24 +85,8 @@ static int ehci_platform_power_on(struct platform_device *dev) goto err_disable_clks; } - for (phy_num = 0; phy_num < priv->num_phys; phy_num++) { - ret = phy_init(priv->phys[phy_num]); - if (ret) - goto err_exit_phy; - ret = phy_power_on(priv->phys[phy_num]); - if (ret) { - phy_exit(priv->phys[phy_num]); - goto err_exit_phy; - } - } - return 0; -err_exit_phy: - while (--phy_num >= 0) { - phy_power_off(priv->phys[phy_num]); - phy_exit(priv->phys[phy_num]); - } err_disable_clks: while (--clk >= 0) clk_disable_unprepare(priv->clks[clk]); @@ -117,12 +98,7 @@ static void ehci_platform_power_off(struct platform_device *dev) { struct usb_hcd *hcd = platform_get_drvdata(dev); struct ehci_platform_priv *priv = hcd_to_ehci_priv(hcd); - int clk, phy_num; - - for (phy_num = 0; phy_num < priv->num_phys; phy_num++) { - phy_power_off(priv->phys[phy_num]); - phy_exit(priv->phys[phy_num]); - } + int clk; for (clk = EHCI_MAX_CLKS - 1; clk >= 0; clk--) if (priv->clks[clk]) @@ -149,7 +125,7 @@ static int ehci_platform_probe(struct platform_device *dev) struct usb_ehci_pdata *pdata = dev_get_platdata(&dev->dev); struct ehci_platform_priv *priv; struct ehci_hcd *ehci; - int err, irq, phy_num, clk = 0; + int err, irq, clk = 0; if (usb_disabled()) return -ENODEV; @@ -202,29 +178,6 @@ static int ehci_platform_probe(struct platform_device *dev) "has-transaction-translator")) hcd->has_tt = 1; - priv->num_phys = of_count_phandle_with_args(dev->dev.of_node, - "phys", "#phy-cells"); - - if (priv->num_phys > 0) { - priv->phys = devm_kcalloc(&dev->dev, priv->num_phys, - sizeof(struct phy *), GFP_KERNEL); - if (!priv->phys) - return -ENOMEM; - } else - priv->num_phys = 0; - - for (phy_num = 0; phy_num < priv->num_phys; phy_num++) { - priv->phys[phy_num] = devm_of_phy_get_by_index( - &dev->dev, dev->dev.of_node, phy_num); - if (IS_ERR(priv->phys[phy_num])) { - err = PTR_ERR(priv->phys[phy_num]); - goto err_put_hcd; - } else { - /* Avoiding phy_get() in usb_add_hcd() */ - hcd->skip_phy_initialization = true; - } - } - for (clk = 0; clk < EHCI_MAX_CLKS; clk++) { priv->clks[clk] = of_clk_get(dev->dev.of_node, clk); if (IS_ERR(priv->clks[clk])) { @@ -306,7 +259,7 @@ static int ehci_platform_probe(struct platform_device *dev) err_put_clks: while (--clk >= 0) clk_put(priv->clks[clk]); -err_put_hcd: + if (pdata == &ehci_platform_defaults) dev->dev.platform_data = NULL; -- 2.16.1 From mboxrd@z Thu Jan 1 00:00:00 1970 From: martin.blumenstingl@googlemail.com (Martin Blumenstingl) Date: Sun, 11 Feb 2018 22:06:49 +0100 Subject: [PATCH usb-next v9 6/8] usb: host: ehci-platform: remove custom USB PHY handling In-Reply-To: <20180211210651.2046-1-martin.blumenstingl@googlemail.com> References: <20180211210651.2046-1-martin.blumenstingl@googlemail.com> Message-ID: <20180211210651.2046-7-martin.blumenstingl@googlemail.com> To: linus-amlogic@lists.infradead.org List-Id: linus-amlogic.lists.infradead.org The new PHY wrapper is now wired up in the core HCD code. This means that PHYs are now controlled (initialized, enabled, disabled, exited) without requiring any host-driver specific code. Remove the custom USB PHY handling from the ehci-platform driver as the core HCD code now handles this. Signed-off-by: Martin Blumenstingl Acked-by: Alan Stern --- drivers/usb/host/ehci-platform.c | 55 +++------------------------------------- 1 file changed, 4 insertions(+), 51 deletions(-) diff --git a/drivers/usb/host/ehci-platform.c b/drivers/usb/host/ehci-platform.c index 40fbc4925378..4c306fb6b069 100644 --- a/drivers/usb/host/ehci-platform.c +++ b/drivers/usb/host/ehci-platform.c @@ -27,7 +27,6 @@ #include #include #include -#include #include #include #include @@ -44,8 +43,6 @@ struct ehci_platform_priv { struct clk *clks[EHCI_MAX_CLKS]; struct reset_control *rsts; - struct phy **phys; - int num_phys; bool reset_on_resume; }; @@ -80,7 +77,7 @@ static int ehci_platform_power_on(struct platform_device *dev) { struct usb_hcd *hcd = platform_get_drvdata(dev); struct ehci_platform_priv *priv = hcd_to_ehci_priv(hcd); - int clk, ret, phy_num; + int clk, ret; for (clk = 0; clk < EHCI_MAX_CLKS && priv->clks[clk]; clk++) { ret = clk_prepare_enable(priv->clks[clk]); @@ -88,24 +85,8 @@ static int ehci_platform_power_on(struct platform_device *dev) goto err_disable_clks; } - for (phy_num = 0; phy_num < priv->num_phys; phy_num++) { - ret = phy_init(priv->phys[phy_num]); - if (ret) - goto err_exit_phy; - ret = phy_power_on(priv->phys[phy_num]); - if (ret) { - phy_exit(priv->phys[phy_num]); - goto err_exit_phy; - } - } - return 0; -err_exit_phy: - while (--phy_num >= 0) { - phy_power_off(priv->phys[phy_num]); - phy_exit(priv->phys[phy_num]); - } err_disable_clks: while (--clk >= 0) clk_disable_unprepare(priv->clks[clk]); @@ -117,12 +98,7 @@ static void ehci_platform_power_off(struct platform_device *dev) { struct usb_hcd *hcd = platform_get_drvdata(dev); struct ehci_platform_priv *priv = hcd_to_ehci_priv(hcd); - int clk, phy_num; - - for (phy_num = 0; phy_num < priv->num_phys; phy_num++) { - phy_power_off(priv->phys[phy_num]); - phy_exit(priv->phys[phy_num]); - } + int clk; for (clk = EHCI_MAX_CLKS - 1; clk >= 0; clk--) if (priv->clks[clk]) @@ -149,7 +125,7 @@ static int ehci_platform_probe(struct platform_device *dev) struct usb_ehci_pdata *pdata = dev_get_platdata(&dev->dev); struct ehci_platform_priv *priv; struct ehci_hcd *ehci; - int err, irq, phy_num, clk = 0; + int err, irq, clk = 0; if (usb_disabled()) return -ENODEV; @@ -202,29 +178,6 @@ static int ehci_platform_probe(struct platform_device *dev) "has-transaction-translator")) hcd->has_tt = 1; - priv->num_phys = of_count_phandle_with_args(dev->dev.of_node, - "phys", "#phy-cells"); - - if (priv->num_phys > 0) { - priv->phys = devm_kcalloc(&dev->dev, priv->num_phys, - sizeof(struct phy *), GFP_KERNEL); - if (!priv->phys) - return -ENOMEM; - } else - priv->num_phys = 0; - - for (phy_num = 0; phy_num < priv->num_phys; phy_num++) { - priv->phys[phy_num] = devm_of_phy_get_by_index( - &dev->dev, dev->dev.of_node, phy_num); - if (IS_ERR(priv->phys[phy_num])) { - err = PTR_ERR(priv->phys[phy_num]); - goto err_put_hcd; - } else { - /* Avoiding phy_get() in usb_add_hcd() */ - hcd->skip_phy_initialization = true; - } - } - for (clk = 0; clk < EHCI_MAX_CLKS; clk++) { priv->clks[clk] = of_clk_get(dev->dev.of_node, clk); if (IS_ERR(priv->clks[clk])) { @@ -306,7 +259,7 @@ static int ehci_platform_probe(struct platform_device *dev) err_put_clks: while (--clk >= 0) clk_put(priv->clks[clk]); -err_put_hcd: + if (pdata == &ehci_platform_defaults) dev->dev.platform_data = NULL; -- 2.16.1