linux-i2c.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Mika Westerberg <mika.westerberg@linux.intel.com>
To: Kevin Hilman <khilman@linaro.org>
Cc: linux-i2c@vger.kernel.org, Wolfram Sang <wsa@the-dreams.de>,
	"Rafael J. Wysocki" <rafael.j.wysocki@intel.com>,
	linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org,
	Lv Zheng <lv.zheng@intel.com>, Aaron Lu <aaron.lu@intel.com>,
	linux-arm-kernel@lists.infradead.org,
	Mark Brown <broonie@kernel.org>,
	Dmitry Torokhov <dmitry.torokhov@gmail.com>,
	Mauro Carvalho Chehab <m.chehab@samsung.com>,
	Samuel Ortiz <sameo@linux.intel.com>,
	Lee Jones <lee.jones@linaro.org>, Arnd Bergmann <arnd@arndb.de>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Liam Girdwood <lgirdwood@gmail.com>,
	Kyungmin Park <kyungmin.park@samsung.com>
Subject: Re: [PATCH v2 1/9] i2c: prepare runtime PM support for I2C client devices
Date: Sun, 15 Sep 2013 09:41:39 +0300	[thread overview]
Message-ID: <20130915064139.GJ7393@intel.com> (raw)
In-Reply-To: <87ioy4e8bw.fsf@linaro.org>

On Fri, Sep 13, 2013 at 02:10:43PM -0700, Kevin Hilman wrote:
> >
> > 	// This makes sure that the controller itself is powered on
> > 	// (adapter device follows its parent which is the controller). The
> > 	// controller is attached to the ACPI power domain so it is
> > 	// brought to D0 now.
> > 	pm_runtime_get_sync(&client->adapter->dev);
> >
> > 	// This binds the client device to the ACPI power domain, and in
> > 	// addition to that brings the client device to D0.
> 
> OK, then here is where the problem is, because you're building ACPI
> assumptions into the core. For non-ACPI devices, this part is a nop, so
> the client device is still powered off, which breaks the assumptions
> below.

We expect that once the driver ->probe() is called, and it doesn't
participate the runtime PM prepared here, the device is regarded as powered
on, runtime PM active.

If the driver participates in runtime PM, it needs to power on the device
and then call pm_runtime_put() to suspend the device.

> > 	if (ACPI_HANDLE(&client->dev))
> > 		acpi_dev_pm_attach(&client->dev, true);
> >
> > 	// Increase the refcount so that client can start runtime PM
> > 	// transitions when it calls _put().
> > 	pm_runtime_get_noresume(&client->dev);
> 
> > 	// Mark the device being active as
> > 	//  1) In ACPI case we know that is true as we just powered the
> > 	//     device on.
> > 	//  2) We treat the device by default to be runtime PM active and
> > 	//     powered on (that's in the changelog and should follow what
> > 	//     the PCI bus did).
> > 	pm_runtime_set_active(&client->dev);
> >
> > 	// Enable runtime PM but nothing happens yet as long as the client
> > 	// driver doesn't call _put().
> > 	pm_runtime_enable(&client->dev);
> >
> > So, yes there might be a disconnect between the runtime PM state and the
> > device HW state now (same is with default to suspended).
> 
> Yes, but until now, default to suspended has been assumed, so any
> changes to that will likely require more thorough auditing of other drivers.

I agree. And it looks like I missed few existing drivers as well. I'm going
to update them in the next version of the series.

There's also a less intrusive way of fixing the problem we see with ACPI
enabled I2C devices:

	1. In I2C core i2c_device_probe() we power on the I2C controller
	and attach the client device to the ACPI power domain. Just like in
	this patch but we don't touch the I2C client device runtime PM.

	-> This should allow the existing drivers to keep using whatever
	runtime PM strategy they have chosen.

	2. For ACPI enumerated I2C client devices drivers we need to
	implement the runtime PM in order to save power (otherwise the
	devices will be left powered on).

and do the same for SPI devices as well.

Then only thing that changes for non-ACPI devices is that the controller
will be powered on during the client device probe (well, and during
remove).

Thoughts?

  reply	other threads:[~2013-09-15  6:41 UTC|newest]

Thread overview: 59+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-09-11 15:32 [PATCH v2 0/9] runtime PM support for I2C and SPI client devices Mika Westerberg
2013-09-11 15:32 ` [PATCH v2 1/9] i2c: prepare runtime PM support for I2C " Mika Westerberg
2013-09-12 21:34   ` Kevin Hilman
     [not found]     ` <87vc25pvvm.fsf-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2013-09-12 21:40       ` Kevin Hilman
2013-09-13  6:54     ` Mika Westerberg
2013-09-13  9:59       ` Mark Brown
     [not found]         ` <20130913095950.GA29403-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2013-09-13 10:16           ` Mika Westerberg
2013-09-13 10:31             ` Mark Brown
     [not found]               ` <20130913103152.GE29403-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2013-09-13 11:50                 ` Mika Westerberg
     [not found]                   ` <20130913115035.GB7393-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2013-09-13 12:10                     ` Mark Brown
2013-09-13 14:30       ` Kevin Hilman
2013-09-13 14:50         ` Mika Westerberg
     [not found]           ` <20130913145022.GC7393-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2013-09-13 17:31             ` Mika Westerberg
2013-09-13 21:10               ` Kevin Hilman
2013-09-15  6:41                 ` Mika Westerberg [this message]
2013-09-15 12:47                   ` Mark Brown
     [not found]                     ` <20130915124744.GW29403-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2013-09-15 13:28                       ` Mika Westerberg
