From: Nihal Kumar Gupta <quic_nihalkum@quicinc.com>
Monaco EVK board does not include a camera sensor in its default hardware
configuration. Introducing a device tree overlay to support optional
integration of the IMX577 sensor via CSIPHY1.
Camera reset is handled through an I2C expander, and power is enabled
via TLMM GPIO74.
An example media-ctl pipeline for the imx577 is:
media-ctl --reset
media-ctl -V '"imx577 3-001a":0[fmt:SRGGB10/4056x3040 field:none]'
media-ctl -V '"msm_csiphy1":0[fmt:SRGGB10/4056x3040]'
media-ctl -V '"msm_csid0":0[fmt:SRGGB10/4056x3040]'
media-ctl -V '"msm_vfe0_rdi0":0[fmt:SRGGB10/4056x3040]'
media-ctl -l '"msm_csiphy1":1->"msm_csid0":0[1]'
media-ctl -l '"msm_csid0":1->"msm_vfe0_rdi0":0[1]'
yavta -B capture-mplane -c -I -n 5 -f SRGGB10P -s 4056x3040 -F /dev/video1
Co-developed-by: Ravi Shankar <quic_rshankar@quicinc.com>
Signed-off-by: Ravi Shankar <quic_rshankar@quicinc.com>
Co-developed-by: Vishal Verma <quic_vishverm@quicinc.com>
Signed-off-by: Vishal Verma <quic_vishverm@quicinc.com>
Signed-off-by: Nihal Kumar Gupta <quic_nihalkum@quicinc.com>
Signed-off-by: Vikram Sharma <quic_vikramsa@quicinc.com>
---
arch/arm64/boot/dts/qcom/Makefile | 4 +
.../dts/qcom/monaco-evk-camera-imx577.dtso | 96 +++++++++++++++++++
2 files changed, 100 insertions(+)
create mode 100644 arch/arm64/boot/dts/qcom/monaco-evk-camera-imx577.dtso
diff --git a/arch/arm64/boot/dts/qcom/Makefile b/arch/arm64/boot/dts/qcom/Makefile
index 296688f7cb26..4df3044639a4 100644
--- a/arch/arm64/boot/dts/qcom/Makefile
+++ b/arch/arm64/boot/dts/qcom/Makefile
@@ -36,6 +36,10 @@ lemans-evk-camera-csi1-imx577-dtbs := lemans-evk.dtb lemans-evk-camera-csi1-imx5
dtb-$(CONFIG_ARCH_QCOM) += lemans-evk-camera-csi1-imx577.dtb
dtb-$(CONFIG_ARCH_QCOM) += monaco-evk.dtb
+
+monaco-evk-camera-imx577-dtbs := monaco-evk.dtb monaco-evk-camera-imx577.dtbo
+dtb-$(CONFIG_ARCH_QCOM) += monaco-evk-camera-imx577.dtb
+
dtb-$(CONFIG_ARCH_QCOM) += msm8216-samsung-fortuna3g.dtb
dtb-$(CONFIG_ARCH_QCOM) += msm8916-acer-a1-724.dtb
dtb-$(CONFIG_ARCH_QCOM) += msm8916-alcatel-idol347.dtb
diff --git a/arch/arm64/boot/dts/qcom/monaco-evk-camera-imx577.dtso b/arch/arm64/boot/dts/qcom/monaco-evk-camera-imx577.dtso
new file mode 100644
index 000000000000..2237f0fc4a14
--- /dev/null
+++ b/arch/arm64/boot/dts/qcom/monaco-evk-camera-imx577.dtso
@@ -0,0 +1,96 @@
+// SPDX-License-Identifier: BSD-3-Clause
+/*
+ * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
+ */
+
+/dts-v1/;
+/plugin/;
+
+#include <dt-bindings/clock/qcom,sa8775p-camcc.h>
+#include <dt-bindings/gpio/gpio.h>
+
+&{/} {
+ vreg_cam1_2p8: vreg-cam1-2p8 {
+ compatible = "regulator-fixed";
+ regulator-name = "vreg_cam1_2p8";
+ startup-delay-us = <10000>;
+ enable-active-high;
+ gpio = <&tlmm 74 GPIO_ACTIVE_HIGH>;
+ };
+};
+
+&camss {
+ vdda-phy-supply = <&vreg_l4a>;
+ vdda-pll-supply = <&vreg_l5a>;
+
+ status = "okay";
+
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ port@1 {
+ reg = <1>;
+
+ csiphy1_ep: endpoint {
+ clock-lanes = <7>;
+ data-lanes = <0 1 2 3>;
+ remote-endpoint = <&imx577_ep1>;
+ };
+ };
+ };
+};
+
+&cci1 {
+ pinctrl-0 = <&cci1_i2c0_default>;
+ pinctrl-1 = <&cci1_i2c0_sleep>;
+
+ status = "okay";
+};
+
+&cci1_i2c0 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ camera@1a {
+ compatible = "sony,imx577";
+ reg = <0x1a>;
+
+ reset-gpios = <&expander2 1 GPIO_ACTIVE_LOW>;
+ pinctrl-0 = <&cam1_default>;
+ pinctrl-names = "default";
+
+ clocks = <&camcc CAM_CC_MCLK1_CLK>;
+ assigned-clocks = <&camcc CAM_CC_MCLK1_CLK>;
+ assigned-clock-rates = <24000000>;
+
+ avdd-supply = <&vreg_cam1_2p8>;
+
+ port {
+ imx577_ep1: endpoint {
+ clock-lanes = <7>;
+ link-frequencies = /bits/ 64 <600000000>;
+ data-lanes = <0 1 2 3>;
+ remote-endpoint = <&csiphy1_ep>;
+ };
+ };
+ };
+};
+
+&tlmm {
+ cam1_default: cam1-default-state {
+ mclk-pins {
+ pins = "gpio68";
+ function = "cam_mclk";
+ drive-strength = <2>;
+ bias-disable;
+ };
+
+ ldo-avdd-pins {
+ pins = "gpio74";
+ function = "gpio";
+ drive-strength = <2>;
+ bias-disable;
+ };
+ };
+};
--
2.34.1
On 15/10/2025 14:13, Vikram Sharma wrote:
> From: Nihal Kumar Gupta <quic_nihalkum@quicinc.com>
>
> Monaco EVK board does not include a camera sensor in its default hardware
> configuration. Introducing a device tree overlay to support optional
> integration of the IMX577 sensor via CSIPHY1.
>
> Camera reset is handled through an I2C expander, and power is enabled
> via TLMM GPIO74.
>
> An example media-ctl pipeline for the imx577 is:
>
> media-ctl --reset
> media-ctl -V '"imx577 3-001a":0[fmt:SRGGB10/4056x3040 field:none]'
> media-ctl -V '"msm_csiphy1":0[fmt:SRGGB10/4056x3040]'
> media-ctl -V '"msm_csid0":0[fmt:SRGGB10/4056x3040]'
> media-ctl -V '"msm_vfe0_rdi0":0[fmt:SRGGB10/4056x3040]'
> media-ctl -l '"msm_csiphy1":1->"msm_csid0":0[1]'
> media-ctl -l '"msm_csid0":1->"msm_vfe0_rdi0":0[1]'
> yavta -B capture-mplane -c -I -n 5 -f SRGGB10P -s 4056x3040 -F /dev/video1
>
> Co-developed-by: Ravi Shankar <quic_rshankar@quicinc.com>
> Signed-off-by: Ravi Shankar <quic_rshankar@quicinc.com>
> Co-developed-by: Vishal Verma <quic_vishverm@quicinc.com>
> Signed-off-by: Vishal Verma <quic_vishverm@quicinc.com>
> Signed-off-by: Nihal Kumar Gupta <quic_nihalkum@quicinc.com>
> Signed-off-by: Vikram Sharma <quic_vikramsa@quicinc.com>
> ---
> arch/arm64/boot/dts/qcom/Makefile | 4 +
> .../dts/qcom/monaco-evk-camera-imx577.dtso | 96 +++++++++++++++++++
> 2 files changed, 100 insertions(+)
> create mode 100644 arch/arm64/boot/dts/qcom/monaco-evk-camera-imx577.dtso
>
> diff --git a/arch/arm64/boot/dts/qcom/Makefile b/arch/arm64/boot/dts/qcom/Makefile
> index 296688f7cb26..4df3044639a4 100644
> --- a/arch/arm64/boot/dts/qcom/Makefile
> +++ b/arch/arm64/boot/dts/qcom/Makefile
> @@ -36,6 +36,10 @@ lemans-evk-camera-csi1-imx577-dtbs := lemans-evk.dtb lemans-evk-camera-csi1-imx5
>
> dtb-$(CONFIG_ARCH_QCOM) += lemans-evk-camera-csi1-imx577.dtb
> dtb-$(CONFIG_ARCH_QCOM) += monaco-evk.dtb
> +
> +monaco-evk-camera-imx577-dtbs := monaco-evk.dtb monaco-evk-camera-imx577.dtbo
> +dtb-$(CONFIG_ARCH_QCOM) += monaco-evk-camera-imx577.dtb
> +
> dtb-$(CONFIG_ARCH_QCOM) += msm8216-samsung-fortuna3g.dtb
> dtb-$(CONFIG_ARCH_QCOM) += msm8916-acer-a1-724.dtb
> dtb-$(CONFIG_ARCH_QCOM) += msm8916-alcatel-idol347.dtb
> diff --git a/arch/arm64/boot/dts/qcom/monaco-evk-camera-imx577.dtso b/arch/arm64/boot/dts/qcom/monaco-evk-camera-imx577.dtso
> new file mode 100644
> index 000000000000..2237f0fc4a14
> --- /dev/null
> +++ b/arch/arm64/boot/dts/qcom/monaco-evk-camera-imx577.dtso
> @@ -0,0 +1,96 @@
> +// SPDX-License-Identifier: BSD-3-Clause
> +/*
> + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
> + */
> +
> +/dts-v1/;
> +/plugin/;
> +
> +#include <dt-bindings/clock/qcom,sa8775p-camcc.h>
> +#include <dt-bindings/gpio/gpio.h>
> +
> +&{/} {
> + vreg_cam1_2p8: vreg-cam1-2p8 {
> + compatible = "regulator-fixed";
> + regulator-name = "vreg_cam1_2p8";
> + startup-delay-us = <10000>;
> + enable-active-high;
> + gpio = <&tlmm 74 GPIO_ACTIVE_HIGH>;
> + };
> +};
> +
> +&camss {
> + vdda-phy-supply = <&vreg_l4a>;
> + vdda-pll-supply = <&vreg_l5a>;
> +
> + status = "okay";
> +
> + ports {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + port@1 {
> + reg = <1>;
> +
> + csiphy1_ep: endpoint {
> + clock-lanes = <7>;
> + data-lanes = <0 1 2 3>;
> + remote-endpoint = <&imx577_ep1>;
> + };
> + };
> + };
> +};
> +
> +&cci1 {
> + pinctrl-0 = <&cci1_i2c0_default>;
> + pinctrl-1 = <&cci1_i2c0_sleep>;
> +
> + status = "okay";
> +};
> +
> +&cci1_i2c0 {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + camera@1a {
> + compatible = "sony,imx577";
> + reg = <0x1a>;
> +
> + reset-gpios = <&expander2 1 GPIO_ACTIVE_LOW>;
> + pinctrl-0 = <&cam1_default>;
> + pinctrl-names = "default";
> +
> + clocks = <&camcc CAM_CC_MCLK1_CLK>;
> + assigned-clocks = <&camcc CAM_CC_MCLK1_CLK>;
> + assigned-clock-rates = <24000000>;
> +
> + avdd-supply = <&vreg_cam1_2p8>;
> +
> + port {
> + imx577_ep1: endpoint {
> + clock-lanes = <7>;
> + link-frequencies = /bits/ 64 <600000000>;
> + data-lanes = <0 1 2 3>;
> + remote-endpoint = <&csiphy1_ep>;
> + };
> + };
> + };
> +};
> +
> +&tlmm {
> + cam1_default: cam1-default-state {
> + mclk-pins {
> + pins = "gpio68";
> + function = "cam_mclk";
> + drive-strength = <2>;
> + bias-disable;
> + };
> +
> + ldo-avdd-pins {
> + pins = "gpio74";
> + function = "gpio";
> + drive-strength = <2>;
> + bias-disable;
> + };
> + };
> +};
Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
On 10/15/25 16:13, Vikram Sharma wrote:
> From: Nihal Kumar Gupta <quic_nihalkum@quicinc.com>
>
> Monaco EVK board does not include a camera sensor in its default hardware
> configuration. Introducing a device tree overlay to support optional
s/Introducing/Introduce
> integration of the IMX577 sensor via CSIPHY1.
>
> Camera reset is handled through an I2C expander, and power is enabled
> via TLMM GPIO74.
>
> An example media-ctl pipeline for the imx577 is:
>
> media-ctl --reset
> media-ctl -V '"imx577 3-001a":0[fmt:SRGGB10/4056x3040 field:none]'
> media-ctl -V '"msm_csiphy1":0[fmt:SRGGB10/4056x3040]'
> media-ctl -V '"msm_csid0":0[fmt:SRGGB10/4056x3040]'
> media-ctl -V '"msm_vfe0_rdi0":0[fmt:SRGGB10/4056x3040]'
> media-ctl -l '"msm_csiphy1":1->"msm_csid0":0[1]'
> media-ctl -l '"msm_csid0":1->"msm_vfe0_rdi0":0[1]'
> yavta -B capture-mplane -c -I -n 5 -f SRGGB10P -s 4056x3040 -F /dev/video1
>
> Co-developed-by: Ravi Shankar <quic_rshankar@quicinc.com>
> Signed-off-by: Ravi Shankar <quic_rshankar@quicinc.com>
The first expected Signed-off-by tag shall be from the change author, and
it is not.
> Co-developed-by: Vishal Verma <quic_vishverm@quicinc.com>
> Signed-off-by: Vishal Verma <quic_vishverm@quicinc.com>
> Signed-off-by: Nihal Kumar Gupta <quic_nihalkum@quicinc.com>
> Signed-off-by: Vikram Sharma <quic_vikramsa@quicinc.com>
> ---
> arch/arm64/boot/dts/qcom/Makefile | 4 +
> .../dts/qcom/monaco-evk-camera-imx577.dtso | 96 +++++++++++++++++++
> 2 files changed, 100 insertions(+)
> create mode 100644 arch/arm64/boot/dts/qcom/monaco-evk-camera-imx577.dtso
>
> diff --git a/arch/arm64/boot/dts/qcom/Makefile b/arch/arm64/boot/dts/qcom/Makefile
> index 296688f7cb26..4df3044639a4 100644
> --- a/arch/arm64/boot/dts/qcom/Makefile
> +++ b/arch/arm64/boot/dts/qcom/Makefile
> @@ -36,6 +36,10 @@ lemans-evk-camera-csi1-imx577-dtbs := lemans-evk.dtb lemans-evk-camera-csi1-imx5
>
> dtb-$(CONFIG_ARCH_QCOM) += lemans-evk-camera-csi1-imx577.dtb
> dtb-$(CONFIG_ARCH_QCOM) += monaco-evk.dtb
> +
> +monaco-evk-camera-imx577-dtbs := monaco-evk.dtb monaco-evk-camera-imx577.dtbo
> +dtb-$(CONFIG_ARCH_QCOM) += monaco-evk-camera-imx577.dtb
> +
> dtb-$(CONFIG_ARCH_QCOM) += msm8216-samsung-fortuna3g.dtb
> dtb-$(CONFIG_ARCH_QCOM) += msm8916-acer-a1-724.dtb
> dtb-$(CONFIG_ARCH_QCOM) += msm8916-alcatel-idol347.dtb
> diff --git a/arch/arm64/boot/dts/qcom/monaco-evk-camera-imx577.dtso b/arch/arm64/boot/dts/qcom/monaco-evk-camera-imx577.dtso
> new file mode 100644
> index 000000000000..2237f0fc4a14
> --- /dev/null
> +++ b/arch/arm64/boot/dts/qcom/monaco-evk-camera-imx577.dtso
> @@ -0,0 +1,96 @@
> +// SPDX-License-Identifier: BSD-3-Clause
> +/*
> + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
Year is missing.
> + */
> +
> +/dts-v1/;
> +/plugin/;
> +
> +#include <dt-bindings/clock/qcom,sa8775p-camcc.h>
> +#include <dt-bindings/gpio/gpio.h>
> +
> +&{/} {
> + vreg_cam1_2p8: vreg-cam1-2p8 {
> + compatible = "regulator-fixed";
> + regulator-name = "vreg_cam1_2p8";
> + startup-delay-us = <10000>;
> + enable-active-high;
> + gpio = <&tlmm 74 GPIO_ACTIVE_HIGH>;
> + };
> +};
> +
> +&camss {
> + vdda-phy-supply = <&vreg_l4a>;
> + vdda-pll-supply = <&vreg_l5a>;
> +
> + status = "okay";
> +
> + ports {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + port@1 {
> + reg = <1>;
> +
> + csiphy1_ep: endpoint {
> + clock-lanes = <7>;
> + data-lanes = <0 1 2 3>;
> + remote-endpoint = <&imx577_ep1>;
> + };
> + };
> + };
> +};
> +
> +&cci1 {
> + pinctrl-0 = <&cci1_i2c0_default>;
> + pinctrl-1 = <&cci1_i2c0_sleep>;
> +
> + status = "okay";
> +};
> +
> +&cci1_i2c0 {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + camera@1a {
> + compatible = "sony,imx577";
> + reg = <0x1a>;
> +
> + reset-gpios = <&expander2 1 GPIO_ACTIVE_LOW>;
> + pinctrl-0 = <&cam1_default>;
> + pinctrl-names = "default";
> +
> + clocks = <&camcc CAM_CC_MCLK1_CLK>;
> + assigned-clocks = <&camcc CAM_CC_MCLK1_CLK>;
> + assigned-clock-rates = <24000000>;
> +
> + avdd-supply = <&vreg_cam1_2p8>;
> +
Please remove empty lines between individual properties.
> + port {
> + imx577_ep1: endpoint {
> + clock-lanes = <7>;
Remove 'clock-lanes' property, first of all it is non-configurable,
and definitely it's hypothetical value can not be equal to '7'.
> + link-frequencies = /bits/ 64 <600000000>;
> + data-lanes = <0 1 2 3>;
> + remote-endpoint = <&csiphy1_ep>;
> + };
> + };
> + };
> +};
> +
> +&tlmm {
> + cam1_default: cam1-default-state {
> + mclk-pins {
> + pins = "gpio68";
> + function = "cam_mclk";
> + drive-strength = <2>;
> + bias-disable;
> + };
I'd suggest to add a description of pins with MCLK function in a separate
change to the SoC specific .dtsi file. It will cover gpio67, gpio68, gpio74
and gpio69, so here it's a MCLK1 pin for instance.
> +
> + ldo-avdd-pins {
> + pins = "gpio74";
> + function = "gpio";
> + drive-strength = <2>;
> + bias-disable;
> + };
> + };
> +};
Reviewed-by: Vladimir Zapolskiy <vladimir.zapolskiy@linaro.org>
--
Best wishes,
Vladimir
On 16-10-2025 00:45, Vladimir Zapolskiy wrote:
>> configuration. Introducing a device tree overlay to support optional
>
> s/Introducing/Introduce
>
ACK
>> Co-developed-by: Ravi Shankar <quic_rshankar@quicinc.com>
>> Signed-off-by: Ravi Shankar <quic_rshankar@quicinc.com>
>
> The first expected Signed-off-by tag shall be from the change author, and
> it is not.
ACK
>> + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
>
> Year is missing.
>
This is as per new yearless copyright format.
>> + avdd-supply = <&vreg_cam1_2p8>;
>> +
>
> Please remove empty lines between individual properties.
>
ACK
> Remove 'clock-lanes' property, first of all it is non-configurable,
> and definitely it's hypothetical value can not be equal to '7'.
ACK
>> + };
>
> I'd suggest to add a description of pins with MCLK function in a separate
> change to the SoC specific .dtsi file. It will cover gpio67, gpio68, gpio74
> and gpio69, so here it's a MCLK1 pin for instance.
We are currently enabling sensor only on CCI1. Pins gpio67–gpio69 are used by mclk for cam0–cam2, and gpio74 enables the regulator.
Since mclk is sensor-specific, it's added in the sensor dtso.
Would it be appropriate to extend mclk support to all CCI instances, even if some are not actively used?
@Konrad, @Bryan, Could you please share your thoughts on the above?
If valid, then cam0_default, cam1_default, cam2_default should be added in SoC dtsi, with references used in sensor dtso.
>
>> +
>> + ldo-avdd-pins {
--
Regards,
Nihal Kumar Gupta
On 16/10/2025 13:53, Nihal Kumar Gupta wrote: >> I'd suggest to add a description of pins with MCLK function in a separate >> change to the SoC specific .dtsi file. It will cover gpio67, gpio68, gpio74 >> and gpio69, so here it's a MCLK1 pin for instance. > We are currently enabling sensor only on CCI1. Pins gpio67–gpio69 are used by mclk for cam0–cam2, and gpio74 enables the regulator. > Since mclk is sensor-specific, it's added in the sensor dtso. > > Would it be appropriate to extend mclk support to all CCI instances, even if some are not actively used? > > @Konrad, @Bryan, Could you please share your thoughts on the above? > > If valid, then cam0_default, cam1_default, cam2_default should be added in SoC dtsi, with references used in sensor dtso. Anything not muxed should go into the SoC description anything board specific - mezzanine specific in this case - should go into your dtso. A few of the camera pins are non-muxed as I recall. As regards splitting it up. There's no use-case for non-muxed pins without the dependent change. It's almost never the wrong thing to do, to have small, individually independent patches though. --- bod
© 2016 - 2025 Red Hat, Inc.