Re: [PATCH] pwm-backlight: add support for device tree gpio control

2013-11-11 Thread Thierry Reding
On Fri, Sep 27, 2013 at 06:35:31AM -0700, Mike Dunn wrote:
> On 09/26/2013 05:50 AM, Thierry Reding wrote:
> > On Thu, Sep 26, 2013 at 03:26:13PM +0300, Tomi Valkeinen wrote:
> >> On 26/09/13 15:02, Thierry Reding wrote:
> >>> On Thu, Sep 26, 2013 at 01:13:18PM +0300, Tomi Valkeinen wrote:
>  On 11/09/13 14:40, Mike Dunn wrote:
> > On 09/10/2013 10:21 AM, Thierry Reding wrote:
> 
> >> Do you have a real setup that actually needs multiple GPIOs? Usually
> >> such a setup requires some kind of timing or other additional 
> >> constraint
> >> which can't be represented by this simple binding.
> >>
> >> Looking at the Palm Treo code it seems like the reason why multiple
> >> GPIOs are needed is because one is to enable the backlight, while the
> >> other is in fact used to enable the LCD panel. 
> >
> >
> > There are actually four GPIOs involved!  (There is an embarrasingly 
> > horrible
> > hack in arch/arm/mach-pxa/palmtreo.c that handles the others.)  One is 
> > almost
> > certainly simply backlight power.  The other three are probably LCD 
> > related.
> 
>  When you say "power", do you mean the gpio enables a regulator to feed
>  power to the backlight? If so, wouldn't that be a regulator, not gpio,
>  from the bl driver's point of view?
> 
>  Generally speaking, this same problem appears in many places, but for
>  some reason especially in display. I'm a bit hesitant in adding "free
>  form" gpio/regulator support for drivers, as, as Thierry pointed out,
>  there are often timing requirements, or sometimes the gpios are
>  inverted, or sometimes the gpio is, in fact, a reset gpio, where you'll
>  assert the gpio for a short moment only.
> >>>
> >>> I sent out another series a few days ago that somewhat obsoletes this
> >>> patch. What it does is basically add a single enable GPIO that can be
> >>> used to turn the backlight on and off. In a separate patch, support is
> >>> added for a power regulator. The combination of both should be able to
> >>> cover the majority of use-cases.
> >>
> >> But Mike's case required 4 GPIOs? Or can that be reduced to one gpio and
> >> one regulator?
> > 
> > Well, at least for the backlight it only seemed to involve a single
> > GPIO. The other three were probably related to LCD and therefore not
> > really suitable for a backlight driver. Traditionally it has been that
> > the backlight driver handled these things as well (via the callbacks
> > installed by board setup code). While really they should be handled by a
> > separate driver (for the LCD).
> 
> 
> Yes, this is currently my best guess.  This is reverse-engineered and
> unfortunately I'm not yet able to accurately describe my particular use-case.
> Probably as wacky as anything you can imagine, Thierry :)
> 
> The gpio and regulator patches will probably suffice.  Thierry, can you please
> point me to those patches?  I don't see them in your gitorious tree.  If they
> were posted to linux-pwm, I missed them; sorry.

I've stumbled across this email and it's not marked as answered, so here
goes: these patches will be part of my pull request for 3.13. They
should now be in my tree, although that's now moved to kernel.org. You
can find it here:


https://git.kernel.org/cgit/linux/kernel/git/thierry.reding/linux-pwm.git

Thierry


pgpOyXmwBGnN1.pgp
Description: PGP signature


Re: [PATCH] pwm-backlight: add support for device tree gpio control

2013-11-11 Thread Thierry Reding
On Fri, Sep 27, 2013 at 06:35:31AM -0700, Mike Dunn wrote:
 On 09/26/2013 05:50 AM, Thierry Reding wrote:
  On Thu, Sep 26, 2013 at 03:26:13PM +0300, Tomi Valkeinen wrote:
  On 26/09/13 15:02, Thierry Reding wrote:
  On Thu, Sep 26, 2013 at 01:13:18PM +0300, Tomi Valkeinen wrote:
  On 11/09/13 14:40, Mike Dunn wrote:
  On 09/10/2013 10:21 AM, Thierry Reding wrote:
 
  Do you have a real setup that actually needs multiple GPIOs? Usually
  such a setup requires some kind of timing or other additional 
  constraint
  which can't be represented by this simple binding.
 
  Looking at the Palm Treo code it seems like the reason why multiple
  GPIOs are needed is because one is to enable the backlight, while the
  other is in fact used to enable the LCD panel. 
 
 
  There are actually four GPIOs involved!  (There is an embarrasingly 
  horrible
  hack in arch/arm/mach-pxa/palmtreo.c that handles the others.)  One is 
  almost
  certainly simply backlight power.  The other three are probably LCD 
  related.
 
  When you say power, do you mean the gpio enables a regulator to feed
  power to the backlight? If so, wouldn't that be a regulator, not gpio,
  from the bl driver's point of view?
 
  Generally speaking, this same problem appears in many places, but for
  some reason especially in display. I'm a bit hesitant in adding free
  form gpio/regulator support for drivers, as, as Thierry pointed out,
  there are often timing requirements, or sometimes the gpios are
  inverted, or sometimes the gpio is, in fact, a reset gpio, where you'll
  assert the gpio for a short moment only.
 
  I sent out another series a few days ago that somewhat obsoletes this
  patch. What it does is basically add a single enable GPIO that can be
  used to turn the backlight on and off. In a separate patch, support is
  added for a power regulator. The combination of both should be able to
  cover the majority of use-cases.
 
  But Mike's case required 4 GPIOs? Or can that be reduced to one gpio and
  one regulator?
  
  Well, at least for the backlight it only seemed to involve a single
  GPIO. The other three were probably related to LCD and therefore not
  really suitable for a backlight driver. Traditionally it has been that
  the backlight driver handled these things as well (via the callbacks
  installed by board setup code). While really they should be handled by a
  separate driver (for the LCD).
 
 
 Yes, this is currently my best guess.  This is reverse-engineered and
 unfortunately I'm not yet able to accurately describe my particular use-case.
 Probably as wacky as anything you can imagine, Thierry :)
 
 The gpio and regulator patches will probably suffice.  Thierry, can you please
 point me to those patches?  I don't see them in your gitorious tree.  If they
 were posted to linux-pwm, I missed them; sorry.

I've stumbled across this email and it's not marked as answered, so here
goes: these patches will be part of my pull request for 3.13. They
should now be in my tree, although that's now moved to kernel.org. You
can find it here:


https://git.kernel.org/cgit/linux/kernel/git/thierry.reding/linux-pwm.git

Thierry


pgpOyXmwBGnN1.pgp
Description: PGP signature


Re: [PATCH] pwm-backlight: add support for device tree gpio control

2013-09-27 Thread Mike Dunn
On 09/26/2013 05:50 AM, Thierry Reding wrote:
> On Thu, Sep 26, 2013 at 03:26:13PM +0300, Tomi Valkeinen wrote:
>> On 26/09/13 15:02, Thierry Reding wrote:
>>> On Thu, Sep 26, 2013 at 01:13:18PM +0300, Tomi Valkeinen wrote:
 On 11/09/13 14:40, Mike Dunn wrote:
> On 09/10/2013 10:21 AM, Thierry Reding wrote:

>> Do you have a real setup that actually needs multiple GPIOs? Usually
>> such a setup requires some kind of timing or other additional constraint
>> which can't be represented by this simple binding.
>>
>> Looking at the Palm Treo code it seems like the reason why multiple
>> GPIOs are needed is because one is to enable the backlight, while the
>> other is in fact used to enable the LCD panel. 
>
>
> There are actually four GPIOs involved!  (There is an embarrasingly 
> horrible
> hack in arch/arm/mach-pxa/palmtreo.c that handles the others.)  One is 
> almost
> certainly simply backlight power.  The other three are probably LCD 
> related.

 When you say "power", do you mean the gpio enables a regulator to feed
 power to the backlight? If so, wouldn't that be a regulator, not gpio,
 from the bl driver's point of view?

 Generally speaking, this same problem appears in many places, but for
 some reason especially in display. I'm a bit hesitant in adding "free
 form" gpio/regulator support for drivers, as, as Thierry pointed out,
 there are often timing requirements, or sometimes the gpios are
 inverted, or sometimes the gpio is, in fact, a reset gpio, where you'll
 assert the gpio for a short moment only.
