{\MT65XX_LED_MODE_NONE, -1}, {\MT65XX_LED_MODE_PWM, PWM7},
{\MT65XX_LED_MODE_CUST, (int)Cust_SetBacklight}, };
这个数组通过get_cust_led_list函数被mt65xx_leds_probe调用,传递给mt65xx_leds_driver,并且mt65xx_leds_probe 将数组中的设备一一注册。(\\mediatek\\source\\kernel\\drivers\\leds\\ leds.c) static struct platform_driver mt65xx_leds_driver = { .driver = {
.name = \.owner = THIS_MODULE, },
.probe = mt65xx_leds_probe, .remove = mt65xx_leds_remove, //.suspend = mt65xx_leds_suspend, .shutdown = mt65xx_leds_shutdown, };
static struct platform_device mt65xx_leds_device = { .name = \.id = -1 };
以lcd-backlight为例,其控制方式为自定义,背光控制IC为SN3228B,控制函数为
Cust_SetBacklight。MT6573的GPIO49作为控制脚,连接到SN3228B的EN/SET脚。该引脚对收到的上升沿脉冲计数(1~14个),调整自己的输出电流,从而控制Leds的亮度。所以
Cust_SetBacklight根据要达到的亮度level,在GPIO49上输出对应数量的上升沿脉冲,时间特性需满足SN3228的定义。
如果采用PWM控制方式,则需要使用MT6573的PWM controller。函数led_set_pwm实现了用PWM控制led灯的亮、灭、闪烁时对PWM controller 相关寄存器的配置;函数backlight_set_pwm实现了用PWM控制lcd backlight时对PWM controller 相关寄存器的配置,随lcd-backlight brightness level不同,相应的PWM脚输出对应数量的脉冲(level:0~64) mt65xx_led_set_cust根据不同的控制方式,调用相应的配置函数,如下: MT65XX_LED_MODE_PWM: backlight_set_pwm / led_set_pwm MT65XX_LED_MODE_CUST: Cust_SetBacklight MT65XX_LED_MODE_GPIO: brightness_set_gpio MT65XX_LED_MODE_PMIC: brightness_set_pmic
mt65xx_leds_probe 为cust_led_list[]中的每个led设备初始化一个任务队列,任务处理函数为 mt65xx_led_work,它再调用mt65xx_led_set_cust实现控制。每个led设备的亮度设置
(brightness_set)函数为mt65xx_led_set,它对lcd-backlight设备直接调用mt65xx_led_set_cust,对
其他设备则用任务队列调度。
Uboot阶段,其函数调用及led和backlight控制方式与启动后基本相同。增加了各种充电状态下对红、绿、蓝led的控制。如下是backlight的调用关系: (mt65xx_leds.c)
mt65xx_backlight_on——mt65xx_leds_brightness_set(MT65XX_LED_TYPE_LCD, LED_FULL)——mt65xx_led_set_cust——brightness_set_pwm / Cust_SetBacklight