Привет всем,
Юзаю борду at91sam9x25ek, ядро взял с github.com/linux4sam/linux-at91 (branch linux-3.6.9-at91). На старом ядре 2.6.39 для дефайна gpio пинов просто вызывал из кернал спейса или из специфик кода инициализации платы:
Код
at91_set_gpio_output(unsigned pin, int value)
или
at91_set_gpio_input(unsigned pin, int use_pullup)
и далее юзал:
Код
at91_get_gpio_value(unsigned pin)
или
at91_set_gpio_value(unsigned pin, int value)
На новых же ядрах инициализация производится через dts (device tree) файлы. Так вот хотелось бы назначить свои кастом gpio пины которые в последствии буду использовать в модуле ядра. Для тестов добавил свой пин PB14 в инициялизацию пинов для сетевого драйвера:
Код
pinctrl@fffff400 {
#address-cells = <1>;
#size-cells = <1>;
compatible = "atmel,at91sam9x5-pinctrl", "atmel,at91rm9200-pinctrl", "simple-bus";
ranges = <0xfffff400 0xfffff400 0x800>;
macb0 {
pinctrl_macb0_rmii: macb0_rmii-0 {
atmel,pins =
<1 0 0x1 0x0 /* PB0 periph A ERX0 */
1 1 0x1 0x0 /* PB1 periph A ERX1 */
1 2 0x1 0x0 /* PB2 periph A ERXER */
1 3 0x1 0x0 /* PB3 periph A ERXDV */
1 4 0x1 0x0 /* PB4 periph A ETXCK */
1 5 0x1 0x0 /* PB5 periph A EMDIO */
1 6 0x1 0x0 /* PB6 periph A EMDC */
1 7 0x1 0x0 /* PB7 periph A ETXEN */
1 9 0x1 0x0 /* PB9 periph A ETX0 */
1 10 0x1 0x0 /* PB10 periph A ETX1 */
1 14 0x0 0x8>; /* !!!JUST for test, PB14 as GPIO pull down*/
};
};
macb0: ethernet@f802c000 {
compatible = "cdns,at32ap7000-macb", "cdns,macb";
reg = <0xf802c000 0x100>;
interrupts = <24 4 3>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_macb0_rmii>;
status = "disabled";
};
}
macb0: ethernet@f802c000 {
status = "okay";
};
Так работает, при загрузки системы напряжение на пине PB14 падает в 0 тоесть мой дефайн пина сработал. Но как видите я его по кривому задефайнил в секции pinctrl_macb0_rmii. И похоже что пины начинают дефайниться только когда драйвер посылает запрос в pinctrl.
Моя цель - задефайнить несколько своих gpio пинов и потом использовать из кернел и юзер спейса. Выше приведённый пример чисто для теста, но как заставить чтобы пины дефайнились из моей собственной секции. Допустим я имею такую секцию:
Код
custom_pins {
pinctrl_custom_pins_test: custom_pins_test-0 {
atmel,pins =
<1 14 0x0 0x8>; /*PB14 gpio pull down*/
};
};
Что нужно ещё прописать чтобы этот дефайн прошёл? Не могу разобраться как при загрузки инициализировать собственные gpio пины.
Заранее спасибо за ответы.