>>>
>>> I sent out another series a few days ago that somewhat obsoletes this
>>> patch. What it does is basically add a single enable GPIO that can be
>>> used to turn the backlight on and off. In a separate patch, support is
>>> added for a power regulator. The combination of both should be able to
>>> cover the majority of use-cases.
>>
>> But Mike's case required 4 GPIOs? Or can that be reduced to one gpio and
>> one regulator?
> 
> Well, at least for the backlight it only seemed to involve a single
> GPIO. The other three were probably related to LCD and therefore not
> really suitable for a backlight driver. Traditionally it has been that
> the backlight driver handled these things as well (via the callbacks
> installed by board setup code). While really they should be handled by a
> separate driver (for the LCD).


Yes, this is currently my best guess.  This is reverse-engineered and
unfortunately I'm not yet able to accurately describe my particular use-case.
Probably as wacky as anything you can imagine, Thierry :)

The gpio and regulator patches will probably suffice.  Thierry, can you please
point me to those patches?  I don't see them in your gitorious tree.  If they
were posted to linux-pwm, I missed them; sorry.

Thanks,
Mike

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH] pwm-backlight: add support for device tree gpio control

2013-09-27 Thread Tomi Valkeinen
On 26/09/13 15:50, Thierry Reding wrote:

>> I thought the NAK was for the DT parts, not for the sequences as such. I
>> don't remember anyone shooting down the idea of defining power sequences
>> inside a driver.
> 
> Yes, but the DT parts were the primary reason why they were written in
> the first place. Without DT we can just use the existing hooks to do the
> sequencing. There is not much to be gained from power sequences.

Board hooks? Those cannot be used with DT boot.

But yes, the power sequences without DT (or platform data) parts cannot
handle with board-specific-things. I still think it'd be a very nice
thing to have inside the drivers. A single driver could more easily
handle bunch of somewhat similar devices, by specifying power sequences
in a table, one sequence for each device.

> There is unfortunately always the next crazy setup that one can think
> of. I personally prefer to support what we have (or at least the
> majority of that) with something generic and tackle the more exotic
> setups later on (or when they appear, as the case may be).
> 
> As things stand right now, there's no way to get the simplest panel
> setup to work properly if you use DT. By adding both an enable GPIO and
> a power supply regulator we can at least cover the sane use-cases with
> some sane and pretty simple code.

Sure, no disagreement there.

 Tomi




signature.asc
Description: OpenPGP digital signature


Re: [PATCH] pwm-backlight: add support for device tree gpio control

2013-09-27 Thread Tomi Valkeinen
On 26/09/13 15:50, Thierry Reding wrote:

 I thought the NAK was for the DT parts, not for the sequences as such. I
 don't remember anyone shooting down the idea of defining power sequences
 inside a driver.
 
 Yes, but the DT parts were the primary reason why they were written in
 the first place. Without DT we can just use the existing hooks to do the
 sequencing. There is not much to be gained from power sequences.

Board hooks? Those cannot be used with DT boot.

But yes, the power sequences without DT (or platform data) parts cannot
handle with board-specific-things. I still think it'd be a very nice
thing to have inside the drivers. A single driver could more easily
handle bunch of somewhat similar devices, by specifying power sequences
in a table, one sequence for each device.

 There is unfortunately always the next crazy setup that one can think
 of. I personally prefer to support what we have (or at least the
 majority of that) with something generic and tackle the more exotic
 setups later on (or when they appear, as the case may be).
 
 As things stand right now, there's no way to get the simplest panel
 setup to work properly if you use DT. By adding both an enable GPIO and
 a power supply regulator we can at least cover the sane use-cases with
 some sane and pretty simple code.

Sure, no disagreement there.

 Tomi




signature.asc
Description: OpenPGP digital signature


Re: [PATCH] pwm-backlight: add support for device tree gpio control

2013-09-27 Thread Mike Dunn
On 09/26/2013 05:50 AM, Thierry Reding wrote:
 On Thu, Sep 26, 2013 at 03:26:13PM +0300, Tomi Valkeinen wrote:
 On 26/09/13 15:02, Thierry Reding wrote:
 On Thu, Sep 26, 2013 at 01:13:18PM +0300, Tomi Valkeinen wrote:
 On 11/09/13 14:40, Mike Dunn wrote:
 On 09/10/2013 10:21 AM, Thierry Reding wrote:

 Do you have a real setup that actually needs multiple GPIOs? Usually
 such a setup requires some kind of timing or other additional constraint
 which can't be represented by this simple binding.

 Looking at the Palm Treo code it seems like the reason why multiple
 GPIOs are needed is because one is to enable the backlight, while the
 other is in fact used to enable the LCD panel. 


 There are actually four GPIOs involved!  (There is an embarrasingly 
 horrible
 hack in arch/arm/mach-pxa/palmtreo.c that handles the others.)  One is 
 almost
 certainly simply backlight power.  The other three are probably LCD 
 related.

 When you say power, do you mean the gpio enables a regulator to feed
 power to the backlight? If so, wouldn't that be a regulator, not gpio,
 from the bl driver's point of view?

 Generally speaking, this same problem appears in many places, but for
 some reason especially in display. I'm a bit hesitant in adding free
 form gpio/regulator support for drivers, as, as Thierry pointed out,
 there are often timing requirements, or sometimes the gpios are
 inverted, or sometimes the gpio is, in fact, a reset gpio, where you'll
 assert the gpio for a short moment only.

 I sent out another series a few days ago that somewhat obsoletes this
 patch. What it does is basically add a single enable GPIO that can be
 used to turn the backlight on and off. In a separate patch, support is
 added for a power regulator. The combination of both should be able to
 cover the majority of use-cases.

 But Mike's case required 4 GPIOs? Or can that be reduced to one gpio and
 one regulator?
 
 Well, at least for the backlight it only seemed to involve a single
 GPIO. The other three were probably related to LCD and therefore not
 really suitable for a backlight driver. Traditionally it has been that
 the backlight driver handled these things as well (via the callbacks
 installed by board setup code). While really they should be handled by a
 separate driver (for the LCD).


Yes, this is currently my best guess.  This is reverse-engineered and
unfortunately I'm not yet able to accurately describe my particular use-case.
Probably as wacky as anything you can imagine, Thierry :)

The gpio and regulator patches will probably suffice.  Thierry, can you please
point me to those patches?  I don't see them in your gitorious tree.  If they
were posted to linux-pwm, I missed them; sorry.

Thanks,
Mike

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH] pwm-backlight: add support for device tree gpio control

2013-09-26 Thread Thierry Reding
On Thu, Sep 26, 2013 at 03:26:13PM +0300, Tomi Valkeinen wrote:
> On 26/09/13 15:02, Thierry Reding wrote:
> > On Thu, Sep 26, 2013 at 01:13:18PM +0300, Tomi Valkeinen wrote:
> >> On 11/09/13 14:40, Mike Dunn wrote:
> >>> On 09/10/2013 10:21 AM, Thierry Reding wrote:
> >>
>  Do you have a real setup that actually needs multiple GPIOs? Usually
>  such a setup requires some kind of timing or other additional constraint
>  which can't be represented by this simple binding.
> 
>  Looking at the Palm Treo code it seems like the reason why multiple
>  GPIOs are needed is because one is to enable the backlight, while the
>  other is in fact used to enable the LCD panel. 
> >>>
> >>>
> >>> There are actually four GPIOs involved!  (There is an embarrasingly 
> >>> horrible
> >>> hack in arch/arm/mach-pxa/palmtreo.c that handles the others.)  One is 
> >>> almost
> >>> certainly simply backlight power.  The other three are probably LCD 
> >>> related.
> >>
> >> When you say "power", do you mean the gpio enables a regulator to feed
> >> power to the backlight? If so, wouldn't that be a regulator, not gpio,
> >> from the bl driver's point of view?
> >>
> >> Generally speaking, this same problem appears in many places, but for
> >> some reason especially in display. I'm a bit hesitant in adding "free
> >> form" gpio/regulator support for drivers, as, as Thierry pointed out,
> >> there are often timing requirements, or sometimes the gpios are
> >> inverted, or sometimes the gpio is, in fact, a reset gpio, where you'll
> >> assert the gpio for a short moment only.
> > 
> > I sent out another series a few days ago that somewhat obsoletes this
> > patch. What it does is basically add a single enable GPIO that can be
> > used to turn the backlight on and off. In a separate patch, support is
> > added for a power regulator. The combination of both should be able to
> > cover the majority of use-cases.
> 
> But Mike's case required 4 GPIOs? Or can that be reduced to one gpio and
> one regulator?

