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);