本笔记基于SDM660平台记录
一、PWM信号电平转换不能用普通三极管或者二极管,需要用高速三极管或者分压
否则出来的信号可能因为PN结的电容效应而变得不是方波,比如如下图:
蓝色是4V的PWM信号,黄色是通过三极管反向输出的波形,显然因为三极管的电容效应,无法得到转换后的波形。
二、改变PWM的高电平电压
路径:kernel\msm-4.4\arch\arm64\boot\dts\qcom\sdm660-mtp.dtsi
gpio@c500->qcom,vin-sel = <0>; 0-4V 1-1.8V
三、屏背光调用pwm过程
mdss_dsi_config_panel()->mdss_dsi_panel_init()->mdss_dsi_panel_bl_ctrl()->mdss_dsi_panel_bklt_pwm()
四、屏背光读取pwm设备树过程
mdss_dsi_ctrl_probe()->mdss_panel_parse_bl_settings()
五、屏背光注册pwm过程
mdss_dsi_ctrl_probe()->dsi_panel_device_register()->mdss_dsi_panel_pwm_cfg()
(注意这里并没有跑到pwm_request(),而是通过PMIC进行通信,不需要pwm_request)
六、如果想自己实现驱动调用PWM
比如用pm660l_pwm_4 ;
6.1. 设备树:
自己的驱动的设备树添加pwms = <&pm660l_pwm_4 0 0>;
另外:
参考kernel\msm-4.4\Documentation\devicetree\bindings\pwm\pwm-qpnp.txt:
设备树添加如下:
&pm660l_pwm_4 {
status = "okay";
qcom,pwm {
label = "pwm";
}
6.2. 驱动:
获得设备树信息:
struct pwm_device* pwm;
pwm = of_pwm_get(np, NULL);
然后通过
pwm_config()函数即可调用。
具体细节可参考屏驱动。