Beim RK3328 bzw. dem Rock64 Board ist der OS8104 an den I²C-0 Bus angeschlossen, der in der Standardkonfiguration deaktiviert ist. Um ihn zu aktiveren, editiert man die Datei rk3328-rock64.dts und fügt folgenden Block hinzu:
&i2c0 {
clock-frequency = <400000>;
status = "okay";
};
Damit ist I²C-0 mit 400kHz konfiguriert und aktiviert.
Nun kommen die Einträge für OS8104 und LM75 rein, das sieht vollständig so aus:
&i2c0 {
clock-frequency = <400000>;
status = "okay";
os8104: os8104@41 {
compatible = "smsc,os8104";
reg = <0x41>;
master = <0>; /* slave mode*/
bypass = <0>; /* /ABY (all bypass mode) im register bXCR */
pinctrl-names = "default";
pinctrl-0 = <&os8104_reset &os8104_int &os8104_aint &os8104_error &os8104_3dB>;
};
tmp275: tmp275@48 {
compatible = "ti,tmp275";
reg = <0x48>;
};
};
OS8104 hat die Adresse 0x41 und LM75 0x48.
So wird sich das File aber nicht übersetzenlassen, da die Einträge für Pins (&os8104_reset &os8104_int &os8104_aint &os8104_error &os8104_3dB) noch fehlen. Diese werden im Abschnitt &pinctl eingefügt:
os8104 {
os8104_reset: os8104-reset {
rockchip,pins = <RK_GPIO0 RK_PA0 RK_FUNC_GPIO &pcfg_pull_up>;
};
os8104_int: os8104-int {
rockchip,pins = <RK_GPIO3 RK_PA4 RK_FUNC_GPIO &pcfg_pull_up>;
};
os8104_aint: os8104-aint {
rockchip,pins = <RK_GPIO3 RK_PA5 RK_FUNC_GPIO &pcfg_pull_up>;
};
os8104_error: os8104-error {
rockchip,pins = <RK_GPIO3 RK_PA6 RK_FUNC_GPIO &pcfg_pull_down>;
};
os8104_3dB: os81l04-3dB {
rockchip,pins = <RK_GPIO3 RK_PA7 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
Um die GPIO-Nummern im LKM auszulesen, verwendet man die Namen hinter dem Doppelpunkt, also zum Beispiel:
devm_gpiod_get (&client->dev, "os8104-reset", GPIOD_OUT_HIGH);