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: > > > +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
Attachment:
pgpBKwtwX5vzX.pgp
Description: PGP signature