From c8145ebc1589b8cdd07b0251d2e0e41cbd31f7dd Mon Sep 17 00:00:00 2001 From: Kieran Bingham Date: Thu, 9 Nov 2023 16:52:23 +0000 Subject: [PATCH 1/2] dtoverlays: Add overlay for the Sony IMX283 Camera This supports the OneInchEye with a 24MHz crystal INCK. Use the option 'cam0' to connect this to the CAM/DISP 0 port on Raspberry Pi 5. Use the clock-frequency= option if you have a camera module with a different inclk frequency: For example: dtoverlay=imx283,cam0,clock-frequency=12000000 Signed-off-by: Kieran Bingham --- arch/arm/boot/dts/overlays/Makefile | 1 + arch/arm/boot/dts/overlays/README | 23 +++++ arch/arm/boot/dts/overlays/imx283-overlay.dts | 92 +++++++++++++++++++ arch/arm/boot/dts/overlays/imx283.dtsi | 26 ++++++ 4 files changed, 142 insertions(+) create mode 100644 arch/arm/boot/dts/overlays/imx283-overlay.dts create mode 100644 arch/arm/boot/dts/overlays/imx283.dtsi diff --git a/arch/arm/boot/dts/overlays/Makefile b/arch/arm/boot/dts/overlays/Makefile index e142a7d999b8ba..1b2e1dc15ef2d6 100644 --- a/arch/arm/boot/dts/overlays/Makefile +++ b/arch/arm/boot/dts/overlays/Makefile @@ -134,6 +134,7 @@ dtbo-$(CONFIG_ARCH_BCM2835) += \ ilitek251x.dtbo \ imx219.dtbo \ imx258.dtbo \ + imx283.dtbo \ imx290.dtbo \ imx296.dtbo \ imx327.dtbo \ diff --git a/arch/arm/boot/dts/overlays/README b/arch/arm/boot/dts/overlays/README index 011ae25cc3689d..c74fbf3b7b8a35 100644 --- a/arch/arm/boot/dts/overlays/README +++ b/arch/arm/boot/dts/overlays/README @@ -2778,6 +2778,29 @@ Params: rotation Mounting rotation of the camera sensor (0 or Module (1, 3, 4, or 5) or Pi 5. +Name: imx283 +Info: Sony IMX283 camera module. + Uses Unicam 1, which is the standard camera connector on most Pi + variants. This sensor only supports 4 lane operation and therefore + requires a Compute Module (1, 3, 4, or 5) or Pi 5. +Load: dtoverlay=imx283,= +Params: rotation Mounting rotation of the camera sensor (0 or + 180, default 180) + orientation Sensor orientation (0 = front, 1 = rear, + 2 = external, default external) + clock-frequency Sets the clock frequency to match that used on + the board. + Known tested values include 24MHz (the default) + and 12MHz. + link-frequency Allowable link frequency values to use in Hz: + 720000000 (default), 360000000. + media-controller Configure use of Media Controller API for + configuring the sensor (default on) + cam0 Adopt the default configuration for CAM0 on a + Compute Module or Pi5 (CSI0, i2c_vc, and + cam0_reg). + + Name: imx290 Info: Sony IMX290 camera module. Uses Unicam 1, which is the standard camera connector on most Pi diff --git a/arch/arm/boot/dts/overlays/imx283-overlay.dts b/arch/arm/boot/dts/overlays/imx283-overlay.dts new file mode 100644 index 00000000000000..d222094f6c62ec --- /dev/null +++ b/arch/arm/boot/dts/overlays/imx283-overlay.dts @@ -0,0 +1,92 @@ +// SPDX-License-Identifier: GPL-2.0-only +// Definitions for IMX283 camera module on VC I2C bus +/dts-v1/; +/plugin/; + +#include + +/{ + compatible = "brcm,bcm2835"; + + fragment@0 { + target = <&i2c0if>; + __overlay__ { + status = "okay"; + }; + }; + + clk_frag: fragment@1 { + target = <&cam1_clk>; + cam_clk: __overlay__ { + status = "okay"; + clock-frequency = <24000000>; + }; + }; + + fragment@2 { + target = <&i2c0mux>; + __overlay__ { + status = "okay"; + }; + }; + + reg_frag: fragment@3 { + target = <&cam1_reg>; + cam_reg: __overlay__ { + startup-delay-us = <200000>; + off-on-delay-us = <30000>; + regulator-min-microvolt = <2900000>; + regulator-max-microvolt = <2900000>; + }; + }; + + i2c_frag: fragment@100 { + target = <&i2c_csi_dsi>; + __overlay__ { + #address-cells = <1>; + #size-cells = <0>; + status = "okay"; + + #include "imx283.dtsi" + }; + }; + + csi_frag: fragment@101 { + target = <&csi1>; + csi: __overlay__ { + status = "okay"; + brcm,media-controller; + + port { + csi_ep: endpoint { + remote-endpoint = <&cam_endpoint>; + clock-lanes = <0>; + data-lanes = <1 2 3 4>; + clock-noncontinuous; + }; + }; + }; + }; + + __overrides__ { + clock-frequency = <&cam_clk>,"clock-frequency:0"; + rotation = <&cam_node>,"rotation:0"; + orientation = <&cam_node>,"orientation:0"; + media-controller = <&csi>,"brcm,media-controller?"; + cam0 = <&i2c_frag>, "target:0=",<&i2c_csi_dsi0>, + <&csi_frag>, "target:0=",<&csi0>, + <&clk_frag>, "target:0=",<&cam0_clk>, + <®_frag>, "target:0=",<&cam0_reg>, + <&cam_node>, "clocks:0=",<&cam0_clk>, + <&cam_node>, "vadd-supply:0=",<&cam0_reg>; + link-frequency = <&cam_endpoint>,"link-frequencies#0"; + }; +}; + +&cam_node { + status = "okay"; +}; + +&cam_endpoint { + remote-endpoint = <&csi_ep>; +}; \ No newline at end of file diff --git a/arch/arm/boot/dts/overlays/imx283.dtsi b/arch/arm/boot/dts/overlays/imx283.dtsi new file mode 100644 index 00000000000000..07ba72379f36d0 --- /dev/null +++ b/arch/arm/boot/dts/overlays/imx283.dtsi @@ -0,0 +1,26 @@ +// Fragment that configures a Sony IMX283 + +cam_node: imx283@1a { + compatible = "sony,imx283"; + reg = <0x1a>; + status = "disabled"; + + clocks = <&cam1_clk>; + clock-names = "xclk"; + + vadd-supply = <&cam1_reg>; /* Analog power supply (2.9v) */ + vdd1-supply = <&cam_dummy_reg>; /* Interface power supply (1.8V) */ + vdd2-supply = <&cam_dummy_reg>; /* Digital power supply (1.2V) */ + + rotation = <180>; + orientation = <2>; + + port { + cam_endpoint: endpoint { + clock-lanes = <0>; + data-lanes = <1 2 3 4>; + clock-noncontinuous; + link-frequencies = /bits/ 64 <720000000>; + }; + }; +}; From a589f68068a686f6fd9a05c138bbc7bf9ad90cd0 Mon Sep 17 00:00:00 2001 From: Kieran Bingham Date: Fri, 23 May 2025 15:09:00 +0100 Subject: [PATCH 2/2] defconfigs: Add IMX283 to all Pi defconfigs Add support for the Sony IMX283 image sensor by including the module for supported Raspberry Pi platforms. Signed-off-by: Kieran Bingham --- arch/arm/configs/bcm2709_defconfig | 1 + arch/arm/configs/bcm2711_defconfig | 1 + arch/arm/configs/bcmrpi_defconfig | 1 + arch/arm64/configs/bcm2711_defconfig | 1 + arch/arm64/configs/bcm2711_rt_defconfig | 1 + arch/arm64/configs/bcm2712_defconfig | 1 + 6 files changed, 6 insertions(+) diff --git a/arch/arm/configs/bcm2709_defconfig b/arch/arm/configs/bcm2709_defconfig index 9112497d328099..3ff12b2d5d3f46 100644 --- a/arch/arm/configs/bcm2709_defconfig +++ b/arch/arm/configs/bcm2709_defconfig @@ -941,6 +941,7 @@ CONFIG_VIDEO_ARDUCAM_64MP=m CONFIG_VIDEO_ARDUCAM_PIVARIETY=m CONFIG_VIDEO_IMX219=m CONFIG_VIDEO_IMX258=m +CONFIG_VIDEO_IMX283=m CONFIG_VIDEO_IMX290=m CONFIG_VIDEO_IMX296=m CONFIG_VIDEO_IMX335=m diff --git a/arch/arm/configs/bcm2711_defconfig b/arch/arm/configs/bcm2711_defconfig index f2208b24dd83de..fe7cae2dbcc727 100644 --- a/arch/arm/configs/bcm2711_defconfig +++ b/arch/arm/configs/bcm2711_defconfig @@ -970,6 +970,7 @@ CONFIG_VIDEO_ARDUCAM_64MP=m CONFIG_VIDEO_ARDUCAM_PIVARIETY=m CONFIG_VIDEO_IMX219=m CONFIG_VIDEO_IMX258=m +CONFIG_VIDEO_IMX283=m CONFIG_VIDEO_IMX290=m CONFIG_VIDEO_IMX296=m CONFIG_VIDEO_IMX335=m diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig index 4c226bf2925de2..4b9fce34324206 100644 --- a/arch/arm/configs/bcmrpi_defconfig +++ b/arch/arm/configs/bcmrpi_defconfig @@ -934,6 +934,7 @@ CONFIG_VIDEO_ARDUCAM_64MP=m CONFIG_VIDEO_ARDUCAM_PIVARIETY=m CONFIG_VIDEO_IMX219=m CONFIG_VIDEO_IMX258=m +CONFIG_VIDEO_IMX283=m CONFIG_VIDEO_IMX290=m CONFIG_VIDEO_IMX296=m CONFIG_VIDEO_IMX335=m diff --git a/arch/arm64/configs/bcm2711_defconfig b/arch/arm64/configs/bcm2711_defconfig index e7efc952c6a065..789ac09493dd7e 100644 --- a/arch/arm64/configs/bcm2711_defconfig +++ b/arch/arm64/configs/bcm2711_defconfig @@ -1019,6 +1019,7 @@ CONFIG_VIDEO_ARDUCAM_64MP=m CONFIG_VIDEO_ARDUCAM_PIVARIETY=m CONFIG_VIDEO_IMX219=m CONFIG_VIDEO_IMX258=m +CONFIG_VIDEO_IMX283=m CONFIG_VIDEO_IMX290=m CONFIG_VIDEO_IMX296=m CONFIG_VIDEO_IMX335=m diff --git a/arch/arm64/configs/bcm2711_rt_defconfig b/arch/arm64/configs/bcm2711_rt_defconfig index 192000022b0148..b5325d0bd56c4b 100644 --- a/arch/arm64/configs/bcm2711_rt_defconfig +++ b/arch/arm64/configs/bcm2711_rt_defconfig @@ -1019,6 +1019,7 @@ CONFIG_VIDEO_ARDUCAM_64MP=m CONFIG_VIDEO_ARDUCAM_PIVARIETY=m CONFIG_VIDEO_IMX219=m CONFIG_VIDEO_IMX258=m +CONFIG_VIDEO_IMX283=m CONFIG_VIDEO_IMX290=m CONFIG_VIDEO_IMX296=m CONFIG_VIDEO_IMX335=m diff --git a/arch/arm64/configs/bcm2712_defconfig b/arch/arm64/configs/bcm2712_defconfig index 646d6baf9ae269..0cc201e9c2dd51 100644 --- a/arch/arm64/configs/bcm2712_defconfig +++ b/arch/arm64/configs/bcm2712_defconfig @@ -1021,6 +1021,7 @@ CONFIG_VIDEO_ARDUCAM_64MP=m CONFIG_VIDEO_ARDUCAM_PIVARIETY=m CONFIG_VIDEO_IMX219=m CONFIG_VIDEO_IMX258=m +CONFIG_VIDEO_IMX283=m CONFIG_VIDEO_IMX290=m CONFIG_VIDEO_IMX296=m CONFIG_VIDEO_IMX335=m