From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753245AbcAGJRR (ORCPT ); Thu, 7 Jan 2016 04:17:17 -0500 Received: from relmlor3.renesas.com ([210.160.252.173]:25773 "EHLO relmlie2.idc.renesas.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1753072AbcAGJRB (ORCPT ); Thu, 7 Jan 2016 04:17:01 -0500 X-IronPort-AV: E=Sophos;i="5.20,532,1444662000"; d="scan'";a="201811351" Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=<>; From: Yoshihiro Shimoda To: , , , , , CC: , , , Yoshihiro Shimoda Subject: [PATCH] phy: rcar-gen3-usb2: remove HSUSB registers handling Date: Thu, 7 Jan 2016 18:16:44 +0900 Message-ID: <1452158204-5236-1-git-send-email-yoshihiro.shimoda.uh@renesas.com> X-Mailer: git-send-email 1.9.4.msysgit.1 MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [211.11.155.144] X-ClientProxiedBy: HK2PR02CA0040.apcprd02.prod.outlook.com (25.163.104.178) To TY1PR06MB0928.apcprd06.prod.outlook.com (25.164.99.154) X-Microsoft-Exchange-Diagnostics: 1;TY1PR06MB0928;2:/EAzWaxe09zVUa2Qb9Z4bMCT1MN5rjEpf2NH8QbiQnk1PWHSdDoUElcLj9UyWHPDYL4o+aoOwaRm5Px5tz285EyTTpbqvJjtwpGxWTDVAemOvHXg9D/g6qraXJTy7tabl0FcMQ4dimjpn6s/D3naFA==;3:U2pSdwfAOyHYmdAHM2/5AeOTKUPtvzhmVar2eF/Ln8+vs7mnZEF4YNO+U2NHFo+jTWy4TsTH98tBboh6ieXy/a7pPa1ZYXFMXjE6nmYy5EUqRb0jySmzBHGyxgKwWP7u;25:6tcm89mxcvaIHhpDdHv9DcdpW4VB2w3a42UM6vsKlL61v075egKj1yUOvZ8Vrq+AWJwOtww2TODbBTxiHMiTkzpQy6+1yfOfexfSoq16yRI9LUOM2/qb3UXu7SgtVkjqSqpRnEFQMddxwJx5l0iA+djbcx+Y5x6xU7I6sx6GvAwxcTYXfJ7wjiWkTUugr/uu5Z9IGNpB6LPZr5iE/l9QZV1mqsq0AXg1XCppm3b6dKljrt6d6Zc8fH79pMMkxSeU X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:TY1PR06MB0928; X-MS-Office365-Filtering-Correlation-Id: 00eb7c35-2dba-4899-9cb5-08d3174349d0 X-Microsoft-Exchange-Diagnostics: 1;TY1PR06MB0928;20:Vl3zWHahs2wENl4SLkQldWHWGA9qjw9neFr+CyJAoZgkT1MZNFausW1Kn513sLs8iAA3fzeI+I/Kn+f0vjmVoVgRL8OfW3O0dXk6ILQKfLDhPYl+L9Jb0vJMhq25TDyl1CLGqp7+POKil6pAIAjrSr3DZVwBZai5g37kOMEll9rMfRo13XDAiFOwXlmm6U0O65ziwpz/eKFBlR2OTA7xhZZh/qzVqU53ZQ/plThWlsKX1syriFeVp1mLxuLHOKeEhNRvPJGiAQCs8230BeBD5pPdurxXnDHrNtDO2YMvfcbXDEJqQz9gduINksPziKzaz3h9GWzAvfp9/wzKK4z4eWxpjSUx/wcooF/xNA4ld8OqUgdethSdGf4gKwJB+IXup/4IqVNgrCQepl1KIGNFLreMi+ui2BSEK6i3nlD2Jwk5s+pBWNBMSZQ/bLV1H2irCO3+do2XMgVxogg+CINCXq9jSC7EHOts/sdiehahw+694octPuvfaV2HLwmaDn9h;4:5T0uwJHoULpTpG8xK+MlOfpFtplrhhvwmopLIY8p/e3OgsXpkIHTbbljIIR8JJbibedtFcBRLy5XJLWuApDf9nYMXaU+86a4FwuO4VGhiLki3yVPWTvMZrgbFI0vvic0Gb/JpjgnTmAS+HXyt5LYCMcrB1SanWA6GXFQ7ioWIKfUxh1WyFFW1utnaVF8oIDFGEEUHLqlxIvVZrQE9MYYskqM8xS00Rm5tTYk75c82W+VdimeibGmWK/U4zAZQd+fPbacLmRP9RNME+ZcpUdIhIG1WjgcuKU8oB4z7Amc7iwdPxXuY/LIA9cyGk0w9ykh1fM4gPjCFHIGapmBPjvs7se2+QAl0sDH7WQfm9DTJuimTco/mvtQf5R9bCQmZ6uPM/dBEmxihNfp+ozfdjgT7SU/J6HSuJde+2nJvwtBEbM= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(85106069007906); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(5005006)(8121501046)(520078)(3002001)(10201501046);SRVR:TY1PR06MB0928;BCL:0;PCL:0;RULEID:;SRVR:TY1PR06MB0928; X-Forefront-PRVS: 0814A2C7A3 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(6009001)(6069001)(199003)(189002)(586003)(50986999)(66066001)(36756003)(87976001)(575784001)(5001960100002)(2906002)(19580395003)(229853001)(101416001)(76506005)(107886002)(5004730100002)(3846002)(42186005)(47776003)(5001770100001)(50466002)(81156007)(189998001)(5008740100001)(40100003)(19580405001)(4001430100002)(1096002)(33646002)(106356001)(42382002)(122386002)(5003940100001)(77096005)(50226001)(4326007)(6116002)(105586002)(230783001)(48376002)(97736004)(78352003)(92566002);DIR:OUT;SFP:1102;SCL:1;SRVR:TY1PR06MB0928;H:localhost;FPR:;SPF:None;PTR:InfoNoRecords;A:0;MX:0;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;TY1PR06MB0928;23:AjENUlArzDLzdTzXtuVyBBpvhLcjfawFQXmDFfbYP?= =?us-ascii?Q?bgRDQUmtu8bFQml9qmhIhR8q5EutWh5UPkUY6A8jAtujVmfjRV9pr/ZgxYo2?= =?us-ascii?Q?4HIKIloIodakMwEuNGTElXwPAkttjc1gCRg7JgzlLHPif23zqu2wmlXhpu0X?= =?us-ascii?Q?i6OQk0h+48mUN2+7eP53jFPWgcrkP1P79erg7ggH+Hn8vODZDjBX3NsPfREE?= =?us-ascii?Q?gAFUNyjv4f4idTZxuw2hzpYzL2VsoSopzGqlXjj6LeV1NWDzpuL3J8dpFiKT?= =?us-ascii?Q?RpxrqrNwGu/ECOlLzoDplESkjgfNthghHiCNuLRGp1F/DetdyFdL8i20yujo?= =?us-ascii?Q?0wEryCR2Vhv4E/jcN587LepcNPI7fV4B0jPahPWd/KtpGMc2ylCYqjEGSXog?= =?us-ascii?Q?TNEBxtuGwsZB99inEKcr74M5ehBjUx877r0+LNCB/aHwapl7KIijKzh+/l3w?= =?us-ascii?Q?3O9+RAylwnJmA1juCAgv/96iOF9/lXUqSMB/uUNkBMDcHSmw4RLcAg4ce+Tb?= =?us-ascii?Q?QeoMrnikShUatSNLfZa7mnz3JP+YlRSKJ+YoEYvPQx2HiYHFU5IymvBJOEiN?= =?us-ascii?Q?nD7gAN9XlNeTkZvcTkJkLPxrvkntSY+cWFjln0jfvwWY3TgBEfRdRQrwgQBO?= =?us-ascii?Q?zttJ2KrOouWp/ciESz3P3uh5Hk5hRFDZ4eDXvMNfMDqk31d/m2ln9Xa28fls?= =?us-ascii?Q?euW9eAAIVcpFRFX75hG85IS5xiDAVWzA4ZRXRslEoSDPPPi8WH+z7VU4YQ9Z?= =?us-ascii?Q?ERahpMZjlkT0OUPRuduRO5YUD6XPPcq2cR3jnjXNO7lIqjdJJd6eMSqXEyLE?= =?us-ascii?Q?xg48RNPcLcFRaG2LYVrBT+7R0LjanONXS3J8ONm4UhMcE7nlyK0vb/+3eaEh?= =?us-ascii?Q?i5DCzlyv+/YilpDIbrjWIwKdgI4iGghAyYKUZISMIFJ5uQM8ggnaTUTZWgBF?= =?us-ascii?Q?T7XH9tevbsh+q/dlQuOrrbFnjKMgQTYiK7h9HNgTig18ZaC4rfmIukcuR6rs?= =?us-ascii?Q?9ocXb4NFIJ9NvUHZOVvnLHL04IK3vx99U27xKxeNR/xswCh2epHQelpkbYD+?= =?us-ascii?Q?DIC3LK1AgLNvNXERxy7W9R/o+OfGa6KoZvtv46oEqkdKrkDq46RGOhaiRO9L?= =?us-ascii?Q?WZIp3UhgZ+H8f0RQ83NCiiftdBYwfDAKobbSqTMQfGI3AY+deItvCuWfQaWb?= =?us-ascii?Q?LrUNyaRbhFnEOk=3D?= X-Microsoft-Exchange-Diagnostics: 1;TY1PR06MB0928;5:YI8qEA+TrVe3pvqJabjHC/iy0OP7kUDnEKA6emUiWYAvHl4+MYxsRJ30XZl/1wpIG15s5hdqx9O5LO24s7GZRTgcyeiebTwum5FzoohSKI5vFOXlyg+UmQmnzKpSIv/oKXoWPOJ1fgkCyKmenc2sAg==;24:EUSL7VgBDRPHz7hMrnH+D0ngHTG/3KVJSP9PZIley8AxnibxpqajlMDylfi1GAmtoH1ZLRg3D9vI4DMSuHcCB4iCZfGu/t3F0vCFim4IqDc=;20:CT5qUJAq+Fkid8wb8OmZAJNmzXoFHlDvFZhC9n+hNZEGtAdsqBrehVzSO7C0m/kzcdHD6L+Pp1oe+4KcLeEtQlX1Tcu7Asqm+skan6HVnewRnOAfVbiqMJEK9PsDRdFJJfczzajJVhOjK9bpc/He5xz4Xq/rOpCLzHTZ34wI+AI= SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: renesas.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jan 2016 09:16:55.4121 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: TY1PR06MB0928 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Since the related driver (CPG/MSSR driver) only manages the first module clock, this driver should not handle the HSUSB registers. So, this patch removes the HSUSB registers handling. Signed-off-by: Yoshihiro Shimoda --- This patch is based on the linux-phy / next branch. (commit id = 9955a7835bf376e12482583958b2661f501b868b) .../devicetree/bindings/phy/rcar-gen3-phy-usb2.txt | 15 ++-- drivers/phy/phy-rcar-gen3-usb2.c | 83 +++------------------- 2 files changed, 15 insertions(+), 83 deletions(-) diff --git a/Documentation/devicetree/bindings/phy/rcar-gen3-phy-usb2.txt b/Documentation/devicetree/bindings/phy/rcar-gen3-phy-usb2.txt index 2390e4e..eaf7e9b 100644 --- a/Documentation/devicetree/bindings/phy/rcar-gen3-phy-usb2.txt +++ b/Documentation/devicetree/bindings/phy/rcar-gen3-phy-usb2.txt @@ -7,33 +7,26 @@ Required properties: - compatible: "renesas,usb2-phy-r8a7795" if the device is a part of an R8A7795 SoC. - reg: offset and length of the partial USB 2.0 Host register block. -- reg-names: must be "usb2_host". - clocks: clock phandle and specifier pair(s). - #phy-cells: see phy-bindings.txt in the same directory, must be <0>. Optional properties: To use a USB channel where USB 2.0 Host and HSUSB (USB 2.0 Peripheral) are -combined, the device tree node should set HSUSB properties to reg and reg-names -properties. This is because HSUSB has registers to select USB 2.0 host or -peripheral at that channel: -- reg: offset and length of the partial HSUSB register block. -- reg-names: must be "hsusb". +combined, the device tree node should set interrupt properties to use the +channel as USB OTG: - interrupts: interrupt specifier for the PHY. Example (R-Car H3): usb-phy@ee080200 { compatible = "renesas,usb2-phy-r8a7795"; - reg = <0 0xee080200 0 0x700>, <0 0xe6590100 0 0x100>; - reg-names = "usb2_host", "hsusb"; + reg = <0 0xee080200 0 0x700>; interrupts = ; - clocks = <&mstp7_clks R8A7795_CLK_EHCI0>, - <&mstp7_clks R8A7795_CLK_HSUSB>; + clocks = <&mstp7_clks R8A7795_CLK_EHCI0>; }; usb-phy@ee0a0200 { compatible = "renesas,usb2-phy-r8a7795"; reg = <0 0xee0a0200 0 0x700>; - reg-names = "usb2_host"; clocks = <&mstp7_clks R8A7795_CLK_EHCI0>; }; diff --git a/drivers/phy/phy-rcar-gen3-usb2.c b/drivers/phy/phy-rcar-gen3-usb2.c index ef332ef..bc4f7dd 100644 --- a/drivers/phy/phy-rcar-gen3-usb2.c +++ b/drivers/phy/phy-rcar-gen3-usb2.c @@ -74,20 +74,6 @@ #define USB2_ADPCTRL_IDPULLUP BIT(5) /* 1 = ID sampling is enabled */ #define USB2_ADPCTRL_DRVVBUS BIT(4) -/******* HSUSB registers (original offset is +0x100) *******/ -#define HSUSB_LPSTS 0x02 -#define HSUSB_UGCTRL2 0x84 - -/* Low Power Status register (LPSTS) */ -#define HSUSB_LPSTS_SUSPM 0x4000 - -/* USB General control register 2 (UGCTRL2) */ -#define HSUSB_UGCTRL2_MASK 0x00000031 /* bit[31:6] should be 0 */ -#define HSUSB_UGCTRL2_USB0SEL 0x00000030 -#define HSUSB_UGCTRL2_USB0SEL_HOST 0x00000010 -#define HSUSB_UGCTRL2_USB0SEL_HS_USB 0x00000020 -#define HSUSB_UGCTRL2_USB0SEL_OTG 0x00000030 - struct rcar_gen3_data { void __iomem *base; struct clk *clk; @@ -95,8 +81,8 @@ struct rcar_gen3_data { struct rcar_gen3_chan { struct rcar_gen3_data usb2; - struct rcar_gen3_data hsusb; struct phy *phy; + bool has_otg; }; static void rcar_gen3_set_host_mode(struct rcar_gen3_chan *ch, int host) @@ -202,24 +188,15 @@ static int rcar_gen3_phy_usb2_init(struct phy *p) { struct rcar_gen3_chan *channel = phy_get_drvdata(p); void __iomem *usb2_base = channel->usb2.base; - void __iomem *hsusb_base = channel->hsusb.base; - u32 val; /* Initialize USB2 part */ writel(USB2_INT_ENABLE_INIT, usb2_base + USB2_INT_ENABLE); writel(USB2_SPD_RSM_TIMSET_INIT, usb2_base + USB2_SPD_RSM_TIMSET); writel(USB2_OC_TIMSET_INIT, usb2_base + USB2_OC_TIMSET); - /* Initialize HSUSB part */ - if (hsusb_base) { - val = readl(hsusb_base + HSUSB_UGCTRL2); - val = (val & ~HSUSB_UGCTRL2_USB0SEL) | - HSUSB_UGCTRL2_USB0SEL_OTG; - writel(val & HSUSB_UGCTRL2_MASK, hsusb_base + HSUSB_UGCTRL2); - - /* Initialize otg part */ + /* Initialize otg part */ + if (channel->has_otg) rcar_gen3_init_otg(channel); - } return 0; } @@ -237,7 +214,6 @@ static int rcar_gen3_phy_usb2_power_on(struct phy *p) { struct rcar_gen3_chan *channel = phy_get_drvdata(p); void __iomem *usb2_base = channel->usb2.base; - void __iomem *hsusb_base = channel->hsusb.base; u32 val; val = readl(usb2_base + USB2_USBCTR); @@ -246,33 +222,6 @@ static int rcar_gen3_phy_usb2_power_on(struct phy *p) val &= ~USB2_USBCTR_PLL_RST; writel(val, usb2_base + USB2_USBCTR); - /* - * TODO: To reduce power consuming, this driver should set the SUSPM - * after the PHY detects ID pin as peripheral. - */ - if (hsusb_base) { - /* Power on HSUSB PHY */ - val = readw(hsusb_base + HSUSB_LPSTS); - val |= HSUSB_LPSTS_SUSPM; - writew(val, hsusb_base + HSUSB_LPSTS); - } - - return 0; -} - -static int rcar_gen3_phy_usb2_power_off(struct phy *p) -{ - struct rcar_gen3_chan *channel = phy_get_drvdata(p); - void __iomem *hsusb_base = channel->hsusb.base; - u32 val; - - if (hsusb_base) { - /* Power off HSUSB PHY */ - val = readw(hsusb_base + HSUSB_LPSTS); - val &= ~HSUSB_LPSTS_SUSPM; - writew(val, hsusb_base + HSUSB_LPSTS); - } - return 0; } @@ -280,7 +229,6 @@ static struct phy_ops rcar_gen3_phy_usb2_ops = { .init = rcar_gen3_phy_usb2_init, .exit = rcar_gen3_phy_usb2_exit, .power_on = rcar_gen3_phy_usb2_power_on, - .power_off = rcar_gen3_phy_usb2_power_off, .owner = THIS_MODULE, }; @@ -313,6 +261,7 @@ static int rcar_gen3_phy_usb2_probe(struct platform_device *pdev) struct rcar_gen3_chan *channel; struct phy_provider *provider; struct resource *res; + int irq; if (!dev->of_node) { dev_err(dev, "This driver needs device tree\n"); @@ -323,29 +272,19 @@ static int rcar_gen3_phy_usb2_probe(struct platform_device *pdev) if (!channel) return -ENOMEM; - res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "usb2_host"); + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); channel->usb2.base = devm_ioremap_resource(dev, res); if (IS_ERR(channel->usb2.base)) return PTR_ERR(channel->usb2.base); - /* "hsusb" memory resource is optional */ - res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "hsusb"); - - /* To avoid error message by devm_ioremap_resource() */ - if (res) { - int irq; - - channel->hsusb.base = devm_ioremap_resource(dev, res); - if (IS_ERR(channel->hsusb.base)) - channel->hsusb.base = NULL; - /* call request_irq for OTG */ - irq = platform_get_irq(pdev, 0); - if (irq >= 0) - irq = devm_request_irq(dev, irq, rcar_gen3_phy_usb2_irq, - IRQF_SHARED, dev_name(dev), - channel); + /* call request_irq for OTG */ + irq = platform_get_irq(pdev, 0); + if (irq >= 0) { + irq = devm_request_irq(dev, irq, rcar_gen3_phy_usb2_irq, + IRQF_SHARED, dev_name(dev), channel); if (irq < 0) dev_err(dev, "No irq handler (%d)\n", irq); + channel->has_otg = true; } /* devm_phy_create() will call pm_runtime_enable(dev); */ -- 1.9.1