1df77f773SConor Dooley# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2df77f773SConor Dooley
3df77f773SConor Dooley%YAML 1.2
4df77f773SConor Dooley---
5df77f773SConor Dooley$id: http://devicetree.org/schemas/pwm/microchip,corepwm.yaml#
6df77f773SConor Dooley$schema: http://devicetree.org/meta-schemas/core.yaml#
7df77f773SConor Dooley
8*84e85359SKrzysztof Kozlowskititle: Microchip IP corePWM controller
9df77f773SConor Dooley
10df77f773SConor Dooleymaintainers:
11df77f773SConor Dooley  - Conor Dooley <conor.dooley@microchip.com>
12df77f773SConor Dooley
13df77f773SConor Dooleydescription: |
14df77f773SConor Dooley  corePWM is an 16 channel pulse width modulator FPGA IP
15df77f773SConor Dooley
16df77f773SConor Dooley  https://www.microsemi.com/existing-parts/parts/152118
17df77f773SConor Dooley
18df77f773SConor DooleyallOf:
19df77f773SConor Dooley  - $ref: pwm.yaml#
20df77f773SConor Dooley
21df77f773SConor Dooleyproperties:
22df77f773SConor Dooley  compatible:
23df77f773SConor Dooley    items:
24df77f773SConor Dooley      - const: microchip,corepwm-rtl-v4
25df77f773SConor Dooley
26df77f773SConor Dooley  reg:
27df77f773SConor Dooley    maxItems: 1
28df77f773SConor Dooley
29df77f773SConor Dooley  clocks:
30df77f773SConor Dooley    maxItems: 1
31df77f773SConor Dooley
32df77f773SConor Dooley  "#pwm-cells":
33a62d196eSConor Dooley    enum: [2, 3]
34a62d196eSConor Dooley    description:
35a62d196eSConor Dooley      The only flag supported by the controller is PWM_POLARITY_INVERTED.
36df77f773SConor Dooley
37df77f773SConor Dooley  microchip,sync-update-mask:
38df77f773SConor Dooley    description: |
39df77f773SConor Dooley      Depending on how the IP is instantiated, there are two modes of operation.
40df77f773SConor Dooley      In synchronous mode, all channels are updated at the beginning of the PWM period,
41df77f773SConor Dooley      and in asynchronous mode updates happen as the control registers are written.
42df77f773SConor Dooley      A 16 bit wide "SHADOW_REG_EN" parameter of the IP core controls whether synchronous
43df77f773SConor Dooley      mode is possible for each channel, and is set by the bitstream programmed to the
44df77f773SConor Dooley      FPGA. If the IP core is instantiated with SHADOW_REG_ENx=1, both registers that
45df77f773SConor Dooley      control the duty cycle for channel x have a second "shadow"/buffer reg synthesised.
46df77f773SConor Dooley      At runtime a bit wide register exposed to APB can be used to toggle on/off
47df77f773SConor Dooley      synchronised mode for all channels it has been synthesised for.
48df77f773SConor Dooley      Each bit of "microchip,sync-update-mask" corresponds to a PWM channel & represents
49df77f773SConor Dooley      whether synchronous mode is possible for the PWM channel.
50df77f773SConor Dooley
51df77f773SConor Dooley    $ref: /schemas/types.yaml#/definitions/uint32
52df77f773SConor Dooley    default: 0
53df77f773SConor Dooley
54df77f773SConor Dooley  microchip,dac-mode-mask:
55df77f773SConor Dooley    description: |
56df77f773SConor Dooley      Optional, per-channel Low Ripple DAC mode is possible on this IP core. It creates
57df77f773SConor Dooley      a minimum period pulse train whose High/Low average is that of the chosen duty
58df77f773SConor Dooley      cycle. This "DAC" will have far better bandwidth and ripple performance than the
59df77f773SConor Dooley      standard PWM algorithm can achieve. A 16 bit DAC_MODE module parameter of the IP
60df77f773SConor Dooley      core, set at instantiation and by the bitstream programmed to the FPGA, determines
61df77f773SConor Dooley      whether a given channel operates in regular PWM or DAC mode.
62df77f773SConor Dooley      Each bit corresponds to a PWM channel & represents whether DAC mode is enabled
63df77f773SConor Dooley      for that channel.
64df77f773SConor Dooley
65df77f773SConor Dooley    $ref: /schemas/types.yaml#/definitions/uint32
66df77f773SConor Dooley    default: 0
67df77f773SConor Dooley
68df77f773SConor Dooleyrequired:
69df77f773SConor Dooley  - compatible
70df77f773SConor Dooley  - reg
71df77f773SConor Dooley  - clocks
72df77f773SConor Dooley
73df77f773SConor DooleyadditionalProperties: false
74df77f773SConor Dooley
75df77f773SConor Dooleyexamples:
76df77f773SConor Dooley  - |
77df77f773SConor Dooley    pwm@41000000 {
78df77f773SConor Dooley      compatible = "microchip,corepwm-rtl-v4";
79df77f773SConor Dooley      microchip,sync-update-mask = /bits/ 32 <0>;
80df77f773SConor Dooley      clocks = <&clkcfg 30>;
81df77f773SConor Dooley      reg = <0x41000000 0xF0>;
82df77f773SConor Dooley      #pwm-cells = <2>;
83df77f773SConor Dooley    };
84