From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
To: Phil Reid <preid@electromag.com.au>, Tim Sander <tim@krieglstein.org>
Cc: Jarkko Nikula <jarkko.nikula@linux.intel.com>,
Mika Westerberg <mika.westerberg@linux.intel.com>,
Wolfram Sang <wsa@the-dreams.de>,
linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] i2c-designware: add i2c gpio recovery option
Date: Fri, 12 May 2017 13:17:53 +0300 [thread overview]
Message-ID: <1494584273.6967.36.camel@linux.intel.com> (raw)
In-Reply-To: <b136aa47-da70-57c7-03fd-b581cd9b7ce8@electromag.com.au>
On Fri, 2017-05-12 at 09:49 +0800, Phil Reid wrote:
> On 11/05/2017 21:53, Andy Shevchenko wrote:
> > > > > +static int i2c_dw_init_recovery_info(struct dw_i2c_dev *dev,
> > > > > + struct i2c_adapter *adap)
> > > > > +{
> > > > > + struct i2c_bus_recovery_info *rinfo = &dev->rinfo;
> > > > > +
> > > > > + dev->gpio_scl = devm_gpiod_get_optional(dev->dev,
> > > > > + "scl",
> > > > > + GPIOD_OUT_HIGH
> > > > > );
> > > > > + if (IS_ERR_OR_NULL(dev->gpio_scl))
> > > >
> > > > This is wrong. You should not use this macro in most cases. And
> > > > especially it breaks the logic behind _optional().
> > >
> > > My logic here was that if the gpio is optional return null we
> > > return
> > > 0.
> >
> > Why?!
> >
> > _optional()*implies* that all rest calls will go fine and do
> > nothing.
> >
> > > which is an okay status.
> > > But this breaks if !CONFIG_GPIOLIB, which I keep forgetting. I've
> > > never
> > > quite wrapped my head around why that's the case.
> > >
> > > But the probe function only bails out if this returns
> > > EPROBE_DEFER.
> > > Not sure that's the best approach
> >
> > You need something like
> >
> > desc = devm_gpiod_get_optional(...);
> > if (IS_ERR(desc))
> > return PTR_ERR(desc);
> >
>
> I found that continuing without the check on null results in a kernel
> panic for a dereferenced null pointer.
> So something in the gpiolib doesn't treat a null desc as optional.
>
> It was probably this code:
> int desc_to_gpio(const struct gpio_desc *desc)
> {
> return desc->gdev->base + (desc - &desc->gdev->descs[0]);
> }
>
> So perhaps this should return an invalid gpio number when desc == null
>
> I don't know what the intents are, so don't know if its a "bug" or by
> design.
No, it doesn't seem like a bug to me. If you don't use legacy API it
would be fine.
Summarize this discussion, I would rather go this way:
1) introduce gpiod_ based API in I2C core for recovering;
2) rebase your patch on top of that change.
It would be beneficial in a long term for everyone.
--
Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Intel Finland Oy
next prev parent reply other threads:[~2017-05-12 10:19 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-04-28 15:43 RFC: i2c designware gpio recovery Tim Sander
2017-04-28 16:14 ` Tim Sander
2017-05-01 1:57 ` Phil Reid
2017-05-01 13:31 ` Tim Sander
2017-05-03 1:30 ` Phil Reid
2017-05-03 19:04 ` Tim Sander
2017-05-10 7:12 ` Phil Reid
2017-05-10 11:57 ` [PATCH] i2c-designware: add i2c gpio recovery option Tim Sander
2017-05-10 13:13 ` Andy Shevchenko
2017-05-11 1:24 ` Phil Reid
2017-05-11 13:53 ` Andy Shevchenko
2017-05-11 14:02 ` Andy Shevchenko
2017-05-12 1:49 ` Phil Reid
2017-05-12 10:17 ` Andy Shevchenko [this message]
2017-05-01 2:15 ` RFC: i2c designware gpio recovery Phil Reid
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=1494584273.6967.36.camel@linux.intel.com \
--to=andriy.shevchenko@linux.intel.com \
--cc=jarkko.nikula@linux.intel.com \
--cc=linux-i2c@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mika.westerberg@linux.intel.com \
--cc=preid@electromag.com.au \
--cc=tim@krieglstein.org \
--cc=wsa@the-dreams.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: link
Be 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.