[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <56EC2525.8000706@laposte.net>
Date: Fri, 18 Mar 2016 16:56:21 +0100
From: Sebastian Frias <sf84@...oste.net>
To: Uwe Kleine-König
<u.kleine-koenig@...gutronix.de>, Daniel Mack <daniel@...que.org>
CC: "David S. Miller" <davem@...emloft.net>, netdev@...r.kernel.org,
lkml <linux-kernel@...r.kernel.org>, mason <slash.tmp@...e.fr>,
Florian Fainelli <f.fainelli@...il.com>,
Mans Rullgard <mans@...sr.com>,
Fabio Estevam <festevam@...il.com>,
Martin Blumenstingl <martin.blumenstingl@...il.com>,
Linus Walleij <linus.walleij@...aro.org>
Subject: Re: [PATCH] net: phy: at803x: don't depend on GPIOLIB
Hi Uwe, Daniel,
On 03/18/2016 01:54 PM, Uwe Kleine-König wrote:
> [expand cc a bit more]
>
> Hello,
>
> On Wed, Mar 16, 2016 at 06:25:59PM +0100, Sebastian Frias wrote:
>> Commit 687908c2b649 ("net: phy: at803x: simplify using
>> devm_gpiod_get_optional and its 4th argument") introduced a dependency
>> on GPIOLIB that was not there before.
>>
>> This commit removes such dependency by checking the return code and
>> comparing it against ENOSYS which is returned when GPIOLIB is not
>> selected.
>>
>> Fixes: 687908c2b649 ("net: phy: at803x: simplify using devm_gpiod_get_optional and its 4th argument")
>>
>> Signed-off-by: Sebastian Frias <sf84@...oste.net>
>> ---
>> drivers/net/phy/at803x.c | 4 +++-
>> 1 file changed, 3 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/net/phy/at803x.c b/drivers/net/phy/at803x.c
>> index 2174ec9..88b7ff3 100644
>> --- a/drivers/net/phy/at803x.c
>> +++ b/drivers/net/phy/at803x.c
>> @@ -252,7 +252,9 @@ static int at803x_probe(struct phy_device *phydev)
>> return -ENOMEM;
>>
>> gpiod_reset = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_HIGH);
>> - if (IS_ERR(gpiod_reset))
>> + if (PTR_ERR(gpiod_reset) == -ENOSYS)
>> + gpiod_reset = NULL;
>> + else if (IS_ERR(gpiod_reset))
>
> this isn't better either (IMHO it's worse, but maybe this is debatable
> and also depends on your POV).
Well, from the code, the reset hack is only required when the PHY is
ATH8030_PHY_ID, right?
However, such change was introduced by Daniel Mack on commit 13a56b449325.
Hopefully he can chime in and give his opinion on this.
Daniel, while on the subject, I have a question for you:
Change 2b8f2a28eac1 introduced "link_status_notify" callback which is
called systematically on the PHY state machine.
Any reason to make the call systematic as opposed to let say:
if (phydev->state != old_state) {
if (phydev->drv->link_change_notify)
phydev->drv->link_change_notify(phydev);
}
(it does means that the callback would be called after the state machine
processing though)
>
> With 687908c2b649 I made kernels without GPIOLIB fail to bind this
> device. I admit this is not maximally nice.
I see, that was not clear from the commit message, sorry.
>
> Your change makes the driver bind in this case again and then the reset
> gpio isn't handled at all which might result in a later and harder to
> debug error.
>
> The better approach to fix your problem is: make the driver depend (or
> force) on GPIOLIB.
It was one of the solutions I had in mind, but:
- since the dependency on GPIOLIB was not included on the patch
- and given that the previous code had provision to work without GPIO
I thought it was an overlook.
>Or alternatively, drop reset-handling from the
> driver.
>
> From a driver perspecitive, it would be nice if devm_gpiod_get_optional
> returned NULL iff the respective gpio isn't specified even with
> GPIOLIB=n, but this isn't sensible either because it would result in
> quite some gpiolib code to not being conditionally compiled on
> CONFIG_GPIOLIB any more.
Let's say that was the case, what would the PHY code do?
I mean, it did not get a GPIO, whether it was because GPIOLIB=n or
because there's no 'reset' GPIO attached
Shall it fail? Shall it continue in a sort of degraded mode? Shall it warn?
Because that's the real question here.
What would you think of making at803x_link_change_notify() print a
message every time it should do a reset but does not has a way to do it?
I can make such change to my patch if everybody agrees on it.
By the way, in that case, can somebody suggest a way to print such warning?
Would printk() be ok or should I use dev_dbg() ?
Best regards,
Sebastian
>
> Best regards
> Uwe
>
Powered by blists - more mailing lists