MT6582版本工作频率计算公式如下:
PWM工作频率计算公式:26MHz (clock freq.) / (PWM_CLKDIV+1) / 1024 (period) 26 KHz
所以需要修改PWM的工作频率,可以通过修改PWM_CLKDIV,clock freq,或者period的值来达到修 改PWM的工作频率的效果。
以下的三种方法可以任选1~2种来达到想要的PWM工作频率:
1. 修改分频参数方法,修改config_data里面的第二个参数:
{"lcd-backlight", MT65XX_LED_MODE_CUST_BLS_PWM, (int)disp_bls_set_backlight,{0, 1, 0, 0, 0}} //设置p=1
2. 修改clock freq:
在alps\mediatek\platform\mt6582\kernel\drivers\dispsys\ddp_bls.c文件的 disp_bls_init和disp_bls_config函数中设置CLK_CFG_1这个寄存器的值,来选择合适的时钟源,加入如下代码:
mt65xx_reg_sync_writel(DRV_Reg32(CLK_CFG_1) | (0x00000003), CLK_CFG_1); //设置156 MHz的时钟源
二、Driver - Battery Charging
1.充电方式
a.PMIC直接充电:驱动代码位于:
mediatek\platform\mt6592\kernel\drivers\power\charging_hw_pmic.c
b.switch charge方式充电(switch charger是功率转换型的芯片)。驱动代码位于:
mediatek\platform\mt6592\kernel\drivers\power\charging_hw_xxxx.c
比如:fan5405 对应的文件就是charging_hw_fan5405.c
bq24158对应的文件就是charging_hw_bq24158.c
具体配置位于:
MTK_FAN5405_SUPPORT=no
MTK_FASTBOOT_SUPPORT=no
2.driver中mdelay() 与msleep()的区别使用:
在Linux Driver开发中,经常要用到延迟函数:msleep,mdelay/udelay.
虽然msleep和mdelay都有延迟的作用,但他们是有区别的.
1.)对于模块本身
mdelay是忙等待函数,在延迟过程中无法运行其他任务.这个延迟的时间是准确的.是需要等待多少时间就会真正等待多少时间.
msleep是休眠函数,它不涉及忙等待.你如果是msleep(10),那实际上延迟的时间,大部分时候是要多于10ms的,是个不定的时间值.
他们的差异,平时我也讲的出来,可是真正用起来的时候,就忘记了.曾在两个driver的i2c的code中,需要用到delay函数,而我用了msleep函数,一直I2C速度超慢.而我又不知道哪里出了问题,我潜意识中,认为我只delay了1ms,可是,实际上是十几毫秒.
2.)对于系统:
mdelay() 会占用cpu资源,导致其他功能此时也无法使用cpu资源。
msleep() 则不会占住cpu资源,其他模块此时也可以使用cpu资源。
delay函数是忙则等待,占用CPU时间;而sleep函数使调用的进程进行休眠。
3.)udelay() mdelay() ndelay() 区别:
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shumachanpin/article-55851-7.html
也不是啥好鸟
我们坐实12海里要了里子