Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754719AbdLOFvF (ORCPT ); Fri, 15 Dec 2017 00:51:05 -0500 Received: from relmlor4.renesas.com ([210.160.252.174]:20651 "EHLO relmlie3.idc.renesas.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752181AbdLOFtq (ORCPT ); Fri, 15 Dec 2017 00:49:46 -0500 X-IronPort-AV: E=Sophos;i="5.45,403,1508770800"; d="scan'208";a="266460484" Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=<>; From: Yoshihiro Shimoda To: kishon@ti.com, robh+dt@kernel.org, mark.rutland@arm.com Cc: linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-renesas-soc@vger.kernel.org, Yoshihiro Shimoda Subject: [PATCH v2 5/6] phy: renesas: rcar-gen3-usb2: add rcar_gen3_role_swap_ops Date: Fri, 15 Dec 2017 14:45:25 +0900 Message-Id: <1513316726-14387-6-git-send-email-yoshihiro.shimoda.uh@renesas.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1513316726-14387-1-git-send-email-yoshihiro.shimoda.uh@renesas.com> References: <1513316726-14387-1-git-send-email-yoshihiro.shimoda.uh@renesas.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [211.11.155.138] X-ClientProxiedBy: OS2PR01CA0135.jpnprd01.prod.outlook.com (10.174.152.29) To TY1PR06MB0992.apcprd06.prod.outlook.com (10.164.99.26) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 41586eac-0b3c-4702-916e-08d5437fa290 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(5600026)(4604075)(4534020)(4602075)(4627115)(201703031133081)(48565401081)(2017052603307);SRVR:TY1PR06MB0992; X-Microsoft-Exchange-Diagnostics: 1;TY1PR06MB0992;3:baen043CuR+aMJBGm7irVQ/jJNj3EchqzWjdmlPpt2G5oyIrLwgdJGoS1mPMx40wLyyXf1JLG3OhT9fy2jaR7Eb+xYBWd/o4rMRbNwJwsuhAVC1zoftVKXzCfN2PDGWhUUuW0fTiucN9+LidTw/2A6JBDTACkTLxCtP3dOQNy2zfe8pVtyG4YS1smVqxkBJHovdjmgECzhjwdE5K43IxlqWg9RUI5lZSvwlQKc4eUciqf7EbkPLXbNwiFerWxK5n;25:8sMkutnEUiC0RBin3k3+Z2sp4p5tYpomEXm0y9GN78HvLPEKLf9JFbZvvakCkbCcPO5JzmC+idMhj5ISC/wNuCOBEJvfs8dIZBsm0as3HgH0JLkOmSowfaaPEqreq6J0qnZpRtp8LLwbZjwGEWIlDSbNpUAur2zqCBZ2pQZ9S44US7lpptpKY5xX915+awj7wJCtH7WuoZOre9l9rgtJzitNGKaegqyRjy0xiOuO04oFQM/AsX6f20ASV14YGCr0XBYFsEwgWGxrxyqEOdkxSlhEzYasNPE6q41wpCfYao8jJmH5QIBnpsUl4sOrGF28SHmCOgnRH/DMIr4wz3D98w==;31:mkm6pLDSdF4jwWY8o7RXe5bjGzbW2tx3KYsaGMuWVjuUrgt4L/Qeh6/4MPmg00jDHYNMDg5rgrMLG4RNReAb0zgd9x6uIAF5NPDuowyYPh/0yJ6qeVlrYtcdSYUK6hg103iV4cyDhj/FLOPlYDaS0CWLj4j5w4rwieJrkUezxb0yHi53ZugjhKegD/HL9ZORPDSZ4MNrFLCaycqoEbanxlY1/WpVJgmknZ4uRrmm99I= X-MS-TrafficTypeDiagnostic: TY1PR06MB0992: X-Microsoft-Exchange-Diagnostics: 1;TY1PR06MB0992;20:LTyu5El5xUL2Kx/HE0zOnskmx9AQBWNboclP/iu0RBn3ArHK3SW9S1JpqH+lPPtO5YyMNLzhtCqzsNutZLVMzk0M0JrIP5G1bd9RVAeDeXo6IR5lQzYO9/AdNDjS+MIadG2VpHXJpjJc8TPQL8iFB8Ibkjf8wI7S66ZdtCHGdOXiDDzyV5QVmoP9La89jdpWQe5MEXAAjRR2CfMz1X/CdfpGtaaki722RDdysaExe/xQIIHYTe7zmRdxZK28DuT7uvXmA7vtOusgnNpMX5NAbplMlLy0JIrjikjzPMYc5eG4s53WgHspTQkk3jqOEKkF2HrIlF2ua9TTZpwlUjrrxJtW8UzLBXAisxPmttWIap3UiG30+xemT/7S+Qq2vpN28fSPKv0iuclxEANSBFblatGxLLtXNaQxc6ywO912zkmjVp4VQTn9fEGrTZEZa3YulMFVf/cShOj26bFqo38FA5ZW0FeL+Xl96e/CQaQN/ueFZgT30jBED4uZY98JdGyG;4:Gu2aKINtn54FBFzG00zOBmVUaiJyv24Efd0NhPHc1uOJk1ZJKcuG0InSEXCqO8K9RUFl9tJSUR0J5Q0T9U7ip7JbihxPTePX6NmfLbzFkrvWzkmVRxrQjXxKh6X5n59GuCMbD8w4/sNIAofRCJA3F9O5WmJf+aqgP1bkHQrCnXLR48Z3+caD1M/OsInmHbRGeS4WCWmONdRwkoQbWrNEnE60coQMPKPv24YAJHCsbryRblV6svhappycn4neBAwYKoqyrHDkPD3BtRwcVzoTTQ== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040450)(2401047)(8121501046)(5005006)(10201501046)(3002001)(93006095)(3231023)(6055026)(6041248)(20161123562025)(20161123564025)(201703131423075)(201702281528075)(201703061421075)(201703061750153)(20161123558100)(20161123555025)(20161123560025)(6072148)(201708071742011);SRVR:TY1PR06MB0992;BCL:0;PCL:0;RULEID:(100000803101)(100110400095);SRVR:TY1PR06MB0992; X-Forefront-PRVS: 05220145DE X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(6069001)(396003)(366004)(346002)(376002)(39860400002)(189003)(199004)(78352004)(16526018)(305945005)(68736007)(7736002)(53936002)(48376002)(498600001)(2950100002)(107886003)(8936002)(50226002)(66066001)(76176011)(51416003)(15760500003)(81166006)(6666003)(386003)(50466002)(6506007)(97736004)(2906002)(52116002)(47776003)(16586007)(81156014)(8676002)(316002)(3846002)(6116002)(6486002)(5660300001)(106356001)(105586002)(6512007)(4326008)(36756003)(25786009)(230783001)(42882006)(3720700003);DIR:OUT;SFP:1102;SCL:1;SRVR:TY1PR06MB0992;H:localhost.localdomain;FPR:;SPF:None;PTR:InfoNoRecords;MX:0;A:0;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;TY1PR06MB0992;23:c7QYsIp6wYxIZXjtBPe7k2zXL4ZHJys2GajafB3CQ?= =?us-ascii?Q?CPfM+SM13HfD9xXYiAAv0GwFsZ4bAFRe6ONqiOK3yONe58HbL19bOq4fsaqu?= =?us-ascii?Q?xQIiyq75Xu0WSCScH+YYOTdImvr5MCo4vhf/5vV4cQvFg7oFkBUVq7ZKeJi5?= =?us-ascii?Q?RIAKwJ+061ixpZ4vHUj9Zfunx4Z2/Hqbt5RWMlNXwn75BQSPwoXM1nhmbyMj?= =?us-ascii?Q?OyCGgCuiUCZPt6Hi31ItxVUWE3mj0BP0yYwq6Qona8RMiL/WlyheJnf6PMF2?= =?us-ascii?Q?1DvRQ70QjbpjfjDAz4ufZvnrwCDAMxr2PbirWaCWGzkn98g7GdCFqwHe7xWO?= =?us-ascii?Q?qZP3jQL+vKPmnoommjbIQwm8OG2S+mdVchQXaSavkmk1WwkOMg/LdGW+vcMH?= =?us-ascii?Q?y/9c7RhACBBX+g+DxjwPeKAedJjVQQRO/ane84XAFs2kbuuHcOSApohkiDTd?= =?us-ascii?Q?JU3fUu9ie1clb/BooDcMZRMChj7ub3hC1wyXrEiMbju3LZnRigZGncnoaqXG?= =?us-ascii?Q?Lge7388bHo07AtZ/rI0HA+ubqQyxDqDb9DxOJt+mJ2Ai46q6g14NOdXq0GEa?= =?us-ascii?Q?Y0dHO2zJPZ1k5vHhn1xNjPtItszDKH6tEolk7a40IdO9lAwOY6QAoonTKkkS?= =?us-ascii?Q?P16me5mMP6MNSWIVdH+L2WN8uCfs8fHOLGRSbISrDfB4t6kfrfEUP4x2c/gX?= =?us-ascii?Q?TeBhevKZZbirtP3VmG04B0anMaYLwhoOfSmEpNYsO1VM4XxJ+YbhkgHa+GgN?= =?us-ascii?Q?ejCIDQ41yxer6OERTrDd4K9EpuI6N54MA/hMEBVmPCLrlY0k4uuG83Axwhjy?= =?us-ascii?Q?ZRwPK9q0UVuQH8mQ+GUJY5dG7odevtDC2J0ObtJMiAe2LxzLeahQq153cyUB?= =?us-ascii?Q?ud2qx5UaxV89HdZSHQQ38M7mSCnuWOWcUo07ZDfYdyOHKI30esNTYrofU+Iz?= =?us-ascii?Q?T+Gh3kyCapMcUzSCHPrejeAsER2axLhhSG/38e8tnoJ3xa3qhtIlbqSHo8Dz?= =?us-ascii?Q?hfZatKBWDNDH1MXLz8lukXDkTjkhVWPycW1jnIKnuHmDHFnqnQQcx3FMi0wp?= =?us-ascii?Q?IfGaeriZ8iv0UIYl6Svgbr/FPbiEy4E2w3zs2D5y4T76wY2iJCX+rEyRpTqm?= =?us-ascii?Q?9YvLajpEU5I970m/QSc++cGJl6n8hZwyQ3SXN0TmehVilKww5Xx3g=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;TY1PR06MB0992;6:Y6+M2QduOT2sNhVqdZd3QQydBiMEnR9z3o29kIVFze06BIJQAhUkWo36Gf/ftmtTRA6GR/MLZmczzfe7k50/wqVOVwCX0lmpbSkdt1Q4y9ejVhywJ+eHEPo1WU4OIqvaB3F+WXvizz112pb5SUGJDKRLxpM+TSjxzgELHe7HQd0dzzOrfzeiRnDd2eVnyLuUSl2Xa7J8iyhM0Sl5nwzT+20eQb0X6e5bVQw/0Ky/lZ9HoiPpi9kp1+WebiRTyVB4aN5nOI6Gs4dH2P2MWG2FVjNbyGNDAKEbi8DTqWD6CepNnrI5qDjEtlKQ4EZEInRcP/h8bOzfJtCa5UhQRK4IdrLGHd8VRfCh3i/9oZOIVCg=;5:53u80mHXExoDClN373yfI6b5YBDeNoxRa7S+M7GL3KcK1EzYOphQTtRmIbpVRttxdMydr1qcH0v5BGR79BueZOBjNeg1RcQBTOmTieQ7GaATHtolWIUMluETPP51VSCJg5M6L6oaAJpn6CWBMJn//fUWmk8tibhdNQMIU2P1lH8=;24:BwSLr7Q8/YFYdPUE/vW3J+uft5VpEeBD3/DVXdanrofq3U/hBOuAGNI/csDg6Da8PWxkAu/7JjIItPUMoMvHaWW+iTNWlAx0llC1skGXPPo=;7:76PY4D5DjVvFptsf4a+qahRtmgfDFE7zLdOIlkG+8bhpMN4YVg0eqnjdXi6VopLYpVkKuEmPECJr0CvRqE1oQI6mCzW9pnvzHo2oOrtSdzqEWVNebqLr8QgxnvUa1ei0kS48GVdT8mGcWzh16QvER5RFrnaOH5/D4XqXxLsp6ciV65rSURGbClnK7Kyd6Y6NoQMONXhJIQR/mxmtkmUOs2Mz31uzin3PVict1fCfgc2LapycNxCpU5qgE2I/SR1v SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;TY1PR06MB0992;20:OvDJlOhTqSoyB2njERAjiA/plVHj1a91ZCl95cQs5PfECtg21MXday/hb3DbbrLmPIgXi3Qs/uBjpACj83aEIEPEel2/dCnR5m5RSxf00FT/VpaF2SG/B6mMeqyYJCq+Pay0nqkaS0ZVwojKkmK/Y5gjp6pdLPJPtHtnvNhzm+o= X-OriginatorOrg: renesas.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Dec 2017 05:49:40.7896 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 41586eac-0b3c-4702-916e-08d5437fa290 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 53d82571-da19-47e4-9cb4-625a166a4a2a X-MS-Exchange-Transport-CrossTenantHeadersStamped: TY1PR06MB0992 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4377 Lines: 135 This patch add rcar_gen3_role_swap_ops to support other feature (e.g. gpio handling) easily. Signed-off-by: Yoshihiro Shimoda --- drivers/phy/renesas/phy-rcar-gen3-usb2.c | 51 +++++++++++++++++++++++++++----- 1 file changed, 43 insertions(+), 8 deletions(-) diff --git a/drivers/phy/renesas/phy-rcar-gen3-usb2.c b/drivers/phy/renesas/phy-rcar-gen3-usb2.c index b121f07..f470fb3 100644 --- a/drivers/phy/renesas/phy-rcar-gen3-usb2.c +++ b/drivers/phy/renesas/phy-rcar-gen3-usb2.c @@ -83,11 +83,23 @@ #define RCAR_GEN3_PHY_HAS_DEDICATED_PINS 1 +struct rcar_gen3_chan; +struct rcar_gen3_role_swap_ops { + void (*init)(struct rcar_gen3_chan *ch); + void (*set_host)(struct rcar_gen3_chan *ch, int host); + bool (*is_host)(struct rcar_gen3_chan *ch); + void (*set_vbus_ctrl)(struct rcar_gen3_chan *ch, int enable); + bool (*check_id)(struct rcar_gen3_chan *ch); + void (*control_irq)(struct rcar_gen3_chan *ch, int enable); + irqreturn_t (*irq_handler)(struct rcar_gen3_chan *ch); +}; + struct rcar_gen3_chan { void __iomem *base; struct extcon_dev *extcon; struct phy *phy; struct regulator *vbus; + const struct rcar_gen3_role_swap_ops *rs_ops; struct work_struct work; bool extcon_host; bool has_otg_pins; @@ -203,17 +215,20 @@ static void rcar_gen3_phy_usb2_work(struct work_struct *work) static void rcar_gen3_set_host_mode(struct rcar_gen3_chan *ch, int host) { - has_otg_pins_set_host(ch, host); + if (ch->rs_ops && ch->rs_ops->set_host) + ch->rs_ops->set_host(ch, host); } static void rcar_gen3_set_vbus_ctrl(struct rcar_gen3_chan *ch, int enable) { - has_otg_pins_set_vbus_ctrl(ch, enable); + if (ch->rs_ops && ch->rs_ops->set_vbus_ctrl) + ch->rs_ops->set_vbus_ctrl(ch, enable); } static void rcar_gen3_control_otg_irq(struct rcar_gen3_chan *ch, int enable) { - has_otg_pins_control_irq(ch, enable); + if (ch->rs_ops && ch->rs_ops->control_irq) + ch->rs_ops->control_irq(ch, enable); } static void rcar_gen3_init_for_host(struct rcar_gen3_chan *ch) @@ -271,7 +286,10 @@ static void rcar_gen3_init_from_a_peri_to_a_host(struct rcar_gen3_chan *ch) static bool rcar_gen3_check_id(struct rcar_gen3_chan *ch) { - return has_otg_pins_check_id(ch); + if (ch->rs_ops && ch->rs_ops->check_id) + return ch->rs_ops->check_id(ch); + + return false; } static void rcar_gen3_device_recognition(struct rcar_gen3_chan *ch) @@ -284,7 +302,10 @@ static void rcar_gen3_device_recognition(struct rcar_gen3_chan *ch) static bool rcar_gen3_is_host(struct rcar_gen3_chan *ch) { - return has_otg_pins_is_host(ch); + if (ch->rs_ops && ch->rs_ops->is_host) + return ch->rs_ops->is_host(ch); + + return false; } static enum phy_mode rcar_gen3_get_phy_mode(struct rcar_gen3_chan *ch) @@ -350,7 +371,8 @@ static ssize_t role_show(struct device *dev, struct device_attribute *attr, static void rcar_gen3_init_otg(struct rcar_gen3_chan *ch) { - has_otg_pins_init(ch); + if (ch->rs_ops && ch->rs_ops->init) + ch->rs_ops->init(ch); rcar_gen3_device_recognition(ch); } @@ -425,9 +447,10 @@ static int rcar_gen3_phy_usb2_power_off(struct phy *p) static irqreturn_t rcar_gen3_phy_usb2_irq(int irq, void *_ch) { struct rcar_gen3_chan *ch = _ch; - irqreturn_t ret; + irqreturn_t ret = IRQ_NONE; - ret = has_otg_pins_irq_handler(ch); + if (ch->rs_ops && ch->rs_ops->irq_handler) + ret = ch->rs_ops->irq_handler(ch); if (ret == IRQ_HANDLED) rcar_gen3_device_recognition(ch); @@ -456,6 +479,16 @@ static irqreturn_t rcar_gen3_phy_usb2_irq(int irq, void *_ch) EXTCON_NONE, }; +static const struct rcar_gen3_role_swap_ops has_otg_pins_ops = { + .init = has_otg_pins_init, + .set_host = has_otg_pins_set_host, + .is_host = has_otg_pins_is_host, + .set_vbus_ctrl = has_otg_pins_set_vbus_ctrl, + .check_id = has_otg_pins_check_id, + .control_irq = has_otg_pins_control_irq, + .irq_handler = has_otg_pins_irq_handler, +}; + static int rcar_gen3_phy_usb2_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; @@ -493,6 +526,8 @@ static int rcar_gen3_phy_usb2_probe(struct platform_device *pdev) int ret; channel->has_otg_pins = (uintptr_t)of_device_get_match_data(dev); + if (channel->has_otg_pins) + channel->rs_ops = &has_otg_pins_ops; channel->extcon = devm_extcon_dev_allocate(dev, rcar_gen3_phy_cable); if (IS_ERR(channel->extcon)) -- 1.9.1