Well, at least for the backlight it only seemed to involve a single
GPIO. The other three were probably related to LCD and therefore not
really suitable for a backlight driver. Traditionally it has been that
the backlight driver handled these things as well (via the callbacks
installed by board setup code). While really they should be handled by a
separate driver (for the LCD).

> > That series doesn't handle any timing requirements, but again, for the
> > majority of the setups supported by a power supply and enable GPIO the
> > timing doesn't matter.
> > 
> >> I haven't seen new versions for the power sequences framework (without
> >> DT support), I think it could help us here a bit by simplifying how we
> >> present the sequences inside the driver. But we still need multiple
> >> drivers or the same driver supporting multiple devices.
> > 
> > I'm not sure if power sequences will be very helpful here. There was an
> > attempt to get those merged, but the patches were NAKed in the end. I'm
> > not aware of any work currently being done on them.
> 
> I thought the NAK was for the DT parts, not for the sequences as such. I
> don't remember anyone shooting down the idea of defining power sequences
> inside a driver.

Yes, but the DT parts were the primary reason why they were written in
the first place. Without DT we can just use the existing hooks to do the
sequencing. There is not much to be gained from power sequences.

> >> And I also think that the model where we have just one driver for, say,
> >> backlight may not be enough. There may be multiple hardware components,
> >> that used together will generate the backlight. And each component
> >> requires specific management.
> > 
> > I'm not sure what other components you are talking about here. Can you
> > elaborate?
> 
> I don't have any specific case in mind, and maybe these are quite rare.
> But there could be some kind of mix of muxes, regulators, gpios and
> whatnot that need to be managed in certain way to make backlight (or
> display) work.
> 
> I'm making this up, so I'm not sure if this is sensible, but consider a
> board where there's a mux to select where a backlight gets its PWM
> input, and the mux is controlled via i2c. And maybe insert some kind of
> level shifter in between, enabled with a GPIO. And some third component,
> as this hypothetical board is a development board, and hardware people
> seem to love to make bizarre designs, that work in theory but the SW is
> almost impossible to design...
> 
> So to enable the backlight, we might need to do multiple different
> things, depending on which components this particular board has.
> Especially for a mux controlled via i2c it would make sense to have a
> separate driver. Having just a single backlight driver might not be enough.
> 
> Sometimes, or hopefully often, that kind of complexity can be hidden
> behind common frameworks. For example, enabling a gpio could result in
> the gpio 

Re: [PATCH] pwm-backlight: add support for device tree gpio control

2013-09-26 Thread Tomi Valkeinen
On 26/09/13 15:02, Thierry Reding wrote:
> On Thu, Sep 26, 2013 at 01:13:18PM +0300, Tomi Valkeinen wrote:
>> On 11/09/13 14:40, Mike Dunn wrote:
>>> On 09/10/2013 10:21 AM, Thierry Reding wrote:
>>
 Do you have a real setup that actually needs multiple GPIOs? Usually
 such a setup requires some kind of timing or other additional constraint
 which can't be represented by this simple binding.

 Looking at the Palm Treo code it seems like the reason why multiple
 GPIOs are needed is because one is to enable the backlight, while the
 other is in fact used to enable the LCD panel. 
>>>
>>>
>>> There are actually four GPIOs involved!  (There is an embarrasingly horrible
>>> hack in arch/arm/mach-pxa/palmtreo.c that handles the others.)  One is 
>>> almost
>>> certainly simply backlight power.  The other three are probably LCD related.
>>
>> When you say "power", do you mean the gpio enables a regulator to feed
>> power to the backlight? If so, wouldn't that be a regulator, not gpio,
>> from the bl driver's point of view?
>>
>> Generally speaking, this same problem appears in many places, but for
>> some reason especially in display. I'm a bit hesitant in adding "free
>> form" gpio/regulator support for drivers, as, as Thierry pointed out,
>> there are often timing requirements, or sometimes the gpios are
>> inverted, or sometimes the gpio is, in fact, a reset gpio, where you'll
>> assert the gpio for a short moment only.
> 
> I sent out another series a few days ago that somewhat obsoletes this
> patch. What it does is basically add a single enable GPIO that can be
> used to turn the backlight on and off. In a separate patch, support is
> added for a power regulator. The combination of both should be able to
> cover the majority of use-cases.

But Mike's case required 4 GPIOs? Or can that be reduced to one gpio and
one regulator?

> That series doesn't handle any timing requirements, but again, for the
> majority of the setups supported by a power supply and enable GPIO the
> timing doesn't matter.
> 
>> I haven't seen new versions for the power sequences framework (without
>> DT support), I think it could help us here a bit by simplifying how we
>> present the sequences inside the driver. But we still need multiple
>> drivers or the same driver supporting multiple devices.
> 
> I'm not sure if power sequences will be very helpful here. There was an
> attempt to get those merged, but the patches were NAKed in the end. I'm
> not aware of any work currently being done on them.

I thought the NAK was for the DT parts, not for the sequences as such. I
don't remember anyone shooting down the idea of defining power sequences
inside a driver.

> But as I said above, the combination of an enable GPIO and power supply
> should be enough to get a lot of use-cases supported.

Yep.

>> And I also think that the model where we have just one driver for, say,
>> backlight may not be enough. There may be multiple hardware components,
>> that used together will generate the backlight. And each component
>> requires specific management.
> 
> I'm not sure what other components you are talking about here. Can you
> elaborate?

I don't have any specific case in mind, and maybe these are quite rare.
But there could be some kind of mix of muxes, regulators, gpios and
whatnot that need to be managed in certain way to make backlight (or
display) work.

I'm making this up, so I'm not sure if this is sensible, but consider a
board where there's a mux to select where a backlight gets its PWM
input, and the mux is controlled via i2c. And maybe insert some kind of
level shifter in between, enabled with a GPIO. And some third component,
as this hypothetical board is a development board, and hardware people
seem to love to make bizarre designs, that work in theory but the SW is
almost impossible to design...

So to enable the backlight, we might need to do multiple different
things, depending on which components this particular board has.
Especially for a mux controlled via i2c it would make sense to have a
separate driver. Having just a single backlight driver might not be enough.

Sometimes, or hopefully often, that kind of complexity can be hidden
behind common frameworks. For example, enabling a gpio could result in
the gpio driver enabling a regulator, sending i2c messages, or whatever.
But I don't think that's possible in all cases.

Anyway, this was really more of "thinking out loud" than any suggestion.

 Tomi




signature.asc
Description: OpenPGP digital signature


Re: [PATCH] pwm-backlight: add support for device tree gpio control

2013-09-26 Thread Thierry Reding
On Thu, Sep 26, 2013 at 01:13:18PM +0300, Tomi Valkeinen wrote:
> On 11/09/13 14:40, Mike Dunn wrote:
> > On 09/10/2013 10:21 AM, Thierry Reding wrote:
> 
> >> Do you have a real setup that actually needs multiple GPIOs? Usually
> >> such a setup requires some kind of timing or other additional constraint
> >> which can't be represented by this simple binding.
> >>
> >> Looking at the Palm Treo code it seems like the reason why multiple
> >> GPIOs are needed is because one is to enable the backlight, while the
> >> other is in fact used to enable the LCD panel. 
> > 
> > 
> > There are actually four GPIOs involved!  (There is an embarrasingly horrible
> > hack in arch/arm/mach-pxa/palmtreo.c that handles the others.)  One is 
> > almost
> > certainly simply backlight power.  The other three are probably LCD related.
> 
> When you say "power", do you mean the gpio enables a regulator to feed
> power to the backlight? If so, wouldn't that be a regulator, not gpio,
> from the bl driver's point of view?
> 
> Generally speaking, this same problem appears in many places, but for
> some reason especially in display. I'm a bit hesitant in adding "free
> form" gpio/regulator support for drivers, as, as Thierry pointed out,
> there are often timing requirements, or sometimes the gpios are
> inverted, or sometimes the gpio is, in fact, a reset gpio, where you'll
> assert the gpio for a short moment only.

I sent out another series a few days ago that somewhat obsoletes this
patch. What it does is basically add a single enable GPIO that can be
used to turn the backlight on and off. In a separate patch, support is
added for a power regulator. The combination of both should be able to
cover the majority of use-cases.

That series doesn't handle any timing requirements, but again, for the
majority of the setups supported by a power supply and enable GPIO the
timing doesn't matter.

