Android手机充电IC设备树配置




OTG功能设备树配置

&pio {
	usb_default: default {							/*默认配置可以什么都不写,但必须配置*/
	};

	gpio9_mode3_iddig: iddig_irq_init {
		pins_cmd_dat {
			pins = <PINMUX_GPIO9__FUNC_USB_IDDIG>;	/*中断pin脚的模式*/
			slew-rate = <0>;						/*0:输入,1:输出*/
			bias-pull-up = <00>;
		};
	};
};

&usb0 {
	iddig_gpio = <9 3>;								/*9号IO口的模式3*/
	pinctrl-names = "default", "iddig_irq_init";	/*驱动中会使用这的名字来查询配置节点的地址,从而读出配置数据*/
	pinctrl-0 = <&usb_default>;
	pinctrl-1 = <&gpio9_mode3_iddig>;				/*绑定iddig_irq_init和gpio9_mode3_iddig*/			
	status = "okay";
};



驱动代码读取和配置数据
	/*driver中获取对应模式配置节点*/
	pinctrl_drvvbus = pinctrl_lookup_state(pinctrl, "drvvbus_init");
	if (IS_ERR(pinctrl_drvvbus)) {
		ret = PTR_ERR(pinctrl_drvvbus);
		dev_err(mtk_musb->controller, "Cannot find usb pinctrl drvvbus\n");
	}
	
	//拿到节点
	usb_node = of_find_compatible_node(NULL, NULL, "mediatek,mt6735-usb20");
	//读取节点属性
	of_property_read_u32_index(usb_node, "iddig_gpio", 0, &iddig_pin)
	
	/*通过pintctrl读取不同模式的GPIO看*/
	pinctrl = devm_pinctrl_get(mtk_musb->controller);
	//读取中断pin的配置数据
	pinctrl_iddig = pinctrl_lookup_state(pinctrl, "iddig_irq_init");
	if (IS_ERR(pinctrl_iddig)) {
		ret = PTR_ERR(pinctrl_iddig);
		dev_err(mtk_musb->controller, "Cannot find usb pinctrl iddig_irq_init\n");
	}
	//选择配置数据
	pinctrl_select_state(pinctrl, pinctrl_iddig);	


猜你喜欢

转载自blog.csdn.net/zhanghao864442969/article/details/52684223