| # Copyright 2023 NXP |
| # SPDX-License-Identifier: Apache-2.0 |
| |
| description: | |
| NXP S32 eMIOS PWM node for S32 SoCs. Each channel in eMIOS can be configured |
| to use for PWM operation. There are several PWM modes supported by this module, |
| some modes only support on channels that have internal counter, some modes |
| require to use a reference timebase from a master bus. |
| |
| For example to configuring eMIOS instance 0 with: |
| - Channel 0 for mode OPWFMB |
| - Channel 1 for mode OPWMB |
| - Channel 2 for mode OPWMCB with deadtime inserted at leading edge |
| - Channel 3 for mode SAIC, use internal timebase with input filter = 2 eMIOS clock |
| |
| emios0_pwm: pwm { |
| pwm_0 { |
| channel = <0>; |
| pwm-mode = "OPWFMB"; |
| prescaler = <8>; |
| period = <65534>; |
| duty-cycle = <32768>; |
| polarity = "ACTIVE_HIGH"; |
| }; |
| |
| pwm_1 { |
| channel = <1>; |
| master-bus = <&emios1_bus_a>; |
| pwm-mode = "OPWMB"; |
| duty-cycle = <32768>; |
| phase-shift = <100>; |
| polarity = "ACTIVE_LOW"; |
| }; |
| |
| pwm_2 { |
| channel = <2>; |
| master-bus = <&emios1_bus_b>; |
| pwm-mode = "OPWMCB_LEAD_EDGE"; |
| duty-cycle = <32768>; |
| dead-time = <100>; |
| polarity = "ACTIVE_LOW"; |
| }; |
| |
| pwm_3 { |
| channel = <3>; |
| pwm-mode = "SAIC"; |
| prescaler = <8>; |
| input-filter = <2>; |
| }; |
| }; |
| |
| OPWMB and OPWMCB modes use reference timebase, the master bus is chosen over |
| phandle 'master-bus'. For OPWMB mode, PWM's period is master bus's period and |
| is 2 * master bus's period - 2 for OPWMCB mode. Please notice that the devicetree |
| node for master bus should be enabled and configured for using, please see |
| 'nxp,s32-emios' bindings. |
| |
| compatible: "nxp,s32-emios-pwm" |
| |
| include: [pwm-controller.yaml, base.yaml, pinctrl-device.yaml] |
| |
| properties: |
| pinctrl-0: |
| required: true |
| |
| pinctrl-names: |
| required: true |
| |
| "#pwm-cells": |
| const: 3 |
| |
| pwm-cells: |
| - channel |
| # Period in terms of nanoseconds |
| - period |
| - flags |
| |
| child-binding: |
| description: | |
| eMIOS PWM channel configuration. |
| |
| properties: |
| channel: |
| type: int |
| required: true |
| description: eMIOS PWM channel |
| |
| master-bus: |
| type: phandle |
| description: | |
| A phandle to master-bus node that will be used as external timebase |
| for current channel, this can be bypassed if internal counter is used |
| for PWM operation. A master bus must be used exclusively, such as if |
| is used as a timebase for a channel in SAIC mode, do not use that |
| master bus as a timebase for generate PWM pulse. |
| |
| pwm-mode: |
| type: string |
| required: true |
| description: | |
| Select PWM mode: |
| - OPWFMB: provides waveforms with variable duty cycle and frequency, |
| this mode uses internal counter. |
| |
| - OPWMB: generate pulses with programmable leading and trailing |
| edge placement. The period is determined by period of |
| an external counter driven in MCB Up Mode. Changing PWM period |
| at runtime will impact to all channels share the same timebase. |
| The new period and cycle take effect in next period boundary. |
| |
| - OPWMCB: generates a center aligned PWM with dead time insertion to the |
| leading or trailing edge. The period is determined by period of |
| an external counter driven in MCB Up Down Mode. Changing PWM period |
| at runtime will impact to all channels share the same timebase, |
| The new period and cycle take effect in next period boundary. |
| |
| - SAIC: single action input capture mode, the eMIOS captures events as soon as |
| they occur. The value of latest captured event is stored and can be read |
| by software. |
| enum: |
| - "OPWFMB" |
| - "OPWMB" |
| - "OPWMCB_TRAIL_EDGE" |
| - "OPWMCB_LEAD_EDGE" |
| - "SAIC" |
| |
| polarity: |
| type: string |
| description: | |
| Output polarity for PWM channel. |
| enum: |
| - "ACTIVE_LOW" |
| - "ACTIVE_HIGH" |
| |
| duty-cycle: |
| type: int |
| description: | |
| Duty-cycle (in ticks) for PWM channel at boot time. |
| |
| period: |
| type: int |
| description: | |
| Period (in ticks) for OPWFMB at boot time. Period for the rest |
| of PWM mode depends on period's master bus. Must be in range [2 ... 65535]. |
| |
| freeze: |
| type: boolean |
| description: Freeze individual internal counter when the chip enters Debug mode. |
| |
| prescaler-src: |
| type: string |
| default: "PRESCALED_CLOCK" |
| description: | |
| Select clock source for internal counter prescaler. |
| enum: |
| - "PRESCALED_CLOCK" # Clock source = eMIOS clock / (global prescaler) |
| - "MODULE_CLOCK" # Clock source = eMIOS clock |
| |
| prescaler: |
| type: int |
| description: | |
| The clock divider for internal counter prescaler. |
| enum: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16] |
| |
| dead-time: |
| type: int |
| default: 0 |
| description: | |
| Dead time (in ticks) for PWM channel in OPWMCB mode. |
| |
| phase-shift: |
| type: int |
| default: 0 |
| description: | |
| Phase Shift (in ticks) for PWM channel in OPWMB mode. |
| |
| input-filter: |
| type: int |
| default: 0 |
| enum: [0, 2, 4, 8, 16] |
| description: | |
| Select the minimum input pulse width, in filter clock cycles that can pass |
| through the input filter. The filter latency - the difference in time between |
| the input and the response is three clock edges. Default 0 means the filter |
| is bypassed. The clock source for programmable input filter is eMIOS clock. |