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. Delphi 获取sqlite中所有的表名

    取得sqlite数据库里所有的表名 查询table,type 段是'table',name段是table的名字, so: select name from sqlite_master where ty ...

  2. CRC代码实现

    CRC代码实现1: #include <stdio.h> #include <string.h> unsigned int cfgCrc32(const unsigned ch ...

  3. centos系统的时间时区和MySQL的时间时区问题

    原文:http://1567045.blog.51cto.com/1557045/1074971 centos系统的时间时区和MySQL的时间时区问题  年轻人做事要细心,特别我们这些搞IT的千万不莽 ...

  4. SSH 登录缓慢解决方案

    SSH 登录太慢可能是 DNS 解析的问题,默认配置下 sshd 初次接受 ssh 客户端连接的时候会自动反向解析客户端 IP 以得到 ssh 客户端的域名或主机名. 如果这个时候 DNS 的反向解析 ...

  5. JVM监测分析JConsole

    一.基本操作   启动界面 1.JConsole是什么 从Java 5开始引入了JConsole.JConsole是一个内置Java性能分析器,可以从命令行或在GUI shell中运行.您可以轻松地使 ...

  6. ubuntu_software_install

    1.atom PPA安装 命令行上依次输入即可完成安装: sudo add-apt-repository ppa:webupd8team/atom sudo apt-get update sudo a ...

  7. [Python爬虫] 之十七:Selenium +phantomjs 利用 pyquery抓取梅花网数据

    一.介绍 本例子用Selenium +phantomjs爬取梅花网(http://www.meihua.info/a/list/today)的资讯信息,输入给定关键字抓取资讯信息. 给定关键字:数字: ...

  8. [Python爬虫] 之二十:Selenium +phantomjs 利用 pyquery通过搜狗搜索引擎数据

    一.介绍 本例子用Selenium +phantomjs 利用 pyquery通过搜狗搜索引擎数据()的资讯信息,输入给定关键字抓取资讯信息. 给定关键字:数字:融合:电视 抓取信息内如下: 1.资讯 ...

  9. Yii使用公共函数

    在网站项目中,没必要把公用的函数写成一个工具类,有时候面向过程其实更方便. 在入口文件index.php里添加 require_once('protected/function.php'); 即可对其 ...

  10. Hive中日期函数总结

    --Hive中日期函数总结: --1.时间戳函数 --日期转时间戳:从1970-01-01 00:00:00 UTC到指定时间的秒数 select unix_timestamp(); --获得当前时区 ...