Auch wenn ein Allwinner A20 keinen W1 (single wire) Controller besitzt, kann man die W1-sensoren trotzdem auslesen. Dazu nutzt mal das Modul w1-gpio. Damit es jedoch funktioniert, sind noch kleine Änderungen am DeviceTree notwendig.
Erstmal muss man einen Pin auswählen und ihn als Eingang definieren. Dies geschieht im Block &pio, der nach der Änderung so aussieht (ich habe hier PH7 verwendet, es kann natürlich jeder andere Pin verwendet werden, der noch frei ist):
&pio {
gmac_power_pin_bananapro: gmac_power_pin@0 {
pins = "PH23";
function = "gpio_out";
};
led_pins_bananapro: led_pins@0 {
pins = "PH24", "PG2";
function = "gpio_out";
};
mmc0_cd_pin_bananapro: mmc0_cd_pin@0 {
pins = "PH10";
function = "gpio_in";
bias-pull-up;
};
usb1_vbus_pin_bananapro: usb1_vbus_pin@0 {
pins = "PH0";
function = "gpio_out";
};
usb2_vbus_pin_bananapro: usb2_vbus_pin@0 {
pins = "PH1";
function = "gpio_out";
};
vmmc3_pin_bananapro: vmmc3_pin@0 {
pins = "PH22";
function = "gpio_out";
};
w1_pin: w1_pin@0 {
allwinner,pins = "PH7";
allwinner,function = "gpio_in";
allwinner,drive = <SUN4I_PINCTRL_10_MA>;
allwinner,pull = <SUN4I_PINCTRL_PULL_UP>;
};
};
Nun ist der W1-Pin im DeviceTree bekannt. Jetzt kommt das Device dazu (das kann man einfach am Ende der Datei anhängen):
w1_slave {
compatible = "w1-gpio";
gpios = <&pio 7 7 GPIO_ACTIVE_HIGH>; /* PH7 */
pinctrl-names = "default";
pinctrl-0 = <&w1_pin>;
};
Die Zeilen 2 und 5 sind die Wichtigsten. In der Zeile 1 wird gesagt, dass dieses Device mit dem w1-gpio Modul angesprochen werden soll und Zeile 5 ist die Referenz zum w1-Pin, der im &pio-Block definiert ist.