mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-31 04:01:48 -04:00
pwm: Allow chips to support multiple PWMs
Many PWM controllers provide access to more than a single PWM output and may even share some resource among them. Allowing a PWM chip to provide multiple PWM devices enables better sharing of those resources. As a side-effect this change allows easy integration with the device tree where a given PWM can be looked up based on the PWM chip's phandle and a corresponding index. This commit modifies the PWM core to support multiple PWMs per struct pwm_chip. It achieves this in a similar way to how gpiolib works, by allowing PWM ranges to be requested dynamically (pwm_chip.base == -1) or starting at a given offset (pwm_chip.base >= 0). A chip specifies how many PWMs it controls using the npwm member. Each of the functions in the pwm_ops structure gets an additional argument that specified the PWM number (it can be converted to a per-chip index by subtracting the chip's base). The total maximum number of PWM devices is currently fixed to 1024 while the data is actually stored in a radix tree, thus saving resources if not all of them are used. Reviewed-by: Mark Brown <[email protected]> Reviewed-by: Shawn Guo <[email protected]> [[email protected]: fix error handling in pwmchip_add] Signed-off-by: Eric Bénard <[email protected]> Signed-off-by: Thierry Reding <[email protected]>
This commit is contained in:
parent
0c2498f166
commit
f051c466cf
3 changed files with 254 additions and 93 deletions
|
|
@ -33,9 +33,12 @@ there only has been the barebone API meaning that each driver has
|
|||
to implement the pwm_*() functions itself. This means that it's impossible
|
||||
to have multiple PWM drivers in the system. For this reason it's mandatory
|
||||
for new drivers to use the generic PWM framework.
|
||||
A new PWM device can be added using pwmchip_add() and removed again with
|
||||
pwmchip_remove(). pwmchip_add() takes a filled in struct pwm_chip as
|
||||
argument which provides the ops and the pwm id to the framework.
|
||||
|
||||
A new PWM controller/chip can be added using pwmchip_add() and removed
|
||||
again with pwmchip_remove(). pwmchip_add() takes a filled in struct
|
||||
pwm_chip as argument which provides a description of the PWM chip, the
|
||||
number of PWM devices provider by the chip and the chip-specific
|
||||
implementation of the supported PWM operations to the framework.
|
||||
|
||||
Locking
|
||||
-------
|
||||
|
|
|
|||
Loading…
Reference in a new issue