imx6背光驱动调试
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背光驱动调试的更多相关文章
- LCD屏背光驱动调试心得---血的教训
开发板:明远智睿MY-IMX6-EK140 内核源码:linux-3.14.52 背光驱动IC:MP3202 调光原理:通过开发板的核心板PWM4引脚控制MP3202的EN脚,输出不同的占空比从而达到 ...
- android系统平台显示驱动开发简要:LCD驱动调试篇『四』
平台信息: 内核:linux3.4.39系统:android4.4 平台:S5P4418(cortex a9) 作者:瘋耔(欢迎转载,请注明作者) 欢迎指正错误,共同学习.共同进步!! 关注博主新浪博 ...
- 【转】Android LCD(四):LCD驱动调试篇
关键词:android LCD TFTSN75LVDS83B TTL-LVDS LCD电压背光电压 平台信息:内核:linux2.6/linux3.0系统:android/android4.0 平台 ...
- Android驱动调试利器Busybox之初体验
工欲善其事必先利其器,之前做WinCE开发时,经常写一些小工具以提高开发调试的效率,如WinCE驱动调试助手.WinCE串口调试助手.WinCE6.0寄存器访问工具.WinCE远程桌面助手和S3C24 ...
- [windows驱动]windows8.1驱动调试前戏
人们都说在干正事之前,得先做足前戏才会爽,我一直很认同这个观点,下面我来总结下进行windows8.1的WDK调试所要做的准备工作. 软件安装: 1.VS2013. 2.WDK8.1 3.Window ...
- Linux驱动设计—— 驱动调试技术
参考博客与书籍: <Linux设备驱动开发详解> <Linux设备驱动程序> http://blog.chinaunix.net/uid-24219701-id-2884942 ...
- android 电容屏(二):驱动调试之基本概念篇
平台信息: 内核:linux3.4.39系统:android4.4 平台:S5P4418(cortex a9) 作者:瘋耔(欢迎转载,请注明作者) 欢迎指正错误,共同学习.共同进步!! 关注博主新浪博 ...
- 【转】android 电容屏(三):驱动调试之驱动程序分析篇
关键词:android 电容屏 tp 工作队列 中断 坐点计算 电容屏主要参数平台信息:内核:linux2.6/linux3.0系统:android/android4.0 平台:S5PV310( ...
- 【转】android 电容屏(二):驱动调试之基本概念篇
关键词:android 电容屏 tp 工作队列 中断 多点触摸协议平台信息:内核:linux2.6/linux3.0系统:android/android4.0 平台:S5PV310(samsung ...
随机推荐
- Delphi 获取sqlite中所有的表名
取得sqlite数据库里所有的表名 查询table,type 段是'table',name段是table的名字, so: select name from sqlite_master where ty ...
- CRC代码实现
CRC代码实现1: #include <stdio.h> #include <string.h> unsigned int cfgCrc32(const unsigned ch ...
- centos系统的时间时区和MySQL的时间时区问题
原文:http://1567045.blog.51cto.com/1557045/1074971 centos系统的时间时区和MySQL的时间时区问题 年轻人做事要细心,特别我们这些搞IT的千万不莽 ...
- SSH 登录缓慢解决方案
SSH 登录太慢可能是 DNS 解析的问题,默认配置下 sshd 初次接受 ssh 客户端连接的时候会自动反向解析客户端 IP 以得到 ssh 客户端的域名或主机名. 如果这个时候 DNS 的反向解析 ...
- JVM监测分析JConsole
一.基本操作 启动界面 1.JConsole是什么 从Java 5开始引入了JConsole.JConsole是一个内置Java性能分析器,可以从命令行或在GUI shell中运行.您可以轻松地使 ...
- ubuntu_software_install
1.atom PPA安装 命令行上依次输入即可完成安装: sudo add-apt-repository ppa:webupd8team/atom sudo apt-get update sudo a ...
- [Python爬虫] 之十七:Selenium +phantomjs 利用 pyquery抓取梅花网数据
一.介绍 本例子用Selenium +phantomjs爬取梅花网(http://www.meihua.info/a/list/today)的资讯信息,输入给定关键字抓取资讯信息. 给定关键字:数字: ...
- [Python爬虫] 之二十:Selenium +phantomjs 利用 pyquery通过搜狗搜索引擎数据
一.介绍 本例子用Selenium +phantomjs 利用 pyquery通过搜狗搜索引擎数据()的资讯信息,输入给定关键字抓取资讯信息. 给定关键字:数字:融合:电视 抓取信息内如下: 1.资讯 ...
- Yii使用公共函数
在网站项目中,没必要把公用的函数写成一个工具类,有时候面向过程其实更方便. 在入口文件index.php里添加 require_once('protected/function.php'); 即可对其 ...
- Hive中日期函数总结
--Hive中日期函数总结: --1.时间戳函数 --日期转时间戳:从1970-01-01 00:00:00 UTC到指定时间的秒数 select unix_timestamp(); --获得当前时区 ...