Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751120AbdCMG0n (ORCPT ); Mon, 13 Mar 2017 02:26:43 -0400 Received: from relmlor3.renesas.com ([210.160.252.173]:45267 "EHLO relmlie2.idc.renesas.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1750752AbdCMG0c (ORCPT ); Mon, 13 Mar 2017 02:26:32 -0400 X-IronPort-AV: E=Sophos;i="5.36,157,1486393200"; d="scan'208";a="237322042" 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] phy: rcar-gen3-usb2: fix implementation for runtime PM Date: Mon, 13 Mar 2017 15:24:18 +0900 Message-ID: <1489386258-31279-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: OS2PR0101CA0042.jpnprd01.prod.outlook.com (10.167.173.180) To PS1PR06MB1690.apcprd06.prod.outlook.com (10.167.53.12) X-MS-Office365-Filtering-Correlation-Id: 68285c83-0824-43b9-1e05-08d469d9e19e X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(48565401081);SRVR:PS1PR06MB1690; X-Microsoft-Exchange-Diagnostics: 1;PS1PR06MB1690;3:8nnxWiakVs+rrbtayHdqI2iFVUGaitejtKHpzmMG36SB/NNv4tEZyRjybiKNz/eGr9ao9niNNo36r0/hU+ZInMPTZ79LrpuivjXWZ6Bi1HGuJUlNqbT+5BfCMSBopipfiUXL+u4FijHHKOYdr9O5qLe92UpSMbwvg6BWIT0ylrcPuTsQE6g7QisFDVr+/j//beU201X7bfElN57ihBZ+skA9Z37m3KJUwUoLDlqCGL8W8acGb/kGdeWI8T4W+iFrIDGjJm20poQXhDDv7yvX77ZGfcXxSsl379wSHOtGVos=;25:e1KmEXB+5zkzoFZ10JlRqF7Zbnw0nhTjsrqcaK9xyu3aEpFg8J1At8WlN6VoRb/2W7GMYZc+xdRHwNSRIZP9xgWSkslqVezpPapJ7KNSjxM2CtNhgsxZwWZVS9yrHB4JuEVlwQgIUIjkVZiMOafG7eEwuHqI42q9+QhwOKV655uaqG+ICb2S9FFS5iJYx9WvJTyKNjr+uTt0p/Oo/6Wq1QIYSg4OZrLDe2MKNaDecto7SSVIY+kLpklUNgXBrbN+RWQP8nlWenMHZcvjeGKh1qIDr+btXi0DW8HpPMfUJ+5pkRdjKAzNzteaIJJ3+8XHcoYRJ/O7URvuvwM9urBtJ8wzghRY4tdEydQVtsrqUD7QiOldugD3afFaNyYCx+Kl0VKN/9+8mFdN/C03hpNhM07yWp27TVZ4Rwa0v0LK4IRBQLcWtKDDf5fWEGTAecP7ap7k5o/51GisTBpe9KyBVw== X-Microsoft-Exchange-Diagnostics: 1;PS1PR06MB1690;31:FXh4X1LWg3zg1AURxvnAz4xsKbJ6TZg9ujfO8INJomIrgvs3PLN+rQP6yG372BcPemcmP+6CuDMSg0Q9zy5DhILG6LuyJc8HLfLm3f4UXTv55O1ufstQH/lKF9b6VqMznFyM0grF9s6XVwXFsoLwkREQ9Q9hfOFJYCsQflg/WnkvA5m4qZOxfY0odjqraNtaeh0Dhn5IzvOpo/1U10NSGSlLj+wFGz9ne+WcXuDx7+QUi1n33AOIDTswnqPLABrc;20:th4JRJV41ddRCk5/yrJ6wux6XfPomheSc4H44vrp5COHsLVvymMCcVQbuHnHHyY2XU5er/0K2LcdnL9jPDXW0qqjB2zYdBTGAy5tEF9kAu4NAaiSB7Zyg0L4vNRL8tKHG72ev/Qo68zwYc4Z+FfkyG3R5qZhloV4sPULMoa4+lRkOBAEidj5BY7CbQZ4Eu37M0hcAMAupHrXAEdekxP17MgChObABtaH8ghckPmqBGJ78cXJVR8yCzmTYl0zT/BQqRwtmp3Ij2R9W6bDHbE2/O9aDXDUdE2b9SHF8io7SeoaIKiaAqOsJeW1UuTo9qwy3xBQ5Xnbhm2xMNZP6BXCZb3k/jMo7vVDYVE+pvLsG44a2feK67uiSN9z58p5Erbc1VRxZrDxmDRTyNdZVIKPMma8jKkgGpsGj5QJrF9usGNWDohP156t5GTBoYAlbGL45Nq741Hx7mXxSKREuWvob5ai1hLW1c8sVAdS/YgcCTKj33D6NE3HOQrTuhwcz79S 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)(3002001)(10201501046)(6055026)(6041248)(20161123560025)(20161123562025)(20161123555025)(20161123558025)(20161123564025)(6072148);SRVR:PS1PR06MB1690;BCL:0;PCL:0;RULEID:;SRVR:PS1PR06MB1690; X-Microsoft-Exchange-Diagnostics: 1;PS1PR06MB1690;4:ed7KZimtfM1QMdJUOoMcONrKz+bvjG6XlNZq0cjsoh5/8HXBSD0EJrz30EgtLcN4udwod+dQKDbw8pOifiWAnm4MKeUS+t0HE/upk/Eax+ciPYHrrku3eCf7/EfjFFLSQSCj/6SAvrwDBEI8jht7rrHIw//cR4IHyWLggqfmK7SwLyB1froZeZugHNBxoEBbZZctsoKYtlHILwInn5vzet8NJJ0F6f/RkvZgAhM7cuZ5TQqUypghSNtlqNM6ZE/mLO76ctmrafuoH+SGwUlZ35R5rODvkxQjN5C3q7WaO7LGsBsAfhTlBBprY7riTH32YUJZHygmh/n4lGOfWMGmQyJ0zdqjlXOoeFJbJ4f+bnKJAPoCswuoxImGWJ/8KikcmfypYQWvCbNiHW+BTMrbqucmyn8sM9myQKnwQH04B5/iinlwpoz+Ulkt3Cq+G6NnIHfSVBH7Fyhvbw8SKzpW3QqfY7hRdFDtduPT30RUt5ENz2yyrKw0OUY2pTH/YuytHep69t8oR4pfymjLI+TRI8p6pCCxf9rru2sDaF3bp6rLOfkOJzGFkk2nC0b6qlmHrWpf/qvHZMyDQFEzVELSYND5wTW4dUMoaAMrj4MbLM6an4Ww0Pnuxq7WnyUlCeMS X-Forefront-PRVS: 0245702D7B X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6069001)(6009001)(39850400002)(39410400002)(39860400002)(39840400002)(39450400003)(43544003)(23433003)(25786008)(36756003)(48376002)(50466002)(78352004)(6486002)(230783001)(54906002)(6512007)(6506006)(305945005)(7736002)(4326008)(189998001)(50986999)(8676002)(107886003)(110136004)(38730400002)(5003940100001)(81166006)(6116002)(3846002)(47776003)(66066001)(2906002)(50226002)(6666003)(42882006)(6916009)(33646002)(42186005)(2351001)(53936002)(5660300001);DIR:OUT;SFP:1102;SCL:1;SRVR:PS1PR06MB1690;H:localhost.localdomain;FPR:;SPF:None;MLV:ovrnspm;PTR:InfoNoRecords;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;PS1PR06MB1690;23:CKdV26Wm9LtXZuNHGS6onen/Z2iSoCTCQOAFk1g7n?= =?us-ascii?Q?womPmUmzelQfnAwD4aARA8h3/x488ztttxFNCkDusQyXjtqqanlroT8npA0P?= =?us-ascii?Q?92BWEklV9UNnlaPwAWnNonxt6+snNYfICR+7GvF79fSZyaRutrdSnEyne2FV?= =?us-ascii?Q?kaOesGX5nIMarAxb+3K52UsBPh47KU6kVE51CFlRAhZIoOKbglIQBbVPexow?= =?us-ascii?Q?UsmcMc8IPleQX4KvAmE17V7XkYlTui2QadAej/8MBTFRUqtS3rTEtoWI9i3Y?= =?us-ascii?Q?AdUDFXWoDyo2Qihrfdpor7yQgwHVVzXKLTZhkNwltt/+G8nbb0qObvxVWTjY?= =?us-ascii?Q?PVi9uNhCHimv5baJ2aB32BRjDUwY8HdmK9Q0/1d8X7ZK3Sx7QeVmhbpEa7/c?= =?us-ascii?Q?ewi7yFIGszIxPy5OW8P6B2Ex9pxtl6g/DE+fRwRreAaVR/pdcrEXd4ZX51H7?= =?us-ascii?Q?3cGMFfSaRE2C5HPKvRIqYqgL7OSUbeWYhlYkEcvjFhWdQrWEGNKfYOlev3mD?= =?us-ascii?Q?avmLkZlqUTZMgFdG2HMi/+X+7x4TjtuOGPwm2uqdSktrtiRxdO7l6KYk+p+9?= =?us-ascii?Q?Dadv9xTQiI/CcO0FVkWqQ1Ufc3blLz3y1nj2KLBERsW5yU80npjj+r5y0obS?= =?us-ascii?Q?MUBAtC9YFEiHVDHT+OJ67A6/RiY/YRgOTxNMQT92lLiOpj2SQcv1UnMrcJ0f?= =?us-ascii?Q?/OR19xFLcyOycoY6Gw8va6uBmzD4BM5nuYd2Ssi9kIlJezL5Rhy2H6sfLEvG?= =?us-ascii?Q?FiqP3azlZXeNc3fmMnxTsWqoe9FSnc1gvzydtQ9NVyk/odTNSXnQq+5hPpC+?= =?us-ascii?Q?zctZ0WBDI6tVNAc8s1JtXcQ69UgeWCSDjHoDw+hfqSH2hDSKuJ6YqbG1thBv?= =?us-ascii?Q?diVvl+AKEmRg6RbC7dF7YOtjq5QuKynV6ibqhR08rAdBicDg53ws6I5kpCBg?= =?us-ascii?Q?Z8sAWOUFcsaXMVclG+qZSFU5RHGvqqytbFq1LtXuiTCSmtOzeDdOLU3AMC1+?= =?us-ascii?Q?19857Al5M/McODHYSWTUliyoETpZzZk/cU/ztOfNP5Pjx2vj/dKo99l9Lz2g?= =?us-ascii?Q?tCveMWGIh1eIwLGxlI2S9CRp+rikPkUz96LTpJocaW9yEmmYAYlSs0v1PRqe?= =?us-ascii?Q?gQRu7UPeUY=3D?= X-Microsoft-Exchange-Diagnostics: 1;PS1PR06MB1690;6:hHncM13UJaB9+EkUrTHy1wSFrfauBe/u/xYhBl8G+iZlWcVqVixv/ov+xgO86hbdGMWBXcO7k+FTwMRp4Z28TptXssqYLz+8tBjqgGsGId2R/5YV4gDJR93fmds8a3ylOZV8sSmV5Gi5aY57PQyIpNmAzzYeyOn5YdaQz/JhzFVB0QfgJUua3PLt7BYP7YsRFYWoUfZJKcfPJbInSjiIcAISHQW4O19M+d5VYriUo6hsPgU1OEesfjCr0JSIvMRzqdKGrp/3wO9B028ah9BiVqUV/vHyJMNu7ny1MVxDtPYcyTVs1VQckJkjdgAcKEcgUnSuELurGZ98A00f850qbCnCiU232Wbg4ApcQVUpa6CEzI+K6P1rypu4JTO6MhsCTv7StRyKjmesvsX2jAOsJ6iakoftwvJYh61NwxoMEEo=;5:YLSQanWlZANHc6vPsklocYldth976PzE5aa7sXNmyoCF+zUTk+PXyaRa2boVsZgXdTRi2peniT/rRBL3+m8FaMPAmQt2b+n9BKp0nQesKf4TrloP4d28SwOSlVqczEd6q0YxVnk9gk7Mgy2VCai7dg==;24:V9foBo65PqQ+cC1xBxtQJb++hyix6jMJ9TfrdTZZqgg5IcNdyTfpGmHXCFXImRnV9BZEIubbVfJGpDF0ozoIjxWcF4DnzEnLpIVGX/23sms= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;PS1PR06MB1690;7:uogHstuwKjpGy1U+7fmcVoSEAk57KBygWL/iQT9z6gyG2TTajiMz+0bYhAPyINAM/CRmQqMZJvRS3ahgpRpI+BdqsKGjSwJZEKBsUAfGNfMfMvHmNdZE1FCpLkEtANJBNm8IakVUTVIjyoZg4fBUsm6x5pb4E0PUQmHMrvJlD3Za2FbZhMfm+NBduVQeNvUZZn5zbf/SH6SvclIaYcLQaIdA8gpF3cXTiE2sIkPMZyo9CenmWofphPr8tFdVZ3MnNt0OyFvTZcIFzZXTcfn1598zdz8wuweIbmTYwsgCRBfC3RfdKo1P46G/IBUcJ9EwGmm8iHMYm2QpudK0/YYlJw==;20:0BQv5cKqkfzuusuCR6bThSGfDmWFyQDPM0dy9ngS3w0wSALPbBz1jzi5L8ObGmywLdNXjDj36Hfbyga3qlj4SnYiyKjfxGZDTQXwB93TuuXenczFoxlscR3awZSMojiCSUp1FPZnbSw4/Rkhr1YDTrU3aX7x4ZOSwVUCUgLI7Qc= X-OriginatorOrg: renesas.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Mar 2017 06:26:27.6231 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: PS1PR06MB1690 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2931 Lines: 96 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 the own pm_runtime_pm() before dev_phy_create(). Fixes: f3b5a8d9b50d ("phy: rcar-gen3-usb2: Add R-Car Gen3 USB2 PHY driver") Signed-off-by: Yoshihiro Shimoda --- drivers/phy/phy-rcar-gen3-usb2.c | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/drivers/phy/phy-rcar-gen3-usb2.c b/drivers/phy/phy-rcar-gen3-usb2.c index afb4d04..23c4e86 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); + +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