1. 查MTK的Android_Driver_allinoneV1.01.pdf资料,到mediatek\source\kernel\drivers\leds\leds.c 中通过查看static int led_set_pwm(int pwm_num, struct nled_setting* led)函数,根据
struct cust_mt65xx_led {
char *name;
enum mt65xx_led_mode mode;
int data;
};结构定义的 cust_led_list中
static struct cust_mt65xx_led cust_led_list[MT65XX_LED_TYPE_TOTAL] = {
{"red", MT65XX_LED_MODE_PWM, PWM1},
{"green", MT65XX_LED_MODE_PWM, PWM2},
{"blue", MT65XX_LED_MODE_PWM, PWM3},
{"jogball-backlight", MT65XX_LED_MODE_NONE, -1},
{"keyboard-backlight",MT65XX_LED_MODE_NONE, -1},
{"button-backlight", MT65XX_LED_MODE_PWM, PWM7},
{"lcd-backlight", MT65XX_LED_MODE_CUST, (int)Cust_SetBacklight},
}; 来选择的botton backlight为pwm7等控制模式。
2. 修改mediatek\source\kernel\drivers\leds\leds.c文件led_set_pwm中的case NLED_ON下的duty(0-255),可以达到改变led的brightness。
pwm控制原理
1.这里是利用脉宽PWM法,通过调整PWM的周期和占空比来改变led亮与不亮的时间,即改变了亮与不亮的机器周期,达到控制led的亮与暗。这里的占空比的变量参数就是duty 和lever.
2.PWM中的占空比解释如下:如32KHZ意味每秒产生32K个脉冲波,每个脉冲波高电平用1,低电平0表示,,若产生的波是均匀的01010101…系列,说明了导通的时间和非导通的时间是1:1,即占空比是50%,若为非均匀的脉冲波,0与1的比例失调,即大于50%的占空比输出的平均电流大,则led就更亮。
3.由寄存器KPLEDcom0和pwm1模式控制Duration和data width等来调节01序列比,每个时间周期内有不同比例的01系列,再把这些不同的占空比分255个等级,mt6573_pwm.c 中 duty 或者 lever的变化,通过S32 pwm_set_easy_config ( struct pwm_easy_config *conf)函数转化为data0,data1值,然后去写寄存器: PWM_SEND_DATA0,PWM_SEND_DATA1;这样我们就可以调节led的亮度变化了。
————————————————