> I haven't seen new versions for the power sequences framework (without
> DT support), I think it could help us here a bit by simplifying how we
> present the sequences inside the driver. But we still need multiple
> drivers or the same driver supporting multiple devices.

I'm not sure if power sequences will be very helpful here. There was an
attempt to get those merged, but the patches were NAKed in the end. I'm
not aware of any work currently being done on them.

But as I said above, the combination of an enable GPIO and power supply
should be enough to get a lot of use-cases supported.

> And I also think that the model where we have just one driver for, say,
> backlight may not be enough. There may be multiple hardware components,
> that used together will generate the backlight. And each component
> requires specific management.

I'm not sure what other components you are talking about here. Can you
elaborate?

Thierry


pgpNXGSyXPUDT.pgp
Description: PGP signature


Re: [PATCH] pwm-backlight: add support for device tree gpio control

2013-09-26 Thread Tomi Valkeinen
On 11/09/13 14:40, Mike Dunn wrote:
> On 09/10/2013 10:21 AM, Thierry Reding wrote:

>> Do you have a real setup that actually needs multiple GPIOs? Usually
>> such a setup requires some kind of timing or other additional constraint
>> which can't be represented by this simple binding.
>>
>> Looking at the Palm Treo code it seems like the reason why multiple
>> GPIOs are needed is because one is to enable the backlight, while the
>> other is in fact used to enable the LCD panel. 
> 
> 
> There are actually four GPIOs involved!  (There is an embarrasingly horrible
> hack in arch/arm/mach-pxa/palmtreo.c that handles the others.)  One is almost
> certainly simply backlight power.  The other three are probably LCD related.

When you say "power", do you mean the gpio enables a regulator to feed
power to the backlight? If so, wouldn't that be a regulator, not gpio,
from the bl driver's point of view?

Generally speaking, this same problem appears in many places, but for
some reason especially in display. I'm a bit hesitant in adding "free
form" gpio/regulator support for drivers, as, as Thierry pointed out,
there are often timing requirements, or sometimes the gpios are
inverted, or sometimes the gpio is, in fact, a reset gpio, where you'll
assert the gpio for a short moment only.

I haven't seen new versions for the power sequences framework (without
DT support), I think it could help us here a bit by simplifying how we
present the sequences inside the driver. But we still need multiple
drivers or the same driver supporting multiple devices.

And I also think that the model where we have just one driver for, say,
backlight may not be enough. There may be multiple hardware components,
that used together will generate the backlight. And each component
requires specific management.

 Tomi




signature.asc
Description: OpenPGP digital signature


Re: [PATCH] pwm-backlight: add support for device tree gpio control

2013-09-26 Thread Tomi Valkeinen
On 11/09/13 14:40, Mike Dunn wrote:
 On 09/10/2013 10:21 AM, Thierry Reding wrote:

 Do you have a real setup that actually needs multiple GPIOs? Usually
 such a setup requires some kind of timing or other additional constraint
 which can't be represented by this simple binding.

 Looking at the Palm Treo code it seems like the reason why multiple
 GPIOs are needed is because one is to enable the backlight, while the
 other is in fact used to enable the LCD panel. 
 
 
 There are actually four GPIOs involved!  (There is an embarrasingly horrible
 hack in arch/arm/mach-pxa/palmtreo.c that handles the others.)  One is almost
 certainly simply backlight power.  The other three are probably LCD related.

When you say power, do you mean the gpio enables a regulator to feed
power to the backlight? If so, wouldn't that be a regulator, not gpio,
from the bl driver's point of view?

Generally speaking, this same problem appears in many places, but for
some reason especially in display. I'm a bit hesitant in adding free
form gpio/regulator support for drivers, as, as Thierry pointed out,
there are often timing requirements, or sometimes the gpios are
inverted, or sometimes the gpio is, in fact, a reset gpio, where you'll
assert the gpio for a short moment only.

I haven't seen new versions for the power sequences framework (without
DT support), I think it could help us here a bit by simplifying how we
present the sequences inside the driver. But we still need multiple
drivers or the same driver supporting multiple devices.

And I also think that the model where we have just one driver for, say,
backlight may not be enough. There may be multiple hardware components,
that used together will generate the backlight. And each component
requires specific management.

 Tomi




signature.asc
Description: OpenPGP digital signature


Re: [PATCH] pwm-backlight: add support for device tree gpio control

2013-09-26 Thread Thierry Reding
On Thu, Sep 26, 2013 at 01:13:18PM +0300, Tomi Valkeinen wrote:
 On 11/09/13 14:40, Mike Dunn wrote:
  On 09/10/2013 10:21 AM, Thierry Reding wrote:
 
  Do you have a real setup that actually needs multiple GPIOs? Usually
  such a setup requires some kind of timing or other additional constraint
  which can't be represented by this simple binding.
 
  Looking at the Palm Treo code it seems like the reason why multiple
  GPIOs are needed is because one is to enable the backlight, while the
  other is in fact used to enable the LCD panel. 
  
  
  There are actually four GPIOs involved!  (There is an embarrasingly horrible
  hack in arch/arm/mach-pxa/palmtreo.c that handles the others.)  One is 
  almost
  certainly simply backlight power.  The other three are probably LCD related.
 
 When you say power, do you mean the gpio enables a regulator to feed
 power to the backlight? If so, wouldn't that be a regulator, not gpio,
 from the bl driver's point of view?
 
 Generally speaking, this same problem appears in many places, but for
 some reason especially in display. I'm a bit hesitant in adding free
 form gpio/regulator support for drivers, as, as Thierry pointed out,
 there are often timing requirements, or sometimes the gpios are
 inverted, or sometimes the gpio is, in fact, a reset gpio, where you'll
 assert the gpio for a short moment only.

I sent out another series a few days ago that somewhat obsoletes this
patch. What it does is basically add a single enable GPIO that can be
used to turn the backlight on and off. In a separate patch, support is
added for a power regulator. The combination of both should be able to
cover the majority of use-cases.

That series doesn't handle any timing requirements, but again, for the
majority of the setups supported by a power supply and enable GPIO the
timing doesn't matter.

 I haven't seen new versions for the power sequences framework (without
 DT support), I think it could help us here a bit by simplifying how we
 present the sequences inside the driver. But we still need multiple
 drivers or the same driver supporting multiple devices.

I'm not sure if power sequences will be very helpful here. There was an
attempt to get those merged, but the patches were NAKed in the end. I'm
not aware of any work currently being done on them.

But as I said above, the combination of an enable GPIO and power supply
should be enough to get a lot of use-cases supported.

 And I also think that the model where we have just one driver for, say,
 backlight may not be enough. There may be multiple hardware components,
 that used together will generate the backlight. And each component
 requires specific management.

I'm not sure what other components you are talking about here. Can you
elaborate?

Thierry


pgpNXGSyXPUDT.pgp
Description: PGP signature


Re: [PATCH] pwm-backlight: add support for device tree gpio control

2013-09-26 Thread Tomi Valkeinen
On 26/09/13 15:02, Thierry Reding wrote:
 On Thu, Sep 26, 2013 at 01:13:18PM +0300, Tomi Valkeinen wrote:
 On 11/09/13 14:40, Mike Dunn wrote:
 On 09/10/2013 10:21 AM, Thierry Reding wrote:

 Do you have a real setup that actually needs multiple GPIOs? Usually
 such a setup requires some kind of timing or other additional constraint
 which can't be represented by this simple binding.

 Looking at the Palm Treo code it seems like the reason why multiple
 GPIOs are needed is because one is to enable the backlight, while the
 other is in fact used to enable the LCD panel. 


 There are actually four GPIOs involved!  (There is an embarrasingly horrible
 hack in arch/arm/mach-pxa/palmtreo.c that handles the others.)  One is 
 almost
 certainly simply backlight power.  The other three are probably LCD related.

 When you say power, do you mean the gpio enables a regulator to feed
 power to the backlight? If so, wouldn't that be a regulator, not gpio,
 from the bl driver's point of view?

 Generally speaking, this same problem appears in many places, but for
 some reason especially in display. I'm a bit hesitant in adding free
 form gpio/regulator support for drivers, as, as Thierry pointed out,
 there are often timing requirements, or sometimes the gpios are
 inverted, or sometimes the gpio is, in fact, a reset gpio, where you'll
 assert the gpio for a short moment only.
 
 I sent out another series a few days ago that somewhat obsoletes this
 patch. What it does is basically add a single enable GPIO that can be
 used to turn the backlight on and off. In a separate patch, support is
 added for a power regulator. The combination of both should be able to
 cover the majority of use-cases.

