* [PATCH v2 0/2] Describe the cameras in the PinePhone Pro dts
@ 2025-03-02 15:41 Olivier Benjamin
2025-03-02 15:41 ` [PATCH v2 1/2] arm64: dts: rockchip: describe I2c Bus 1 and IMX258 world camera on PinePhone Pro Olivier Benjamin
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Olivier Benjamin @ 2025-03-02 15:41 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Heiko Stuebner
Cc: Thomas Petazzoni, devicetree, linux-arm-kernel, linux-rockchip,
linux-kernel, Olivier Benjamin, oren, Dragan Simic, Ondrej Jirman
This series adds support for the Pine64 PinePhone Pro's rear and front
cameras in Device Tree.
This is based on some of Ondrej Jirman's patches hosted in his tree at
https://codeberg.org/megi/linux, but I have also fully reviewed and
re-written the code from the RK3399 datasheet, the PinePhone Pro
schematic, and the IMX258-0AQH5 software reference manual.
I have tested these changes on my PinePhone Pro and am able to take
photos from both cameras using libcamera's cam.
Signed-off-by: Olivier Benjamin <olivier.benjamin@bootlin.com>
---
Changes in v2:
- Rebase on mainline
- Change patch subject to arm64: dts: rockchip
- Rename new regulators to fit preferred form for fixed regulators
- Link to v1: https://lore.kernel.org/r/20250228-camera-v1-0-c51869f94e97@bootlin.com
---
Olivier Benjamin (2):
arm64: dts: rockchip: describe I2c Bus 1 and IMX258 world camera on PinePhone Pro
arm64: dts: rockchip: describe the OV8858 user camera on PinePhone Pro
.../boot/dts/rockchip/rk3399-pinephone-pro.dts | 138 +++++++++++++++++++++
1 file changed, 138 insertions(+)
---
--
Olivier Benjamin <olivier.benjamin@bootlin.com>
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH v2 1/2] arm64: dts: rockchip: describe I2c Bus 1 and IMX258 world camera on PinePhone Pro
2025-03-02 15:41 [PATCH v2 0/2] Describe the cameras in the PinePhone Pro dts Olivier Benjamin
@ 2025-03-02 15:41 ` Olivier Benjamin
2025-03-02 15:41 ` [PATCH v2 2/2] arm64: dts: rockchip: describe the OV8858 user " Olivier Benjamin
2025-03-03 13:14 ` [PATCH v2 0/2] Describe the cameras in the PinePhone Pro dts Rob Herring (Arm)
2 siblings, 0 replies; 4+ messages in thread
From: Olivier Benjamin @ 2025-03-02 15:41 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Heiko Stuebner
Cc: Thomas Petazzoni, devicetree, linux-arm-kernel, linux-rockchip,
linux-kernel, Olivier Benjamin, oren, Dragan Simic, Ondrej Jirman
Add the description of the rear/world camera (IMX258) on the PinePhone Pro
to the device dts file.
It receives commands on the I2C Bus 1 at address 0x1a and transmits data
over CSI-MIPI.
The I2C address for IMX258 can be found in the IMX258-0AQH5 Software
Reference Manual, page 24, section 2.3.1: 0b0011010 = 0x1a.
Section 3 indicates the module has 4 pairs of data lines. While 4-lane
mode is nominal, 2-lane mode should also be supported.
The pin muxing info was 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_A0, page 54 shows
GPIO2_D4.
For I2C power, the PinePhone Pro schematic page 11 quadrants A4 and A5:
RK3399_J.AA8 and RK3399_J.Y8 get power from vcaa1v8_codec, so turn it on
The IMX258 also uses the following regulators, expected by its driver:
- vana (2.8V analog), called AVDD2V8_DVP on P.18 q.C1 and derived from
VCC1V8_S3 on P.13 q.B2
- vdig (1.2V digital core), called DVDD_DVP on P.18 q.C1 and shown on
P.18 q.D3 to be equivalent to VCC1V2_DVP derived from VCC3V3_SYS on
P.13 q.B3. Note that this regulator's voltage is inconsistently
labeled either 1.2V or 1.5V
RK3399_J.AG1 is GPIO4_A1/I2C1_SDA, RK3399_J.Y6 is GPIO4_A2/I2C1_SCL
This is the default pinctrl "i2c1_xfer" for i2c1 from rk3399-base.
For the reset (RESET) signal:
page 11 quadrant D2 | p.18 q.C3-4 | p.18 q.C2
RK3399_E.R25 -> GPIO1_A0 -> Camera_RST -> MIPI_RST0 -> IMX258.12
For the powerdown (PWDN) signal:
page 11 quadrants B4-5 | p.18 q.C2
RK3399_G.AF8 -> GPIO2_D4 -> DVP_PDN1_H -> IMX258.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>
---
.../boot/dts/rockchip/rk3399-pinephone-pro.dts | 93 ++++++++++++++++++++++
1 file changed, 93 insertions(+)
diff --git a/arch/arm64/boot/dts/rockchip/rk3399-pinephone-pro.dts b/arch/arm64/boot/dts/rockchip/rk3399-pinephone-pro.dts
index 04ba4c4565d0a205e2e46d7535c6a3190993621d..7f8fe7577d240f330328b6ea44ea6b06bbc8595b 100644
--- a/arch/arm64/boot/dts/rockchip/rk3399-pinephone-pro.dts
+++ b/arch/arm64/boot/dts/rockchip/rk3399-pinephone-pro.dts
@@ -114,6 +114,16 @@ vcc3v3_sys: regulator-vcc3v3-sys {
vin-supply = <&vcc_sys>;
};
+ avdd2v8_dvp: regulator-avdd2v8-dvp {
+ compatible = "regulator-fixed";
+ regulator-name = "avdd2v8_dvp";
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <2800000>;
+ regulator-max-microvolt = <2800000>;
+ vin-supply = <&vcc3v3_sys>;
+ };
+
vcca1v8_s3: regulator-vcc1v8-s3 {
compatible = "regulator-fixed";
regulator-name = "vcca1v8_s3";
@@ -136,6 +146,16 @@ vcc1v8_codec: regulator-vcc1v8-codec {
vin-supply = <&vcc3v3_sys>;
};
+ vcc1v2_dvp: regulator-vcc1v2-dvp {
+ compatible = "regulator-fixed";
+ regulator-name = "vcc1v2_dvp";
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <1200000>;
+ regulator-max-microvolt = <1200000>;
+ vin-supply = <&vcca1v8_s3>;
+ };
+
wifi_pwrseq: sdio-wifi-pwrseq {
compatible = "mmc-pwrseq-simple";
clocks = <&rk818 1>;
@@ -312,6 +332,8 @@ vcc3v0_touch: LDO_REG2 {
vcca1v8_codec: LDO_REG3 {
regulator-name = "vcca1v8_codec";
+ regulator-always-on;
+ regulator-boot-on;
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
};
@@ -420,6 +442,45 @@ regulator-state-mem {
};
};
+&i2c1 {
+ clock-frequency = <400000>;
+ pinctrl-0 = <&i2c1_xfer &cif_clkouta>;
+ assigned-clocks = <&cru SCLK_CIF_OUT>;
+ assigned-clock-rates = <24000000>;
+ status = "okay";
+
+ wcam: camera@1a {
+ compatible = "sony,imx258";
+ reg = <0x1a>;
+ clocks = <&cru SCLK_CIF_OUT>; /* MIPI_MCLK0, derived from CIF_CLKO */
+ clock-names = "xvclk";
+ pinctrl-names = "default";
+ pinctrl-0 = <&wcam_rst>;
+ /* Note: both cameras also depend on vcca1v8_codec to power the I2C bus. */
+ vif-supply = <&vcc1v8_dvp>;
+ vana-supply = <&avdd2v8_dvp>;
+ vdig-supply = <&vcc1v2_dvp>; /* DVDD_DVP is the same as VCC1V2_DVP */
+ reset-gpios = <&gpio1 RK_PA0 GPIO_ACTIVE_LOW>;
+ orientation = <1>; /* V4L2_CAMERA_ORIENTATION_BACK */
+ rotation = <270>;
+ lens-focus = <&wcam_lens>;
+
+ port {
+ wcam_out: endpoint {
+ remote-endpoint = <&mipi_in_wcam>;
+ data-lanes = <1 2 3 4>;
+ };
+ };
+ };
+
+ wcam_lens: camera-lens@c {
+ compatible = "dongwoon,dw9714";
+ reg = <0x0c>;
+ /* Same I2c bus as both cameras, depends on vcca1v8_codec for power. */
+ vcc-supply = <&vcc1v8_dvp>;
+ };
+};
+
&i2c3 {
i2c-scl-rising-time-ns = <450>;
i2c-scl-falling-time-ns = <15>;
@@ -462,6 +523,28 @@ &io_domains {
status = "okay";
};
+&isp1 {
+ status = "okay";
+
+ ports {
+ port@0 {
+ mipi_in_wcam: endpoint@0 {
+ reg = <0>;
+ remote-endpoint = <&wcam_out>;
+ data-lanes = <1 2 3 4>;
+ };
+ };
+ };
+};
+
+&mipi_dphy_rx0 {
+ status = "okay";
+};
+
+&isp1_mmu {
+ status = "okay";
+};
+
&mipi_dsi {
status = "okay";
clock-master;
@@ -495,6 +578,10 @@ mipi_in_panel: endpoint {
};
};
+&mipi_dsi1 {
+ status = "okay";
+};
+
&pmu_io_domains {
pmu1830-supply = <&vcc_1v8>;
status = "okay";
@@ -507,6 +594,12 @@ pwrbtn_pin: pwrbtn-pin {
};
};
+ camera {
+ wcam_rst: wcam-rst {
+ rockchip,pins = <1 RK_PA0 RK_FUNC_GPIO &pcfg_pull_none>;
+ };
+ };
+
leds {
red_led_pin: red-led-pin {
rockchip,pins = <4 RK_PD2 RK_FUNC_GPIO &pcfg_pull_none>;
--
2.48.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH v2 2/2] arm64: dts: rockchip: describe the OV8858 user camera on PinePhone Pro
2025-03-02 15:41 [PATCH v2 0/2] Describe the cameras in the PinePhone Pro dts Olivier Benjamin
2025-03-02 15:41 ` [PATCH v2 1/2] arm64: dts: rockchip: describe I2c Bus 1 and IMX258 world camera on PinePhone Pro Olivier Benjamin
@ 2025-03-02 15:41 ` Olivier Benjamin
2025-03-03 13:14 ` [PATCH v2 0/2] Describe the cameras in the PinePhone Pro dts Rob Herring (Arm)
2 siblings, 0 replies; 4+ messages in thread
From: Olivier Benjamin @ 2025-03-02 15:41 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Heiko Stuebner
Cc: Thomas Petazzoni, devicetree, linux-arm-kernel, linux-rockchip,
linux-kernel, Olivier Benjamin, oren, Dragan Simic, Ondrej Jirman
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>
---
.../boot/dts/rockchip/rk3399-pinephone-pro.dts | 45 ++++++++++++++++++++++
1 file changed, 45 insertions(+)
diff --git a/arch/arm64/boot/dts/rockchip/rk3399-pinephone-pro.dts b/arch/arm64/boot/dts/rockchip/rk3399-pinephone-pro.dts
index 7f8fe7577d240f330328b6ea44ea6b06bbc8595b..9c965a00fcf6dbf4c618e1f4668d82a028c76143 100644
--- a/arch/arm64/boot/dts/rockchip/rk3399-pinephone-pro.dts
+++ b/arch/arm64/boot/dts/rockchip/rk3399-pinephone-pro.dts
@@ -479,6 +479,27 @@ wcam_lens: camera-lens@c {
/* 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";
+ pinctrl-names = "default";
+ pinctrl-0 = <&ucam_rst &ucam_pwdn>;
+ dovdd-supply = <&vcc1v8_dvp>;
+ reset-gpios = <&gpio1 RK_PA4 GPIO_ACTIVE_LOW>;
+ powerdown-gpios = <&gpio2 RK_PB4 GPIO_ACTIVE_LOW>;
+ orientation = <0>; /* V4L2_CAMERA_ORIENTATION_FRONT */
+ rotation = <90>;
+
+ port {
+ ucam_out: endpoint {
+ remote-endpoint = <&mipi_in_ucam>;
+ data-lanes = <1 2 3 4>;
+ };
+ };
+ };
};
&i2c3 {
@@ -523,6 +544,24 @@ &io_domains {
status = "okay";
};
+&isp0 {
+ status = "okay";
+
+ ports {
+ port@0 {
+ mipi_in_ucam: endpoint@0 {
+ reg = <0>;
+ remote-endpoint = <&ucam_out>;
+ data-lanes = <1 2 3 4>;
+ };
+ };
+ };
+};
+
+&isp0_mmu {
+ status = "okay";
+};
+
&isp1 {
status = "okay";
@@ -598,6 +637,12 @@ camera {
wcam_rst: wcam-rst {
rockchip,pins = <1 RK_PA0 RK_FUNC_GPIO &pcfg_pull_none>;
};
+ ucam_rst: ucam-rst {
+ rockchip,pins = <1 RK_PA4 RK_FUNC_GPIO &pcfg_pull_none>;
+ };
+ ucam_pwdn: ucam-pwdn {
+ rockchip,pins = <2 RK_PB4 RK_FUNC_GPIO &pcfg_pull_none>;
+ };
};
leds {
--
2.48.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH v2 0/2] Describe the cameras in the PinePhone Pro dts
2025-03-02 15:41 [PATCH v2 0/2] Describe the cameras in the PinePhone Pro dts Olivier Benjamin
2025-03-02 15:41 ` [PATCH v2 1/2] arm64: dts: rockchip: describe I2c Bus 1 and IMX258 world camera on PinePhone Pro Olivier Benjamin
2025-03-02 15:41 ` [PATCH v2 2/2] arm64: dts: rockchip: describe the OV8858 user " Olivier Benjamin
@ 2025-03-03 13:14 ` Rob Herring (Arm)
2 siblings, 0 replies; 4+ messages in thread
From: Rob Herring (Arm) @ 2025-03-03 13:14 UTC (permalink / raw)
To: Olivier Benjamin
Cc: Conor Dooley, linux-kernel, Thomas Petazzoni, Dragan Simic,
Heiko Stuebner, Krzysztof Kozlowski, devicetree, linux-arm-kernel,
linux-rockchip, Ondrej Jirman, oren
On Sun, 02 Mar 2025 16:41:01 +0100, Olivier Benjamin wrote:
> This series adds support for the Pine64 PinePhone Pro's rear and front
> cameras in Device Tree.
> This is based on some of Ondrej Jirman's patches hosted in his tree at
> https://codeberg.org/megi/linux, but I have also fully reviewed and
> re-written the code from the RK3399 datasheet, the PinePhone Pro
> schematic, and the IMX258-0AQH5 software reference manual.
>
> I have tested these changes on my PinePhone Pro and am able to take
> photos from both cameras using libcamera's cam.
>
> Signed-off-by: Olivier Benjamin <olivier.benjamin@bootlin.com>
> ---
> Changes in v2:
> - Rebase on mainline
> - Change patch subject to arm64: dts: rockchip
> - Rename new regulators to fit preferred form for fixed regulators
> - Link to v1: https://lore.kernel.org/r/20250228-camera-v1-0-c51869f94e97@bootlin.com
>
> ---
> Olivier Benjamin (2):
> arm64: dts: rockchip: describe I2c Bus 1 and IMX258 world camera on PinePhone Pro
> arm64: dts: rockchip: describe the OV8858 user camera on PinePhone Pro
>
> .../boot/dts/rockchip/rk3399-pinephone-pro.dts | 138 +++++++++++++++++++++
> 1 file changed, 138 insertions(+)
> ---
> --
> Olivier Benjamin <olivier.benjamin@bootlin.com>
>
>
>
My bot found new DTB warnings on the .dts files added or changed in this
series.
Some warnings may be from an existing SoC .dtsi. Or perhaps the warnings
are fixed by another series. Ultimately, it is up to the platform
maintainer whether these warnings are acceptable or not. No need to reply
unless the platform maintainer has comments.
If you already ran DT checks and didn't see these error(s), then
make sure dt-schema is up to date:
pip3 install dtschema --upgrade
New warnings running 'make CHECK_DTBS=y for arch/arm64/boot/dts/rockchip/' for 20250302-camera-v2-0-312b44b4a89c@bootlin.com:
arch/arm64/boot/dts/rockchip/rk3399-pinephone-pro.dtb: camera@1a: port:endpoint: 'link-frequencies' is a required property
from schema $id: http://devicetree.org/schemas/media/i2c/sony,imx258.yaml#
arch/arm64/boot/dts/rockchip/rk3399-pinephone-pro.dtb: camera@1a: 'clock-names', 'lens-focus', 'orientation', 'rotation' do not match any of the regexes: 'pinctrl-[0-9]+'
from schema $id: http://devicetree.org/schemas/media/i2c/sony,imx258.yaml#
arch/arm64/boot/dts/rockchip/rk3399-pinephone-pro.dtb: camera@36: 'orientation', 'rotation' do not match any of the regexes: 'pinctrl-[0-9]+'
from schema $id: http://devicetree.org/schemas/media/i2c/ovti,ov8858.yaml#
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2025-03-03 13:14 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-03-02 15:41 [PATCH v2 0/2] Describe the cameras in the PinePhone Pro dts Olivier Benjamin
2025-03-02 15:41 ` [PATCH v2 1/2] arm64: dts: rockchip: describe I2c Bus 1 and IMX258 world camera on PinePhone Pro Olivier Benjamin
2025-03-02 15:41 ` [PATCH v2 2/2] arm64: dts: rockchip: describe the OV8858 user " Olivier Benjamin
2025-03-03 13:14 ` [PATCH v2 0/2] Describe the cameras in the PinePhone Pro dts Rob Herring (Arm)
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).