需要控制一个带 LED 的按钮,按钮和 LED 都是通过管够直接接到 IO 口的。那么我的想法是按钮输入可以通过 gpio-keys 驱动 配置成 input 设备, LED 灯就直接用 sysfs 访问 GPIO就可以了:
/{
...
gpio_keys {
compatible = "gpio-keys";
pinctrl-names = "default";
autorepeat;
button@0 {
label = "key1";
linux,code = <1>;
gpios = <&pio PD 1 GPIO_ACTIVE_HIGH>;
};
button@1 {
label = "key2";
linux,code = <2>;
gpios = <&pio PD 3 GPIO_ACTIVE_HIGH>;
};
button@2 {
label = "key3";
linux,code = <3>;
gpios = <&pio PD 5 GPIO_ACTIVE_HIGH>;
};
button@3 {
label = "key4";
linux,code = <4>;
gpios = <&pio PD 7 GPIO_ACTIVE_HIGH>;
};
...
};
...
&pio {
...
led_pins: led_pins@0 {
allwinner,function = "gpio_out";
allwinner,muxsel = <0>;
allwinner,pins = "PD2", "PD4", "PD6", "PD8";
allwinner,drive = <1>;
allwinner,pull = <0>;
};
...
};
访问按钮就通过 libinput 或者 libev 或者直接轮询,会返回按钮的 code 和状态(0:按压、1:释放、2:长按);控制 GPIO 直接用的 python-periphery ,通过 sysfs 访问的时候还是需要先:
cd /sys/class/gpio
export $MY_PIN_NAME > export
cd gpio$MY_PIN_NAME
export out > direction
export 1 > value
export 0 > value
...
这里, MY_PIN_NAME 还可以通过 debugfs 来查看:
cat /sys/kernel/debug/pinctrl/pio/pinconf-pins
输出(这里我用的 T113-S3 ):
Pin config settings per pin
Format: pin (name): configs
pin 32 (PB0): input bias pull up, output drive strength (10 mA)
pin 33 (PB1): input bias disabled, output drive strength (20 mA)
pin 34 (PB2): input bias disabled, output drive strength (20 mA)
pin 35 (PB3): input bias disabled, output drive strength (20 mA)
pin 36 (PB4): input bias disabled, output drive strength (20 mA)
pin 37 (PB5): input bias disabled, output drive strength (20 mA)
pin 38 (PB6): input bias pull up, output drive strength (20 mA)
pin 39 (PB7): input bias pull up, output drive strength (20 mA)
pin 40 (PB8): input bias disabled, output drive strength (20 mA)
pin 41 (PB9): input bias disabled, output drive strength (20 mA)
pin 42 (PB10): input bias disabled, output drive strength (20 mA)
pin 43 (PB11): input bias disabled, output drive strength (20 mA)
pin 44 (PB12): input bias disabled, output drive strength (20 mA)
pin 64 (PC0): input bias disabled, output drive strength (20 mA)
pin 65 (PC1): input bias disabled, output drive strength (20 mA)
pin 66 (PC2): input bias pull up, output drive strength (30 mA)
pin 67 (PC3): input bias pull up, output drive strength (30 mA)
pin 68 (PC4): input bias pull up, output drive strength (30 mA)
pin 69 (PC5): input bias pull up, output drive strength (30 mA)
pin 70 (PC6): input bias pull up, output drive strength (30 mA)
pin 71 (PC7): input bias pull up, output drive strength (30 mA)
pin 96 (PD0): input bias disabled, output drive strength (40 mA)
pin 97 (PD1): input bias disabled, output drive strength (40 mA)
pin 98 (PD2): input bias disabled, output drive strength (40 mA)
pin 99 (PD3): input bias disabled, output drive strength (40 mA)
pin 100 (PD4): input bias disabled, output drive strength (40 mA)
pin 101 (PD5): input bias disabled, output drive strength (40 mA)
pin 102 (PD6): input bias disabled, output drive strength (40 mA)
pin 103 (PD7): input bias disabled, output drive strength (40 mA)
pin 104 (PD8): input bias disabled, output drive strength (40 mA)
pin 105 (PD9): input bias disabled, output drive strength (40 mA)
pin 106 (PD10): input bias pull up, output drive strength (10 mA)
pin 107 (PD11): input bias pull up, output drive strength (10 mA)
pin 108 (PD12): input bias disabled, output drive strength (20 mA)
pin 109 (PD13): input bias disabled, output drive strength (20 mA)
pin 110 (PD14): input bias disabled, output drive strength (20 mA)
pin 111 (PD15): input bias disabled, output drive strength (20 mA)
pin 112 (PD16): input bias disabled, output drive strength (20 mA)
pin 113 (PD17): input bias disabled, output drive strength (20 mA)
pin 114 (PD18): input bias disabled, output drive strength (20 mA)
pin 115 (PD19): input bias disabled, output drive strength (20 mA)
pin 116 (PD20): input bias disabled, output drive strength (10 mA)
pin 117 (PD21): input bias disabled, output drive strength (10 mA)
pin 118 (PD22): input bias pull up, output drive strength (10 mA)
pin 128 (PE0): input bias disabled, output drive strength (10 mA)
pin 129 (PE1): input bias disabled, output drive strength (10 mA)
pin 130 (PE2): input bias disabled, output drive strength (10 mA)
pin 131 (PE3): input bias disabled, output drive strength (10 mA)
pin 132 (PE4): input bias disabled, output drive strength (10 mA)
pin 133 (PE5): input bias disabled, output drive strength (10 mA)
pin 134 (PE6): input bias disabled, output drive strength (10 mA)
pin 135 (PE7): input bias disabled, output drive strength (10 mA)
pin 136 (PE8): input bias disabled, output drive strength (10 mA)
pin 137 (PE9): input bias disabled, output drive strength (10 mA)
pin 138 (PE10): input bias disabled, output drive strength (10 mA)
pin 139 (PE11): input bias disabled, output drive strength (20 mA)
pin 140 (PE12): input bias disabled, output drive strength (20 mA)
pin 141 (PE13): input bias disabled, output drive strength (20 mA)
pin 142 (PE14): input bias disabled, output drive strength (20 mA)
pin 143 (PE15): input bias disabled, output drive strength (20 mA)
pin 144 (PE16): input bias disabled, output drive strength (20 mA)
pin 145 (PE17): input bias disabled, output drive strength (20 mA)
pin 160 (PF0): input bias pull up, output drive strength (30 mA), pin power source (3300 selector)
pin 161 (PF1): input bias pull up, output drive strength (30 mA), pin power source (3300 selector)
pin 162 (PF2): input bias pull up, output drive strength (30 mA), pin power source (3300 selector)
pin 163 (PF3): input bias pull up, output drive strength (30 mA), pin power source (3300 selector)
pin 164 (PF4): input bias pull up, output drive strength (30 mA), pin power source (3300 selector)
pin 165 (PF5): input bias pull up, output drive strength (30 mA), pin power source (3300 selector)
pin 166 (PF6): input bias pull up, output drive strength (20 mA), pin power source (3300 selector)
pin 192 (PG0): input bias pull up, output drive strength (30 mA)
pin 193 (PG1): input bias pull up, output drive strength (30 mA)
pin 194 (PG2): input bias pull up, output drive strength (30 mA)
pin 195 (PG3): input bias pull up, output drive strength (30 mA)
pin 196 (PG4): input bias pull up, output drive strength (30 mA)
pin 197 (PG5): input bias pull up, output drive strength (30 mA)
pin 198 (PG6): input bias pull up, output drive strength (10 mA)
pin 199 (PG7): input bias pull up, output drive strength (10 mA)
pin 200 (PG8): input bias disabled, output drive strength (10 mA)
pin 201 (PG9): input bias disabled, output drive strength (10 mA)
pin 202 (PG10): input bias disabled, output drive strength (10 mA)
pin 203 (PG11): input bias disabled, output drive strength (10 mA)
pin 204 (PG12): input bias disabled, output drive strength (20 mA)
pin 205 (PG13): input bias disabled, output drive strength (20 mA)
pin 206 (PG14): input bias disabled, output drive strength (20 mA)
pin 207 (PG15): input bias disabled, output drive strength (20 mA)
pin 208 (PG16): input bias disabled, output drive strength (20 mA)
pin 209 (PG17): input bias disabled, output drive strength (20 mA)
pin 210 (PG18): input bias disabled, output drive strength (20 mA)