* [PATCH v3 0/4] Describe the cameras in the PinePhone Pro dts
@ 2025-05-09 21:51 Olivier Benjamin
2025-05-09 21:51 ` [PATCH v3 1/4] dt-bindings: media: ov8858: inherit video-interface-devices properties Olivier Benjamin
` (4 more replies)
0 siblings, 5 replies; 11+ messages in thread
From: Olivier Benjamin @ 2025-05-09 21:51 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Heiko Stuebner,
Jacopo Mondi, Nicholas Roth, Mauro Carvalho Chehab, Sakari Ailus,
Shawn Guo, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam
Cc: Thomas Petazzoni, devicetree, linux-arm-kernel, linux-rockchip,
linux-kernel, linux-media, Krzysztof Kozlowski, imx,
Olivier Benjamin, 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 v3:
- Fixed new DTB warnings reported by Rob Herring's bot
- Link to v2: https://lore.kernel.org/r/20250302-camera-v2-0-312b44b4a89c@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 (4):
dt-bindings: media: ov8858: inherit video-interface-devices properties
dt-bindings: media: imx258: inherit video-interface-devices properties
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
.../devicetree/bindings/media/i2c/ovti,ov8858.yaml | 4 +-
.../devicetree/bindings/media/i2c/sony,imx258.yaml | 4 +-
.../boot/dts/rockchip/rk3399-pinephone-pro.dts | 139 +++++++++++++++++++++
3 files changed, 145 insertions(+), 2 deletions(-)
---
--
Olivier Benjamin <olivier.benjamin@bootlin.com>
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH v3 1/4] dt-bindings: media: ov8858: inherit video-interface-devices properties
2025-05-09 21:51 [PATCH v3 0/4] Describe the cameras in the PinePhone Pro dts Olivier Benjamin
@ 2025-05-09 21:51 ` Olivier Benjamin
2025-05-14 20:12 ` Rob Herring (Arm)
2025-05-09 21:51 ` [PATCH v3 2/4] dt-bindings: media: imx258: " Olivier Benjamin
` (3 subsequent siblings)
4 siblings, 1 reply; 11+ messages in thread
From: Olivier Benjamin @ 2025-05-09 21:51 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Heiko Stuebner,
Jacopo Mondi, Nicholas Roth, Mauro Carvalho Chehab, Sakari Ailus,
Shawn Guo, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam
Cc: Thomas Petazzoni, devicetree, linux-arm-kernel, linux-rockchip,
linux-kernel, linux-media, Krzysztof Kozlowski, imx,
Olivier Benjamin
Update the OV8858 binding to inherit properties defined in the
video-interface-devices binding.
Signed-off-by: Olivier Benjamin <olivier.benjamin@bootlin.com>
---
Documentation/devicetree/bindings/media/i2c/ovti,ov8858.yaml | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/Documentation/devicetree/bindings/media/i2c/ovti,ov8858.yaml b/Documentation/devicetree/bindings/media/i2c/ovti,ov8858.yaml
index a65f921ec0fd24e449331772e39a16cadd73a868..491f2931e6bcdf5a1ad2cd4f9eb187055c3a7a2d 100644
--- a/Documentation/devicetree/bindings/media/i2c/ovti,ov8858.yaml
+++ b/Documentation/devicetree/bindings/media/i2c/ovti,ov8858.yaml
@@ -15,6 +15,8 @@ description: |
controlled through an I2C-compatible SCCB bus. The sensor transmits images
on a MIPI CSI-2 output interface with up to 4 data lanes.
+$ref: /schemas/media/video-interface-devices.yaml#
+
properties:
compatible:
const: ovti,ov8858
@@ -69,7 +71,7 @@ required:
- clocks
- port
-additionalProperties: false
+unevaluatedProperties: false
examples:
- |
--
2.48.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH v3 2/4] dt-bindings: media: imx258: inherit video-interface-devices properties
2025-05-09 21:51 [PATCH v3 0/4] Describe the cameras in the PinePhone Pro dts Olivier Benjamin
2025-05-09 21:51 ` [PATCH v3 1/4] dt-bindings: media: ov8858: inherit video-interface-devices properties Olivier Benjamin
@ 2025-05-09 21:51 ` Olivier Benjamin
2025-05-14 20:12 ` Rob Herring (Arm)
2025-05-09 21:51 ` [PATCH v3 3/4] arm64: dts: rockchip: describe I2c Bus 1 and IMX258 world camera on PinePhone Pro Olivier Benjamin
` (2 subsequent siblings)
4 siblings, 1 reply; 11+ messages in thread
From: Olivier Benjamin @ 2025-05-09 21:51 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Heiko Stuebner,
Jacopo Mondi, Nicholas Roth, Mauro Carvalho Chehab, Sakari Ailus,
Shawn Guo, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam
Cc: Thomas Petazzoni, devicetree, linux-arm-kernel, linux-rockchip,
linux-kernel, linux-media, Krzysztof Kozlowski, imx,
Olivier Benjamin
Update the IMX258 binding to inherit properties defined in the
video-interface-devices binding.
Signed-off-by: Olivier Benjamin <olivier.benjamin@bootlin.com>
---
Documentation/devicetree/bindings/media/i2c/sony,imx258.yaml | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/Documentation/devicetree/bindings/media/i2c/sony,imx258.yaml b/Documentation/devicetree/bindings/media/i2c/sony,imx258.yaml
index 975c1d77c8e5d24179e9cb8d92fe7b6798c4d2ec..421b935b52bcaafbee0aff5b5cebc6332409bd8b 100644
--- a/Documentation/devicetree/bindings/media/i2c/sony,imx258.yaml
+++ b/Documentation/devicetree/bindings/media/i2c/sony,imx258.yaml
@@ -18,6 +18,8 @@ description: |-
The camera module does not expose the model through registers, so the
exact model needs to be specified.
+$ref: /schemas/media/video-interface-devices.yaml#
+
properties:
compatible:
enum:
@@ -81,7 +83,7 @@ required:
- reg
- port
-additionalProperties: false
+unevaluatedProperties: false
examples:
- |
--
2.48.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH v3 3/4] arm64: dts: rockchip: describe I2c Bus 1 and IMX258 world camera on PinePhone Pro
2025-05-09 21:51 [PATCH v3 0/4] Describe the cameras in the PinePhone Pro dts Olivier Benjamin
2025-05-09 21:51 ` [PATCH v3 1/4] dt-bindings: media: ov8858: inherit video-interface-devices properties Olivier Benjamin
2025-05-09 21:51 ` [PATCH v3 2/4] dt-bindings: media: imx258: " Olivier Benjamin
@ 2025-05-09 21:51 ` Olivier Benjamin
2025-05-13 18:23 ` Heiko Stuebner
2025-05-09 21:51 ` [PATCH v3 4/4] arm64: dts: rockchip: describe the OV8858 user " Olivier Benjamin
2025-05-12 12:49 ` [PATCH v3 0/4] Describe the cameras in the PinePhone Pro dts Rob Herring (Arm)
4 siblings, 1 reply; 11+ messages in thread
From: Olivier Benjamin @ 2025-05-09 21:51 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Heiko Stuebner,
Jacopo Mondi, Nicholas Roth, Mauro Carvalho Chehab, Sakari Ailus,
Shawn Guo, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam
Cc: Thomas Petazzoni, devicetree, linux-arm-kernel, linux-rockchip,
linux-kernel, linux-media, Krzysztof Kozlowski, imx,
Olivier Benjamin, 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 | 94 ++++++++++++++++++++++
1 file changed, 94 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..588e2d8a049cc649aa227c7a885bd494f23fbdf8 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,46 @@ 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>;
+ link-frequencies = /bits/ 64 <636000000>;
+ };
+ };
+ };
+
+ 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 +524,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 +579,10 @@ mipi_in_panel: endpoint {
};
};
+&mipi_dsi1 {
+ status = "okay";
+};
+
&pmu_io_domains {
pmu1830-supply = <&vcc_1v8>;
status = "okay";
@@ -507,6 +595,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] 11+ messages in thread
* [PATCH v3 4/4] arm64: dts: rockchip: describe the OV8858 user camera on PinePhone Pro
2025-05-09 21:51 [PATCH v3 0/4] Describe the cameras in the PinePhone Pro dts Olivier Benjamin
` (2 preceding siblings ...)
2025-05-09 21:51 ` [PATCH v3 3/4] arm64: dts: rockchip: describe I2c Bus 1 and IMX258 world camera on PinePhone Pro Olivier Benjamin
@ 2025-05-09 21:51 ` Olivier Benjamin
2025-05-12 12:49 ` [PATCH v3 0/4] Describe the cameras in the PinePhone Pro dts Rob Herring (Arm)
4 siblings, 0 replies; 11+ messages in thread
From: Olivier Benjamin @ 2025-05-09 21:51 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Heiko Stuebner,
Jacopo Mondi, Nicholas Roth, Mauro Carvalho Chehab, Sakari Ailus,
Shawn Guo, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam
Cc: Thomas Petazzoni, devicetree, linux-arm-kernel, linux-rockchip,
linux-kernel, linux-media, Krzysztof Kozlowski, imx,
Olivier Benjamin, 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 588e2d8a049cc649aa227c7a885bd494f23fbdf8..460333915ed43ecc073dd7b5f4575402fb809876 100644
--- a/arch/arm64/boot/dts/rockchip/rk3399-pinephone-pro.dts
+++ b/arch/arm64/boot/dts/rockchip/rk3399-pinephone-pro.dts
@@ -480,6 +480,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 {
@@ -524,6 +545,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";
@@ -599,6 +638,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] 11+ messages in thread
* Re: [PATCH v3 0/4] Describe the cameras in the PinePhone Pro dts
2025-05-09 21:51 [PATCH v3 0/4] Describe the cameras in the PinePhone Pro dts Olivier Benjamin
` (3 preceding siblings ...)
2025-05-09 21:51 ` [PATCH v3 4/4] arm64: dts: rockchip: describe the OV8858 user " Olivier Benjamin
@ 2025-05-12 12:49 ` Rob Herring (Arm)
4 siblings, 0 replies; 11+ messages in thread
From: Rob Herring (Arm) @ 2025-05-12 12:49 UTC (permalink / raw)
To: Olivier Benjamin
Cc: Sakari Ailus, linux-media, Nicholas Roth, Krzysztof Kozlowski,
imx, linux-rockchip, Shawn Guo, Pengutronix Kernel Team,
Ondrej Jirman, Mauro Carvalho Chehab, Krzysztof Kozlowski,
Heiko Stuebner, Thomas Petazzoni, Fabio Estevam, devicetree,
linux-kernel, linux-arm-kernel, Sascha Hauer, Jacopo Mondi,
Dragan Simic, Conor Dooley
On Fri, 09 May 2025 23:51:36 +0200, 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 v3:
> - Fixed new DTB warnings reported by Rob Herring's bot
> - Link to v2: https://lore.kernel.org/r/20250302-camera-v2-0-312b44b4a89c@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 (4):
> dt-bindings: media: ov8858: inherit video-interface-devices properties
> dt-bindings: media: imx258: inherit video-interface-devices properties
> 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
>
> .../devicetree/bindings/media/i2c/ovti,ov8858.yaml | 4 +-
> .../devicetree/bindings/media/i2c/sony,imx258.yaml | 4 +-
> .../boot/dts/rockchip/rk3399-pinephone-pro.dts | 139 +++++++++++++++++++++
> 3 files changed, 145 insertions(+), 2 deletions(-)
> ---
> --
> 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
This patch series was applied (using b4) to base:
Base: attempting to guess base-commit...
Base: tags/v6.15-rc1-102-g2332d042e9b2 (exact match)
If this is not the correct base, please add 'base-commit' tag
(or use b4 which does this automatically)
New warnings running 'make CHECK_DTBS=y for arch/arm64/boot/dts/rockchip/' for 20250509-camera-v3-0-dab2772d229a@bootlin.com:
arch/arm64/boot/dts/rockchip/rk3399-pinephone-pro.dtb: camera@1a (sony,imx258): Unevaluated properties are not allowed ('clock-names' was unexpected)
from schema $id: http://devicetree.org/schemas/media/i2c/sony,imx258.yaml#
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v3 3/4] arm64: dts: rockchip: describe I2c Bus 1 and IMX258 world camera on PinePhone Pro
2025-05-09 21:51 ` [PATCH v3 3/4] arm64: dts: rockchip: describe I2c Bus 1 and IMX258 world camera on PinePhone Pro Olivier Benjamin
@ 2025-05-13 18:23 ` Heiko Stuebner
2025-05-14 4:59 ` Olivier Benjamin
0 siblings, 1 reply; 11+ messages in thread
From: Heiko Stuebner @ 2025-05-13 18:23 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Jacopo Mondi,
Nicholas Roth, Mauro Carvalho Chehab, Sakari Ailus, Shawn Guo,
Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
Olivier Benjamin
Cc: Thomas Petazzoni, devicetree, linux-arm-kernel, linux-rockchip,
linux-kernel, linux-media, Krzysztof Kozlowski, imx,
Olivier Benjamin, Dragan Simic, Ondrej Jirman
Hi Olivier,
Am Freitag, 9. Mai 2025, 23:51:39 Mitteleuropäische Sommerzeit schrieb Olivier Benjamin:
> 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>
how independent are the devicetree changes from the binding changes?
As the binding change "only" includes other properties.
Heiko
> ---
> .../boot/dts/rockchip/rk3399-pinephone-pro.dts | 94 ++++++++++++++++++++++
> 1 file changed, 94 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..588e2d8a049cc649aa227c7a885bd494f23fbdf8 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,46 @@ 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>;
> + link-frequencies = /bits/ 64 <636000000>;
> + };
> + };
> + };
> +
> + 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 +524,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 +579,10 @@ mipi_in_panel: endpoint {
> };
> };
>
> +&mipi_dsi1 {
> + status = "okay";
> +};
> +
> &pmu_io_domains {
> pmu1830-supply = <&vcc_1v8>;
> status = "okay";
> @@ -507,6 +595,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>;
>
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v3 3/4] arm64: dts: rockchip: describe I2c Bus 1 and IMX258 world camera on PinePhone Pro
2025-05-13 18:23 ` Heiko Stuebner
@ 2025-05-14 4:59 ` Olivier Benjamin
2025-05-29 16:17 ` Olivier Benjamin
0 siblings, 1 reply; 11+ messages in thread
From: Olivier Benjamin @ 2025-05-14 4:59 UTC (permalink / raw)
To: Heiko Stuebner, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Jacopo Mondi, Nicholas Roth, Mauro Carvalho Chehab, Sakari Ailus,
Shawn Guo, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam
Cc: Thomas Petazzoni, devicetree, linux-arm-kernel, linux-rockchip,
linux-kernel, linux-media, Krzysztof Kozlowski, imx, Dragan Simic,
Ondrej Jirman
On 5/13/25 20:23, Heiko Stuebner wrote:
> Hi Olivier,
>
Hello Heiko, thanks for having a look!
> Am Freitag, 9. Mai 2025, 23:51:39 Mitteleuropäische Sommerzeit schrieb Olivier Benjamin:
>> 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>
>
> how independent are the devicetree changes from the binding changes?
> As the binding change "only" includes other properties.
>
They are pretty independent: the binding changes are only needed to
suppress warnings on the devicetree.
However, the changes to the devicetree are the motivation for the
changes to the binding: the other properties are not strictly necessary
otherwise.
> Heiko
>
>
>> ---
>> .../boot/dts/rockchip/rk3399-pinephone-pro.dts | 94 ++++++++++++++++++++++
>> 1 file changed, 94 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..588e2d8a049cc649aa227c7a885bd494f23fbdf8 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,46 @@ 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>;
>> + link-frequencies = /bits/ 64 <636000000>;
>> + };
>> + };
>> + };
>> +
>> + 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 +524,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 +579,10 @@ mipi_in_panel: endpoint {
>> };
>> };
>>
>> +&mipi_dsi1 {
>> + status = "okay";
>> +};
>> +
>> &pmu_io_domains {
>> pmu1830-supply = <&vcc_1v8>;
>> status = "okay";
>> @@ -507,6 +595,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>;
>>
>>
>
>
>
>
>
--
Olivier Benjamin, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v3 1/4] dt-bindings: media: ov8858: inherit video-interface-devices properties
2025-05-09 21:51 ` [PATCH v3 1/4] dt-bindings: media: ov8858: inherit video-interface-devices properties Olivier Benjamin
@ 2025-05-14 20:12 ` Rob Herring (Arm)
0 siblings, 0 replies; 11+ messages in thread
From: Rob Herring (Arm) @ 2025-05-14 20:12 UTC (permalink / raw)
To: Olivier Benjamin
Cc: linux-media, linux-rockchip, Pengutronix Kernel Team,
linux-arm-kernel, Sakari Ailus, Krzysztof Kozlowski, Conor Dooley,
Thomas Petazzoni, devicetree, Krzysztof Kozlowski, Shawn Guo,
Mauro Carvalho Chehab, Nicholas Roth, Heiko Stuebner,
Fabio Estevam, linux-kernel, imx, Sascha Hauer, Jacopo Mondi
On Fri, 09 May 2025 23:51:37 +0200, Olivier Benjamin wrote:
> Update the OV8858 binding to inherit properties defined in the
> video-interface-devices binding.
>
> Signed-off-by: Olivier Benjamin <olivier.benjamin@bootlin.com>
> ---
> Documentation/devicetree/bindings/media/i2c/ovti,ov8858.yaml | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
Acked-by: Rob Herring (Arm) <robh@kernel.org>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v3 2/4] dt-bindings: media: imx258: inherit video-interface-devices properties
2025-05-09 21:51 ` [PATCH v3 2/4] dt-bindings: media: imx258: " Olivier Benjamin
@ 2025-05-14 20:12 ` Rob Herring (Arm)
0 siblings, 0 replies; 11+ messages in thread
From: Rob Herring (Arm) @ 2025-05-14 20:12 UTC (permalink / raw)
To: Olivier Benjamin
Cc: Krzysztof Kozlowski, Sascha Hauer, linux-media, Thomas Petazzoni,
linux-kernel, Jacopo Mondi, Pengutronix Kernel Team, Conor Dooley,
Nicholas Roth, linux-rockchip, Sakari Ailus, Fabio Estevam,
Krzysztof Kozlowski, Mauro Carvalho Chehab, devicetree,
linux-arm-kernel, Heiko Stuebner, imx, Shawn Guo
On Fri, 09 May 2025 23:51:38 +0200, Olivier Benjamin wrote:
> Update the IMX258 binding to inherit properties defined in the
> video-interface-devices binding.
>
> Signed-off-by: Olivier Benjamin <olivier.benjamin@bootlin.com>
> ---
> Documentation/devicetree/bindings/media/i2c/sony,imx258.yaml | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
Acked-by: Rob Herring (Arm) <robh@kernel.org>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH v3 3/4] arm64: dts: rockchip: describe I2c Bus 1 and IMX258 world camera on PinePhone Pro
2025-05-14 4:59 ` Olivier Benjamin
@ 2025-05-29 16:17 ` Olivier Benjamin
0 siblings, 0 replies; 11+ messages in thread
From: Olivier Benjamin @ 2025-05-29 16:17 UTC (permalink / raw)
To: Heiko Stuebner, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Jacopo Mondi, Nicholas Roth, Mauro Carvalho Chehab, Sakari Ailus,
Shawn Guo, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam
Cc: Thomas Petazzoni, devicetree, linux-arm-kernel, linux-rockchip,
linux-kernel, linux-media, Krzysztof Kozlowski, imx, Dragan Simic,
Ondrej Jirman
On 5/14/25 06:59, Olivier Benjamin wrote:
>
>
> On 5/13/25 20:23, Heiko Stuebner wrote:
>> Hi Olivier,
>>
> Hello Heiko, thanks for having a look!
>
Hi again Heiko,
>> Am Freitag, 9. Mai 2025, 23:51:39 Mitteleuropäische Sommerzeit schrieb
>> Olivier Benjamin:
>>> 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>
>>
>> how independent are the devicetree changes from the binding changes?
>> As the binding change "only" includes other properties.
>>
> They are pretty independent: the binding changes are only needed to
> suppress warnings on the devicetree.
> However, the changes to the devicetree are the motivation for the
> changes to the binding: the other properties are not strictly necessary
> otherwise.
>
Have you had a chance to have a look?
Are any changes needed in your opinion?
>> Heiko
>>
>>
>>> ---
>>> .../boot/dts/rockchip/rk3399-pinephone-pro.dts | 94 +++++++++++
>>> +++++++++++
>>> 1 file changed, 94 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..588e2d8a049cc649aa227c7a885bd494f23fbdf8 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,46 @@ 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>;
>>> + link-frequencies = /bits/ 64 <636000000>;
>>> + };
>>> + };
>>> + };
>>> +
>>> + 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 +524,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 +579,10 @@ mipi_in_panel: endpoint {
>>> };
>>> };
>>> +&mipi_dsi1 {
>>> + status = "okay";
>>> +};
>>> +
>>> &pmu_io_domains {
>>> pmu1830-supply = <&vcc_1v8>;
>>> status = "okay";
>>> @@ -507,6 +595,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>;
>>>
>>>
>>
>>
>>
>>
>>
>
--
Olivier Benjamin, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2025-05-29 18:23 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-05-09 21:51 [PATCH v3 0/4] Describe the cameras in the PinePhone Pro dts Olivier Benjamin
2025-05-09 21:51 ` [PATCH v3 1/4] dt-bindings: media: ov8858: inherit video-interface-devices properties Olivier Benjamin
2025-05-14 20:12 ` Rob Herring (Arm)
2025-05-09 21:51 ` [PATCH v3 2/4] dt-bindings: media: imx258: " Olivier Benjamin
2025-05-14 20:12 ` Rob Herring (Arm)
2025-05-09 21:51 ` [PATCH v3 3/4] arm64: dts: rockchip: describe I2c Bus 1 and IMX258 world camera on PinePhone Pro Olivier Benjamin
2025-05-13 18:23 ` Heiko Stuebner
2025-05-14 4:59 ` Olivier Benjamin
2025-05-29 16:17 ` Olivier Benjamin
2025-05-09 21:51 ` [PATCH v3 4/4] arm64: dts: rockchip: describe the OV8858 user " Olivier Benjamin
2025-05-12 12:49 ` [PATCH v3 0/4] 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).