All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kevin Hilman <khilman@deeprootsystems.com>
To: Linus Walleij <linus.walleij@linaro.org>
Cc: Mark Brown <broonie@opensource.wolfsonmicro.com>,
	Dmitry Torokhov <dmitry.torokhov@gmail.com>,
	Felipe Balbi <balbi@ti.com>, Benoit Cousson <b-cousson@ti.com>,
	Sourav Poddar <sourav.poddar@ti.com>,
	tony@atomide.com, linux-omap@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	devicetree-discuss@lists.ozlabs.org,
	linux-arm-kernel@lists.infradead.org,
	linux-input@vger.kernel.org
Subject: Re: [PATCHv2] Input: omap4-keypad: Add pinctrl support
Date: Wed, 31 Oct 2012 21:10:09 +0100	[thread overview]
Message-ID: <87obji8kta.fsf@deeprootsystems.com> (raw)
In-Reply-To: <CACRpkdapQJY0aoam741O0fb8EeM9BLk_Psq5TaPG84J7wEvCLw@mail.gmail.com> (Linus Walleij's message of "Tue, 30 Oct 2012 15:02:23 +0100")

Linus Walleij <linus.walleij@linaro.org> writes:

> On Tue, Oct 30, 2012 at 12:34 PM, Mark Brown
> <broonie@opensource.wolfsonmicro.com> wrote:
>> On Sun, Oct 28, 2012 at 09:12:52PM +0100, Linus Walleij wrote:
>
>>> Moving this handling to bus code or anywhere else
>>> invariably implies that resource acquisition/release order
>>> does not matter, and my point is that it does.
>>
>> Doing this in the buses is definitely wrong, as you say it's not bus
>> specific.  I do however think we can usefully do this stuff in a SoC
>> specific place like a power domain, keeping the SoC integration code
>> together and out of the drivers.  IME the SoCs where you need to do
>> different things for different IPs shoudl mostly still get some reuse
>> out of such an approach.
>
> Talking to Kevin Hilman today he was also stressing that
> power domains is a good thing for handling resources, especially
> when replacing prior hacks in the custom clk code. However
> he pointed specifically to clocks and voltages, which may
> be true.
>
> What worries me is when knowledge of the hardware which
> is traditionally a concern for the device driver start to
> bubble up to the power domain (or better renamed resource
> domain if use like this, as Felipe points out).
>
> I worry that we will end up with power/resource domain
> code that start to look like this:
>
> suspend()
> switch (device.id) {
> case DEV_FOO:
>   clk_disable();
>   pinctrl_set_state();
>   power_domain_off();
> case DEV_BAR:
>   pinctrl_set_state();
>   clk_disable();
>   // Always-on domain
> case DEV_BAZ:
>   pinctrl_set_state();
>   clk_disable();
>   power_domain_off();
> case ...
>
> Mutate the above with silicon errata, specific tweaks etc that
> Felipe was mentioning.


like this, as well as a bunch more.  This is why we have a generic
description of IP blocks (omap_hwmod) which abstracts all of these
differences and keeps the PM domain layer rather simple.

I agree with Mark.  Either you have to take care of this with
conditional code in the driver, and the drivers become bloated with a
mess of SoC integration details, or you hide it away in SoC-specific
code that can handle this, and keep the drivers portable. 

Now that we have PM domains (PM domains didn't exist when we created
omap_device/omap_hwmod), I suspect the cleanest way to do this is to
create separate PM domains for each "class" of devices that have
different set of behavior.

> What is happening is that device-specific behaviour which
> traditionally handled in the driver is now inside the
> power/resource domain.
>
> piece of hardware, this would be the right thing to do,
> and I think the in-kernel examples are all "simple",
> e.g. arch/arm/mach-omap2/powerdomain* is all about
> power domains and nothing else, 

FYI... that code isn't the same as PM domain.  That code is for the
*hardware* powerdomains, not the software concept of "PM domain."  In
OMAP, PM domain is implmented at the omap_device level.  And omap_device
is the abstraction of an IP block that knows about all the PM related
register settings, clocks, HW powerdomain, voltage domain, PM related
pin-muxing etc. etc.    All of these things are abstracted in an
omap_device, so that the PM domain implementation for OMAP looks rather
simple (c.f. omap_device_pm_domain in arch/arm/plat-omap/omap_device.c.)

Note that the callbacks just call omap_device_enable(),
omap_device_disable() and all the HW ugliness, SoC-specific integration
mess is hidden away.

[...]

> I think the lesser of two evils is the distributed approach,
> and then I'm talking about pinctrl only, disregarding the
> fact that clocks and power domains are basically subject to
> the same kind of argument. I still buy into the concept of
> using power domains for exactly power domains only.
> Arguably this is an elegance opinion...

The pinctrl examples I've seen mentioned so far are all PM related
(sleep, idle, wakeup, etc.) so to me I think they still belong in
PM domains (and that's how we handle the PM related pins in OMAP.)

> I worry that the per-SoC power domain implementation
> which will live in arch/arm/mach-* as of today will become
> the new board file problem, overburdening the arch/* tree.
> Maybe I'm mistaken as to the size of these things,
> but just doing ls arch/arm/mach-omap2/powerdomain*
> makes me start worrying.

Yes, I agree that this means more code/data in arch/arm/mach-*, but
IMO, that's really where it belongs.  It really is SoC integration
details, and driver should really not know about it.

Kevin

WARNING: multiple messages have this Message-ID (diff)
From: khilman@deeprootsystems.com (Kevin Hilman)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCHv2] Input: omap4-keypad: Add pinctrl support
Date: Wed, 31 Oct 2012 21:10:09 +0100	[thread overview]
Message-ID: <87obji8kta.fsf@deeprootsystems.com> (raw)
In-Reply-To: <CACRpkdapQJY0aoam741O0fb8EeM9BLk_Psq5TaPG84J7wEvCLw@mail.gmail.com> (Linus Walleij's message of "Tue, 30 Oct 2012 15:02:23 +0100")

Linus Walleij <linus.walleij@linaro.org> writes:

> On Tue, Oct 30, 2012 at 12:34 PM, Mark Brown
> <broonie@opensource.wolfsonmicro.com> wrote:
>> On Sun, Oct 28, 2012 at 09:12:52PM +0100, Linus Walleij wrote:
>
>>> Moving this handling to bus code or anywhere else
>>> invariably implies that resource acquisition/release order
>>> does not matter, and my point is that it does.
>>
>> Doing this in the buses is definitely wrong, as you say it's not bus
>> specific.  I do however think we can usefully do this stuff in a SoC
>> specific place like a power domain, keeping the SoC integration code
>> together and out of the drivers.  IME the SoCs where you need to do
>> different things for different IPs shoudl mostly still get some reuse
>> out of such an approach.
>
> Talking to Kevin Hilman today he was also stressing that
> power domains is a good thing for handling resources, especially
> when replacing prior hacks in the custom clk code. However
> he pointed specifically to clocks and voltages, which may
> be true.
>
> What worries me is when knowledge of the hardware which
> is traditionally a concern for the device driver start to
> bubble up to the power domain (or better renamed resource
> domain if use like this, as Felipe points out).
>
> I worry that we will end up with power/resource domain
> code that start to look like this:
>
> suspend()
> switch (device.id) {
> case DEV_FOO:
>   clk_disable();
>   pinctrl_set_state();
>   power_domain_off();
> case DEV_BAR:
>   pinctrl_set_state();
>   clk_disable();
>   // Always-on domain
> case DEV_BAZ:
>   pinctrl_set_state();
>   clk_disable();
>   power_domain_off();
> case ...
>
> Mutate the above with silicon errata, specific tweaks etc that
> Felipe was mentioning.


like this, as well as a bunch more.  This is why we have a generic
description of IP blocks (omap_hwmod) which abstracts all of these
differences and keeps the PM domain layer rather simple.

I agree with Mark.  Either you have to take care of this with
conditional code in the driver, and the drivers become bloated with a
mess of SoC integration details, or you hide it away in SoC-specific
code that can handle this, and keep the drivers portable. 

Now that we have PM domains (PM domains didn't exist when we created
omap_device/omap_hwmod), I suspect the cleanest way to do this is to
create separate PM domains for each "class" of devices that have
different set of behavior.

> What is happening is that device-specific behaviour which
> traditionally handled in the driver is now inside the
> power/resource domain.
>
> piece of hardware, this would be the right thing to do,
> and I think the in-kernel examples are all "simple",
> e.g. arch/arm/mach-omap2/powerdomain* is all about
> power domains and nothing else, 

FYI... that code isn't the same as PM domain.  That code is for the
*hardware* powerdomains, not the software concept of "PM domain."  In
OMAP, PM domain is implmented at the omap_device level.  And omap_device
is the abstraction of an IP block that knows about all the PM related
register settings, clocks, HW powerdomain, voltage domain, PM related
pin-muxing etc. etc.    All of these things are abstracted in an
omap_device, so that the PM domain implementation for OMAP looks rather
simple (c.f. omap_device_pm_domain in arch/arm/plat-omap/omap_device.c.)

Note that the callbacks just call omap_device_enable(),
omap_device_disable() and all the HW ugliness, SoC-specific integration
mess is hidden away.

[...]

> I think the lesser of two evils is the distributed approach,
> and then I'm talking about pinctrl only, disregarding the
> fact that clocks and power domains are basically subject to
> the same kind of argument. I still buy into the concept of
> using power domains for exactly power domains only.
> Arguably this is an elegance opinion...

The pinctrl examples I've seen mentioned so far are all PM related
(sleep, idle, wakeup, etc.) so to me I think they still belong in
PM domains (and that's how we handle the PM related pins in OMAP.)

> I worry that the per-SoC power domain implementation
> which will live in arch/arm/mach-* as of today will become
> the new board file problem, overburdening the arch/* tree.
> Maybe I'm mistaken as to the size of these things,
> but just doing ls arch/arm/mach-omap2/powerdomain*
> makes me start worrying.

Yes, I agree that this means more code/data in arch/arm/mach-*, but
IMO, that's really where it belongs.  It really is SoC integration
details, and driver should really not know about it.

Kevin

  parent reply	other threads:[~2012-10-31 20:10 UTC|newest]

Thread overview: 162+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-10-22 13:13 [PATCHv2] Input: omap4-keypad: Add pinctrl support Sourav Poddar
2012-10-22 13:13 ` Sourav Poddar
2012-10-22 13:13 ` Sourav Poddar
2012-10-22 15:50 ` Dmitry Torokhov
2012-10-22 15:50   ` Dmitry Torokhov
2012-10-23  9:13   ` Linus Walleij
2012-10-23  9:13     ` Linus Walleij
2012-10-23  9:35     ` Benoit Cousson
2012-10-23  9:35       ` Benoit Cousson
2012-10-23  9:35       ` Benoit Cousson
2012-10-23 10:04       ` Linus Walleij
2012-10-23 10:04         ` Linus Walleij
2012-10-23 10:03         ` Felipe Balbi
2012-10-23 10:03           ` Felipe Balbi
2012-10-23 10:03           ` Felipe Balbi
2012-10-23 10:23           ` Thomas Petazzoni
2012-10-23 10:23             ` Thomas Petazzoni
2012-10-23 10:29             ` Linus Walleij
2012-10-23 10:29               ` Linus Walleij
2012-10-23 10:29               ` Felipe Balbi
2012-10-23 10:29                 ` Felipe Balbi
2012-10-23 10:29                 ` Felipe Balbi
2012-10-23 10:45                 ` Linus Walleij
2012-10-23 10:45                   ` Linus Walleij
2012-10-23 10:42                   ` Felipe Balbi
2012-10-23 10:42                     ` Felipe Balbi
2012-10-23 10:42                     ` Felipe Balbi
2012-10-23 11:11                   ` Thomas Petazzoni
2012-10-23 11:11                     ` Thomas Petazzoni
2012-10-23 17:02           ` Mitch Bradley
2012-10-23 17:02             ` Mitch Bradley
2012-10-23 17:20             ` Felipe Balbi
2012-10-23 17:20               ` Felipe Balbi
2012-10-23 17:20               ` Felipe Balbi
2012-10-23 17:51               ` Mitch Bradley
2012-10-23 17:51                 ` Mitch Bradley
2012-10-23 17:51                 ` Felipe Balbi
2012-10-23 17:51                   ` Felipe Balbi
2012-10-23 17:51                   ` Felipe Balbi
2012-10-23  9:18   ` Benoit Cousson
2012-10-23  9:18     ` Benoit Cousson
2012-10-23  9:18     ` Benoit Cousson
2012-10-23 20:02     ` Dmitry Torokhov
2012-10-23 20:02       ` Dmitry Torokhov
2012-10-24  8:37       ` Felipe Balbi
2012-10-24  8:37         ` Felipe Balbi
2012-10-24  8:37         ` Felipe Balbi
2012-10-24 16:14         ` Dmitry Torokhov
2012-10-24 16:14           ` Dmitry Torokhov
2012-10-24 16:51           ` Linus Walleij
2012-10-24 16:51             ` Linus Walleij
2012-10-24 17:28             ` Dmitry Torokhov
2012-10-24 17:28               ` Dmitry Torokhov
2012-10-24 18:58               ` Felipe Balbi
2012-10-24 18:58                 ` Felipe Balbi
2012-10-24 18:58                 ` Felipe Balbi
2012-10-25 20:59                 ` Mark Brown
2012-10-25 20:59                   ` Mark Brown
2012-10-25 20:59                   ` Mark Brown
2012-10-26  6:20                   ` Felipe Balbi
2012-10-26  6:20                     ` Felipe Balbi
2012-10-26  6:20                     ` Felipe Balbi
2012-10-26 16:03                     ` Mark Brown
2012-10-26 16:03                       ` Mark Brown
2012-10-29 19:49                       ` Felipe Balbi
2012-10-29 19:49                         ` Felipe Balbi
2012-10-29 19:49                         ` Felipe Balbi
2012-10-30 11:24                         ` Mark Brown
2012-10-30 11:24                           ` Mark Brown
2012-10-30 11:49                           ` Felipe Balbi
2012-10-30 11:49                             ` Felipe Balbi
2012-10-30 11:49                             ` Felipe Balbi
2012-10-30 14:07                             ` Mark Brown
2012-10-30 14:07                               ` Mark Brown
2012-10-30 14:16                               ` Linus Walleij
2012-10-30 14:16                                 ` Linus Walleij
2012-10-30 14:54                                 ` Mark Brown
2012-10-30 14:54                                   ` Mark Brown
2012-10-30 15:16                               ` Felipe Balbi
2012-10-30 15:16                                 ` Felipe Balbi
2012-10-30 15:16                                 ` Felipe Balbi
2012-10-30 15:58                                 ` Mark Brown
2012-10-30 15:58                                   ` Mark Brown
2012-10-30 17:25                                   ` Felipe Balbi
2012-10-30 17:25                                     ` Felipe Balbi
2012-10-30 17:25                                     ` Felipe Balbi
2012-10-30 18:20                                     ` Dmitry Torokhov
2012-10-30 18:20                                       ` Dmitry Torokhov
2012-10-30 18:48                                       ` Felipe Balbi
2012-10-30 18:48                                         ` Felipe Balbi
2012-10-30 18:48                                         ` Felipe Balbi
2012-10-30 18:37                                     ` Mark Brown
2012-10-30 18:37                                       ` Mark Brown
2012-10-30 21:51                                       ` Linus Walleij
2012-10-30 21:51                                         ` Linus Walleij
2012-10-30 22:57                                         ` Rafael J. Wysocki
2012-10-30 22:57                                           ` Rafael J. Wysocki
2012-11-02 18:26                                         ` Mark Brown
2012-11-02 18:26                                           ` Mark Brown
2012-10-30 14:11                             ` Linus Walleij
2012-10-30 14:11                               ` Linus Walleij
2012-10-28 20:12               ` Linus Walleij
2012-10-28 20:12                 ` Linus Walleij
2012-10-30 11:34                 ` Mark Brown
2012-10-30 11:34                   ` Mark Brown
2012-10-30 11:34                   ` Mark Brown
2012-10-30 14:02                   ` Linus Walleij
2012-10-30 14:02                     ` Linus Walleij
2012-10-30 14:37                     ` Mark Brown
2012-10-30 14:37                       ` Mark Brown
2012-10-31 20:10                     ` Kevin Hilman [this message]
2012-10-31 20:10                       ` Kevin Hilman
     [not found]                       ` <87obji8kta.fsf-1D3HCaltpLuhEniVeURVKkEOCMrvLtNR@public.gmane.org>
2012-11-01  8:54                         ` Linus Walleij
2012-11-01  8:54                           ` Linus Walleij
2012-11-01  8:56                           ` Fwd: " Linus Walleij
2012-11-01  8:56                             ` Linus Walleij
2012-11-01 11:42                             ` Kevin Hilman
2012-11-01 11:42                               ` Kevin Hilman
2012-11-01 13:22                               ` Linus Walleij
2012-11-01 13:22                                 ` Linus Walleij
2012-11-01 12:07                           ` Mark Brown
2012-11-01 12:07                             ` Mark Brown
2012-11-01 14:01                             ` Linus Walleij
2012-11-01 14:01                               ` Linus Walleij
2012-11-01 14:19                               ` Mark Brown
2012-11-01 14:19                                 ` Mark Brown
2012-11-11 12:32                               ` Linus Walleij
2012-11-11 12:32                                 ` Linus Walleij
2012-10-31 13:19                 ` Jean-Christophe PLAGNIOL-VILLARD
2012-10-31 13:19                   ` Jean-Christophe PLAGNIOL-VILLARD
2012-10-24 16:52           ` Felipe Balbi
2012-10-24 16:52             ` Felipe Balbi
2012-10-24 16:52             ` Felipe Balbi
2012-10-24 17:13             ` Linus Walleij
2012-10-24 17:13               ` Linus Walleij
2012-10-24 17:34             ` Dmitry Torokhov
2012-10-24 17:34               ` Dmitry Torokhov
2012-10-24 17:46           ` Benoit Cousson
2012-10-24 17:46             ` Benoit Cousson
2012-10-24 17:46             ` Benoit Cousson
2012-10-24 12:54       ` Linus Walleij
2012-10-24 12:54         ` Linus Walleij
2012-10-24 16:18         ` Dmitry Torokhov
2012-10-24 16:18           ` Dmitry Torokhov
2012-10-24 16:57           ` Felipe Balbi
2012-10-24 16:57             ` Felipe Balbi
2012-10-24 16:57             ` Felipe Balbi
2012-10-24 17:18             ` Linus Walleij
2012-10-24 17:18               ` Linus Walleij
2012-10-24 17:58             ` Dmitry Torokhov
2012-10-24 17:58               ` Dmitry Torokhov
2012-10-24 19:10               ` Felipe Balbi
2012-10-24 19:10                 ` Felipe Balbi
2012-10-24 19:10                 ` Felipe Balbi
2012-10-24 19:38                 ` Dmitry Torokhov
2012-10-24 19:38                   ` Dmitry Torokhov
2012-10-24 19:38                   ` Dmitry Torokhov
2012-10-24 19:51                   ` Felipe Balbi
2012-10-24 19:51                     ` Felipe Balbi
2012-10-24 19:51                     ` Felipe Balbi
2012-10-24 17:01           ` Linus Walleij
2012-10-24 17:01             ` Linus Walleij

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=87obji8kta.fsf@deeprootsystems.com \
    --to=khilman@deeprootsystems.com \
    --cc=b-cousson@ti.com \
    --cc=balbi@ti.com \
    --cc=broonie@opensource.wolfsonmicro.com \
    --cc=devicetree-discuss@lists.ozlabs.org \
    --cc=dmitry.torokhov@gmail.com \
    --cc=linus.walleij@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-input@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-omap@vger.kernel.org \
    --cc=sourav.poddar@ti.com \
    --cc=tony@atomide.com \
    /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.