2016-05-23 8 views
1

Я хочу сделать следующий вывод мультиплексора. i.e USART Tx -> to GPIO -> Вернуться к выводу USART Tx внутри ядра Linux для какой-либо цели.Pin Muxing в ядре linux

Я попытался сделать ПИН как GPIO, используя gpio_request и gpio_direction_output, поэтому я могу сделать этот вывод как GPIO. Но поскольку я хочу переключиться с GPIO на USART Tx pin, он не работает, я пробовал следовать за at91_set_A_periph на этот вывод, все равно не повезло.

Работа с ядром: 3.18 и at91 atmel board.

+1

Существует много ядер поставщиков, поэтому было бы лучше, если бы вы могли указать именно то, что * ядро, которое вы используете. Кроме того, вы должны вставить код, который вы пробовали, и не работали. Это облегчит вам работу. –

ответ

1

Вы можете взглянуть на i2c-imx driver. Он делает именно это.

Для извлечения различных состояний настойки вам необходимо использовать pinctrl_lookup_state (один из них - USART Tx и другой GPIO). Затем вы можете переключаться между pinctrl_select_state.

Подводя итог, нужно иметь что-то подобное в вашем Uart узле:

usart3: [email protected] { 
     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.

+0

спасибо за помощь :) – TusharPaithankar