From: Krzysztof Kozlowski <k.kozlowski@samsung.com> To: Mark Brown <broonie@kernel.org> Cc: Kukjin Kim <kgene@kernel.org>, Chanwoo Choi <cw00.choi@samsung.com>, Liam Girdwood <lgirdwood@gmail.com>, Greg Kroah-Hartman <gregkh@linuxfoundation.org>, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, linux-usb@vger.kernel.org, linux.amoon@gmail.com, tjakobi@math.uni-bielefeld.de, m.szyprowski@samsung.com, hverkuil@xs4all.nl, Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> Subject: Re: [RFT PATCH 1/3] usb: misc: usb3503: Fix HUB mode after bootloader initialization Date: Fri, 29 Apr 2016 13:55:14 +0200 [thread overview] Message-ID: <57234BA2.6020304@samsung.com> (raw) In-Reply-To: <20160429113059.GX3217@sirena.org.uk> On 04/29/2016 01:30 PM, Mark Brown wrote: > On Fri, Apr 29, 2016 at 12:59:49PM +0200, Krzysztof Kozlowski wrote: > >> +++ b/Documentation/devicetree/bindings/usb/usb3503.txt >> @@ -24,6 +24,7 @@ Optional properties: >> pins (optional, if not provided, driver will not set rate of the >> REFCLK signal and assume that a value from the primary reference >> clock frequencies table is used) >> +- vdd33-supply: Optional supply for VDD 3.3 V power source. > > Supplies are only optional if they may be physically absent. In this > case it's possible that on device regulators may be used instead, a > pattern more like that used for arizona-ldo1 where we represent those > regulators might be better as it's more clearly describing the > situation. I'm just wondering if the supply lookup stuff there should > be factored out as this is not an uncommon pattern.. > > It should at least be clearly stated what's going on, ignoring failure > to get supplies is generally a bug and people will tend to blindly cut > and paste things (witness all the breakage in graphics drivers with > this). The device has four power input lines (called VBAT, VDD33, VDD_CORE and VDD_12). Datasheet describes 4 valid configurations... but impression of the Odroid U3 board schematics is that they used another (custom?) configuration. I did not add rest of regulators on purpose: 1. I don't have other configurations to test. 2. It is rather old device, so I don't expect active development. The VDD33 is really optional. The device can work in different configuration, e.g. only on VBAT. How the reset logic would work then? I don't know... I would suspect that it could be exactly the same (just replace VDD33 with VBAT) but I am not sure. >> static int usb3503_reset(struct usb3503 *hub, int state) >> { >> + int err; >> + >> + err = usb3503_regulator(hub, state); >> + if (err) { >> + dev_err(hub->dev, "unable to %s VDD33 regulator to (%d)\n", >> + (state ? "enable" : "disable"), err); >> + } > > Are we sure that the callers all balance enables and disables and we > don't ever end up going through reset more than once on the way down? I double checked the code and there might be in-balance if DT or platform data sets initial mode to suspend. Otherwise it should be balanced. I'll re-think the patch and fix this. > >> + hub->vdd_reg = devm_regulator_get_optional(dev, "vdd33"); >> + if (IS_ERR(hub->vdd_reg)) { >> + if (PTR_ERR(hub->vdd_reg) == -EPROBE_DEFER) >> + return -EPROBE_DEFER; > > This should explicitly check for -ENODEV and return the error if it gets > anything else, that will mean that if the supply is needed but lookup > fails somehow due to a non-deferral error we'll handle it properly. I must admit I wasn't sure about handling the ENODEV and some other examples (drivers) were handling this just like that. Thanks for pointing this out. > >> + err = usb3503_regulator(hub, true); > > The naming on this function is very obscure (and there's also a couple > of other supplies). I'd suggest just folding this into the reset > function, or at least renaming so the reader can tell what these calls > do. Okay. Thanks for feedback! Best regards, Krzysztof
WARNING: multiple messages have this Message-ID (diff)
From: k.kozlowski@samsung.com (Krzysztof Kozlowski) To: linux-arm-kernel@lists.infradead.org Subject: [RFT PATCH 1/3] usb: misc: usb3503: Fix HUB mode after bootloader initialization Date: Fri, 29 Apr 2016 13:55:14 +0200 [thread overview] Message-ID: <57234BA2.6020304@samsung.com> (raw) In-Reply-To: <20160429113059.GX3217@sirena.org.uk> On 04/29/2016 01:30 PM, Mark Brown wrote: > On Fri, Apr 29, 2016 at 12:59:49PM +0200, Krzysztof Kozlowski wrote: > >> +++ b/Documentation/devicetree/bindings/usb/usb3503.txt >> @@ -24,6 +24,7 @@ Optional properties: >> pins (optional, if not provided, driver will not set rate of the >> REFCLK signal and assume that a value from the primary reference >> clock frequencies table is used) >> +- vdd33-supply: Optional supply for VDD 3.3 V power source. > > Supplies are only optional if they may be physically absent. In this > case it's possible that on device regulators may be used instead, a > pattern more like that used for arizona-ldo1 where we represent those > regulators might be better as it's more clearly describing the > situation. I'm just wondering if the supply lookup stuff there should > be factored out as this is not an uncommon pattern.. > > It should at least be clearly stated what's going on, ignoring failure > to get supplies is generally a bug and people will tend to blindly cut > and paste things (witness all the breakage in graphics drivers with > this). The device has four power input lines (called VBAT, VDD33, VDD_CORE and VDD_12). Datasheet describes 4 valid configurations... but impression of the Odroid U3 board schematics is that they used another (custom?) configuration. I did not add rest of regulators on purpose: 1. I don't have other configurations to test. 2. It is rather old device, so I don't expect active development. The VDD33 is really optional. The device can work in different configuration, e.g. only on VBAT. How the reset logic would work then? I don't know... I would suspect that it could be exactly the same (just replace VDD33 with VBAT) but I am not sure. >> static int usb3503_reset(struct usb3503 *hub, int state) >> { >> + int err; >> + >> + err = usb3503_regulator(hub, state); >> + if (err) { >> + dev_err(hub->dev, "unable to %s VDD33 regulator to (%d)\n", >> + (state ? "enable" : "disable"), err); >> + } > > Are we sure that the callers all balance enables and disables and we > don't ever end up going through reset more than once on the way down? I double checked the code and there might be in-balance if DT or platform data sets initial mode to suspend. Otherwise it should be balanced. I'll re-think the patch and fix this. > >> + hub->vdd_reg = devm_regulator_get_optional(dev, "vdd33"); >> + if (IS_ERR(hub->vdd_reg)) { >> + if (PTR_ERR(hub->vdd_reg) == -EPROBE_DEFER) >> + return -EPROBE_DEFER; > > This should explicitly check for -ENODEV and return the error if it gets > anything else, that will mean that if the supply is needed but lookup > fails somehow due to a non-deferral error we'll handle it properly. I must admit I wasn't sure about handling the ENODEV and some other examples (drivers) were handling this just like that. Thanks for pointing this out. > >> + err = usb3503_regulator(hub, true); > > The naming on this function is very obscure (and there's also a couple > of other supplies). I'd suggest just folding this into the reset > function, or at least renaming so the reader can tell what these calls > do. Okay. Thanks for feedback! Best regards, Krzysztof
next prev parent reply other threads:[~2016-04-29 11:55 UTC|newest] Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top 2016-04-29 10:59 [RFT PATCH 0/3] usb: misc: usb3503: Fix missing device when TFTP booting Krzysztof Kozlowski 2016-04-29 10:59 ` Krzysztof Kozlowski 2016-04-29 10:59 ` [RFT PATCH 1/3] usb: misc: usb3503: Fix HUB mode after bootloader initialization Krzysztof Kozlowski 2016-04-29 10:59 ` Krzysztof Kozlowski 2016-04-29 11:30 ` Mark Brown 2016-04-29 11:30 ` Mark Brown 2016-04-29 11:55 ` Krzysztof Kozlowski [this message] 2016-04-29 11:55 ` Krzysztof Kozlowski 2016-04-29 16:44 ` Mark Brown 2016-04-29 16:44 ` Mark Brown 2016-05-02 9:49 ` Krzysztof Kozlowski 2016-05-02 9:49 ` Krzysztof Kozlowski 2016-05-02 10:49 ` Krzysztof Kozlowski 2016-05-02 10:49 ` Krzysztof Kozlowski 2016-05-02 10:55 ` Mark Brown 2016-05-02 10:55 ` Mark Brown 2016-05-03 18:00 ` Rob Herring 2016-05-03 18:00 ` Rob Herring 2016-05-04 12:01 ` Krzysztof Kozlowski 2016-05-04 12:01 ` Krzysztof Kozlowski 2016-05-04 12:01 ` Krzysztof Kozlowski 2016-05-04 18:25 ` Mark Brown 2016-05-04 18:25 ` Mark Brown 2016-04-29 10:59 ` [RFT PATCH 2/3] ARM: dts: exynos: Provide regulator for usb3503 on Odroid to fix device detection Krzysztof Kozlowski 2016-04-29 10:59 ` Krzysztof Kozlowski 2016-04-29 10:59 ` Krzysztof Kozlowski 2016-04-29 10:59 ` [PATCH 3/3] regulator: max77686: Configure enable time to properly handle regulator enable Krzysztof Kozlowski 2016-04-29 10:59 ` Krzysztof Kozlowski 2016-04-29 10:59 ` Krzysztof Kozlowski 2016-04-29 11:31 ` Applied "regulator: max77686: Configure enable time to properly handle regulator enable" to the regulator tree Mark Brown 2016-04-29 11:31 ` Mark Brown 2016-04-29 11:31 ` Mark Brown 2016-04-30 9:43 ` [RFT PATCH 0/3] usb: misc: usb3503: Fix missing device when TFTP booting Hans Verkuil 2016-04-30 9:43 ` Hans Verkuil 2016-04-30 9:43 ` Hans Verkuil 2016-05-01 13:17 ` Krzysztof Kozlowski 2016-05-01 13:17 ` Krzysztof Kozlowski 2016-05-01 13:17 ` Krzysztof Kozlowski 2016-05-01 14:09 ` Hans Verkuil 2016-05-01 14:09 ` Hans Verkuil 2016-05-01 16:01 ` Hans Verkuil 2016-05-01 16:01 ` Hans Verkuil 2016-05-01 16:01 ` Hans Verkuil 2016-05-01 16:42 ` Krzysztof Kozlowski 2016-05-01 16:42 ` Krzysztof Kozlowski 2016-05-02 13:40 ` Hans Verkuil 2016-05-02 13:40 ` Hans Verkuil 2016-05-02 13:40 ` Hans Verkuil 2016-05-02 13:41 ` Krzysztof Kozlowski 2016-05-02 13:41 ` Krzysztof Kozlowski 2016-05-02 5:50 ` Marek Szyprowski 2016-05-02 5:50 ` Marek Szyprowski 2016-05-02 5:50 ` Marek Szyprowski
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=57234BA2.6020304@samsung.com \ --to=k.kozlowski@samsung.com \ --cc=b.zolnierkie@samsung.com \ --cc=broonie@kernel.org \ --cc=cw00.choi@samsung.com \ --cc=devicetree@vger.kernel.org \ --cc=gregkh@linuxfoundation.org \ --cc=hverkuil@xs4all.nl \ --cc=kgene@kernel.org \ --cc=lgirdwood@gmail.com \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-samsung-soc@vger.kernel.org \ --cc=linux-usb@vger.kernel.org \ --cc=linux.amoon@gmail.com \ --cc=m.szyprowski@samsung.com \ --cc=tjakobi@math.uni-bielefeld.de \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.