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

转载于:https://www.cnblogs.com/fah936861121/p/7085977.html

imx6背光驱动调试相关推荐

  1. IMX6 wm8960 驱动调试记录

    最近在调试wm8960, 在此记录一下. ALSA 架构下,imx6平台的wm8960驱动支持两种模式. codec-master 在codec-master模式下,由芯片旁的晶振提供mclk时钟(我 ...

  2. iMX6平台MAX9288调试

    因为有之前Ti ds90ub964的调试经验,这次调9288只是当做一个常规的驱动调试,坑大也得到了宝贵的经验 9288(GMSL--->MIPI CSI2)解码器解码9291和9277编码器过 ...

  3. 初级驱动调试笔记-总结

    文章目录 一.拿到开发板的第一步 二.调试第一步 三.Makefile说明 3.1 内核版本说明 3.2 Makefile文件 3.3 Makefile 与Kconfig的关系 3.4 defconf ...

  4. ubuntu18.04下双机驱动调试

    环境搭建: https://blog.51cto.com/haidragon/2337256 这里要先说下如果要下内核断点要先在编译前去掉写保护,但是下自己写的驱动可以不要. 第二个最好编译完后压缩v ...

  5. VMware调试.【转】VMware+Windgb+Win7 内核驱动调试

    ZC:我遇到的问题:com_1 怎么都不成功,记起来 貌似原来也遇到过这个问题,看了一下 VMware里面创建的是 "串行端口 2",于是 将 "com_1"改 ...

  6. 驱动调试(二)-环形缓冲区到文件

    目录 驱动调试(二)-环形缓冲区到文件 目标 框架分析 虚拟文件系统proc dmesg proc_misc_init kmsg_read do_syslog 程序1创建文件 程序2提供读函数 程序3 ...

  7. 使用驱动调试助手应该注意的问题

    最近,使用wince驱动牛人写的驱动调试助手调试扩展串口驱动,发现要注意一些问题. 以前使用驱动调试助手,我都是调试BSP上没有的驱动,现在调试已经存在的串口驱动该怎么做呢?难道要我把串口驱动从NK中 ...

  8. 【旧文章搬运】Windbg+Vmware驱动调试入门(一)---Windbg的设置

    原文发表于百度空间,2009-01-08 ========================================================================== Wind ...

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

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

最新文章

  1. 创建bdlink密码是数字_如何创建实际上是安全的密码
  2. ac9560不支持承载_Win10不支持承载网络的解决方法
  3. 网络安全等保定级_网络安全防护专项检查迫在眉睫, 青莲帮您快速定级备案和评测...
  4. 冒泡排序,swich语句,while循环...基础性的一道综合题初学者可以做一个简单的测试...
  5. C++中关于类中常数静态成员初始化的问题
  6. 借钱,一定要有还钱的素质
  7. mysql_unbuffered_query的_用mysql_unbuffered_query函数取大数据
  8. mysql的缓存机制是什么意思_MySQL缓存机制详解
  9. ElasticSearch讲解
  10. python画画零基础_Python获取英雄联盟皮肤原画:新手玩家们都懵了!
  11. ARC077C pushpush 递推
  12. DS4Windows(电脑PS4手柄控制器)v2.2.6 中文版
  13. sublime快捷键生成html5基本模板
  14. 一周学好python_学好 Python 的 11 个优秀资源
  15. 方便的视频播放器-饺子播放器
  16. ie11加载项启用不了 java,IE11或IE10中的管理加载项按钮是灰色的不能用怎么办
  17. 免费实用的jpg转换成pdf工具
  18. 梯度下降算法动图_一文读懂梯度下降算法
  19. 精心整理的MYSQL面试题
  20. 斯坦福大学开放课程:编程方法.02/第二课练习:karel 跳墙

热门文章

  1. sessionStorage细节
  2. 蚂蚁科技 Service Mesh 落地实践与挑战
  3. 程序员高薪盛宴背后:程序员正在消失?
  4. 戳破微服务的七大谎言
  5. 消息队列面试连环炮,你抗得住吗?
  6. StringBuffer 和 StringBuilder 的 3 个区别!
  7. 源代码遭泄露,大疆员工被罚20万,判刑半年。
  8. 拼多多技术事故复盘,程序员应该学到什么?
  9. 最全面的JVM G1学习笔记
  10. springBoot+springSecurity 数据库动态管理用户、角色、权限(二)