当前位置: 代码迷 >> 综合 >> 2021-05-29 linux dts for_each_child_of_node用法
  详细解决方案

2021-05-29 linux dts for_each_child_of_node用法

热度:30   发布时间:2023-11-27 12:27:01.0

 

一、for_each_child_of_node遍历所有子节点

#define for_each_child_of_node(parent, child) \for (child = of_get_next_child(parent, NULL); child != NULL; \child = of_get_next_child(parent, child))

二、实例

&pwm0 {status = "okay";interrupts = <GIC_SPI 78 IRQ_TYPE_LEVEL_HIGH>;compatible = "rockchip,remotectl-pwm";remote_pwm_id = <0>;handle_cpu_id = <0>;red_green_led_gpio =<&gpio0 13 GPIO_ACTIVE_LOW>;ir_key1{rockchip,usercode = <0xf708>;rockchip,key_table =<0xFF	KEY_POWER>,<0xF4	KEY_MENU>,<0xF6	KEY_BACK>,<0xE9	KEY_HOME>,<0xF1	KEY_ENTER>,<0xEE	KEY_VOLUMEUP>,<0xEB	KEY_VOLUMEDOWN>,<0xE9	KEY_REPLY>,<0xF3	KEY_UP>,<0xEF	KEY_DOWN>,<0xF2	KEY_LEFT>,<0xF0	KEY_RIGHT>,<0xFA	KEY_PLAY>,<0xE6	KEY_PLAYCD>,			<0xE7	KEY_STOP>,			<0xEC	KEY_MUTE>,<0xE5	KEY_1>,<0xE4	KEY_2>,<0xE3	KEY_3>,<0xE2	KEY_4>,<0xE1	KEY_5>,<0xE0	KEY_6>,<0xBF	KEY_7>,<0xBE	KEY_8>,<0xBD	KEY_9>,<0xBB	KEY_0>,<0xE8	KEY_APPSELECT>,<0xBC	KEY_NUMERIC_STAR>,<0xBA	KEY_NUMERIC_POUND>;};ir_key2{rockchip,usercode = <0xff00>;rockchip,key_table =<0xBA	KEY_POWER>,<0xB8	KEY_MENU>,<0xA1	KEY_BACK>,<0xEA	KEY_ENTER>,<0xBF	KEY_UP>,<0xE6	KEY_DOWN>,<0xF8	KEY_LEFT>,<0xF6	KEY_RIGHT>,<0xF3	KEY_INFO>;};
static int rk_remotectl_parse_ir_keys(struct platform_device *pdev)
{struct rkxx_remotectl_drvdata *ddata = platform_get_drvdata(pdev);struct device_node *node = pdev->dev.of_node;struct device_node *child_node;int loop;int ret;int len;int boardnum;boardnum = 0;for_each_child_of_node(node, child_node) {if(of_property_read_u32(child_node, "rockchip,usercode",&remotectl_button[boardnum].usercode)) {dev_err(&pdev->dev, "Missing usercode property in the DTS.\n");ret = -1;return ret;}DBG("remotectl_button[0].usercode=0x%x\n",remotectl_button[boardnum].usercode);of_get_property(child_node, "rockchip,key_table", &len);len /= sizeof(u32);DBG("len=0x%x\n",len);remotectl_button[boardnum].nbuttons = len/2;if(of_property_read_u32_array(child_node, "rockchip,key_table",(u32 *)remotectl_button[boardnum].key_table, len)) {dev_err(&pdev->dev, "Missing key_table property in the DTS.\n");ret = -1;return ret;}for (loop=0; loop<(len/2); loop++) {DBG("board[%d].scanCode[%d]=0x%x\n", boardnum, loop,remotectl_button[boardnum].key_table[loop].scancode);DBG("board[%d].keyCode[%d]=%d\n", boardnum, loop,remotectl_button[boardnum].key_table[loop].keycode);}boardnum++;if (boardnum > ddata->maxkeybdnum)break;}red_green_led_gpio = of_get_named_gpio(node,"red_green_led_gpio", 0);DBG("keybdNum=0x%x\n",boardnum);return 0;
}