реклама на сайте
подробности

 
 
> Atmel AT91 linux 3.6.9 как назначить GPIO пины через device tree
Yury Sokolov
сообщение Nov 11 2013, 11:59
Сообщение #1





Группа: Новичок
Сообщений: 6
Регистрация: 19-08-13
Пользователь №: 77 974



Привет всем,

Юзаю борду 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 пины.

Заранее спасибо за ответы.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Harbour
сообщение Nov 12 2013, 07:56
Сообщение #2


Местами Гуру
*****

Группа: Validating
Сообщений: 1 103
Регистрация: 5-12-04
Пользователь №: 1 323



мне понравился gpio-block patch, даже его спецом бэкпортировал в 3.6.9, борда на SAMA5D3x, выглядит так :

Код
blockgpio {
  compatible = "linux,gpio-block";

  buttons {
          gpios = <&pioA 16 0>,
                  <&pioA 17 0>,
                  <&pioA 18 0>,
                  <&pioA 19 0>;
  };

  leds {
          gpios = <&pioA 24 0>,
                  <&pioA 25 0>,
                  <&pioA 26 0>,
                  <&pioA 27 0>;
  };

  lcd_data {
          gpios = <&pioA 04 0>,
                  <&pioA 05 0>,
                  <&pioA 06 0>,
                  <&pioA 07 0>;
  };

  lcd_ctrl {
          gpios = <&pioA 00 0>,
                  <&pioA 01 0>,
                  <&pioA 02 0>;
  };
  lcd_settings {
          gpios = <&pioA 10 0>,
                  <&pioA 11 0>;
  };
};


gpio-block позволяет работать с набором пинов как с шиной, из userspace триггерить пины по select/poll, ну и kernel API тоже присутствует.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd August 2025 - 10:23
Рейтинг@Mail.ru


Страница сгенерированна за 0.01369 секунд с 7
ELECTRONIX ©2004-2016