Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751998AbdLMGdN (ORCPT ); Wed, 13 Dec 2017 01:33:13 -0500 Received: from relmlor4.renesas.com ([210.160.252.174]:61654 "EHLO relmlie3.idc.renesas.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751121AbdLMGcB (ORCPT ); Wed, 13 Dec 2017 01:32:01 -0500 X-IronPort-AV: E=Sophos;i="5.45,397,1508770800"; d="scan'208";a="266234944" 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 4/5] phy: renesas: rcar-gen3-usb2: add rcar_gen3_role_swap_ops Date: Wed, 13 Dec 2017 15:27:39 +0900 Message-Id: <1513146460-20326-5-git-send-email-yoshihiro.shimoda.uh@renesas.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1513146460-20326-1-git-send-email-yoshihiro.shimoda.uh@renesas.com> References: <1513146460-20326-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: OS2PR01CA0090.jpnprd01.prod.outlook.com (10.165.51.178) To TY1PR06MB0992.apcprd06.prod.outlook.com (10.164.99.26) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 2a5f2937-bfda-4bef-e2e2-08d541f33505 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(4534020)(4602075)(4627115)(201703031133081)(48565401081)(5600026)(4604075)(2017052603307);SRVR:TY1PR06MB0992; X-Microsoft-Exchange-Diagnostics: 1;TY1PR06MB0992;3:fPPPG95yq3FkieqCYogV6mZ0H4pQTma0++CCl4/zEohJNKxfoZ9X49RLtzqtQ3MS891WRIOSGF8Yb6bkuqHZKdC/mqsH9cP7GXSEK/zQoBezEfA+/P0Kj6cUdO5OAUTjg5XjUe3mcjvv1i0uR+rWU3k/w88bIOBPX8qGf6yVGmBP965EaThuqzLfNA+KRT0iiFJfsTY2KMycoaurH8r7Am/VYz64r+SSd9o+LyZDFjPcaLFeS6399ylcufPUw+iF;25:AwBfRuwR9gDvPqer1kmEcg++5LfryMI+ey0hgwWjifR3f0S+pCjnUwfTUxEmpMNweQHC2zAVopeD7OSaPEa1eEWXCUT05oIWofdJGCtJ64tLuK0ABfbGSW93fkgU/bj1IO6sF4tPutrECtqH1gjVeWyFJh7Eek2y5htp6XE+lLomqLbAEDOVPuXqc5/Iv2F/nnSF5iOiZEKg2VBQ5i+R8c0QWOY+Lidus/g0XK+6uMNsK2wqdexDNZr0cPX4fOJdr1or9oeuDL4oZeEFhoigilt8JXPLEsVrzb77WQhK4Yb1smGojCciWIGyuxOYb3cXokcll0ot/MvPmmfxC1hyfQ==;31:Y2047t9Cc/Ij9qEHjeY40CIpkdvt04WlZyYA7RqTvFoIKQv2h1n4M3ZnWHfXa1xwTSG/oZPpYtFqzPS5rFLDbRlPFSWfc742U0s9I0FNvdziQgc/Zqn42CFsyECcfpAw+2OBwVr78vaY5U+y/+KUfJ+2tt8RvbiHXaN7Eyownq+NR/54DLd9tEK/01ZTq9xHcEuzoCJx23C3gaYY3qFx3zgUaohSEhBsyqSGjKj8FEg= X-MS-TrafficTypeDiagnostic: TY1PR06MB0992: X-Microsoft-Exchange-Diagnostics: 1;TY1PR06MB0992;20:ah4TAZvG58haRPAOyQ3GliqXKCnTyuyZjIFpLPrxKdtQ/5uX/lDSYtyM2qDuV5x9j7JFizMnzB22b0ecaUIkjKIo63cbD+j6rAzXh1fWZQ/RT3KQ8kOXiZih3B00y8Ym8kUQ5BV8ITur8qnZzjE9pqqvydKkwZacxVOWpGOQ3OYn19xaEt3g9Fo19vN8fucOHEUkiRJyyEAg+nmohlzovFZJFL3KzNOF0v8F7AG0SJAQ1ANLCARZzuTVHn76ocwMgokaa8e6NyH9UDd1gvIHzBUNDKpUdJK5Qw79q/iW2tEUBeLWfK39TQIWyYl9UyG2Zw4SEdhHp5v+Aj+hA7tCa4eu1fIOWFIz3cZcOv9dWfsJ6C8AAMHL1FcnjbrwxtIFHM9RX6EcTY+hWqKK4bfILFqCZzQRitkcjZUM8s9lxekUq2IrGsLUJSWz+YbgAg/IWdA+unw/YKpS/e+NZ/UEJTXiF7/OvEhfEwpIZa2VkiyEPyr7VGG4QXBzFTWavxmY;4:pTWIis5f8IpsclW7ikCeryRqrM+s3uazcykJBNJD++3hYcL5yCQZnlavj3nqlqABaS9eX89y++g3hr0jaY4T69Uc00JQKaYPwQIGG7zbv6fCgW9/fzcu0gb/ggCRWsoeGRWjEyZuXeKMnI8hSS5Nwy9cKzFOtiqGo3fqvYKfoGCYlCe5MyIknfRO5/iQKNVd88niT9PmMwUnC8+4k6AxyUQh4xHrZ1hToEVtumMzHtY1L/vRAxWlEWEr7rWRBZDxwXcOKJyZeLXCRxqwgVuENA== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040450)(2401047)(5005006)(8121501046)(10201501046)(3231023)(93006095)(3002001)(6055026)(6041248)(20161123558100)(201703131423075)(201702281528075)(201703061421075)(201703061750153)(20161123560025)(20161123564025)(20161123562025)(20161123555025)(6072148)(201708071742011);SRVR:TY1PR06MB0992;BCL:0;PCL:0;RULEID:(100000803101)(100110400095);SRVR:TY1PR06MB0992; X-Forefront-PRVS: 052017CAF1 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(6069001)(366004)(376002)(346002)(39860400002)(199004)(189003)(81166006)(48376002)(2906002)(76176011)(66066001)(230783001)(97736004)(5660300001)(6666003)(47776003)(51416003)(52116002)(50466002)(6486002)(3846002)(2950100002)(6116002)(6512007)(42882006)(107886003)(25786009)(8676002)(78352004)(4326008)(53936002)(36756003)(106356001)(68736007)(105586002)(8936002)(81156014)(16526018)(15760500003)(316002)(50226002)(305945005)(7736002)(16586007)(498600001)(6506007)(386003)(3720700003);DIR:OUT;SFP:1102;SCL:1;SRVR:TY1PR06MB0992;H:localhost.localdomain;FPR:;SPF:None;PTR:InfoNoRecords;A:0;MX:0;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;TY1PR06MB0992;23:OIdBR3oSOm9SIIx1NmkGIa3M1att1TWzRt1pIH9/0?= =?us-ascii?Q?UDja+7e63hbcDNpT6M2B6NFuwsGYWywOT+dnTQjRL1oJGN+WXaoDSRw3Mv3m?= =?us-ascii?Q?RSlM1d2lyZb59s8qAd5G28gUdgj9KSU4/KKRq6B9uszdPmCsSmGoUqbr/zJf?= =?us-ascii?Q?ajrtm2wtijezLR2gz0bwFGQQ609OnFU4PHkGBWm4FW4EvLMZfV1JC/9IeS3s?= =?us-ascii?Q?Gyx+233BOYZCw+CEZaRrrEotlHwhsZsTCsMTjuHIbXzYtwWcgg36kLRhmXaP?= =?us-ascii?Q?zZZLFuYt9CIls04JPi2nKCBiVKwmjeH5pl1I2oyenBmKTHce/Qw2YIZjBfgO?= =?us-ascii?Q?QWKrNGfAFAmTZxJIWyM44sI/V6yYHYfNrK7tPzm+GL9oqiRIID0ALrja5ucx?= =?us-ascii?Q?1AehkcrXPkBmOaiteleHrp1UA7h+VyW8N4IGEUjznGsJHOk/WrtCD4B0wGHa?= =?us-ascii?Q?ZAm6RsQ0EpkQ3/CluqXHtvwqhwXt3mAMgzahuscvYiYxMOhHXCkt+LZO8Lut?= =?us-ascii?Q?phuJ62jDPUken5LmVTaGxwgIb2mC+u6x90rCiaIZKsfbQW+7s92SdwRIPwa1?= =?us-ascii?Q?XsJ1VvZNmpQYmH9yXXmZ6/ELOvR9lkurLs3u+tN+KdFF6zWAbUrumcywKg49?= =?us-ascii?Q?c6o1klTZrE7AME848InFZcbJGChuxq6IEBBLWx4eltsAhZTK8NLOloR3FWKg?= =?us-ascii?Q?HSS2tC5Iy4tPUjhsNsRVq/A5SyW0yDCovdijDJow0d624Z9zHknpJ598Nofv?= =?us-ascii?Q?h7VcBm8c/9iqqJbHqcMNNp+ydYpKaZgyRlBfe9bXvi7oxFhXMCnKnX1qirOS?= =?us-ascii?Q?6zWgdKzS0LtZT9qpDWjqpOlcRmdU3qmdAj3Kuai/+VSzk6cba2NV2TT5FEXm?= =?us-ascii?Q?0G/Ojdlf7Nn4CqNknKAbwUM/1OjnYLuM2dZD4EvRPOPiiWEL9dzQNaAe4fPi?= =?us-ascii?Q?I9iWXHBsbDmdzrGkvb9beWBb+9yIMzKzgBJt2ksNVJ5y1LIVrdwGC4NGmElP?= =?us-ascii?Q?LkqA+VAKbTv66CGF3wKLQ54/aISFLeTWnvgFaXDmTF1Z4LLlqegRA45AsSvj?= =?us-ascii?Q?OhT9qhRQQilHLw1eMYmxvMabaQf9TIFprNEVA+u62JP1TdTaZncTPe6fB4Ky?= =?us-ascii?Q?OxyjiV/k19PBYaDZp+KZSWyCnKB4kOJ?= X-Microsoft-Exchange-Diagnostics: 1;TY1PR06MB0992;6:XazvJdkNMA/RqyK0jixzKnsP7mgFk02K9G+fNeivxoO2UhY1NXE2Zv25sPWGcfaivqtp62hzAUhLn20kG4axdns2b8zSjrRK3aSwYjQRjVOhu4R3iYuJ3Uiaj03bEgNb6YwTBaiIqD5DrbxSm/8uXQ8BPzbEvl9Iie6lETmcpUon6h6ZP0RSgoAcYLRn50975PLevvHrL+WMAJgSZHVzvlZjJUo0WVtD4w4bxLTNYcbUZWHIzmXnzG5bD/fggvZAWos5S3ESPXj5DqVVjJ5vsEwc0EjXqy8i8sfSFX23dSk0lwsX8N4UawRDW43zvCuf3LzJpHkULaFJ4DPfpY658vDCrMnTJ/tg6sIGM4MPujU=;5:Jwfy2D0WjtsPJ6XvCsVNp+/J28WawBWpo/1OFy3zWC6OrOFUhdtrX1U5AjVd3D4tpIM6dDscIeQAmZGEhHJoE3Vq7lgOD+FZQFnQ655p+9kEP7UrkWYfkkLQUhgpOhig/3oBB5VXZh1M5b3wOCbXKVAwrkkMSSU0QJKuaP1Gp+0=;24:eyWG3WCXbNbkY/O6L8otGhYPM+Y49kvM7TRXu8Jg/GtnQ3uYpYObpJvQ9bhjHaoJeHHBmwTTh+egsJHcvTWuI9baK0Uq1bcVcEE9tKhckIA=;7:6GsI7+kcyTlblvkH0RXncJ0XHcUjacHYBEPE6A6qm5VC4uhNZGwuD0Iv4d+VtMSRj9l7IbYqo6lNhgZ8schuNrP5nY+7PJaUIiVlDSsXWXuCmQ3ex825iD9XmMSei8umYcTjcSx+mT1BSU3DNEQWEgozl1evkxWmonbtm/aPWFM8rbFpt9ihp80qynkPVUFKRccUYi1VtgjEks72+xmpsqwVyKjhKADUiwb/ablc0N4PSSw/8FYWkulKiiCTcq3N SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;TY1PR06MB0992;20:URFH7L/kb1FVdPiKquBmiZkZ1ufDJChgGBKW/aJqT83bG5FWM2E/b626LckPqH+MAZR8Io+E1AUpz94AXKup/Z1ezUkwvbHxXkheXpSYkPuHmaPN2yYZnnUj0qW604fVwIQlWIDIx1HYWM3MTzw78Ill0TrZsW++9bRLvWtw73Q= X-OriginatorOrg: renesas.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Dec 2017 06:31:56.2885 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 2a5f2937-bfda-4bef-e2e2-08d541f33505 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: 4353 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 6d6f3eb..5e509a9 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 (*enable_vbus)(struct rcar_gen3_chan *ch, int vbus); + bool (*check_id)(struct rcar_gen3_chan *ch); + void (*enable_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_enable_vbus_ctrl(struct rcar_gen3_chan *ch, int vbus) { - has_otg_pins_enable_vbus(ch, vbus); + if (ch->rs_ops && ch->rs_ops->enable_vbus) + ch->rs_ops->enable_vbus(ch, vbus); } static void rcar_gen3_enable_otg_irq(struct rcar_gen3_chan *ch, int enable) { - has_otg_pins_enable_irq(ch, enable); + if (ch->rs_ops && ch->rs_ops->enable_irq) + ch->rs_ops->enable_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, + .enable_vbus = has_otg_pins_enable_vbus, + .check_id = has_otg_pins_check_id, + .enable_irq = has_otg_pins_enable_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