Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754498AbdCMXkA (ORCPT ); Mon, 13 Mar 2017 19:40:00 -0400 Received: from relmlor1.renesas.com ([210.160.252.171]:40345 "EHLO relmlie4.idc.renesas.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752885AbdCMXjw (ORCPT ); Mon, 13 Mar 2017 19:39:52 -0400 X-IronPort-AV: E=Sophos;i="5.36,161,1486393200"; d="scan'208";a="237391476" Authentication-Results: ti.com; dkim=none (message not signed) header.d=none;ti.com; dmarc=none action=none header.from=renesas.com; From: Yoshihiro Shimoda To: CC: , , Yoshihiro Shimoda Subject: [PATCH v3] phy: rcar-gen3-usb2: fix implementation for runtime PM Date: Tue, 14 Mar 2017 08:37:40 +0900 Message-ID: <1489448261-4477-1-git-send-email-yoshihiro.shimoda.uh@renesas.com> X-Mailer: git-send-email 1.9.1 MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [211.11.155.144] X-ClientProxiedBy: KAWPR01CA0069.jpnprd01.prod.outlook.com (10.174.229.157) To SG2PR06MB1696.apcprd06.prod.outlook.com (10.167.82.138) X-MS-Office365-Filtering-Correlation-Id: 8508a819-13dc-4a3e-3d20-08d46a6a3b5b X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(48565401081);SRVR:SG2PR06MB1696; X-Microsoft-Exchange-Diagnostics: 1;SG2PR06MB1696;3:RA9mNQPjq+lB9PNGgPPjIWh1ueqxGuzu6wk3b6siV/npW0f2vYsU/zx6PMgueHa8agbJWVsvs2OPV/73mdOcMQqXOSBLrfklUmNJBXQnaXVs1j2gd//uhSuCNSQqyFAyzx3UVn1w9c9l+5zaX8TrNUg/soZzfm4NyE9yiUV7v6yqyTPjcX37Oa+KFxwTUVJc2f90ZgRWnRzEGQJ0FlRzMiwKFJrYV7zuhxu1pl0OOS4DByPWDD/IMlfdDgmukZ9f236Q8nfob8BQyJQtzVNSCKG2YYtMp1/z+o3N+pQbv1A=;25:nTQNKHelo/kxPh4cryYc3efHzUJU9TZ6kU4HQ/zj8ta5M7Ud7RwGPe5WTQ/kbCs2rnwtSzcqPq1X4WYPtXNEUeM1gwLOvKgmzFBQUF5daglChfO++LQE/lA/7d9ZoSyIY9xtVnhvwscF0QbTQhAoUPgrdvdbh6dmfbxYJSnb7NhyuqWoWGjs7vJ1Pi5++5t6npItmyuPE/7v9rJ1GiJ5gPAqj+vfaT4w1x7X9tn2e8SYz9T+ulrJjDm2N8YfvcOqY+1wMVpLNKbQ2UuJT8bnTt9yT4yiI7lhi2WvaKGPn1qFtXMFk3tTilLaPHSoLUOk/LFDRD692SiLANrlXZSY0glJcvO3csQUimEJ516gWZanLaJ8Bh2DlUVJ8i19bMqIUDjpW4FEbAOsuJH1EFOB0h3Mks2nY86MI0KsBCdGG1WoqYzGc03Gzn1swPF7gzL258exVftaMO+z3OBaJxY5rA== X-Microsoft-Exchange-Diagnostics: 1;SG2PR06MB1696;31:b5wXoPS2nHX8IKfZwMkECWlPB/KUEAHk6TWWhY/IMXuJzKigK+HwKerBPb2mz5M6JzVZpKy0N9OgK6LJvFEUySwsibUL0fU8KSi7EVfmsQatiKTtdktbfn0uxIG2iOdXybtxZGlIMA9+EHVSLkODQszeLipbb4yml7eoyv99zbll/Fc4fG83LukpgOd4NBn23Ov7Urbm+uAkEoypnevVDEgq5EqO/feDjhBo7goyERHgN7PdUaLrbAjX3lH+M3RA;20:xkEwfPMjVO0n79LfimKcLrbMjjorGu9r7otTBkjG0vVIi524HaUIj8rqmlCdOxTQPkXKCH6fmCbw3VXJ+ATPzJcquv2IA3ro0boTSpATcDhD/oY9yz8hKxlTmjUpFl908kKm/QfVufPLnziy7HY58P6zC1F/PSw+TuiMF5DDkL9Ski6iYCjQwuMZH8P+BqZDOR6/ooU8RFyVxcfc/eON3DKxrGSBHBv0hP61om6akyUmBKA5dFPn5IWzXRWjqeafwoulkGGRnZUYwv/HDPYMKz4M0kfuJkYIq08JOu98VpKddStKdtUnbxPgekAAZfnFm/SxmWD5AAcnmPFXGM1uFOHFUMcc939EJ8zrJTIVgmhMYaFLS0ewZw7o8MpJbIbMtt7NPw0Y7R/wZGC2n7xnoKM/JLA+/sCQu2+NuMTFVmy+U2xCAvpbNVvryv4dXlC8IrqwAzKgHBRACpoU3gDpYERW4iJRH5QOX+ICsPWfolWXGGbmZOdvfN/QGirWvDqc X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040375)(601004)(2401047)(5005006)(8121501046)(10201501046)(3002001)(6055026)(6041248)(20161123562025)(20161123560025)(20161123555025)(20161123558025)(20161123564025)(6072148);SRVR:SG2PR06MB1696;BCL:0;PCL:0;RULEID:;SRVR:SG2PR06MB1696; X-Microsoft-Exchange-Diagnostics: 1;SG2PR06MB1696;4:59p7qwpXWRo4VH1f7kllZ+ZRyCDN4tPvvgHuD9cxSWGtSp6vO100PXh2N2XAde24utiOyZGZKobo3pv3nJI1bwap1DLVz29dxF4+jMfYZ5HT4cXHHOTFnLUqrvUULMwMBYhjPSwPqK97PPJh/ZI+Y+hqoaXiQVIX6cZHigYLWQR7celXaXwHP7lPZCz44uvTaH1rvrS7HtL79D31rkituyKDJoieVc9XsOO+k9MJEMDZpYOIpbi3XHdrCWZOBB4PfOTBuJ65Trf37UYqq7dHCxBRWiBwwVEKYx6qDX8uJqWshUqRY+6irix51u0KUyQNijGOpftq/6GdcoIlr4Visy/xv5UqdYmEcVGGEfIxwjT2jcntm7MkBB1qhmoIb5zGK0GmK4mTW1ECm3WyomzaIOGapEDyRfjGycWtbiWIJdoGlcQClTMzj6oatlyKhLkGS50Rie0/UXJiy/+3V84Vdr2r0D3/FDavAucUHaqzcw0T0wIKb+JJiwQb0DqdhYeH4l7xxHyBe8yZ48I7U2wp2pPxAU2Z4+3JqZ3MjgVUcTTIl5nAKTXUz8qchqGyietDLLa6wWT2IYxjuer8VZ4G+ZUTHTXCYKlcrWQ2K6gPsVbGjct+PIg8qEKfXQw23iCE X-Forefront-PRVS: 0245702D7B X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(6069001)(39860400002)(39840400002)(39410400002)(39850400002)(39450400003)(43544003)(23433003)(33646002)(50986999)(6916009)(6506006)(6666003)(42882006)(5660300001)(305945005)(81166006)(7736002)(2351001)(2906002)(25786008)(47776003)(66066001)(6486002)(110136004)(5003940100001)(38730400002)(107886003)(78352004)(6512007)(4326008)(48376002)(54906002)(50466002)(3846002)(6116002)(50226002)(189998001)(8676002)(36756003)(42186005)(230783001)(53936002);DIR:OUT;SFP:1102;SCL:1;SRVR:SG2PR06MB1696;H:localhost.localdomain;FPR:;SPF:None;MLV:ovrnspm;PTR:InfoNoRecords;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;SG2PR06MB1696;23:ucZuDHLbWGiD7XX4L6+zzOCF8A7irFCROfzZtdOL5?= =?us-ascii?Q?5fgyoOtEkFTUKqguIkYqCfcrzIFdfxYvI6AIScOffC7bpGCkSh3cAg+LXWdu?= =?us-ascii?Q?ENXNUmCOWKI5JJa8Se2GWiHDNiP0IWcE3BnT3m8kf4kTwfqYMxjknXLks6W8?= =?us-ascii?Q?BZrvWoc4I5ius1oF0BC2PQnqs2nTdz/wxunonQWXhIpEwbjQmZV77uJjURJ/?= =?us-ascii?Q?P6p3IDN5Bw6EHccraYs1eb84fYuY3C07w+YctWZNnqeCelqmw4QKPJ1U8vqj?= =?us-ascii?Q?SEZFaOWOB/4+AkOgXSxDKzf0pqnwsHNKaf0iGFSPhKuuA9Cv9j5KDWAh7EGQ?= =?us-ascii?Q?jOjwd9c0mzC/X0R7fNwFq7873aIxkaRwDOyzlUnOk0FQzo4G8Y3qhLGMn/Iz?= =?us-ascii?Q?SK0g9wAa5tbvPF+wktpSsQIfazD15GgKhanU8KbXqDx06zQ1Ic8Odk4SWcxF?= =?us-ascii?Q?+v5mDhIOgYBkT8DmbFdBYARLPQW1YLwwW2ZxQZdYWu7TJox7E/K4iGvB17Od?= =?us-ascii?Q?PmsUH9HYwT4kIhlRjL4Srbi0cOyGii+RVz6yeIeCZaJDvM4bHWVTz31rsTip?= =?us-ascii?Q?jVX9ziClad3dmrwd0to5isyjj+qHEwTi7S1+hnn10Tt5mtbdxz3iLBxMdRKt?= =?us-ascii?Q?ZVKjMeHhuwbTXF1LgAHD3iv5Kpu8N5ZWEbi919tdQwAZ90pHdgn7Yrme6OQ9?= =?us-ascii?Q?DfG0Laa9oxwmkLXiUiFFCy13ldo4UxiJa0EDx12Pk0DwJhUgxc5FeIWzAICo?= =?us-ascii?Q?+sIhhpNU7GqEAQ5riK9TJGC7o5/JoBVU2Y0hGEzD/K0Ij4xLcruuPka6e6xJ?= =?us-ascii?Q?Yfbd/an7ZOwfAWJOria0frfwZhagQgpahVlA2KUALR8J0wdk5VfK/h0uQGH/?= =?us-ascii?Q?P4wI8Fq/FVLUn7iFQ2kfdcU1nWp0mmArDvFXbHxx0u98qxvuvuEwc0MiJ8/O?= =?us-ascii?Q?CKfygXUNJFsdfUq6JRxrO1L73kXkmERXZPLz7eM0v+vXqvYofBltOEgG7NfE?= =?us-ascii?Q?RLDlRG/LLwi1JddA8tHzIuiX4ZbLkJ+07QvV/NMS2wZTGq4LhpyX9yAc2Pwd?= =?us-ascii?Q?7Y1WElgm/MoT2xqUVuen28GfEERtWMhPELFMWOcwj38ePOOknRFvQIZLL3PM?= =?us-ascii?Q?uluNtwn/5w=3D?= X-Microsoft-Exchange-Diagnostics: 1;SG2PR06MB1696;6:0w+O8c6pYyBWMdvuL4PFs57LsH8EqEYJPFthdzyGUiIM694amSFfeOlBpJ0Ei55hrdIjx5C2zWZwdjXvlVz1cXlQTpRQlCx8PILT8w3eYwcmudjmHg/k0mMKRZa45A3ui9J6Hvx8Uwpp7z1x2iA14OabjNYcK2OjfqUxCYjm4YuMzmKeh9XigT9iT+pQ31+RLL1Puye/GlM0I8oHg9Bc58LttJ/9YYdduIbO73qXoPP3tqu19UARi1IYXZmNDlHmDwCfUP0a20ShuroKMe75WgsNj0oj5SYClBJAvkSrTyTZyhLwI+5lXhd8dDi0/+zBJP/1CQKa+TB+FyUlCPCq6KfFI8hrkEAobx7wRpPF/S2dAf2XI3zlVluXiOf/IyhWSNF8IP0iloP1pxZVzcD/kbtDV8ZJSNOrkM8bQolWbs8=;5:3NHnuFpVNRV9iz0Khi6VOZLUMYdalRTK2210f9ihIeRWU2zbRUY6HM++pXUsHQv8us9tNpndxplLxq5RI30ZxXE0pf/1IXjCgYVMuMeNsBFXFNzVKJuXrrxcnQQTr2r98szPEkaIrfsyKmKENJplDUxrVVcykFAXmJBsl4UhlJM=;24:EO4wQOhCBO5htJrtGZ0Mjfk9qujc4Ve6xR3IUSEeTWNj7RxWCNSjsBcemKl3Kb/PLjBGpdw9YAE26HmO+dKe/yDPFSWGHnwvS4tQBbaJTXY= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;SG2PR06MB1696;7:iOF6Uqkndh6s2ZrVT9E3juquSj/mQHZlk16TSxRMoY9JxraIN8lmX8MIhG79O0ahBN34jHzBCCBZ+Aaqb4ATesDvJ0+NK8p2GKO6iDMEzUpkaIHkErvVHejyOmwJO7t4HwdsUEeTpOyle3lQ6Fin1jCImGroQjFE5QgxFI/i23gn43934E3h1hEZcMA01RnD7hTgvRlPtlosG13jyBDfSSWD6Td0kWBuZhKTtTWWj5CyUcu3A9EpTcRqSy+Nff33Wb44LqdQmMhi9wck4Rg2q53vHw/ABvsqucorKVo7jM+BZb0zcy5vZzwVEtlItrSpo9aXPjGNLZcYDNyl9mzpzQ==;20:GERa9RP9fMpP7YU/HfJzJmMkgPB1FJ+Thtl8bVC+zIOQvmgaM+YM3yquiZmbLQhJMK2lzWhKUj6OKtLm4IAXluCPpuUEdXLOhZ84FnSIru9HlVgJwY3QyunVsJ2vuWlPoLLHeUxFy7ft1tr/xII0RoLaN0sImjUzyNYw28TdTGc= X-OriginatorOrg: renesas.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Mar 2017 23:39:45.6151 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: SG2PR06MB1696 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3133 Lines: 104 This patch fixes an issue that this driver doesn't take care of the runtime PM. This code assumed that devm_phy_create() called pm_runtime_enable(dev), but it misunderstood the dev_phy_create()'s specification. This driver should call its own pm_runtime_enable() before dev_phy_create(). Fixes: f3b5a8d9b50d ("phy: rcar-gen3-usb2: Add R-Car Gen3 USB2 PHY driver") Signed-off-by: Yoshihiro Shimoda --- Changes from v2: - revise the commit log (s/pm_runtime_pm/pm_runtime_enable) Changes from v1: - revise the commit log (s/the own/its own/) - simplify return code in probe(). drivers/phy/phy-rcar-gen3-usb2.c | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/drivers/phy/phy-rcar-gen3-usb2.c b/drivers/phy/phy-rcar-gen3-usb2.c index afb4d04..54c3429 100644 --- a/drivers/phy/phy-rcar-gen3-usb2.c +++ b/drivers/phy/phy-rcar-gen3-usb2.c @@ -20,6 +20,7 @@ #include #include #include +#include #include #include @@ -395,7 +396,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; + int irq, ret = 0; if (!dev->of_node) { dev_err(dev, "This driver needs device tree\n"); @@ -434,17 +435,24 @@ static int rcar_gen3_phy_usb2_probe(struct platform_device *pdev) } } - /* devm_phy_create() will call pm_runtime_enable(dev); */ + /* + * devm_phy_create() will call pm_runtime_enable(&phy->dev); + * And then, phy-core will manage runtime pm for this device. + */ + pm_runtime_enable(dev); channel->phy = devm_phy_create(dev, NULL, &rcar_gen3_phy_usb2_ops); if (IS_ERR(channel->phy)) { dev_err(dev, "Failed to create USB2 PHY\n"); - return PTR_ERR(channel->phy); + ret = PTR_ERR(channel->phy); + goto error; } channel->vbus = devm_regulator_get_optional(dev, "vbus"); if (IS_ERR(channel->vbus)) { - if (PTR_ERR(channel->vbus) == -EPROBE_DEFER) - return PTR_ERR(channel->vbus); + if (PTR_ERR(channel->vbus) == -EPROBE_DEFER) { + ret = PTR_ERR(channel->vbus); + goto error; + } channel->vbus = NULL; } @@ -454,15 +462,22 @@ static int rcar_gen3_phy_usb2_probe(struct platform_device *pdev) provider = devm_of_phy_provider_register(dev, of_phy_simple_xlate); if (IS_ERR(provider)) { dev_err(dev, "Failed to register PHY provider\n"); + ret = PTR_ERR(provider); + goto error; } else if (channel->has_otg) { int ret; ret = device_create_file(dev, &dev_attr_role); if (ret < 0) - return ret; + goto error; } - return PTR_ERR_OR_ZERO(provider); + return 0; + +error: + pm_runtime_disable(dev); + + return ret; } static int rcar_gen3_phy_usb2_remove(struct platform_device *pdev) @@ -472,6 +487,8 @@ static int rcar_gen3_phy_usb2_remove(struct platform_device *pdev) if (channel->has_otg) device_remove_file(&pdev->dev, &dev_attr_role); + pm_runtime_disable(&pdev->dev); + return 0; }; -- 1.9.1