Thread (33 messages) 33 messages, 7 authors, 2012-08-24

Re: [PATCH v4 1/3] Runtime Interpreted Power Sequences

From: Thierry Reding <hidden>
Date: 2012-08-21 08:33:49
Also in: linux-devicetree, linux-fbdev, lkml

On Tue, Aug 21, 2012 at 05:22:12PM +0900, Alex Courbot wrote:
Hi Tomi,

On Tuesday 21 August 2012 15:44:29 Tomi Valkeinen wrote:
quoted
quoted
+Problem
+-------
+One very common board-dependent code is the out-of-driver code that is
used to +turn a device on or off. For instance, SoC boards very commonly
use a GPIO +(abstracted to a regulator or not) to control the power
supply of a backlight, +disabling it when the backlight is not used in
order to save power. The GPIO +that should be used, however, as well as
the exact power sequence that may +also involve other resources, is
board-dependent and thus unknown of the driver. +
+This was previously addressed by having hooks in the device's platform
data that +are called whenever the state of the device might reflect a
power change. This +approach, however, introduces board-dependant code
into the kernel and is not +compatible with the device tree.
I've been having the same problems on OMAP display related code, but the
problem has always been fixable by just having the driver to use a
common framework to do the job (a framework which may not have existed
at the time). The problems have never been board specific in the end,
but device specific.

Can you describe your particular HW problem a bit more? In the backlight
case, what exactly requires the delays and the sequence you show in the
example to enable/disable the backlight?
In the example, the sequence (including delays) is clearly stated by the 
backlight specification, which is part of the panel specification. The backlight 
uses a PWM, which makes it suitable to use the generic PWM backlight driver, 
but how to turn the backlight on and off is very backlight specific. The power 
sequences allow to replace the board-specific backlight callbacks by sequences 
in the DT.

On the other hand, I saw your discussion with Laurent about the panel 
framework, and I wonder how this would fit into it. Backlights are typically 
embedded within panels. Power sequences are a good way to deal with the 
absence of specific drivers for every panels, since they allow to tailor the 
behavior of generic drivers to fit particular needs. But if every panel comes 
with its own driver (which would define the backlight device using the most 
appropriate driver), then it could just as well perform its backlight's 
sequences via regular callbacks. In this particular case, there would be no 
need for power sequences.

Power sequences are supposed to go beyond backlight drivers and support all 
sort of devices (I have heard that it could be useful for modems as well), but 
I wonder how relevant they are when there is a proper driver for a device. I 
hate to question my own work but now I cannot help but think that a proper 
driver could do the same job. So what are we trying to achieve with power 
sequences? Are we trying to avoid a drivers' explosion by keeping some of the 
specifics out of them? Which approach would be preferable? Are there cases 
where a dedicated driver could not replace power sequences?
I suppose power sequences aren't needed if you have a specific driver
for every panel out there. However that also means that you'd have to
write drivers for literally every panel that requires support. In the
end this will just result in discussion down the road how the common
functionality can be refactored and we may end up with power sequences
again.

Also as you mentioned, power sequences are useful for a number of other
use-cases. Without power sequences you'll have to potentially create
extra frameworks tha reimplement parts of the power sequence code for
their specific hardware needs.

Thierry

Attachments

  • (unnamed) [application/pgp-signature] 836 bytes
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help