Как использовать драйвер устройства mpc8xxx_gpio.c - PullRequest
1 голос
/ 11 августа 2010

Я новичок в разработке драйверов устройств. Я пытаюсь получить доступ к GPIO платы MPC837xERDB eval.

Я обновил его ядро ​​до linux-2.6.28.9 и включил поддержку mpc8xxx_gpio.c. При загрузке он успешно обнаружил два gpio контроллера.

Теперь мой вопрос: как я собираюсь использовать его для связи с gpio пинами? Нужно ли изменять код в файле mpc8xxx_gpio.c, чтобы он делал все, что я хочу сделать с gpios, или я могу использовать стандартный gpio API, предоставляемый в ядре (gpio_request() / gpio_free()). Я также пробую стандартное API ядра, но это не удается. Вот мой код:

#include <linux/module.h>
#include <linux/errno.h>  /* error codes */
#include <linux/gpio.h>

static __init int sample_module_init(void)
{
  int ret;

  int i;
  for (i=1; i<32; i++) {
    ret = gpio_request(i, "Sample Driver");
    if (ret) {
      printk(KERN_WARNING "sample_driver: unable to request GPIO_PG%d\n", i);
      //return ret;
    }  
  }

  return 0;
}

static __exit void sample_module_exit(void)
{
  gpio_free(9);
}

MODULE_LICENSE("GPL");

module_init(sample_module_init);
module_exit(sample_module_exit);

Это дает следующее O / P:

[  617.075329] sample_driver: unable to request GPIO_PG1
[  617.080418] sample_driver: unable to request GPIO_PG2
[  617.085470] sample_driver: unable to request GPIO_PG3
[  617.090522] sample_driver: unable to request GPIO_PG4
[  617.095574] sample_driver: unable to request GPIO_PG5
[  617.100625] sample_driver: unable to request GPIO_PG6
[  617.105676] sample_driver: unable to request GPIO_PG7
[  617.110727] sample_driver: unable to request GPIO_PG8
[  617.115779] sample_driver: unable to request GPIO_PG9
[  617.120830] sample_driver: unable to request GPIO_PG10
[  617.125968] sample_driver: unable to request GPIO_PG11
[  617.131106] sample_driver: unable to request GPIO_PG12
[  617.136245] sample_driver: unable to request GPIO_PG13
[  617.141383] sample_driver: unable to request GPIO_PG14
[  617.146521] sample_driver: unable to request GPIO_PG15
[  617.151660] sample_driver: unable to request GPIO_PG16
[  617.156798] sample_driver: unable to request GPIO_PG17
[  617.161936] sample_driver: unable to request GPIO_PG18
[  617.167074] sample_driver: unable to request GPIO_PG19
[  617.172213] sample_driver: unable to request GPIO_PG20
[  617.177351] sample_driver: unable to request GPIO_PG21
[  617.182489] sample_driver: unable to request GPIO_PG22
[  617.187628] sample_driver: unable to request GPIO_PG23
[  617.192767] sample_driver: unable to request GPIO_PG24
[  617.197905] sample_driver: unable to request GPIO_PG25
[  617.203042] sample_driver: unable to request GPIO_PG26
[  617.208182] sample_driver: unable to request GPIO_PG27
[  617.213319] sample_driver: unable to request GPIO_PG28
[  617.218458] sample_driver: unable to request GPIO_PG29
[  617.223597] sample_driver: unable to request GPIO_PG30
[  617.228735] sample_driver: unable to request GPIO_PG31
[  617.233873] sample_driver: unable to request GPIO_PG32

Может кто-нибудь предоставить мне пример кода или что-то еще. На самом деле я пытаюсь установить вывод GPIO нет. 9 до активного низкого уровня, поскольку он подключен к светодиодному индикатору на плате.

Ответы [ 2 ]

1 голос
/ 13 августа 2010

Из вашего другого вопроса:

# ls /sys/class/gpio/ -la
drwxr-xr-x    4 root     root            0 Jan  1 00:00 .
drwxr-xr-x   24 root     root            0 Jan  1 00:00 ..
--w-------    1 root     root         4096 Jan  1 00:10 export
drwxr-xr-x    3 root     root            0 Jan  1 00:00 gpiochip192
drwxr-xr-x    3 root     root            0 Jan  1 00:00 gpiochip224
--w-------    1 root     root         4096 Jan  1 00:00 unexport

У вас есть два блока выводов GPIO.Один блок начинается с номера 192, а другой - с 224. В приведенном выше коде вы пытаетесь запросить GPIO 0-31, которого нет на вашей платформе.

Вы можете узнать, сколько GPIOв каждом блоке, просматривая файл ngpio в каждом каталоге gpiochip*.

0 голосов
/ 11 августа 2010

Вы смотрели на Documentation/gpio.txt в исходном коде ядра?

...