From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752152AbcIDE2j (ORCPT ); Sun, 4 Sep 2016 00:28:39 -0400 Received: from mail.kmu-office.ch ([178.209.48.109]:38277 "EHLO mail.kmu-office.ch" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751662AbcIDE2d (ORCPT ); Sun, 4 Sep 2016 00:28:33 -0400 From: Stefan Agner To: balbi@kernel.org Cc: gregkh@linuxfoundation.org, fabio.estevam@nxp.com, linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, Stefan Agner Subject: [PATCH] usb: phy: generic: request regulator optionally Date: Sat, 3 Sep 2016 21:04:16 -0700 Message-Id: <20160904040416.22163-1-stefan@agner.ch> X-Mailer: git-send-email 2.9.0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org According to the device tree bindings the vcc-supply is optional. So far the driver did request the regulator using devm_regulator_get which creates a dummy regulator for convenience. Since we can have the supply unconnected, we should make use of the optional variant of the regulator call which does not return a dummy regulator but -ENODEV. The driver already has checks in case the regulator is an error pointer. Note that with this change the behavior is slightly different in case devm_regulator_get_optional returns -EPROBE_DEFER: The driver returns -EPROBE_DEFER even if needs_vcc is set false. This is the correct behavior, since even if the regulator is optional, it might get initialized later... Signed-off-by: Stefan Agner --- This gets rid of warnings such as this (seen on i.MX 7): 30800000.aips-bus:usbphynop1 supply vcc not found, using dummy regulator -- Stefan drivers/usb/phy/phy-generic.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/usb/phy/phy-generic.c b/drivers/usb/phy/phy-generic.c index 980c9de..38ceadc 100644 --- a/drivers/usb/phy/phy-generic.c +++ b/drivers/usb/phy/phy-generic.c @@ -275,12 +275,12 @@ int usb_phy_gen_create_phy(struct device *dev, struct usb_phy_generic *nop, } } - nop->vcc = devm_regulator_get(dev, "vcc"); + nop->vcc = devm_regulator_get_optional(dev, "vcc"); if (IS_ERR(nop->vcc)) { dev_dbg(dev, "Error getting vcc regulator: %ld\n", PTR_ERR(nop->vcc)); - if (needs_vcc) - return -EPROBE_DEFER; + if (needs_vcc || PTR_ERR(nop->vcc) == -EPROBE_DEFER) + return PTR_ERR(nop->vcc); } nop->dev = dev; -- 2.9.0