But Mike's case required 4 GPIOs? Or can that be reduced to one gpio and
one regulator?

 That series doesn't handle any timing requirements, but again, for the
 majority of the setups supported by a power supply and enable GPIO the
 timing doesn't matter.
 
 I haven't seen new versions for the power sequences framework (without
 DT support), I think it could help us here a bit by simplifying how we
 present the sequences inside the driver. But we still need multiple
 drivers or the same driver supporting multiple devices.
 
 I'm not sure if power sequences will be very helpful here. There was an
 attempt to get those merged, but the patches were NAKed in the end. I'm
 not aware of any work currently being done on them.

I thought the NAK was for the DT parts, not for the sequences as such. I
don't remember anyone shooting down the idea of defining power sequences
inside a driver.

 But as I said above, the combination of an enable GPIO and power supply
 should be enough to get a lot of use-cases supported.

Yep.

 And I also think that the model where we have just one driver for, say,
 backlight may not be enough. There may be multiple hardware components,
 that used together will generate the backlight. And each component
 requires specific management.
 
 I'm not sure what other components you are talking about here. Can you
 elaborate?

I don't have any specific case in mind, and maybe these are quite rare.
But there could be some kind of mix of muxes, regulators, gpios and
whatnot that need to be managed in certain way to make backlight (or
display) work.

I'm making this up, so I'm not sure if this is sensible, but consider a
board where there's a mux to select where a backlight gets its PWM
input, and the mux is controlled via i2c. And maybe insert some kind of
level shifter in between, enabled with a GPIO. And some third component,
as this hypothetical board is a development board, and hardware people
seem to love to make bizarre designs, that work in theory but the SW is
almost impossible to design...

So to enable the backlight, we might need to do multiple different
things, depending on which components this particular board has.
Especially for a mux controlled via i2c it would make sense to have a
separate driver. Having just a single backlight driver might not be enough.

Sometimes, or hopefully often, that kind of complexity can be hidden
behind common frameworks. For example, enabling a gpio could result in
the gpio driver enabling a regulator, sending i2c messages, or whatever.
But I don't think that's possible in all cases.

Anyway, this was really more of thinking out loud than any suggestion.

 Tomi




signature.asc
Description: OpenPGP digital signature


Re: [PATCH] pwm-backlight: add support for device tree gpio control

2013-09-26 Thread Thierry Reding
On Thu, Sep 26, 2013 at 03:26:13PM +0300, Tomi Valkeinen wrote:
 On 26/09/13 15:02, Thierry Reding wrote:
  On Thu, Sep 26, 2013 at 01:13:18PM +0300, Tomi Valkeinen wrote:
  On 11/09/13 14:40, Mike Dunn wrote:
  On 09/10/2013 10:21 AM, Thierry Reding wrote:
 
  Do you have a real setup that actually needs multiple GPIOs? Usually
  such a setup requires some kind of timing or other additional constraint
  which can't be represented by this simple binding.
 
  Looking at the Palm Treo code it seems like the reason why multiple
  GPIOs are needed is because one is to enable the backlight, while the
  other is in fact used to enable the LCD panel. 
 
 
  There are actually four GPIOs involved!  (There is an embarrasingly 
  horrible
  hack in arch/arm/mach-pxa/palmtreo.c that handles the others.)  One is 
  almost
  certainly simply backlight power.  The other three are probably LCD 
  related.
 
  When you say power, do you mean the gpio enables a regulator to feed
  power to the backlight? If so, wouldn't that be a regulator, not gpio,
  from the bl driver's point of view?
 
  Generally speaking, this same problem appears in many places, but for
  some reason especially in display. I'm a bit hesitant in adding free
  form gpio/regulator support for drivers, as, as Thierry pointed out,
  there are often timing requirements, or sometimes the gpios are
  inverted, or sometimes the gpio is, in fact, a reset gpio, where you'll
  assert the gpio for a short moment only.
  
  I sent out another series a few days ago that somewhat obsoletes this
  patch. What it does is basically add a single enable GPIO that can be
  used to turn the backlight on and off. In a separate patch, support is
  added for a power regulator. The combination of both should be able to
  cover the majority of use-cases.
 
 But Mike's case required 4 GPIOs? Or can that be reduced to one gpio and
 one regulator?

Well, at least for the backlight it only seemed to involve a single
GPIO. The other three were probably related to LCD and therefore not
really suitable for a backlight driver. Traditionally it has been that
the backlight driver handled these things as well (via the callbacks
installed by board setup code). While really they should be handled by a
separate driver (for the LCD).

  That series doesn't handle any timing requirements, but again, for the
  majority of the setups supported by a power supply and enable GPIO the
  timing doesn't matter.
  
  I haven't seen new versions for the power sequences framework (without
  DT support), I think it could help us here a bit by simplifying how we
  present the sequences inside the driver. But we still need multiple
  drivers or the same driver supporting multiple devices.
  
  I'm not sure if power sequences will be very helpful here. There was an
  attempt to get those merged, but the patches were NAKed in the end. I'm
  not aware of any work currently being done on them.
 
 I thought the NAK was for the DT parts, not for the sequences as such. I
 don't remember anyone shooting down the idea of defining power sequences
 inside a driver.

Yes, but the DT parts were the primary reason why they were written in
the first place. Without DT we can just use the existing hooks to do the
sequencing. There is not much to be gained from power sequences.

  And I also think that the model where we have just one driver for, say,
  backlight may not be enough. There may be multiple hardware components,
  that used together will generate the backlight. And each component
  requires specific management.
  
  I'm not sure what other components you are talking about here. Can you
  elaborate?
 
 I don't have any specific case in mind, and maybe these are quite rare.
 But there could be some kind of mix of muxes, regulators, gpios and
 whatnot that need to be managed in certain way to make backlight (or
 display) work.
 
 I'm making this up, so I'm not sure if this is sensible, but consider a
 board where there's a mux to select where a backlight gets its PWM
 input, and the mux is controlled via i2c. And maybe insert some kind of
 level shifter in between, enabled with a GPIO. And some third component,
 as this hypothetical board is a development board, and hardware people
 seem to love to make bizarre designs, that work in theory but the SW is
 almost impossible to design...
 
 So to enable the backlight, we might need to do multiple different
 things, depending on which components this particular board has.
 Especially for a mux controlled via i2c it would make sense to have a
 separate driver. Having just a single backlight driver might not be enough.
 
 Sometimes, or hopefully often, that kind of complexity can be hidden
 behind common frameworks. For example, enabling a gpio could result in
 the gpio driver enabling a regulator, sending i2c messages, or whatever.
 But I don't think that's possible in all cases.
 
 Anyway, this was really more of thinking out loud than any suggestion.

There is 

Re: [PATCH] pwm-backlight: add support for device tree gpio control

2013-09-11 Thread Mike Dunn
On 09/10/2013 10:21 AM, Thierry Reding wrote:
> On Tue, Sep 03, 2013 at 12:26:12PM -0700, Mike Dunn wrote:
>> This patch adds support for controlling an arbitrary number of gpios to the
>> pwm-backlight driver.  This was left as a TODO when initial device tree 
>> support
>> was added by Thierry a while back.  This functionality replaces the callbacks
>> that are passed in the platform data for non-DT cases.  Users can avail
>> themselves of this feature by adding a 'gpios' property to the 'backlight' 
>> node.
>> When the update_status() callback in backlight_ops runs, the gpios listed in 
>> the
>> property are asserted/deasserted if the specified brightness is 
>> non-zero/zero.
>>
>> Tested on a pxa270-based Palm Treo 680.
>>
>> Signed-off-by: Mike Dunn 
>> ---
>>
>> Thanks for looking!
>>
>>  .../bindings/video/backlight/pwm-backlight.txt |   4 +
>>  drivers/video/backlight/pwm_bl.c   | 128 
>> ++---
>>  2 files changed, 113 insertions(+), 19 deletions(-)
>>
>> diff --git 
>> a/Documentation/devicetree/bindings/video/backlight/pwm-backlight.txt 
>> b/Documentation/devicetree/bindings/video/backlight/pwm-backlight.txt
>> index 1e4fc72..4583e68 100644
>> --- a/Documentation/devicetree/bindings/video/backlight/pwm-backlight.txt
>> +++ b/Documentation/devicetree/bindings/video/backlight/pwm-backlight.txt
>> @@ -14,6 +14,9 @@ Required properties:
>>  Optional properties:
>>- pwm-names: a list of names for the PWM devices specified in the
>> "pwms" property (see PWM binding[0])
>> +  - gpios: An arbitrary number of gpios that must be asserted when the
>> +   backlight is on, and de-asserted when off.  They will be 
>> asserted
>> +   in the order they appear, and de-asserted in reverse order.
> 
> Do you have a real setup that actually needs multiple GPIOs? Usually
> such a setup requires some kind of timing or other additional constraint
> which can't be represented by this simple binding.
> 
> Looking at the Palm Treo code it seems like the reason why multiple
> GPIOs are needed is because one is to enable the backlight, while the
> other is in fact used to enable the LCD panel. 


