137 lines
3.4 KiB
YAML
137 lines
3.4 KiB
YAML
# 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
|