PWM子系统用于管理PWM波的输出,与我们之前学习的其他子系统类似,PWM具体实现代码由芯片厂商提供并默认编译进内核, 而我们可以使用内核(pwm子系统)提供的一些接口函数来实现具体的功能,例如使用PWM波控制显示屏的背光、控制无源蜂鸣器等等。
pwm子系统功能单一,很少单独使用。PWM子系统的使用也很简单,我们这章通过一个极简的PWM子系统驱动来简单认识一下PWM子系统。其中讲解的一些接口函数后面的复杂驱动可能会用到。
本章配套源码和设备树插件位于 ~/linux_driver/pwm_sub_system 目录下。
1. PWM子系统简介
在i.mx6中pwm子系统使用的是PWM外设,共有8个。 有关PWM外设的介绍可以参考imx6ull参考手册的Chapter 38 Pulse Width Modulation(PWM)章节, 这里不再介绍。使用了PWM子系统后和具体硬件相关的内容芯片厂商已经写好了, 我们唯一要做的就是在设备树(或者是设备树插件)中声明使用的引脚。
1.1. PWM设备结构体
在驱动中使用pwm_device结构体代表一个PWM设备。结构体原型如下所示:
pwm_device结构体:
struct pwm_device {
const char *label;
unsigned long flags;
unsigned int hwpwm;