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. Asp.Net MVC part2 View、Controller详解

    View详解Razor视图引擎简介HtmlHelper强类型页面 Razor视图引擎简介强大的@:表示使用C#代码,相当于aspx中的<%%>可以完成输出功能当遇到html标签时会认为C# ...

  2. scrapy初探

    一  创建scrapy项目 运行命令: scrapy startproject 项目名称 目录结构 二  定义Item容器 Item是保存爬取到数据的容器,其使用方法和python字典类似,并且提供了 ...

  3. 网络采集软件核心技术剖析系列(7)---如何使用C#语言搭建程序框架(经典Winform界面,顶部菜单栏,工具栏,左边树形列表,右边多Tab界面)

    一 本系列随笔概览及产生的背景 自己开发的豆约翰博客备份专家软件工具问世3年多以来,深受广大博客写作和阅读爱好者的喜爱.同时也不乏一些技术爱好者咨询我,这个软件里面各种实用的功能是如何实现的. 该软件 ...

  4. CentOS--在CentOS安装PHP5.6

    查看centos的版本: [root@localhost ~]# lsb_release -a LSB Version:    :core-3.1-amd64:core-3.1-ia32:core-3 ...

  5. [干货]2017已来,最全面试总结——这些Android面试题你一定需要

        地址.http://blog.csdn.net/xhmj12/article/details/54730883 相关阅读: 吊炸天!74款APP完整源码! [干货精品,值得收藏]超全的一线互联 ...

  6. 重新学习vue基础

    1.创建vue实例 var vm = new Vue({ el: '#example', //选择元素 data: {a:1} //基本数据 }) 2.模板语法 (一)基本语法 <span> ...

  7. mysql 中查询一个字段是否为null的sql

    查询mysql数据库表中字段为null的记录: select * 表名 where 字段名 is null 查询mysql数据库表中字段不为null的记录: select * 表名 where 字段名 ...

  8. PostgreSQL配置文件--资源使用(除WAL外)

    2 资源使用(除WAL外) RESOURCE USAGE (except for WAL) 2.1 内存 Memory 2.1.1 shared_buffers 数字型 默认: shared_buff ...

  9. Ueditor .net版安装配置打开项目的源码傻瓜版教程 亲測~

    环境要求: 没有 .NET Framework 4.0的要先安装 安装完 .NET Framework 4.0 后.还须要向 IIS 注冊应用程序池,注冊的方法是,使用管理员权限打开命令提示符(CMD ...

  10. 测试网站页面网速的Python脚本

    一.测试网站页面网速脚本 [root@salt ~]# cat check_url.py #!/usr/bin/python # coding: UTF-8 import StringIO,pycur ...