从dts中获取节点和属性的实例二
来源:互联网 发布:jmeter执行python脚本 编辑:程序博客网 时间:2024/06/05 18:38
1.代码位置:kernel-3.18\drivers\misc\mediatek\leds\mt6735\Leds.c
2.贴代码:
enum mt65xx_led_mode {MT65XX_LED_MODE_NONE,MT65XX_LED_MODE_PWM,MT65XX_LED_MODE_GPIO,MT65XX_LED_MODE_PMIC,MT65XX_LED_MODE_CUST_LCM,MT65XX_LED_MODE_CUST_BLS_PWM};enum mt65xx_led_type {MT65XX_LED_TYPE_RED = 0,MT65XX_LED_TYPE_GREEN,MT65XX_LED_TYPE_BLUE,MT65XX_LED_TYPE_JOGBALL,MT65XX_LED_TYPE_KEYBOARD,MT65XX_LED_TYPE_BUTTON,MT65XX_LED_TYPE_LCD,MT65XX_LED_TYPE_TOTAL,};struct PWM_config {int clock_source;int div;int low_duration;int High_duration;bool pmic_pad;};struct cust_mt65xx_led {char *name;enum mt65xx_led_mode mode;long data;struct PWM_config config_data;};char *leds_name[MT65XX_LED_TYPE_TOTAL] = {"red","green","blue","jogball-backlight","keyboard-backlight","button-backlight","lcd-backlight",};struct cust_mt65xx_led *get_cust_led_dtsi(void){struct device_node *led_node = NULL;bool isSupportDTS = false;int i, ret;int mode, data;int pwm_config[5] = { 0 };unsigned short bl_mode = 0;unsigned short temp = 0;if (pled_dtsi == NULL) {pled_dtsi = kmalloc(MT65XX_LED_TYPE_TOTAL *sizeof(struct cust_mt65xx_led),GFP_KERNEL);if (pled_dtsi == NULL) {LEDS_DEBUG("get_cust_led_dtsi kmalloc fail\n");goto out;}for (i = 0; i < MT65XX_LED_TYPE_TOTAL; i++) {char node_name[32] = "mediatek,";pled_dtsi[i].name = leds_name[i];led_node =of_find_compatible_node(NULL, NULL,strncat(node_name, leds_name[i],(sizeof(node_name)-strlen(node_name)-1)));if (!led_node) {LEDS_DEBUG("Cannot find LED node:%s from dts\n", node_name);pled_dtsi[i].mode = 0;pled_dtsi[i].data = -1;}else{isSupportDTS = true;ret =of_property_read_u32(led_node, "led_mode", &mode);if (!ret) {pled_dtsi[i].mode = mode;} else {LEDS_DEBUG ("led dts can not get led mode");pled_dtsi[i].mode = 0;}ret =of_property_read_u32(led_node, "data", &data);if (!ret) {pled_dtsi[i].data = data;} else {LEDS_DEBUG("led dts can not get led data");pled_dtsi[i].data = -1;}if (hwinfo_parser_fetch("lcd0_para", "backlight_mode", &bl_mode, 1) < 0){LEDS_DEBUG("-----hwinfo get lcd backlight mode fail-----\n ");bl_mode = 0;} else {printk("-----lcd mode = %d-----\n", bl_mode);if(bl_mode == 3){pled_dtsi[MT65XX_LED_TYPE_LCD].mode = MT65XX_LED_MODE_CUST_LCM;}if(bl_mode == 0){if(hwinfo_parser_fetch("lcd0_para", "pwm_min_adjust", &temp, 1) <= 0)backlight_minlevel = 3;elsebacklight_minlevel = temp;if(hwinfo_parser_fetch("lcd0_para", "pwm_max_adjust", &temp, 1) <= 0)backlight_maxlevel = 1023;elsebacklight_maxlevel = temp;}}ret =of_property_read_u32_array(led_node,"pwm_config", pwm_config,ARRAY_SIZE (pwm_config));#ifdef CONFIG_BREATH_LIGHTif((strcmp(pled_dtsi[i].name, "red") == 0) | (strcmp(pled_dtsi[i].name, "green") == 0) | (strcmp(pled_dtsi[i].name, "blue") == 0))pled_dtsi[i].mode = MT65XX_LED_MODE_GPIO;#endifswitch (pled_dtsi[i].mode) {#ifdef CONFIG_BREATH_LIGHTcase MT65XX_LED_MODE_GPIO:if(strcmp(pled_dtsi[i].name, "red") == 0){pled_dtsi[i].data = (long)mt65xx_breathred_cust;}else if(strcmp(pled_dtsi[i].name, "green") == 0){pled_dtsi[i].data = (long)mt65xx_breathgreen_cust;}else if(strcmp(pled_dtsi[i].name, "blue") == 0){pled_dtsi[i].data = (long)mt65xx_breathblue_cust;}break;#endifcase MT65XX_LED_MODE_CUST_BLS_PWM:pled_dtsi[i].data = (long)disp_bls_set_backlight;break;default:break;}}}if (!isSupportDTS) {kfree(pled_dtsi);pled_dtsi = NULL;}} out:return pled_dtsi;}3.在dts文件中,有:
led0:led@0 {compatible = "mediatek,red";led_mode = <0>;data = <1>;pwm_config = <0 0 0 0 0>;};led1:led@1 {compatible = "mediatek,green";led_mode = <0>;data = <1>;pwm_config = <0 0 0 0 0>;};led2:led@2 {compatible = "mediatek,blue";led_mode = <0>;data = <1>;pwm_config = <0 0 0 0 0>;};led3:led@3 {compatible = "mediatek,jogball-backlight";led_mode = <0>;data = <1>;pwm_config = <0 0 0 0 0>;};led4:led@4 {compatible = "mediatek,keyboard-backlight";led_mode = <0>;data = <1>;pwm_config = <0 0 0 0 0>;};led5:led@5 {compatible = "mediatek,button-backlight";led_mode = <0>;data = <1>;pwm_config = <0 0 0 0 0>;};led6:led@6 {compatible = "mediatek,lcd-backlight";led_mode = <5>;data = <1>;pwm_config = <0 0 0 0 0>;};
阅读全文
0 0
- 从dts中获取节点和属性的实例二
- 从dts文件中获取节点和属性的实例一
- 从dts里的of_device节点中获取变量值实例
- 轻松学习JavaScript二十一:DOM编程学习之获取元素节点的子节点和属性节点
- jQuery中获取节点属性
- DOM(包括获取元素节点的方法以及获取和设置元素节点的属性)
- 获取xmlString字符串中节点属性值
- 二叉树中获取从根节点到某个节点的路径
- cocos2dx 从节点中获取图片对象
- XML工具代码:SAX从String字符串XML内获取指定节点或属性的值
- JavaScript DOM中获取元素节点的父节点和父节点名
- dom4j 解析xml 获取节点值和节点属性
- JavaScript 中element和attribute以及节点、属性的增删
- js(javascript>中关于节点的方法和属性
- IMX的DTS实例分析
- 从bean中获取对象的属性值
- HTML DOM节点的属性获取
- ref属性用于获取真实的节点
- 【LR11回放脚本报错】-Action.c(236): Error: Decoding of AMF message failed. Error is : Externalizable parsing
- PTA 7-1 一元多项式求导
- vue.js初学2之vue指令①
- Oracle数据库之分区表
- lnmp安装(mysql、php、nginx)
- 从dts中获取节点和属性的实例二
- 给自己的SQL教程
- mysql数据库对象关系映射
- 第十章 代理商拓扑结构【笔记】
- python学习记录(1)
- c/c++中嵌入汇编
- 【阅读】数据可视化之美——用专家的眼光洞察数据
- linux解压*.tgz出现异常的解决办法
- IntelliJ IDEA创建Spring Maven 项目