-> Device Drivers │
-> Pulse-Width Modulation (PWM) Support (PWM [=y])
<*> NXP PCA9685 PWM driver
0x70 is the default address of the Mikroe click board
i2c0: i2c@f8028000 {
dmas = <0>, <0>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_i2c0_default>;
i2c-sda-hold-time-ns = <350>;
status = "okay";
pca9685-0@70 {
compatible = "nxp,pca9685-pwm";
reg = <0x70>;
};
};
If the chip is probed this directory will be created
/sys/class/pwm/pwmchip0
For any PWM line you want to use you have to export it.
echo 0 > /sys/class/pwm/pwmchip0/export
echo 1 > /sys/class/pwm/pwmchip0/export
echo 2 > /sys/class/pwm/pwmchip0/export
echo 3 > /sys/class/pwm/pwmchip0/export
To use again that line ad generic GPIO you can unexport it:
echo 0 > /sys/class/pwm/pwmchip0/unexport
echo 1 > /sys/class/pwm/pwmchip0/unexport
echo 2 > /sys/class/pwm/pwmchip0/unexport
echo 3 > /sys/class/pwm/pwmchip0/unexport
For any exported channel a directory called pwmX wil be created with the following structure:
/sys/class/pwm/pwmchip0/pwmX/
|-- duty_cycle (r/w) duty cycle (in nanoseconds)
|-- enable (r/w) enable/disable PWM
|-- period (r/w) period (in nanoseconds)
|-- polarity (r/w) polarity of PWM
|-- power
`-- uevent
The follow example illustrate how enable a PWM signale with a period of 1mS with a 0.5mS of duty cycle:
echo 1000000 > /sys/class/pwm/pwmchip0/pwm0/period
echo 500000 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle
echo 1 > /sys/class/pwm/pwmchip0/pwm0/enable
The I2C port used is i2c-0
PIN_PD21 TWD0 Data
PIN_PD22 TWCK0 Clock