There are actually four GPIOs involved!  (There is an embarrasingly horrible
hack in arch/arm/mach-pxa/palmtreo.c that handles the others.)  One is almost
certainly simply backlight power.  The other three are probably LCD related.
Timing doesn't seem to be an issue, but the order is important.  This is
reverse-engineered without any schematics, and honestly, I'm still guessing with
regard to how the board is wired.  It probably is not appropriate to manage all
four gpios in the backlight driver, but at least one needs to be, so I thought
I'd go ahead and prepare a patch that adds gpio support.  From what you are
telling me, I guess my approach was too simplistic.


> I have been working on a
> patch series to provide simple panel support, specifically to allow the
> separation of backlight and panel power sequencing. Would such a method
> work for your use-case as well? 


Sounds like it would, from what I know.


> The work that I'm doing is somewhat DRM
> centric, and I don't think there's a DRM driver for PXA, but perhaps it
> would be a good occasion to look at converting the PXA display drivers
> to DRM... =)


OK, thanks.  I'll look into it.  I'm clueless about DRM...  All I can say at
this point is that I'm not using X windows, and there is not really any hardware
acceleration in the pxa's lcd controller.


> 
> That said, I've had a patch similar to yours in a local tree (in fact in
> the same branch as the panel work I've been doing) for quite some time,
> which allows a single "enable" GPIO to be specified. I haven't gotten
> around to sending it out yet, but I'll do that shortly. The patch is a
> little more involved because it exposes the GPIO via platform data as
> well and therefore has to update a number of board files, too. While
> going over the various board files I found only a single board which can
> actually make use of the new functionality (which I also converted in
> the patch). Any other cases couldn't be implemented by the simple change
> so I suspect they can't either using your proposed binding.


Really?  Are we talking about the callbacks in struct
platform_pwm_backlight_data?  I thought the majority of them just
requested/released a gpio in init()/exit(), and wiggled it in notify().  I must
be missing something.


> 
> I've been trying for a while to come up with a way to support more use-
> cases, and I keep coming back to the same solution. Since the DT binding
> for power sequences was shot down some time ago, we probably have to
> represent any kind of sequencing in C code. So instead of trying to fit
> everything into a single binding, I think a more maintainable solution
> would be to create separate drivers for the more complex use-cases. That
> could either be done by using separate compatible values 

Re: [PATCH] pwm-backlight: add support for device tree gpio control

2013-09-11 Thread Mike Dunn
On 09/10/2013 10:21 AM, Thierry Reding wrote:
 On Tue, Sep 03, 2013 at 12:26:12PM -0700, Mike Dunn wrote:
 This patch adds support for controlling an arbitrary number of gpios to the
 pwm-backlight driver.  This was left as a TODO when initial device tree 
 support
 was added by Thierry a while back.  This functionality replaces the callbacks
 that are passed in the platform data for non-DT cases.  Users can avail
 themselves of this feature by adding a 'gpios' property to the 'backlight' 
 node.
 When the update_status() callback in backlight_ops runs, the gpios listed in 
 the
 property are asserted/deasserted if the specified brightness is 
 non-zero/zero.

 Tested on a pxa270-based Palm Treo 680.

 Signed-off-by: Mike Dunn miked...@newsguy.com
 ---

 Thanks for looking!

  .../bindings/video/backlight/pwm-backlight.txt |   4 +
  drivers/video/backlight/pwm_bl.c   | 128 
 ++---
  2 files changed, 113 insertions(+), 19 deletions(-)

 diff --git 
 a/Documentation/devicetree/bindings/video/backlight/pwm-backlight.txt 
 b/Documentation/devicetree/bindings/video/backlight/pwm-backlight.txt
 index 1e4fc72..4583e68 100644
 --- a/Documentation/devicetree/bindings/video/backlight/pwm-backlight.txt
 +++ b/Documentation/devicetree/bindings/video/backlight/pwm-backlight.txt
 @@ -14,6 +14,9 @@ Required properties:
  Optional properties:
- pwm-names: a list of names for the PWM devices specified in the
 pwms property (see PWM binding[0])
 +  - gpios: An arbitrary number of gpios that must be asserted when the
 +   backlight is on, and de-asserted when off.  They will be 
 asserted
 +   in the order they appear, and de-asserted in reverse order.
 
 Do you have a real setup that actually needs multiple GPIOs? Usually
 such a setup requires some kind of timing or other additional constraint
 which can't be represented by this simple binding.
 
 Looking at the Palm Treo code it seems like the reason why multiple
 GPIOs are needed is because one is to enable the backlight, while the
 other is in fact used to enable the LCD panel. 


There are actually four GPIOs involved!  (There is an embarrasingly horrible
hack in arch/arm/mach-pxa/palmtreo.c that handles the others.)  One is almost
certainly simply backlight power.  The other three are probably LCD related.
Timing doesn't seem to be an issue, but the order is important.  This is
reverse-engineered without any schematics, and honestly, I'm still guessing with
regard to how the board is wired.  It probably is not appropriate to manage all
four gpios in the backlight driver, but at least one needs to be, so I thought
I'd go ahead and prepare a patch that adds gpio support.  From what you are
telling me, I guess my approach was too simplistic.


 I have been working on a
 patch series to provide simple panel support, specifically to allow the
 separation of backlight and panel power sequencing. Would such a method
 work for your use-case as well? 


Sounds like it would, from what I know.


 The work that I'm doing is somewhat DRM
 centric, and I don't think there's a DRM driver for PXA, but perhaps it
 would be a good occasion to look at converting the PXA display drivers
 to DRM... =)


OK, thanks.  I'll look into it.  I'm clueless about DRM...  All I can say at
this point is that I'm not using X windows, and there is not really any hardware
acceleration in the pxa's lcd controller.


 
 That said, I've had a patch similar to yours in a local tree (in fact in
 the same branch as the panel work I've been doing) for quite some time,
 which allows a single enable GPIO to be specified. I haven't gotten
 around to sending it out yet, but I'll do that shortly. The patch is a
 little more involved because it exposes the GPIO via platform data as
 well and therefore has to update a number of board files, too. While
 going over the various board files I found only a single board which can
 actually make use of the new functionality (which I also converted in
 the patch). Any other cases couldn't be implemented by the simple change
 so I suspect they can't either using your proposed binding.


Really?  Are we talking about the callbacks in struct
platform_pwm_backlight_data?  I thought the majority of them just
requested/released a gpio in init()/exit(), and wiggled it in notify().  I must
be missing something.


 
 I've been trying for a while to come up with a way to support more use-
 cases, and I keep coming back to the same solution. Since the DT binding
 for power sequences was shot down some time ago, we probably have to
 represent any kind of sequencing in C code. So instead of trying to fit
 everything into a single binding, I think a more maintainable solution
 would be to create separate drivers for the more complex use-cases. That
 could either be done by using separate compatible values within the
 pwm-backlight driver or via completely different drivers. In the latter
 case we should 

Re: [PATCH] pwm-backlight: add support for device tree gpio control

2013-09-10 Thread Thierry Reding
On Tue, Sep 03, 2013 at 12:26:12PM -0700, Mike Dunn wrote:
> This patch adds support for controlling an arbitrary number of gpios to the
> pwm-backlight driver.  This was left as a TODO when initial device tree 
> support
> was added by Thierry a while back.  This functionality replaces the callbacks
> that are passed in the platform data for non-DT cases.  Users can avail
> themselves of this feature by adding a 'gpios' property to the 'backlight' 
> node.
> When the update_status() callback in backlight_ops runs, the gpios listed in 
> the
> property are asserted/deasserted if the specified brightness is non-zero/zero.
> 
> Tested on a pxa270-based Palm Treo 680.
> 
> Signed-off-by: Mike Dunn 
> ---
> 
> Thanks for looking!
> 
>  .../bindings/video/backlight/pwm-backlight.txt |   4 +
>  drivers/video/backlight/pwm_bl.c   | 128 
> ++---
>  2 files changed, 113 insertions(+), 19 deletions(-)
> 
> diff --git 
> a/Documentation/devicetree/bindings/video/backlight/pwm-backlight.txt 
> b/Documentation/devicetree/bindings/video/backlight/pwm-backlight.txt
> index 1e4fc72..4583e68 100644
> --- a/Documentation/devicetree/bindings/video/backlight/pwm-backlight.txt
> +++ b/Documentation/devicetree/bindings/video/backlight/pwm-backlight.txt
> @@ -14,6 +14,9 @@ Required properties:
>  Optional properties:
>- pwm-names: a list of names for the PWM devices specified in the
> "pwms" property (see PWM binding[0])
> +  - gpios: An arbitrary number of gpios that must be asserted when the
> +   backlight is on, and de-asserted when off.  They will be 
> asserted
> +   in the order they appear, and de-asserted in reverse order.

