From: Tony Lindgren <tony-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org>
To: Vignesh R <vigneshr-l0cyMroinI0@public.gmane.org>
Cc: Dmitry Torokhov
<dmitry.torokhov-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
Wolfram Sang <wsa-z923LK4zBo2bacvFa/9K2g@public.gmane.org>,
Mika Westerberg
<mika.westerberg-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>,
"Rafael J. Wysocki"
<rafael.j.wysocki-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>,
Ulf Hansson <ulf.hansson-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>,
Rob Herring <robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
Mark Rutland <mark.rutland-5wv7dgnIgG8@public.gmane.org>,
"linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
<linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
"linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
<linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
Subject: Re: [PATCH] i2c: allow specifying separate wakeup interrupt in device tree
Date: Mon, 3 Aug 2015 03:21:21 -0700 [thread overview]
Message-ID: <20150803102121.GO16878@atomide.com> (raw)
In-Reply-To: <55BB54B1.80603-l0cyMroinI0@public.gmane.org>
* Vignesh R <vigneshr-l0cyMroinI0@public.gmane.org> [150731 04:00]:
> On 07/31/2015 01:44 AM, Dmitry Torokhov wrote:
> > Instead of having each i2c driver individually parse device tree data in
> > case it or platform supports separate wakeup interrupt, and handle
> > enabling and disabling wakeup interrupts in their power management
> > routines, let's have i2c core do that for us.
Good idea, yes the dedicated wake-up interrupts can be handled
at the bus level to keep device drivers generic.
One question below though..
> > @@ -639,11 +640,13 @@ static int i2c_device_probe(struct device *dev)
> > if (!client->irq) {
> > int irq = -ENOENT;
> >
> > - if (dev->of_node)
> > - irq = of_irq_get(dev->of_node, 0);
> > - else if (ACPI_COMPANION(dev))
> > + if (dev->of_node) {
> > + irq = of_irq_get_byname(dev->of_node, "irq");
> > + if (irq == -EINVAL || irq == -ENODATA)
> > + irq = of_irq_get(dev->of_node, 0);
> > + } else if (ACPI_COMPANION(dev)) {
> > irq = acpi_dev_gpio_irq_get(ACPI_COMPANION(dev), 0);
> > -
> > + }
> > if (irq == -EPROBE_DEFER)
> > return irq;
> > if (irq < 0)
> > @@ -659,20 +662,47 @@ static int i2c_device_probe(struct device *dev)
> > if (!device_can_wakeup(&client->dev))
> > device_init_wakeup(&client->dev,
> > client->flags & I2C_CLIENT_WAKE);
> > +
> > + if (device_can_wakeup(&client->dev)) {
> > + int wakeirq = -ENOENT;
> > +
> > + if (dev->of_node) {
> > + wakeirq = of_irq_get_byname(dev->of_node, "wakeup");
> > + if (wakeirq == -EPROBE_DEFER)
> > + return wakeirq;
> > + }
> > +
> > + if (wakeirq > 0 && wakeirq != client->irq)
> > + status = dev_pm_set_dedicated_wake_irq(dev, wakeirq);
> > + else if (client->irq > 0)
> > + status = dev_pm_set_wake_irq(dev, wakeirq);
> > + else
> > + status = 0;
Hmm why do we need the check for if (device_can_wakeup(&client->dev)))?
Also wondering about the dev vs &client->dev usage here.. But I take
you have checked that we end up calling the runtime PM calls of the
client instead of the i2c bus controller :)
Regards,
Tony
WARNING: multiple messages have this Message-ID (diff)
From: Tony Lindgren <tony@atomide.com>
To: Vignesh R <vigneshr@ti.com>
Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>,
Wolfram Sang <wsa@the-dreams.de>,
Mika Westerberg <mika.westerberg@linux.intel.com>,
"Rafael J. Wysocki" <rafael.j.wysocki@intel.com>,
Ulf Hansson <ulf.hansson@linaro.org>,
Rob Herring <robh+dt@kernel.org>,
Mark Rutland <mark.rutland@arm.com>,
"linux-i2c@vger.kernel.org" <linux-i2c@vger.kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH] i2c: allow specifying separate wakeup interrupt in device tree
Date: Mon, 3 Aug 2015 03:21:21 -0700 [thread overview]
Message-ID: <20150803102121.GO16878@atomide.com> (raw)
In-Reply-To: <55BB54B1.80603@ti.com>
* Vignesh R <vigneshr@ti.com> [150731 04:00]:
> On 07/31/2015 01:44 AM, Dmitry Torokhov wrote:
> > Instead of having each i2c driver individually parse device tree data in
> > case it or platform supports separate wakeup interrupt, and handle
> > enabling and disabling wakeup interrupts in their power management
> > routines, let's have i2c core do that for us.
Good idea, yes the dedicated wake-up interrupts can be handled
at the bus level to keep device drivers generic.
One question below though..
> > @@ -639,11 +640,13 @@ static int i2c_device_probe(struct device *dev)
> > if (!client->irq) {
> > int irq = -ENOENT;
> >
> > - if (dev->of_node)
> > - irq = of_irq_get(dev->of_node, 0);
> > - else if (ACPI_COMPANION(dev))
> > + if (dev->of_node) {
> > + irq = of_irq_get_byname(dev->of_node, "irq");
> > + if (irq == -EINVAL || irq == -ENODATA)
> > + irq = of_irq_get(dev->of_node, 0);
> > + } else if (ACPI_COMPANION(dev)) {
> > irq = acpi_dev_gpio_irq_get(ACPI_COMPANION(dev), 0);
> > -
> > + }
> > if (irq == -EPROBE_DEFER)
> > return irq;
> > if (irq < 0)
> > @@ -659,20 +662,47 @@ static int i2c_device_probe(struct device *dev)
> > if (!device_can_wakeup(&client->dev))
> > device_init_wakeup(&client->dev,
> > client->flags & I2C_CLIENT_WAKE);
> > +
> > + if (device_can_wakeup(&client->dev)) {
> > + int wakeirq = -ENOENT;
> > +
> > + if (dev->of_node) {
> > + wakeirq = of_irq_get_byname(dev->of_node, "wakeup");
> > + if (wakeirq == -EPROBE_DEFER)
> > + return wakeirq;
> > + }
> > +
> > + if (wakeirq > 0 && wakeirq != client->irq)
> > + status = dev_pm_set_dedicated_wake_irq(dev, wakeirq);
> > + else if (client->irq > 0)
> > + status = dev_pm_set_wake_irq(dev, wakeirq);
> > + else
> > + status = 0;
Hmm why do we need the check for if (device_can_wakeup(&client->dev)))?
Also wondering about the dev vs &client->dev usage here.. But I take
you have checked that we end up calling the runtime PM calls of the
client instead of the i2c bus controller :)
Regards,
Tony
next prev parent reply other threads:[~2015-08-03 10:21 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-30 20:14 [PATCH] i2c: allow specifying separate wakeup interrupt in device tree Dmitry Torokhov
2015-07-30 20:14 ` Dmitry Torokhov
2015-07-31 10:57 ` Vignesh R
[not found] ` <55BB54B1.80603-l0cyMroinI0@public.gmane.org>
2015-08-03 10:21 ` Tony Lindgren [this message]
2015-08-03 10:21 ` Tony Lindgren
[not found] ` <20150803102121.GO16878-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org>
2015-08-03 20:02 ` Dmitry Torokhov
2015-08-03 20:02 ` Dmitry Torokhov
2015-08-05 13:33 ` Tony Lindgren
2015-08-09 15:22 ` Wolfram Sang
2015-08-09 15:22 ` Wolfram Sang
2015-08-10 5:59 ` Dmitry Torokhov
2015-08-10 5:59 ` Dmitry Torokhov
2015-08-10 6:16 ` Wolfram Sang
2015-08-19 17:43 ` Wolfram Sang
2015-08-19 17:43 ` Wolfram Sang
2015-08-19 17:51 ` Dmitry Torokhov
2015-08-24 12:33 ` Wolfram Sang
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=20150803102121.GO16878@atomide.com \
--to=tony-4v6ys6ai5vpbdgjk7y7tuq@public.gmane.org \
--cc=dmitry.torokhov-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=mark.rutland-5wv7dgnIgG8@public.gmane.org \
--cc=mika.westerberg-VuQAYsv1563Yd54FQh9/CA@public.gmane.org \
--cc=rafael.j.wysocki-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
--cc=robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
--cc=ulf.hansson-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \
--cc=vigneshr-l0cyMroinI0@public.gmane.org \
--cc=wsa-z923LK4zBo2bacvFa/9K2g@public.gmane.org \
/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.