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);