Do you have a real setup that actually needs multiple GPIOs? Usually
such a setup requires some kind of timing or other additional constraint
which can't be represented by this simple binding.

Looking at the Palm Treo code it seems like the reason why multiple
GPIOs are needed is because one is to enable the backlight, while the
other is in fact used to enable the LCD panel. I have been working on a
patch series to provide simple panel support, specifically to allow the
separation of backlight and panel power sequencing. Would such a method
work for your use-case as well? The work that I'm doing is somewhat DRM
centric, and I don't think there's a DRM driver for PXA, but perhaps it
would be a good occasion to look at converting the PXA display drivers
to DRM... =)

That said, I've had a patch similar to yours in a local tree (in fact in
the same branch as the panel work I've been doing) for quite some time,
which allows a single "enable" GPIO to be specified. I haven't gotten
around to sending it out yet, but I'll do that shortly. The patch is a
little more involved because it exposes the GPIO via platform data as
well and therefore has to update a number of board files, too. While
going over the various board files I found only a single board which can
actually make use of the new functionality (which I also converted in
the patch). Any other cases couldn't be implemented by the simple change
so I suspect they can't either using your proposed binding.

I've been trying for a while to come up with a way to support more use-
cases, and I keep coming back to the same solution. Since the DT binding
for power sequences was shot down some time ago, we probably have to
represent any kind of sequencing in C code. So instead of trying to fit
everything into a single binding, I think a more maintainable solution
would be to create separate drivers for the more complex use-cases. That
could either be done by using separate compatible values within the
pwm-backlight driver or via completely different drivers. In the latter
case we should probably think about exporting some of the pwm-backlight
functionality so that drivers can easily reuse some of the code.

Thierry


pgpOsRtuWTl7o.pgp
Description: PGP signature


Re: [PATCH] pwm-backlight: add support for device tree gpio control

2013-09-10 Thread Thierry Reding
On Tue, Sep 03, 2013 at 12:26:12PM -0700, Mike Dunn wrote:
 This patch adds support for controlling an arbitrary number of gpios to the
 pwm-backlight driver.  This was left as a TODO when initial device tree 
 support
 was added by Thierry a while back.  This functionality replaces the callbacks
 that are passed in the platform data for non-DT cases.  Users can avail
 themselves of this feature by adding a 'gpios' property to the 'backlight' 
 node.
 When the update_status() callback in backlight_ops runs, the gpios listed in 
 the
 property are asserted/deasserted if the specified brightness is non-zero/zero.
 
 Tested on a pxa270-based Palm Treo 680.
 
 Signed-off-by: Mike Dunn miked...@newsguy.com
 ---
 
 Thanks for looking!
 
  .../bindings/video/backlight/pwm-backlight.txt |   4 +
  drivers/video/backlight/pwm_bl.c   | 128 
 ++---
  2 files changed, 113 insertions(+), 19 deletions(-)
 
 diff --git 
 a/Documentation/devicetree/bindings/video/backlight/pwm-backlight.txt 
 b/Documentation/devicetree/bindings/video/backlight/pwm-backlight.txt
 index 1e4fc72..4583e68 100644
 --- a/Documentation/devicetree/bindings/video/backlight/pwm-backlight.txt
 +++ b/Documentation/devicetree/bindings/video/backlight/pwm-backlight.txt
 @@ -14,6 +14,9 @@ Required properties:
  Optional properties:
- pwm-names: a list of names for the PWM devices specified in the
 pwms property (see PWM binding[0])
 +  - gpios: An arbitrary number of gpios that must be asserted when the
 +   backlight is on, and de-asserted when off.  They will be 
 asserted
 +   in the order they appear, and de-asserted in reverse order.

Do you have a real setup that actually needs multiple GPIOs? Usually
such a setup requires some kind of timing or other additional constraint
which can't be represented by this simple binding.

Looking at the Palm Treo code it seems like the reason why multiple
GPIOs are needed is because one is to enable the backlight, while the
other is in fact used to enable the LCD panel. I have been working on a
patch series to provide simple panel support, specifically to allow the
separation of backlight and panel power sequencing. Would such a method
work for your use-case as well? The work that I'm doing is somewhat DRM
centric, and I don't think there's a DRM driver for PXA, but perhaps it
would be a good occasion to look at converting the PXA display drivers
to DRM... =)

That said, I've had a patch similar to yours in a local tree (in fact in
the same branch as the panel work I've been doing) for quite some time,
which allows a single enable GPIO to be specified. I haven't gotten
around to sending it out yet, but I'll do that shortly. The patch is a
little more involved because it exposes the GPIO via platform data as
well and therefore has to update a number of board files, too. While
going over the various board files I found only a single board which can
actually make use of the new functionality (which I also converted in
the patch). Any other cases couldn't be implemented by the simple change
so I suspect they can't either using your proposed binding.

I've been trying for a while to come up with a way to support more use-
cases, and I keep coming back to the same solution. Since the DT binding
for power sequences was shot down some time ago, we probably have to
represent any kind of sequencing in C code. So instead of trying to fit
everything into a single binding, I think a more maintainable solution
would be to create separate drivers for the more complex use-cases. That
could either be done by using separate compatible values within the
pwm-backlight driver or via completely different drivers. In the latter
case we should probably think about exporting some of the pwm-backlight
functionality so that drivers can easily reuse some of the code.

Thierry


pgpOsRtuWTl7o.pgp
Description: PGP signature


[PATCH] pwm-backlight: add support for device tree gpio control

2013-09-03 Thread Mike Dunn
This patch adds support for controlling an arbitrary number of gpios to the
pwm-backlight driver.  This was left as a TODO when initial device tree support
was added by Thierry a while back.  This functionality replaces the callbacks
that are passed in the platform data for non-DT cases.  Users can avail
themselves of this feature by adding a 'gpios' property to the 'backlight' node.
When the update_status() callback in backlight_ops runs, the gpios listed in the
property are asserted/deasserted if the specified brightness is non-zero/zero.

Tested on a pxa270-based Palm Treo 680.

Signed-off-by: Mike Dunn 
---

Thanks for looking!

 .../bindings/video/backlight/pwm-backlight.txt |   4 +
 drivers/video/backlight/pwm_bl.c   | 128 ++---
 2 files changed, 113 insertions(+), 19 deletions(-)

diff --git 
a/Documentation/devicetree/bindings/video/backlight/pwm-backlight.txt 
b/Documentation/devicetree/bindings/video/backlight/pwm-backlight.txt
index 1e4fc72..4583e68 100644
--- a/Documentation/devicetree/bindings/video/backlight/pwm-backlight.txt
+++ b/Documentation/devicetree/bindings/video/backlight/pwm-backlight.txt
@@ -14,6 +14,9 @@ Required properties:
 Optional properties:
   - pwm-names: a list of names for the PWM devices specified in the
"pwms" property (see PWM binding[0])
+  - gpios: An arbitrary number of gpios that must be asserted when the
+   backlight is on, and de-asserted when off.  They will be 
asserted
+   in the order they appear, and de-asserted in reverse order.
 
 [0]: Documentation/devicetree/bindings/pwm/pwm.txt
 
@@ -25,4 +28,5 @@ Example:
 
brightness-levels = <0 4 8 16 32 64 128 255>;
default-brightness-level = <6>;
+   gpios = < 77 0>, < 25 1>;  /* gpio 25 is active low */
};
diff --git a/drivers/video/backlight/pwm_bl.c b/drivers/video/backlight/pwm_bl.c
index 1fea627..1e2ab52 100644
--- a/drivers/video/backlight/pwm_bl.c
+++ b/drivers/video/backlight/pwm_bl.c
@@ -20,6 +20,12 @@
 #include 
 #include 
 #include 
