1.内核配置pwm背光驱动
make menuconfig:
Device Driver --->
Graphics support --->
[*] Backlight & LCD device support --->
<*> Lowlevel Backlight controls
<*> Generic PWM based Backlight Driver

2.背光sys文件节点/sys/class/backlight/的由来
在drivers/video/backlight/backlight.c中backlight_class_init()函数中class_create(THIS_MODULE, "backlight")中创建的, 那么剩下的/sys/class/backlight/backlight.27/brightness又是怎么来的呢?我们可以看到在drivers/video/backlight/pwm_bl.c中有backlight_device_register(dev_name(&pdev->dev), &pdev->dev, pb, &pwm_backlight_ops, &props), 这个注册函数接口在/sys/class/backlight/下又创建了一个设备接口, 名字是通过dev_name(&pdev->dev)实参传递的. 那么dev_name(&pdev->dev)是怎样的呢?
static inline const char *dev_name(const struct device *dev)
{
/* Use the init name until the kobject becomes available */
if (dev->init_name)
return dev->init_name;

return kobject_name(&dev->kobj);
}
由此可知, 如果dev的init_name成员不为空, 则dev_name就是dev的init_name成员值, 否则dev_name就是kobject_name(&dev->kobj), 官方驱动中dev的init_name为空, 所有dev_name为kobject_name(&dev->kobj), 这个会是随机值, 会产生/sys/class/backlight/backlight.27/...等目录, 或产生/sys/class/backlight/backlight.16/...等目录, 现在项目中我需要固定这个目录为/sys/class/backlight/hud-lcd-backlight/..., 所以我可以给dev的init_name赋值, 这样就可以产生我们想要的目录了, 在drivers/video/backlight/pwm_bl.c文件probe函数中backlight_device_register函数前增加dev_set_name(&pdev->dev, "%s", "hud-lcd-backlight");即可实现

3.背光驱动源码分析driver/video/backlight/pwm_bl.c
3.1通过compitable = "pwm-backlight";匹配到设备树上arch/arm/boot/dts/imx6dl-hud.dtsi的pwm-backlight设备
3.2进入到探测函数pwm_backlight_probe, 由于backlight设备是采用设备树, 所以data = dev_get_platdata(&pdev->dev), data = NULL, 所以会进入到pwm_backlight_parse_dt函数
3.3进入到pwm_backlight_parse_dt(&pdev->dev, &defdata)函数,解析设备树的设备值, 其实就是把设备树的值(pdev->dev)解析赋值给defdata, 其中prop = of_find_property(node, "brightness-levels", &length);
该函数读取设备数结点中"brightness-levels"属性,并把读取的值放到length中去,这里length = 32,因为每一个bright-levels的元素(0 4 8 16 32 64 128 255)占4个字节, 共8个元素(0 4 8 16 32 64 128 255)所有共占32字节, 所以length = 32
3.4data = &defdata把解析好的数据defdata赋值给data
3.5data->init = NULL
3.6devm_regulator_get(&pdev->dev, "power"); 由于没有power节点, 所以会返回错误(backlight.27 supply power not found, using dummy regulator)
3.7devm_pwm_get()获取pwm
3.8注意这里backlight_device_register(dev_name(&dev->dev), &pdev->dev, pb, &pwm_backlight_ops, &props);通过这个注册函数接口就创建了/sys/class/backlight/目录下相应的brightness, max_brightness等属性(通过backlight_device_register()函数中memcpy()实现)

4.背光驱动IC(U8 SC44ATETRT)与imx6接口控制有3个信号
LCD_BL_EN:背光驱动IC使能
LCD_BL_FFLAG:背光驱动IC电源失效检测信号, 正常是低电平
LCD_BL_PWM:背光驱动IC pwm控制
4.1LCD_BL_EN
对应原理图中的NANDF_CS2 pad
需要配置成gpio模式 对应gpio为GPIO6_IO15(MX6QDL_PAD_NANDF_CS2__GPIO6_IO15)
4.2LCD_BL_FFLAG
对应原理图中的NANDF_CLE pad
需要配置成gpio模式 对应gpio为GPIO6_IO07(MX6QDL_PAD_NANDF_CLE__GPIO6_IO07)
4.3LCD_BL_PWM
对应原理图中的SD1_DAT2 pad
需要配置成pwm模式 对应的是pwm2输出(MX6QDL_PAD_SD1_DAT2__PWM2_OUT),在arch/arm/boot/dts/imx6dl-hud.dtsi设备树要配置
可以在该文件搜索pwm,所有配置如pwm所示

5.SYS_12V_EN
对应原理图U4电源管理ic的使能脚 对应SD1_DAT0 pad
需要配置成gpio模式 对应gpio为GPIO1_IO16
这个使能后才能给背光驱动IC供电

6.imx6qdl上的背光驱动设备树分析
imx6q设备树上的pwm背光驱动描述如下,各节点的具体含义可参考http://blog.csdn.net/mike8825/article/details/51656400
pwm-backlight {
compatible = "pwm-backlight";
pwms = <&pwm2 0 50000>;
brightness-levels = <0 4 8 16 32 64 128 255>;
default-brightness-level = <7>;
status = "okay";
};

