Thierry Reding | 7299ab7 | 2011-12-14 11:10:32 +0100 | [diff] [blame] | 1 | Specifying PWM information for devices |
| 2 | ====================================== |
| 3 | |
| 4 | 1) PWM user nodes |
| 5 | ----------------- |
| 6 | |
| 7 | PWM users should specify a list of PWM devices that they want to use |
| 8 | with a property containing a 'pwm-list': |
| 9 | |
| 10 | pwm-list ::= <single-pwm> [pwm-list] |
| 11 | single-pwm ::= <pwm-phandle> <pwm-specifier> |
| 12 | pwm-phandle : phandle to PWM controller node |
| 13 | pwm-specifier : array of #pwm-cells specifying the given PWM |
| 14 | (controller specific) |
| 15 | |
| 16 | PWM properties should be named "pwms". The exact meaning of each pwms |
| 17 | property must be documented in the device tree binding for each device. |
| 18 | An optional property "pwm-names" may contain a list of strings to label |
| 19 | each of the PWM devices listed in the "pwms" property. If no "pwm-names" |
| 20 | property is given, the name of the user node will be used as fallback. |
| 21 | |
| 22 | Drivers for devices that use more than a single PWM device can use the |
| 23 | "pwm-names" property to map the name of the PWM device requested by the |
| 24 | pwm_get() call to an index into the list given by the "pwms" property. |
| 25 | |
| 26 | The following example could be used to describe a PWM-based backlight |
| 27 | device: |
| 28 | |
| 29 | pwm: pwm { |
| 30 | #pwm-cells = <2>; |
| 31 | }; |
| 32 | |
| 33 | [...] |
| 34 | |
| 35 | bl: backlight { |
| 36 | pwms = <&pwm 0 5000000>; |
| 37 | pwm-names = "backlight"; |
| 38 | }; |
| 39 | |
Philip, Avinash | 83af240 | 2012-11-21 13:10:44 +0530 | [diff] [blame] | 40 | Note that in the example above, specifying the "pwm-names" is redundant |
| 41 | because the name "backlight" would be used as fallback anyway. |
| 42 | |
Thierry Reding | 7299ab7 | 2011-12-14 11:10:32 +0100 | [diff] [blame] | 43 | pwm-specifier typically encodes the chip-relative PWM number and the PWM |
Philip, Avinash | 83af240 | 2012-11-21 13:10:44 +0530 | [diff] [blame] | 44 | period in nanoseconds. |
| 45 | |
Laurent Pinchart | 9344dad | 2013-07-18 00:54:21 +0200 | [diff] [blame] | 46 | Optionally, the pwm-specifier can encode a number of flags (defined in |
| 47 | <dt-bindings/pwm/pwm.h>) in a third cell: |
| 48 | - PWM_POLARITY_INVERTED: invert the PWM signal polarity |
Philip, Avinash | 83af240 | 2012-11-21 13:10:44 +0530 | [diff] [blame] | 49 | |
| 50 | Example with optional PWM specifier for inverse polarity |
| 51 | |
| 52 | bl: backlight { |
Laurent Pinchart | 9344dad | 2013-07-18 00:54:21 +0200 | [diff] [blame] | 53 | pwms = <&pwm 0 5000000 PWM_POLARITY_INVERTED>; |
Philip, Avinash | 83af240 | 2012-11-21 13:10:44 +0530 | [diff] [blame] | 54 | pwm-names = "backlight"; |
| 55 | }; |
Thierry Reding | 7299ab7 | 2011-12-14 11:10:32 +0100 | [diff] [blame] | 56 | |
| 57 | 2) PWM controller nodes |
| 58 | ----------------------- |
| 59 | |
| 60 | PWM controller nodes must specify the number of cells used for the |
| 61 | specifier using the '#pwm-cells' property. |
| 62 | |
| 63 | An example PWM controller might look like this: |
| 64 | |
| 65 | pwm: pwm@7000a000 { |
| 66 | compatible = "nvidia,tegra20-pwm"; |
| 67 | reg = <0x7000a000 0x100>; |
| 68 | #pwm-cells = <2>; |
| 69 | }; |