2021-05-29 linux dts for_each_child_of_node用法

 

一、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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值