Цитата(aaarrr @ Aug 22 2012, 19:44)

Чтобы всем этим добром пользоваться, нужно будет пересобирать ядро с модификацией PINMUX'ов для нужных пинов.
Сработало!!! Огромное спасибо
aaarrr'у за помощь!;) Напишу, как было дело, вдруг кому-нибудь понадобится

Итак, для того, чтобы подёргать пином GPIO, надо:
1. Добавить конфигурационную строчку для соответствующего пина в структуру mux_config da850_pins (файл arch/arm/mach-davinci/da850.c). В моём случае это
Код
...
MUX_CFG(DA850, GPIO6_11, 13, 16, 15, 8, false)
...
где:
13 - номер регистра PINMUX, в котором выбирается режим работы пина;
16 - смещение поля PRU0_R30[29]/UHPI_HCNTL0/UPP_CHA_CLOCK/GP6[11] в регистре PINMUX13;
15 - маска для режима работы пина (вроде бы, везде = 15);
8 - выбор функции GP6[11];
2. В файле arch/arm/linux-davinci/include/mach/mux.h добавить в enum davinci_da850_index необходимый пин:
Код
...
DA850_GPIO6_11,
...
Причём надо, чтобы позиции в enum'е и структуре из п.1 совпадали, иначе съедут все привязки.
3. В файле board-l138-owlboardplus.c в функции owlboardplus_init проинициализировать нужный пин:
Код
ret = davinci_cfg_reg(DA850_GPIO6_11);
Здесь в качестве аргумента функции следует указать значение из enum'а (файла mux.h)
4. Пересобрать ядро. При этом в файле .config должны быть сделаны соответствующие настройки, чтоб функциями GPIO можно было пользоваться.
5. Теперь в модуле ядра можно использовать функции gpio! К примеру:
CODE
#include <linux/kernel.h>
#include <linux/module.h>
#include <asm/gpio.h>
#include <mach/mux.h>
#define MYPIN0 GPIO_TO_PIN(6, 11)
MODULE_LICENSE("GPL");
static int My_module_init(void) {
int ret = 0;
printk(KERN_ALERT "My module initialization.\n");
ret = gpio_request(MYPIN0, "My pin 0");
if (ret) {
printk(KERN_WARNING "Unable to request MYPIN0, error %d\n", ret);
return ret;
}
gpio_direction_output(MYPIN0, 0);
gpio_set_value(MYPIN0, 0);
gpio_set_value(MYPIN0, 1);
gpio_set_value(MYPIN0, 0);
return 0;
}
static void My_module_exit(void) {
gpio_free(MYPIN0);
printk(KERN_ALERT "My module exit.\n");
}
module_init(My_module_init);
module_exit(My_module_exit);