转载时请注明出处和作者文章出处:http://blog.csdn.net/lbmygf
1、在板级初始化文件mx53_smd_c中将gpio1-1配置为pwm模式:
/* GPIO1 FOR pwm */
MX53_PAD_GPIO_1__PWM2_PWMO,
2、kernel_imx/arch/arm/plat-mxc/pwm.c 在pwm驱动中看到
EXPORT_SYMBOL(pwm_request);
EXPORT_SYMBOL(pwm_enable);
EXPORT_SYMBOL(pwm_config);
它把那些函数都导出,是全局的了,所以呢,在背光的驱动中是可以直接用的。
3、下面看看背光的驱动:kernel_imx/drivers/video/backlight/da9052_bl.c
在这 da9052_bl.c 中他原来的背光调节,也可以留着,自己处理,关键看你硬件怎么搭。其中的brightness这个参数你是要用到
的,根据这个值来调节你pwm的占空比。
在da9052_bl.c的靠前部分定义一个全局pwm_device指针:
struct pwm_device *pwm;
在 da9052_backlight_probe probe函数中添加如下信息:
int ret;
pwm = pwm_request(1, "backlight");
if (IS_ERR(pwm)) {
dev_err(&pdev->dev, "unable to request PWM for backlight\n");
ret = PTR_ERR(pwm);
goto err_bl;
} else
dev_dbg(&pdev->dev, "got pwm for backlight\n");
pwm_request 第一个参数是 pwm 设备 的ID号,这个你的去确认你所用的pwm是那个
了,我这系统有2个,我用的是pwm2,pwm_request()调用时,会遍历pwm设备,去查找id为
1的那个。
在kernel/arch/arm/mach-mx5/devices.c 中有mxc_pwm2_device 定义,id = 1
struct platform_device mxc_pwm2_device = {
.name = "mxc_pwm",
.id = 1,
.num_resources = ARRAY_SIZE(pwm2_resources),
.resource = pwm2_resources,
};
4、最后你就找个带 brightness 参数的函数,去在里面做你自己的控制了,我的控制如下:
unsigned int period = 50000;//78770;
unsigned int max = 255;
if (brightness == 0)
{
pwm_config(pwm, 0, period);
pwm_disable(pwm);
} else
{
pwm_config(pwm, brightness * period / max, period);
pwm_enable(pwm);
}
基本上到这就差不多了。