2013-09-16 10:12                         ` Mark Brown
     [not found]                           ` <20130916101249.GX29403-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2013-09-16 14:38                             ` Mika Westerberg
     [not found]                               ` <20130916143811.GP7393-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2013-09-16 14:46                                 ` Graeme Gregory
2013-09-16 15:13                                   ` Mika Westerberg
2013-09-13 15:14       ` Sylwester Nawrocki
     [not found]         ` <52332BF0.4060605-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
2013-09-13 15:40           ` Mika Westerberg
     [not found]             ` <20130913154013.GD7393-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2013-09-15 13:48               ` Sylwester Nawrocki
     [not found]                 ` <5235BA9C.1090509-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2013-09-16  8:47                   ` Mika Westerberg
2013-09-16 19:07                     ` Rafael J. Wysocki
     [not found]                       ` <1861747.RtS0ZLgUUN-sKB8Sp2ER+y1GS7QM15AGw@public.gmane.org>
2013-09-16 23:31                         ` Mark Brown
     [not found]                           ` <20130916233111.GB21013-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2013-09-17  1:25                             ` Rafael J. Wysocki
     [not found]                               ` <1820315.QOOAzSjac3-sKB8Sp2ER+y1GS7QM15AGw@public.gmane.org>
2013-09-17 10:48                                 ` Mark Brown
2013-09-17 11:00                         ` Mika Westerberg
     [not found]                           ` <20130917110021.GU7393-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2013-09-17 21:38                             ` Rafael J. Wysocki
     [not found]                     ` <20130916084708.GN7393-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2013-09-17 11:07                       ` Sylwester Nawrocki
2013-09-24  5:18                         ` Mika Westerberg
2013-09-12 22:06   ` Sylwester Nawrocki
2013-09-13  1:14     ` Aaron Lu
     [not found]       ` <523266EC.1060501-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2013-09-13 10:02         ` Mark Brown
2013-09-11 15:32 ` [PATCH v2 2/9] i2c: attach/detach I2C client device to the ACPI power domain Mika Westerberg
2013-09-11 15:32 ` [PATCH v2 3/9] Input: misc - convert existing I2C client drivers to use I2C core runtime PM Mika Westerberg
2013-09-11 15:32 ` [PATCH v2 4/9] [media] s5p-tv: convert " Mika Westerberg
2013-09-11 15:32 ` [PATCH v2 5/9] drivers/misc: convert existing I2C clients driver " Mika Westerberg
2013-09-12 21:29   ` Greg Kroah-Hartman
2013-09-11 15:32 ` [PATCH v2 6/9] mfd: wm8994: convert " Mika Westerberg
2013-09-11 16:12   ` Samuel Ortiz
2013-09-12  9:24     ` Mika Westerberg
     [not found]       ` <20130912092447.GJ7393-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2013-09-12  9:28         ` Samuel Ortiz
2013-09-11 15:32 ` [PATCH v2 7/9] ASoC: codecs: convert existing I2C client drivers " Mika Westerberg
     [not found]   ` <1378913560-2752-8-git-send-email-mika.westerberg-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2013-09-11 15:44     ` Mark Brown
2013-09-11 15:32 ` [PATCH v2 8/9] spi: prepare runtime PM support for SPI devices Mika Westerberg
     [not found]   ` <1378913560-2752-9-git-send-email-mika.westerberg-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2013-09-11 15:51     ` Mark Brown
2013-09-12  9:27       ` Mika Westerberg
     [not found]         ` <20130912092743.GK7393-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2013-09-12  9:31           ` Mark Brown
     [not found]             ` <20130912093145.GA29403-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2013-09-12  9:43               ` Mika Westerberg
2013-09-12 11:04                 ` Rafael J. Wysocki
2013-09-12 11:04                   ` Wolfram Sang
2013-09-12 12:20                     ` Mika Westerberg
     [not found]                   ` <14222641.vVF4lKBqCB-sKB8Sp2ER+y1GS7QM15AGw@public.gmane.org>
2013-09-12 12:25                     ` Mika Westerberg
2013-09-11 15:32 ` [PATCH v2 9/9] spi: attach/detach SPI device to the ACPI power domain Mika Westerberg
2013-09-11 15:51   ` Mark Brown
     [not found] ` <1378913560-2752-1-git-send-email-mika.westerberg-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2013-09-11 15:53   ` [PATCH v2 0/9] runtime PM support for I2C and SPI client devices Mark Brown

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=20130915064139.GJ7393@intel.com \
    --to=mika.westerberg@linux.intel.com \
    --cc=aaron.lu@intel.com \
    --cc=arnd@arndb.de \
    --cc=broonie@kernel.org \
    --cc=dmitry.torokhov@gmail.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=khilman@linaro.org \
    --cc=kyungmin.park@samsung.com \
    --cc=lee.jones@linaro.org \
    --cc=lgirdwood@gmail.com \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-i2c@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lv.zheng@intel.com \
    --cc=m.chehab@samsung.com \
    --cc=rafael.j.wysocki@intel.com \
    --cc=sameo@linux.intel.com \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).