]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
arm64: dts: rockchip: describe the OV8858 user camera on PinePhone Pro
authorOlivier Benjamin <olivier.benjamin@bootlin.com>
Fri, 20 Jun 2025 15:21:35 +0000 (17:21 +0200)
committerHeiko Stuebner <heiko@sntech.de>
Fri, 11 Jul 2025 13:25:41 +0000 (15:25 +0200)
Add the description of the front/user camera (OV8858) on the PinePhone Pro
to the device dts file.
It receives commands over SCCB, an I2C-compatible protocol, at
I2C address 0x36 and transmits data over CSI-MIPI.
I confirmed this address experimentally.

The pin control mapping was again extracted from the PinePhone Pro
schematic v1.0 as well as the RK3399 datasheet revision 1.8.

Table 2-3 in section 2.8 of the RK3399 datasheet contains the mapping
of IO functions for the SoC pins. Page 52 shows GPIO1_A4, page 54 shows
GPIO2_B4.

For the reset (RESET) signal:
page 11 quadrant D2             | p.18 q.B3-4 | p.18 q.C2
RK3399_E.R28 -> GPIO1_A4 -> Camera2_RST -> MIPI_RST1 -> OV8858.12

For the powerdown (PWDN) signal:
page 9 quadrants D4-5          | p.18 q.B2
RK3399_L.F31 -> GPIO2_B4 -> DVP_PDN0_H -> OV8858.14

Helped-by: Dragan Simic <dsimic@manjaro.org>
Co-developed-by: Ondrej Jirman <megi@xff.cz>
Signed-off-by: Ondrej Jirman <megi@xff.cz>
Signed-off-by: Olivier Benjamin <olivier.benjamin@bootlin.com>
Link: https://lore.kernel.org/r/20250620-camera-v4-4-0201a8ed5fae@bootlin.com
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
arch/arm64/boot/dts/rockchip/rk3399-pinephone-pro.dts

index 8418be9e2d62b8ad1416339b95fe53601390a8f2..780b4224fd5646830a70e0fdb680a34e5497b639 100644 (file)
                /* Same I2c bus as both cameras, depends on vcca1v8_codec for power. */
                vcc-supply = <&vcc1v8_dvp>;
        };
+
+       ucam: camera@36 {
+               compatible = "ovti,ov8858";
+               reg = <0x36>;
+               clocks = <&cru SCLK_CIF_OUT>; /* MIPI_MCLK1, derived from CIF_CLK0 */
+               clock-names = "xvclk";
+               dovdd-supply = <&vcc1v8_dvp>;
+               orientation = <0>; /* V4L2_CAMERA_ORIENTATION_FRONT */
+               pinctrl-names = "default";
+               pinctrl-0 = <&camera2_rst_l &dvp_pdn0_h>;
+               powerdown-gpios = <&gpio2 RK_PB4 GPIO_ACTIVE_LOW>;
+               reset-gpios = <&gpio1 RK_PA4 GPIO_ACTIVE_LOW>;
+               rotation = <90>;
+
+               port {
+                       ucam_out: endpoint {
+                               data-lanes = <1 2 3 4>;
+                               remote-endpoint = <&mipi_in_ucam>;
+                       };
+               };
+       };
 };
 
 &i2c3 {
        status = "okay";
 };
 
+&isp0 {
+       status = "okay";
+
+       ports {
+               port@0 {
+                       mipi_in_ucam: endpoint@0 {
+                               reg = <0>;
+                               data-lanes = <1 2 3 4>;
+                               remote-endpoint = <&ucam_out>;
+                       };
+               };
+       };
+};
+
+&isp0_mmu {
+       status = "okay";
+};
+
 &isp1 {
        status = "okay";
 
                };
        };
 
-       camera {
+       cameras {
                camera_rst_l: camera-rst-l {
                        rockchip,pins = <1 RK_PA0 RK_FUNC_GPIO &pcfg_pull_none>;
                };
+               camera2_rst_l: camera2-rst-l {
+                       rockchip,pins = <1 RK_PA4 RK_FUNC_GPIO &pcfg_pull_none>;
+               };
+               dvp_pdn0_h: dvp-pdn0-h {
+                       rockchip,pins = <2 RK_PB4 RK_FUNC_GPIO &pcfg_pull_none>;
+               };
        };
 
        leds {