+#include 
+
+struct pwm_bl_gpio {
+   unsigned int gpio;
+   enum of_gpio_flags flags;
+};
 
 struct pwm_bl_data {
struct pwm_device   *pwm;
@@ -27,6 +33,8 @@ struct pwm_bl_data {
unsigned intperiod;
unsigned intlth_brightness;
unsigned int*levels;
+   unsigned intnum_gpios;
+   struct pwm_bl_gpio  *gpios;
int (*notify)(struct device *,
  int brightness);
void(*notify_after)(struct device *,
@@ -94,14 +102,77 @@ static const struct backlight_ops pwm_backlight_ops = {
 };
 
 #ifdef CONFIG_OF
+static int pwm_backlight_dt_notify(struct device *dev, int brightness)
+{
+   struct backlight_device *bl = dev_get_drvdata(dev);
+   struct pwm_bl_data *pb = bl_get_data(bl);
+   int i;
+
+   if (brightness) {
+   for (i = 0; i < pb->num_gpios; i++) {
+   if (pb->gpios[i].flags == OF_GPIO_ACTIVE_LOW)
+   gpio_set_value(pb->gpios[i].gpio, 0);
+   else
+   gpio_set_value(pb->gpios[i].gpio, 1);
+   }
+   return 0;
+   }
+
+   /* de-assert gpios in reverse order, in case this is important */
+   for (i = pb->num_gpios - 1; i >= 0; i--) {
+   if (pb->gpios[i].flags == OF_GPIO_ACTIVE_LOW)
+   gpio_set_value(pb->gpios[i].gpio, 1);
+   else
+   gpio_set_value(pb->gpios[i].gpio, 0);
+   }
+   return 0;
+}
+
+static void pwm_backlight_dt_exit(struct pwm_bl_data *pb)
+{
+   int i;
+
+   for (i = 0; i < pb->num_gpios; i++)
+   gpio_free(pb->gpios[i].gpio);
+}
+
+static int pwm_backlight_dt_init(struct device *dev, struct pwm_bl_data *pb)
+{
+   int i, j, ret;
+
+   /* request gpios and drive in the inactive state */
+   for (i = 0; i < pb->num_gpios; i++) {
+   char gpio_name[32];
+   unsigned long flags;
+   if (pb->gpios[i].flags == OF_GPIO_ACTIVE_LOW)
+   flags = GPIOF_OUT_INIT_LOW;
+   else
+   flags = GPIOF_OUT_INIT_HIGH;
+   snprintf(gpio_name, 32, "%s.%d", dev_name(dev), i);
+   ret = gpio_request_one(pb->gpios[i].gpio, flags, gpio_name);
+   if (ret) {
+   dev_err(dev, "gpio #%d request failed\n", i);
+   goto gpio_err;
+   }
+   }
+   return 0;
+
+ gpio_err:
+   for (j = 0; j < i; j++)
+   gpio_free(pb->gpios[j].gpio);
+   return ret;
+}
+
 static int pwm_backlight_parse_dt(struct device *dev,
- struct platform_pwm_backlight_data *data)
+ 

[PATCH] pwm-backlight: add support for device tree gpio control

2013-09-03 Thread Mike Dunn
This patch adds support for controlling an arbitrary number of gpios to the
pwm-backlight driver.  This was left as a TODO when initial device tree support
was added by Thierry a while back.  This functionality replaces the callbacks
that are passed in the platform data for non-DT cases.  Users can avail
themselves of this feature by adding a 'gpios' property to the 'backlight' node.
When the update_status() callback in backlight_ops runs, the gpios listed in the
property are asserted/deasserted if the specified brightness is non-zero/zero.

Tested on a pxa270-based Palm Treo 680.

Signed-off-by: Mike Dunn miked...@newsguy.com
---

Thanks for looking!

 .../bindings/video/backlight/pwm-backlight.txt |   4 +
 drivers/video/backlight/pwm_bl.c   | 128 ++---
 2 files changed, 113 insertions(+), 19 deletions(-)

diff --git 
a/Documentation/devicetree/bindings/video/backlight/pwm-backlight.txt 
b/Documentation/devicetree/bindings/video/backlight/pwm-backlight.txt
index 1e4fc72..4583e68 100644
--- a/Documentation/devicetree/bindings/video/backlight/pwm-backlight.txt
+++ b/Documentation/devicetree/bindings/video/backlight/pwm-backlight.txt
@@ -14,6 +14,9 @@ Required properties:
 Optional properties:
   - pwm-names: a list of names for the PWM devices specified in the
pwms property (see PWM binding[0])
+  - gpios: An arbitrary number of gpios that must be asserted when the
+   backlight is on, and de-asserted when off.  They will be 
asserted
+   in the order they appear, and de-asserted in reverse order.
 
 [0]: Documentation/devicetree/bindings/pwm/pwm.txt
 
@@ -25,4 +28,5 @@ Example:
 
brightness-levels = 0 4 8 16 32 64 128 255;
default-brightness-level = 6;
+   gpios = gpio 77 0, gpio 25 1;  /* gpio 25 is active low */
};
diff --git a/drivers/video/backlight/pwm_bl.c b/drivers/video/backlight/pwm_bl.c
index 1fea627..1e2ab52 100644
--- a/drivers/video/backlight/pwm_bl.c
+++ b/drivers/video/backlight/pwm_bl.c
@@ -20,6 +20,12 @@
 #include linux/pwm.h
 #include linux/pwm_backlight.h
 #include linux/slab.h
+#include linux/of_gpio.h
+
+struct pwm_bl_gpio {
+   unsigned int gpio;
+   enum of_gpio_flags flags;
+};
 
 struct pwm_bl_data {
struct pwm_device   *pwm;
@@ -27,6 +33,8 @@ struct pwm_bl_data {
unsigned intperiod;
unsigned intlth_brightness;
unsigned int*levels;
+   unsigned intnum_gpios;
+   struct pwm_bl_gpio  *gpios;
int (*notify)(struct device *,
  int brightness);
void(*notify_after)(struct device *,
@@ -94,14 +102,77 @@ static const struct backlight_ops pwm_backlight_ops = {
 };
 
 #ifdef CONFIG_OF
+static int pwm_backlight_dt_notify(struct device *dev, int brightness)
+{
+   struct backlight_device *bl = dev_get_drvdata(dev);
+   struct pwm_bl_data *pb = bl_get_data(bl);
+   int i;
+
+   if (brightness) {
+   for (i = 0; i  pb-num_gpios; i++) {
+   if (pb-gpios[i].flags == OF_GPIO_ACTIVE_LOW)
+   gpio_set_value(pb-gpios[i].gpio, 0);
+   else
+   gpio_set_value(pb-gpios[i].gpio, 1);
+   }
+   return 0;
+   }
+
+   /* de-assert gpios in reverse order, in case this is important */
+   for (i = pb-num_gpios - 1; i = 0; i--) {
+   if (pb-gpios[i].flags == OF_GPIO_ACTIVE_LOW)
+   gpio_set_value(pb-gpios[i].gpio, 1);
+   else
+   gpio_set_value(pb-gpios[i].gpio, 0);
+   }
+   return 0;
+}
+
+static void pwm_backlight_dt_exit(struct pwm_bl_data *pb)
+{
+   int i;
+
+   for (i = 0; i  pb-num_gpios; i++)
+   gpio_free(pb-gpios[i].gpio);
+}
+
+static int pwm_backlight_dt_init(struct device *dev, struct pwm_bl_data *pb)
+{
+   int i, j, ret;
+
+   /* request gpios and drive in the inactive state */
+   for (i = 0; i  pb-num_gpios; i++) {
+   char gpio_name[32];
+   unsigned long flags;
+   if (pb-gpios[i].flags == OF_GPIO_ACTIVE_LOW)
+   flags = GPIOF_OUT_INIT_LOW;
+   else
+   flags = GPIOF_OUT_INIT_HIGH;
+   snprintf(gpio_name, 32, %s.%d, dev_name(dev), i);
+   ret = gpio_request_one(pb-gpios[i].gpio, flags, gpio_name);
+   if (ret) {
+   dev_err(dev, gpio #%d request failed\n, i);
+   goto gpio_err;
+   }
+   }
+   return 0;
+
+ gpio_err:
+   for (j = 0; j  i; j++)
+   gpio_free(pb-gpios[j].gpio);
+   return ret;
+}
+
 static int pwm_backlight_parse_dt(struct device *dev,
- struct