pin MU型in linux kernel
Pin Muxing in linux kernel
我想做以下pin muxing。
即 USART Tx -> 到 GPIO -> 出于某种目的返回 Linux 内核中的 USART Tx 引脚。
我尝试使用 gpio_request 和 gpio_direction_output 将 PIN 设置为 GPIO,因此我能够将该 PIN 设置为 GPIO。但是当我想从 GPIO 切换回 USART Tx 引脚时,它不起作用,我尝试按照 at91_set_A_periph 到那个引脚,仍然没有运气。
正在处理内核:3.18 和 at91 atmel 开发板。
你可以看看i2c-imx driver。它正是这样做的。
您需要使用 pinctrl_lookup_state
来检索不同的 pinctrl 状态(其中一个是 USART Tx,另一个是 GPIO)。然后你可以用 pinctrl_select_state
.
在两者之间切换
总而言之,您的 uart 节点中会有类似的东西:
usart3: serial@fc00c000 {
pinctrl-names = "default","gpio";
pinctrl-0 = <&pinctrl_usart3>;
pinctrl-1 = <&pinctrl_usart3_gpio>;
tx-gpio = <&pioE 4 GPIO_ACTIVE_LOW>;
status = "okay";
};
在驱动代码中:
pinctrl_pins_default = pinctrl_lookup_state(pinctrl, PINCTRL_STATE_DEFAULT);
pinctrl_pins_gpio = pinctrl_lookup_state(pinctrl, "gpio");
tx_gpio = of_get_named_gpio(pdev->dev.of_node, "tx-gpio", 0);
然后,您可以使用pinctrl_select_state
在pinctrl_pins_default
和pinctrl_pins_gpio
之间来回切换。 tx_gpio
是你的 gpio。
我想做以下pin muxing。 即 USART Tx -> 到 GPIO -> 出于某种目的返回 Linux 内核中的 USART Tx 引脚。
我尝试使用 gpio_request 和 gpio_direction_output 将 PIN 设置为 GPIO,因此我能够将该 PIN 设置为 GPIO。但是当我想从 GPIO 切换回 USART Tx 引脚时,它不起作用,我尝试按照 at91_set_A_periph 到那个引脚,仍然没有运气。
正在处理内核:3.18 和 at91 atmel 开发板。
你可以看看i2c-imx driver。它正是这样做的。
您需要使用 pinctrl_lookup_state
来检索不同的 pinctrl 状态(其中一个是 USART Tx,另一个是 GPIO)。然后你可以用 pinctrl_select_state
.
总而言之,您的 uart 节点中会有类似的东西:
usart3: serial@fc00c000 {
pinctrl-names = "default","gpio";
pinctrl-0 = <&pinctrl_usart3>;
pinctrl-1 = <&pinctrl_usart3_gpio>;
tx-gpio = <&pioE 4 GPIO_ACTIVE_LOW>;
status = "okay";
};
在驱动代码中:
pinctrl_pins_default = pinctrl_lookup_state(pinctrl, PINCTRL_STATE_DEFAULT);
pinctrl_pins_gpio = pinctrl_lookup_state(pinctrl, "gpio");
tx_gpio = of_get_named_gpio(pdev->dev.of_node, "tx-gpio", 0);
然后,您可以使用pinctrl_select_state
在pinctrl_pins_default
和pinctrl_pins_gpio
之间来回切换。 tx_gpio
是你的 gpio。