本文转载自:http://blog.csdn.net/u012719256/article/details/52083961

Touch panel DTS 分析(MSM8994平台,Atmel 芯片)

在MSM8994平台下,Touch panel的DTS节点写在/kernel/arch/arm/boot/dts/qcom/msm8994-mtp.dtsi文件中。具体代码如下:

 
&soc {
          i2c@f9924000 {
                                   atmel_mxt_ts@4a {
                                            compatible = "atmel,atmel_mxt_ts";
                                            reg = <0x4a>;
                                            interrupt-parent = <&msm_gpio>;
                                            interrupts = <61 0x2008>;
                                            avdd-supply  = <&pm8994_l22>;
                                            vdd_io-supply = <&pm8994_l14>;
                                            .........
                                            };
                                };
 
在DTS节点中,我们主要看一下avdd-supply and vdd_io-supply两个属性。这两个属性在C代码里的使用方式如下:
 
/kernel/drivers/input/touchscreen/atmel_mxt_ts.c
mxt_probe_regulators(struct mxt_data *data)
{
     ........
     data->reg_vdd_io = regulator_get(dev, "vdd_io");
     ........
     data->reg_avdd = regulator_get(dev, "avdd");
     ........
}
 
/kernel/drivers/regulator/core.c
struct regulator *regulator_get(struct device *dev, const char *id)
{
     return _regulator_get(dev, id, 0);
}
 
static struct regulator *_regulator_get(struct device *dev, const char *id, int exclusive)
{
     .......
     rdev = regulator_dev_lookup(dev, id, &ret);
     if(rdev)
          goto found;
     ......
}
 
static struct regulator_dev *regulator_dev_lookup(struct devic *dev, const char *supply, int *ret)
{
     struct regulator_dev *r;
     struct device_node *node;
     ........
     /* first do a dt based lookup */
     if (dev && dev->of_node) {
          node = of_get_regulator(dev, supply)
          if (node) {
                    list_for_each_entry(r, &regulator_list, list)
                         if ( r->dev.parent && node == r->dev.of_node)
                                  return r;
                         ........
                         }
         }
}
 
static struct device_node *of_get_regulator(struct device *dev, const char *supply)
{
        struct device_node *regnode = NULL;
         char prop_name[32];
         .......
         snprintf(prop_name, 32, "%s-supply", supply);
         regnode = of_parse_phandle(dev->of_node, prop_name, 0);
         ........
}
 
从上述代码大致上可以看到DTS里的vdd_io-supply and avdd-supply属性是如何解析和使用的。在mxt_probe()函数中将字符串“avdd”和“vdd_io”传给regulator_get()函数,一步步调用下来后,在of_get_regulator()函数中将字符串合并成DTS中符合要求的字符串属性,之后通过属性的值来找到相应的regulator_dev 结构体!

最新文章

  1. spring集成freemaker 制作短信模板
  2. Mysql中的触发器
  3. Map中如何把没有定义操作符&lt;的类作为key
  4. [Angular2 Form] Build Select Dropdowns for Angular 2 Forms
  5. [转]Oracle 阳历转农历
  6. poj 2349 Arctic Network
  7. javaweb学习总结九(xml解析以及调整JVM内存大小)
  8. [HZWER]藏妹子之处
  9. CentOS 7.0 重置root密码
  10. rational rose 2003安装及破解
  11. [SQL基础教程] 4-3 数据的更新(UPDATE)
  12. IOS百度地图之---&gt;第一篇《环境配置与基本使用》
  13. 实现ThreadFactory接口生成自定义的线程给Fork/Join框架
  14. 重写,string创建内存问题
  15. 如何查找元素对应事件的js代码,检测定位js事件
  16. 深入理解es6-Promise对象
  17. pymysql连接数据库报错:&#39;NoneType&#39; object has no attribute &#39;encoding&#39;
  18. Java面试题和解答(四)
  19. dto vo
  20. linux中crontab的使用方法

热门文章

  1. linux通用makefile文件
  2. java中引用对比C++指针
  3. 51nod 1057 n的阶乘 (压位优化)
  4. jenkins构建项目记录2(tag)
  5. 零基础入门学习Python(33)--异常处理:你不可能总是对的2
  6. Why Countries Succeed and Fail Economically
  7. UVa 806 四分树
  8. Uva 10305 拓扑排序
  9. hadoop_exporter
  10. Git--使用须知123