Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752582AbbK3BpK (ORCPT ); Sun, 29 Nov 2015 20:45:10 -0500 Received: from relmlor2.renesas.com ([210.160.252.172]:42741 "EHLO relmlie1.idc.renesas.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751730AbbK3Bo7 (ORCPT ); Sun, 29 Nov 2015 20:44:59 -0500 X-IronPort-AV: E=Sophos;i="5.20,361,1444662000"; d="scan'";a="200739619" Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=<>; From: Yoshihiro Shimoda To: , , , , , CC: , , , Yoshihiro Shimoda Subject: [PATCH v6 3/4] phy: rcar-gen3-usb2: add runtime ID/VBUS pin detection Date: Mon, 30 Nov 2015 10:44:32 +0900 Message-ID: <1448847873-7072-4-git-send-email-yoshihiro.shimoda.uh@renesas.com> X-Mailer: git-send-email 1.9.4.msysgit.1 In-Reply-To: <1448847873-7072-1-git-send-email-yoshihiro.shimoda.uh@renesas.com> References: <1448847873-7072-1-git-send-email-yoshihiro.shimoda.uh@renesas.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [211.11.155.144] X-ClientProxiedBy: HKXPR03CA0062.apcprd03.prod.outlook.com (10.141.129.52) To TY1PR06MB0926.apcprd06.prod.outlook.com (25.164.99.152) X-Microsoft-Exchange-Diagnostics: 1;TY1PR06MB0926;2:ZUh+40MT/uAMG1I42pQjJHKIyMvv+Cm+Vzy043i/JW0t3cYXGP58xiwlsWBWGcLhG21mCojI8JtYrZ0s9+QW8MxLerEQV1K9HEmtLY53IA41hv/iZk3BzzRK/+ajhiCZuaaS5zlK5eL5br08U3+h4Q==;3:OWuvIlA7FHmNARjvG7xweh5GO6xp8KVSsztdABR3uRJspZOJNtFwtNsjlwYYaJ+uTUkiofMsXMsPjbIC6UIHbZVmmVX2xyTahWdnjfbLXWpCfsloD0dn5iONCtTErSSu;25:Gab7wBY3nFY1wk8CGz0frBapMMN42GbXGyGFOqdh6UP3lep13wAQZk3s9kJENMq8Cej78LxlfSTop1Hz9Uw30LS7f8KAVngFDz7Zc6SrvlBjfvU3Vggpsou1hCjm6erHrnOnIkf5lXzeQA8rOlunc4MejTR4M1UDbRg/I6ZFJ7raA6bhYV0Hwhh8yjSsC9PFtW2wJBtE6IrKhoB6x7bgfQMmNA7g2p5y4f1oLrA5oaj7cWCUJJBqsJbO66P1ntjZzA4h+C2sTztzvzk1nWr4YQ== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:TY1PR06MB0926; X-Microsoft-Exchange-Diagnostics: 1;TY1PR06MB0926;20:vJbNQAXCxR4/ygHiqEI/bNcxYlIJ5urcrfO7XrrXU8KnN9VOBXdh6AcfS1yG6E0DbKDtpQ4nCySjxt5ePE0zApqTYC/LI8TqAvDgEDnS8FWhGIRgou9gEY4MPY9HJh4CXn6FjobmZWgjn0qQPX3IGvCA3uYSHpikjhMyfHx6FoBk5ecTQ0tC2jNECFVm6WZ2NF1MFfMVwkqcFQXIB+9kxywgDlGIUw53k//YVmzvDklAsxDqJWMkMuorlEpdBlzp9rb4E1y7O696Ml8yd+Ps2+fBgIuUdIHt9iQ/Fmn9v019ZEFlQeY6eXVpQd7DzS9WpOFQXhQTESeDSO/rg9VCB6FuzFTSODPaEHkzMNCLZVzJGT8+yBm20C87ejLEK3uV5N99OA48l0fBvzLwK6YV0ysMpLE4ZZp7roqF4mF8WQloziduW52vko9Qm1hQdsuaLaCiOjyfNTM74Zl5Y8c4Yo3wvTbCyq8oJFr482oOS9VoPIGUaMxflqpa34jMzu7h;4:k05aQa6QuY+s2OXLstozEqXr5X7FeDNY77gY+My9Hj0ZNmkpvAkts5VmPqR+mWIXrqYI+4qM07RMp/WrH/+P0Tvmw/aGHvy8EnbYgETOoQLnBSs6/ea1/Ic4ZsGxaBli3Gma4MRmGIZDtAILyE/gbclVxbMeEVVBinh2HUan78fHE9KThBLT9u+BlI4OaZw4CCeA56MNO8FflgpoNpABAeckLAta9VK5DjpLMaOpLpaM2jlbDFhsJpCP2y02ajMXuY+zi1Et6bqaQtK7WL6eJ27Xns64QADjDYwcaTWfg60NRkBDjAO0mAtn4CGsu+NFEtTz6kWxkamSRzJmbxe7wLJtneupamLjPL1KpskrnlbwUrudteWQ4yyPL/X0OzJJ+s/neHTI7va5a1bUch5YZGWb2eDG2T/Fzfz8miTh+Vg955I0V6nSIHnMyJTd2wz+ X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(85106069007906); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(8121501046)(5005006)(520078)(10201501046)(3002001);SRVR:TY1PR06MB0926;BCL:0;PCL:0;RULEID:;SRVR:TY1PR06MB0926; X-Forefront-PRVS: 0776C39A48 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(6009001)(6069001)(189002)(199003)(50986999)(42382002)(586003)(33646002)(4001430100002)(5001960100002)(189998001)(5003940100001)(6116002)(47776003)(1096002)(101416001)(81156007)(106356001)(92566002)(87976001)(105586002)(42186005)(5004730100002)(97736004)(5001770100001)(36756003)(66066001)(107886002)(122386002)(575784001)(50466002)(19580405001)(2950100001)(19580395003)(77096005)(229853001)(40100003)(76176999)(76506005)(3846002)(5008740100001)(78352003)(48376002)(50226001)(230783001)(2004002);DIR:OUT;SFP:1102;SCL:1;SRVR:TY1PR06MB0926;H:localhost;FPR:;SPF:None;PTR:InfoNoRecords;MX:0;A:0;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;TY1PR06MB0926;23:LoN4SAfZkNwHb1giX5D3RhYG1MWyJrVLI+CWf9j+Q?= =?us-ascii?Q?MlZ7S8xIV6LJDvfymGsUNeXtTOXwBAQBAMShtcf3XAxGwfg2SPNLmrwpv0Sp?= =?us-ascii?Q?sor1GN12EJiwbbeHZXKIYKzvsxkcLYE+qDHKXs64m3Pns7YnK9nUqNjfEftv?= =?us-ascii?Q?ToN9iIZg0FRNq+edtJS4JjxrmYpqrj0k+uuso19rqHugRkfk0QW21C6E8XRj?= =?us-ascii?Q?Dn0cY7nStmqWeAqITEjMPJv6P3ps6769vtXZY6Ggem40gGBNMFLQee7t1RxT?= =?us-ascii?Q?t2+ARRZyes07ctkuvxMvjCqabwxCjnAqBPaAfLLHh1x6pRkksgNjaN0G3GSP?= =?us-ascii?Q?gF7oIehl8IhIGGrPhwuZumODhJGsybfM0lSrJoCXu5JV66k/T1PeqJ1pPUY1?= =?us-ascii?Q?EE+WDMifmelIScC4uZoayuPZw9aUCr2nXydRgwazDKoSYrDCAUgPsJAFJIDs?= =?us-ascii?Q?QJFdpvECyA+qXcVWEl8V95sErcxRvct0k3wHjES8xhEaRaAb6a+f163f/4rK?= =?us-ascii?Q?47+rNSg7slxNg6pNPYHqiAQflGCYjHDK6TQqV/nzLPxJ9gXdcH9zaY/r7GQV?= =?us-ascii?Q?kR+IAVG26EAJk7mLFbZdFS+spberPNQRimfWX2MBGpoe9fIn2ySKl9Wm+3iW?= =?us-ascii?Q?J0fHiRqEjxA3TNTdGqsnKB80uUK+9De/jcHXLmbE+y/QYO1HRt4gUEwy4cta?= =?us-ascii?Q?zjE4SXgnlcHvl2z+PWhLo0PSGwM4C1N1JKNguR6w1dgyHUxBshB1vD5hi4N8?= =?us-ascii?Q?dGHrESHf8O9i17yq5tfepMx+XBlt8DdnQ8tBgkfPSRFvs3OVan8J3rNCbsFF?= =?us-ascii?Q?PsxgfR5JeT4T5yKeENuYbCAjt9X09w3OYurJbpExUVWxCquO1WmKL5TfFOp+?= =?us-ascii?Q?HAUEab8m9+i38Hbgcm1L677AGUKk7jlhIW+sBoas4ymkRFuQW8Sxik5+s+HR?= =?us-ascii?Q?6oClObX95akFVZQo31z+LFpce1Opicf6adkie6hXkfo5tej0ZB/dU8DNepvQ?= =?us-ascii?Q?MpofLKGjhXlA5CjJAiYklq3qNDm4zqhgRyVUOAiwBPtW46aEGPqW3K7jH9+q?= =?us-ascii?Q?K+AR2TYLGedPSpTpIELNc+9qVO7b9FnRNb1T/7Y7G79KqdZIEArhySWlxodr?= =?us-ascii?Q?ikIVqPd9lU/cW04htzrz8o/2ilWvfjhRNfWyTzIiWxRGEc+o3m8vQlHDpul+?= =?us-ascii?Q?j7lsMF1gbCyYousW9aDJKTeVFZ5WFCgEKFF?= X-Microsoft-Exchange-Diagnostics: 1;TY1PR06MB0926;5:p36mcNyEZw/xGPVGqFdzn+8j1j4IYAeYIW4zHhr4IW4VfiEhfNSWE90VCG+MlMLoBn5XbuwAk2s6zHRXtc6LuKiYBHzSoLs3I7EwAHXp2U3T6+rEmMyI1uXIJ9eKlyaFCl/ZXDOtrBTPk95Uq70q2Q==;24:cl7EMelP3wo+jFi8s4xBj6hw8h+GAalTbiwxVaSEUj+Am+sZ4u7mZHpoFBwTUxBBCKQK2+qsCcnSAVvT/d7hOOwBmgZAljqJbXk7ReUlPIE=;20:vHn6c1tENBGUq9WJn2JMt2Y/LwBeDkA+EwpGGmKCQ0XueTrT9mO8OvpqdhFiCheuV/cYOIedcH/VNP7aagSWSpgDeLn7970gV9bBy0KceLKMwzmufzc36h8Z25jE4+U81U5AFQ9ATe/wjq1pqfeudjGDWY6bvCOjXLtRysEBPJ8= SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: renesas.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Nov 2015 01:44:54.1875 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: TY1PR06MB0926 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4750 Lines: 137 This patch adds support for runtime ID/VBUS pin detection if the channel 0 of R-Car gen3 is used. So, we are able to use the channel as both host and peripheral. Signed-off-by: Yoshihiro Shimoda --- .../devicetree/bindings/phy/rcar-gen3-phy-usb2.txt | 2 + drivers/phy/phy-rcar-gen3-usb2.c | 43 +++++++++++++++++++++- 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/Documentation/devicetree/bindings/phy/rcar-gen3-phy-usb2.txt b/Documentation/devicetree/bindings/phy/rcar-gen3-phy-usb2.txt index affa0f7..2390e4e 100644 --- a/Documentation/devicetree/bindings/phy/rcar-gen3-phy-usb2.txt +++ b/Documentation/devicetree/bindings/phy/rcar-gen3-phy-usb2.txt @@ -18,6 +18,7 @@ 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". +- interrupts: interrupt specifier for the PHY. Example (R-Car H3): @@ -25,6 +26,7 @@ Example (R-Car H3): compatible = "renesas,usb2-phy-r8a7795"; reg = <0 0xee080200 0 0x700>, <0 0xe6590100 0 0x100>; reg-names = "usb2_host", "hsusb"; + interrupts = ; clocks = <&mstp7_clks R8A7795_CLK_EHCI0>, <&mstp7_clks R8A7795_CLK_HSUSB>; }; diff --git a/drivers/phy/phy-rcar-gen3-usb2.c b/drivers/phy/phy-rcar-gen3-usb2.c index 2b5d890..ef332ef 100644 --- a/drivers/phy/phy-rcar-gen3-usb2.c +++ b/drivers/phy/phy-rcar-gen3-usb2.c @@ -12,6 +12,7 @@ * published by the Free Software Foundation. */ +#include #include #include #include @@ -25,14 +26,18 @@ #define USB2_SPD_RSM_TIMSET 0x10c #define USB2_OC_TIMSET 0x110 #define USB2_COMMCTRL 0x600 +#define USB2_OBINTSTA 0x604 +#define USB2_OBINTEN 0x608 #define USB2_VBCTRL 0x60c #define USB2_LINECTRL1 0x610 #define USB2_ADPCTRL 0x630 /* INT_ENABLE */ +#define USB2_INT_ENABLE_UCOM_INTEN BIT(3) #define USB2_INT_ENABLE_USBH_INTB_EN BIT(2) #define USB2_INT_ENABLE_USBH_INTA_EN BIT(1) -#define USB2_INT_ENABLE_INIT (USB2_INT_ENABLE_USBH_INTB_EN | \ +#define USB2_INT_ENABLE_INIT (USB2_INT_ENABLE_UCOM_INTEN | \ + USB2_INT_ENABLE_USBH_INTB_EN | \ USB2_INT_ENABLE_USBH_INTA_EN) /* USBCTR */ @@ -48,6 +53,12 @@ /* COMMCTRL */ #define USB2_COMMCTRL_OTG_PERI BIT(31) /* 1 = Peripheral mode */ +/* OBINTSTA and OBINTEN */ +#define USB2_OBINT_SESSVLDCHG BIT(12) +#define USB2_OBINT_IDDIGCHG BIT(11) +#define USB2_OBINT_BITS (USB2_OBINT_SESSVLDCHG | \ + USB2_OBINT_IDDIGCHG) + /* VBCTRL */ #define USB2_VBCTRL_DRVVBUSSEL BIT(8) @@ -174,6 +185,9 @@ static void rcar_gen3_init_otg(struct rcar_gen3_chan *ch) val = readl(usb2_base + USB2_VBCTRL); writel(val | USB2_VBCTRL_DRVVBUSSEL, usb2_base + USB2_VBCTRL); + writel(USB2_OBINT_BITS, usb2_base + USB2_OBINTSTA); + val = readl(usb2_base + USB2_OBINTEN); + writel(val | USB2_OBINT_BITS, usb2_base + USB2_OBINTEN); val = readl(usb2_base + USB2_ADPCTRL); writel(val | USB2_ADPCTRL_IDPULLUP, usb2_base + USB2_ADPCTRL); val = readl(usb2_base + USB2_LINECTRL1); @@ -270,6 +284,23 @@ static struct phy_ops rcar_gen3_phy_usb2_ops = { .owner = THIS_MODULE, }; +static irqreturn_t rcar_gen3_phy_usb2_irq(int irq, void *_ch) +{ + struct rcar_gen3_chan *ch = _ch; + void __iomem *usb2_base = ch->usb2.base; + u32 status = readl(usb2_base + USB2_OBINTSTA); + irqreturn_t ret = IRQ_NONE; + + if (status & USB2_OBINT_BITS) { + dev_vdbg(&ch->phy->dev, "%s: %08x\n", __func__, status); + writel(USB2_OBINT_BITS, usb2_base + USB2_OBINTSTA); + rcar_gen3_device_recognition(ch); + ret = IRQ_HANDLED; + } + + return ret; +} + static const struct of_device_id rcar_gen3_phy_usb2_match_table[] = { { .compatible = "renesas,usb2-phy-r8a7795" }, { } @@ -302,9 +333,19 @@ static int rcar_gen3_phy_usb2_probe(struct platform_device *pdev) /* 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); + if (irq < 0) + dev_err(dev, "No irq handler (%d)\n", irq); } /* devm_phy_create() will call pm_runtime_enable(dev); */ -- 1.9.1 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/