从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
原创粉丝点击