&pwm2 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_pwm2>;
status = "okay";
};

pinctrl_pwm2: pwm2grp {
fsl,pins = <
MX6QDL_PAD_SD1_DAT2__PWM2_OUT 0x1b0b1
>;
};

参考http://blog.csdn.net/wilsonboliu/article/details/14170135

imx6背光驱动调试的更多相关文章

  1. LCD屏背光驱动调试心得---血的教训

    开发板:明远智睿MY-IMX6-EK140 内核源码:linux-3.14.52 背光驱动IC:MP3202 调光原理:通过开发板的核心板PWM4引脚控制MP3202的EN脚,输出不同的占空比从而达到 ...

  2. android系统平台显示驱动开发简要:LCD驱动调试篇『四』

    平台信息: 内核:linux3.4.39系统:android4.4 平台:S5P4418(cortex a9) 作者:瘋耔(欢迎转载,请注明作者) 欢迎指正错误,共同学习.共同进步!! 关注博主新浪博 ...

  3. 【转】Android LCD(四):LCD驱动调试篇

    关键词:android LCD TFTSN75LVDS83B  TTL-LVDS LCD电压背光电压 平台信息:内核:linux2.6/linux3.0系统:android/android4.0 平台 ...

  4. Android驱动调试利器Busybox之初体验

    工欲善其事必先利其器,之前做WinCE开发时,经常写一些小工具以提高开发调试的效率,如WinCE驱动调试助手.WinCE串口调试助手.WinCE6.0寄存器访问工具.WinCE远程桌面助手和S3C24 ...

  5. [windows驱动]windows8.1驱动调试前戏

    人们都说在干正事之前,得先做足前戏才会爽,我一直很认同这个观点,下面我来总结下进行windows8.1的WDK调试所要做的准备工作. 软件安装: 1.VS2013. 2.WDK8.1 3.Window ...

  6. Linux驱动设计—— 驱动调试技术

    参考博客与书籍: <Linux设备驱动开发详解> <Linux设备驱动程序> http://blog.chinaunix.net/uid-24219701-id-2884942 ...

  7. android 电容屏(二):驱动调试之基本概念篇

    平台信息: 内核:linux3.4.39系统:android4.4 平台:S5P4418(cortex a9) 作者:瘋耔(欢迎转载,请注明作者) 欢迎指正错误,共同学习.共同进步!! 关注博主新浪博 ...

  8. 【转】android 电容屏(三):驱动调试之驱动程序分析篇

    关键词:android  电容屏 tp 工作队列 中断 坐点计算  电容屏主要参数平台信息:内核:linux2.6/linux3.0系统:android/android4.0  平台:S5PV310( ...

  9. 【转】android 电容屏(二):驱动调试之基本概念篇

    关键词:android  电容屏 tp 工作队列 中断 多点触摸协议平台信息:内核:linux2.6/linux3.0系统:android/android4.0 平台:S5PV310(samsung ...

随机推荐

  1. C#SerialPort实现串口控制继电器

    最近做了一个小系统,麻雀虽小五脏俱全呀,用到各种线程控制,串口控制等技术.其中串口控制最麻烦,因为继电器的响应很快,根据不同的转接口,返回的数据质量是不一样的,所以不能直接wirte,然后马上read ...

  2. Spring入门程序-前端控制器配置器

    1,处理器的第二种配置方式 <!--配置handler --> <bean id="/FirstController" class="com.songy ...

  3. 用fastjson反序列化 带泛型的类

    ServiceResult<User> serviceResult = JSON.parseObject(obtainResult, new TypeReference<Servic ...

  4. JNI之常用函数大全

    要素  :1. 该函数大全是基于C语言方式的,对于C++方式可以直接转换 ,例如,对于生成一个jstring类型的方法转换分别如下: C编程环境中使用方法为:(*env) ->NewString ...

  5. JQuery使用trigger模拟触发selete的选择change事件

    <!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...

  6. vb6 wininet

    Private Const UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; .NET CLR 1.1.4322)&qu ...

  7. HTTP协议下保证登录密码不被获取最健壮方式

    原文:http://www.cnblogs.com/intsmaze/p/6009648.html HTTP协议下保证登录密码不被获取最健壮方式   说到在http协议下用户登录如何保证密码安全这个问 ...

  8. redis_安装及使用

    一.文档资料       1.官方网站:http://redis.io/       2.官方文档:http://redis.io/documentation       3.常用命令文档:http: ...

  9. GSM模块_GPRS数据传输机制和原理

    通信专业术语 BSS--基站子系统,通过无线接口与移动台直接联系,负责在一定区域内和移动台通信.(GSM) BTS--基站收发台,可以看作一复杂的无线调制器,BSS的主要部分,每个分配有若干信道.(G ...

  10. 基于3D Vision眼镜的OSG立体显示 【转】

    http://blog.csdn.net/qq_20038925/article/details/50510565 OSG 立体显示 3D Vision眼镜:所实现的是被动立体. 1.本人最近在做os ...