Работа с gpio в linux под PowerPc.
Должна стоять опция в ядре - CONFIG_GPIO_SYSFS
Управление gpio в PowerPc, также как и для процессоров других архитектур,
доступно через /sys/class/gpio/.
Отличием является то, что для PowerPc нужен файл Flattened Device Tree с описанием аппаратной части.
Так, в этом файле секция с описанием gpio должна выглядеть следующем образом:
par_io@1400 { #address-cells = <0x1>; #size-cells = <0x1>; reg = <0x1400 0x100>; ranges = <0x0 0x1400 0x100>; device_type = "par_io"; num-ports = <0x7>; qe_pio_a: gpio-controller@0 { #gpio-cells = <0x2>; compatible = "fsl,mpc8360-qe-pario-bank", "fsl,mpc8323-qe-pario-bank"; reg = <0x0 0x18>; gpio-controller; }; qe_pio_b: gpio-controller@18 { #gpio-cells = <0x2>; compatible = "fsl,mpc8360-qe-pario-bank", "fsl,mpc8323-qe-pario-bank"; reg = <0x18 0x18>; gpio-controller; }; qe_pio_g: gpio-controller@90 { #gpio-cells = <0x2>; compatible = "fsl,mpc8360-qe-pario-bank", "fsl,mpc8323-qe-pario-bank"; reg = <0x90 0x18>; gpio-controller; }; /* port pin dir open_drain assignment has_irq */ pio1: ucc_pin@01 { pio-map = <0x0 0x3 0x1 0x0 0x1 0x0 0x0 0x4 0x1 0x0 0x1 0x0 0x0 0x5 0x1 0x0 0x1 0x0 0x0 0x6 0x1 0x0 0x1 0x0 0x0 0x8 0x1 0x0 0x0 0x0 0x0 0x9 0x2 0x0 0x1 0x0 0x0 0xa 0x2 0x0 0x1 0x0 0x0 0xb 0x2 0x0 0x1 0x0 0x0 0xc 0x2 0x0 0x1 0x0 0x0 0x7 0x1 0x0 0x1 0x0 0x0 0xf 0x2 0x0 0x1 0x0 0x0 0x0 0x2 0x0 0x1 0x0 0x2 0x8 0x2 0x0 0x1 0x0 0x1 0x9 0x1 0x0 0x0 0x0 0x1 0xa 0x2 0x0 0x1 0x0 0x1 0xb 0x2 0x0 0x1 0x0>; }; /* port pin dir open_drain assignment has_irq */ pio2: ucc_pin@02 { pio-map = <0x1 0x0e 0x1 0x0 0x1 0x0 0x1 0x0f 0x1 0x0 0x1 0x0 0x1 0x10 0x1 0x0 0x1 0x0 0x1 0x11 0x1 0x0 0x1 0x0 0x1 0x14 0x2 0x0 0x1 0x0 0x1 0x15 0x2 0x0 0x1 0x0 0x1 0x16 0x2 0x0 0x1 0x0 0x1 0x17 0x2 0x0 0x1 0x0 0x1 0x12 0x1 0x0 0x1 0x0 0x1 0x13 0x1 0x0 0x0 0x0 0x1 0x1a 0x2 0x0 0x1 0x0 0x1 0x1b 0x2 0x0 0x1 0x0 0x1 0x18 0x2 0x0 0x1 0x0 0x1 0x19 0x2 0x0 0x1 0x0 0x2 0x06 0x2 0x0 0x1 0x0 0x2 0x07 0x2 0x0 0x1 0x0 0x0 0x01 0x3 0x0 0x2 0x0 0x0 0x02 0x1 0x0 0x1 0x0 0x6 0x00 0x1 0x0 0x1 0x0 0x6 0x01 0x1 0x0 0x1 0x0 0x6 0x02 0x1 0x0 0x1 0x0 0x6 0x03 0x1 0x0 0x1 0x0 >; linux,phandle = <0x4>; }; };
Где par_io@1400 - базовый адрес gpio по даташиту
gpio-controller@18 - смещение для каждого порта
reg = <0x90 0x18>; - смещение и размер порта
Согласно объявлениям в этом файле будут созданы файлы gpiochip160, gpiochip192, gpiochip224
для доступа к gpio:
root@OpenWrt:/# ls -l /sys/class/gpio/ --w------- 1 root root 4096 Jan 1 00:00 export lrwxrwxrwx 1 root root 0 Jan 1 00:00 gpiochip160 lrwxrwxrwx 1 root root 0 Jan 1 00:00 gpiochip192 lrwxrwxrwx 1 root root 0 Jan 1 00:00 gpiochip224 --w------- 1 root root 4096 Jan 1 00:00 unexport
Далее работа с gpio в PowerPc имеет стандартный вид:
1. Создаем файл для определенного gpio ( 232=224 + 8(пин на порту) ):
root@OpenWrt:/# echo 232 >sys/class/gpio/export
2. Настраиваем направление работы пина на вывод:
root@OpenWrt:/# echo 'out' > /sys/class/gpio/gpio232/direction
или настраиваем направление работу пина на ввод:
root@OpenWrt:/# echo 'in' > /sys/class/gpio/gpio232/direction
3. Выставляем значение на пине:
root@OpenWrt:/# echo 1 > /sys/class/gpio/gpio232/value
или считываем содержимое пина:
cat /sys/class/gpio/gpio232/value