| # Copyright (c) 2022 Espressif Systems (Shanghai) Co., Ltd. |
| # SPDX-License-Identifier: Apache-2.0 |
| |
| description: | |
| |
| Espressif's LEDC controller Node |
| |
| The LEDC controller is primarily designed to control the intensity of LEDs, although it can be |
| used to generate PWM signals for other purposes as well. |
| |
| The mapping between the channel and GPIO is done through pinctrl |
| |
| &ledc0 { |
| pinctrl-0 = <&ledc0_default>; |
| pinctrl-names = "default"; |
| } |
| |
| The 'ledc0_default' node state is defined in <board>-pinctrl.dtsi. |
| |
| ledc0_default: ledc0_default { |
| group1 { |
| pinmux = <LEDC_CH0_GPIO0>, |
| <LEDC_CH1_GPIO2>, |
| <LEDC_CH2_GPIO4>; |
| output-enable; |
| }; |
| }; |
| |
| If another GPIO mapping is desired, check if <board>-pinctrl.dtsi already have it defined, |
| otherwise, define the required mapping at your own application folder into a custom |
| <board>.overlay file. |
| The 'pinmux' property uses a macro defined in |
| https://github.com/zephyrproject-rtos/hal_espressif/tree/zephyr/include/dt-bindings/pinctrl |
| Before including a new node, check if the desired mapping is available according to the SoC. |
| |
| As an example, the 'ledc0_custom' state below illustrates an alternate mapping using another set |
| of channels and pins in a custom overlay file. |
| |
| &pinctrl { |
| |
| ledc0_custom: ledc0_custom { |
| group1 { |
| pinmux = <LEDC_CH0_GPIO0>, |
| <LEDC_CH9_GPIO2>, |
| <LEDC_CH10_GPIO4>; |
| output-enable; |
| }; |
| }; |
| |
| }; |
| |
| Use the child bindings to configure the desired channel: |
| |
| &ledc0 { |
| pinctrl-0 = <&ledc0_custom>; |
| pinctrl-names = "default"; |
| status = "okay"; |
| #address-cells = <1>; |
| #size-cells = <0>; |
| channel0@0 { |
| reg = <0x0>; |
| timer = <0>; |
| }; |
| channel9@9 { |
| reg = <0x9>; |
| timer = <0>; |
| }; |
| channel10@a { |
| reg = <0xa>; |
| timer = <1>; |
| }; |
| }; |
| |
| Note: The channel's 'reg' property defines the ID of the channel. It must match the channel used |
| in the 'pinmux'. |
| |
| |
| compatible: "espressif,esp32-ledc" |
| |
| include: [pwm-controller.yaml, pinctrl-device.yaml, base.yaml] |
| |
| properties: |
| "#pwm-cells": |
| const: 3 |
| |
| child-binding: |
| description: Channel configuration. |
| |
| properties: |
| reg: |
| type: int |
| required: true |
| enum: |
| - 0 |
| - 1 |
| - 2 |
| - 3 |
| - 4 |
| - 5 |
| - 6 |
| - 7 |
| - 8 |
| - 9 |
| - 10 |
| - 11 |
| - 12 |
| - 13 |
| - 14 |
| - 15 |
| |
| description: | |
| The ESP32 has 8 low speed channel and 8 high speed channels. |
| The low speed channel are mapped from channel 0 to 7, and the high speed are mapped from |
| channel 8 to 15. |
| |
| High speed channels are only available in the ESP32 SoC. ESP32S2 and ESP32S3 have 8 |
| available channels, and ESP32C3 has 6. In these SoCs there is no differentiation between |
| low or high speed. |
| |
| timer: |
| type: int |
| required: true |
| enum: |
| - 0 |
| - 1 |
| - 2 |
| - 3 |
| description: | |
| Timer selection. |
| For maximum flexibility, the high-speed as well as the low-speed channels can be driven from |
| one of four high-speed/low-speed timers. |
| |
| pwm-cells: |
| - channel |
| - period |
| - flags |