Работа с 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